Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
Spend less time planning, more time exploring. CitizenAI builds a smart, optimized local itinerary from your interests, budget, time and travel style — in seconds.
LifestyleTypeScript · PLpgSQLGitHub @Hanumath1006OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
Your AI city companion — spend less time planning, more time exploring.
CitizenAI turns a few inputs (city, date, time window, budget, who you're with, how you get around, and what you love) into a fully sequenced, weather-aware, one-day itinerary of real venues — in seconds. Then refine it with one tap.
The core design principle: AI plans the shape, real APIs supply the facts.Read the full README ↗Your AI city companion — spend less time planning, more time exploring.
CitizenAI turns a few inputs (city, date, time window, budget, who you're with, how you get around, and what you love) into a fully sequenced, weather-aware, one-day itinerary of real venues — in seconds. Then refine it with one tap.
The core design principle: AI plans the shape, real APIs supply the facts.
gemini-3.6-flash) designs an optimized, ordered plan from your inputs.Every external step degrades gracefully — if a key isn't configured, the app falls back to the model's own estimates so you can still see it working.
npm install
Copy the template and fill in your keys:
cp .env.example .env.local
| Variable | Where to get it |
|---|---|
NEXT_PUBLIC_SUPABASE_URL / NEXT_PUBLIC_SUPABASE_ANON_KEY | Supabase → Project Settings → API |
SUPABASE_SERVICE_ROLE_KEY | Supabase → Project Settings → API (keep server-only) |
GEMINI_API_KEY | https://aistudio.google.com → Get API key |
GOOGLE_MAPS_API_KEY | Google Cloud Console — enable Places API (New) and Routes API |
OPENWEATHER_API_KEY | https://openweathermap.org/api |
NEXT_PUBLIC_SITE_URL | http://localhost:3000 in dev |
In the Supabase SQL editor, run the migration:
supabase/migrations/0001_init.sql
This creates the profiles, trips, stops, favorites, and saved_places
tables with row-level security, plus a trigger that auto-creates a profile row
on sign-up.
In Supabase → Authentication → Providers → Google, add your Google OAuth client ID and secret. Set the authorized redirect URL to:
https://<your-project>.supabase.co/auth/v1/callback
And in the Google Cloud OAuth consent screen, add http://localhost:3000 as an
authorized origin. The app's own callback route is /auth/callback.
npm run dev
Open http://localhost:3000.
| Route | Description |
|---|---|
/ | Landing page |
/login | Google sign-in |
/dashboard | Stats, upcoming/recent trips, weather, recommendations |
/plan | The planner input form |
/plan/result | Generated itinerary + one-tap refinement |
/trips · /trips/[id] | Saved trips list and detail |
/favorites · /saved | Bookmarked venues |
/profile · /settings | Defaults and account |
Host the app free on Vercel and point any domain (bought anywhere — Hostinger, GoDaddy, Cloudflare) at it.
.gitignore) and push..env.local:
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY,
SUPABASE_SERVICE_ROLE_KEY, GEMINI_API_KEY, GEMINI_MODEL,
GOOGLE_MAPS_API_KEY, OPENWEATHER_API_KEY, and NEXT_PUBLIC_SITE_URL
(set to the live URL).NEXT_PUBLIC_SITE_URL → https://yourdomain.com, then redeploy.https://yourdomain.com/** to Redirect URLs.src/
app/
(app)/ authenticated app shell (sidebar) + pages
api/ itinerary generation, trips, bookmarks, profile, photo proxy
auth/ OAuth callback + sign-out
login/ sign-in page
page.tsx landing page
components/ UI primitives, planner, itinerary, trips, bookmarks
lib/
ai/planner.ts Gemini itinerary generation
google/ Places + Routes
itinerary/ generation orchestrator
supabase/ browser/server clients + types
weather.ts OpenWeather forecast
supabase/migrations/ SQL schema