尚未检测到更新。GitHub 发布版本后会显示在这里。
正在加载完整 README。 以下为已保存的摘录。
A collaborative trip planner built for two partners — plan a multi-stop journey together, track your spending, stay organised on the go, and journal every memory along the way.
Brainstorm → fleshed out — start a trip as a loose sketch: name-only trips (dates optional), rough Chapters and date-less Stops with a rough number of nights, all on one Overview canvas. Firm up a leg with one click — dates auto-flow forward from an anchor using each stop's nights, pinned stops stay fixed, and rough stops harden into the dated itinerary piece by piece.查看完整 README ↗A collaborative trip planner built for two partners — plan a multi-stop journey together, track your spending, stay organised on the go, and journal every memory along the way.
Brainstorm → fleshed out — start a trip as a loose sketch: name-only trips (dates optional), rough Chapters and date-less Stops with a rough number of nights, all on one Overview canvas. Firm up a leg with one click — dates auto-flow forward from an anchor using each stop's nights, pinned stops stay fixed, and rough stops harden into the dated itinerary piece by piece.
Plan — multi-stop itinerary with stops, transport legs, and accommodation; drag-and-drop ordering; timezone-aware Calendar, Day, and Today views with a visual timeline.
Chapters — group a long trip into named, coloured legs, with per-chapter budget and itinerary roll-ups; Today view shows the active chapter; the Summary map renders each leg in its own colour.
Budget — multi-currency cost tracking (estimated vs actual), live FX rates via Frankfurter (no key required), manual rate override, per-category breakdown, and a home-currency roll-up.
On the go — Today view that auto-focuses on the current trip day; interactive Google Maps route map with Google place search and geocoding; offline read-cache via PWA service worker.
Together — shared Items list + Wishlist with emoji voting and per-item notes; web-push Reminders; per-day Journal with photo attachments.
Docs & sharing — pre-trip and packing Checklists with reusable templates; file Attachments (images, PDFs, text); printable Trip Summary with route map and auto-generated flags; read-only public share links.
AI — optional Anthropic-powered activity suggestions and itinerary assistant (env-gated; app works fully without it).
| Layer | Choice |
|---|---|
| Framework | Next.js 16 (App Router) |
| UI | React 19, Tailwind CSS v4, Radix UI primitives |
| Language | TypeScript 5 |
| ORM / DB | Prisma 7 with driver adapter; Postgres |
| Auth | Auth.js v5 (NextAuth) — Google OAuth + dev-login shim |
| Maps | Google Maps (@vis.gl/react-google-maps, Advanced Markers) + Places (New) / Geocoding |
| FX rates | Frankfurter public API (no key) |
| Push | web-push (VAPID) |
| AI | Anthropic SDK (@anthropic-ai/sdk) |
| Tests | Vitest + Testing Library (808 tests) |
Node.js 22 LTS (or any 20.19+ / 24+). Prisma 7 and the build toolchain refuse older versions. A .nvmrc is included, so with nvm:
nvm use # or: nvm install 22
node -v # must be >= 20.19
Docker (for the local Postgres container). Any recent Docker Desktop or Docker Engine install is fine.
No external accounts or API keys are needed for local development — it runs on a local Postgres container with a dev-login bypass. (Map tiles still render without one, just watermarked — see docs/HANDOFF.md §5.)
npm install
Native module note: some build-toolchain packages (
@tailwindcss/oxide,lightningcss) are compiled per-platform. Always runnpm installon your own machine — never copynode_modulesfrom elsewhere.
cp .env.example .env
Open .env and set at minimum:
DATABASE_URL="postgresql://trip:trip@localhost:5432/trip?schema=public"
AUTH_SECRET="<output of: openssl rand -base64 32>"
ALLOW_DEV_LOGIN="true"
Google OAuth credentials are not required for local development — the dev-login buttons bypass OAuth entirely.
docker compose up -d # start local Postgres 16
npx prisma migrate deploy # apply the committed migration baseline
npm run db:seed # seed two test users + a Europe Summer 2026 demo trip (London → Paris → Rome)
# and the full "AI TRIP - EU Christmas" demo (6-country itinerary, ~45 items,
# costs, checklists, journal, attachments, share link, calendar feed, and more)
# Re-seed just the AI demo at any time: npm run db:seed:demo (idempotent)
npm run dev
Open http://localhost:3000. Sign in using the dev-login buttons on the sign-in page with either seeded account:
npm run test # run the full Vitest suite
npm run build # production build (requires all required env vars)
npm run lint # ESLint
npm run feedback:pull # rewrite docs/feedback/inbox.md from the Feedback notes written in the app
# (read-only; reads production when .env.production.local is present)
npm run feedback:resolve -- <id> --note "..." # mark a Feedback note Done (or --wontfix); the only script that writes
# to the database — it prints the target host first, and --dry-run
# reports the change without making it
See docs/connect-claude.md for connecting a Claude client. It's a normal
sign-in now, no token to mint.
以上为 README 的开头部分。其余内容请阅读原文。 查看完整 README ↗