少花時間規劃,多花時間探索。CitizenAI 依據您的興趣、預算、時間與旅行風格,快速打造智慧、最佳化的在地行程——只需數秒。
AI 翻譯
Spend less time planning, more time exploring. CitizenAI builds a smart, optimized local itinerary from your interests, budget, time and travel style — in seconds.
生活風格TypeScript · PLpgSQLGitHub @Hanumath1006上線中營運者未確認
試用過了嗎? 點一下就好,不需要登入。
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 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.檢視完整 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