The Deployment section claimed planish 'Deploys to NodeHub via Forgejo webhook on push to main' but no such pipeline exists: zero webhooks are configured on this repo (GET /api/v1/repos/AuWoMe/planish/hooks = []), no planish app is registered on Node Hub, and no .forgejo/workflows/ deploy.yml is present. Replace the claim with an accurate description of the current state and a manual-deploy recipe so downstream readers are not misled. Refs: forgejo.tail018ac4.ts.net/AuWoMe/planish/issues/17 |
||
|---|---|---|
| .forgejo/workflows | ||
| .gsd/gates | ||
| .kilo/plans | ||
| .qwen | ||
| drizzle | ||
| scripts | ||
| src | ||
| .bearerignore | ||
| .gitattributes | ||
| .gitignore | ||
| .gitleaks.toml | ||
| .semgrepignore | ||
| components.json | ||
| Dockerfile | ||
| drizzle.config.ts | ||
| eslint.config.mjs | ||
| next.config.mjs | ||
| package-lock.json | ||
| package.json | ||
| postcss.config.mjs | ||
| README.md | ||
| tailwind.config.ts | ||
| tsconfig.json | ||
| vitest.config.ts | ||
Planish
The missing end-to-end travel planner. Forward bookings into one timeline, auto-build a map + day-by-day itinerary, and share a clean link for your group—without spreadsheets or 6 different apps.
Features
- Email Forwarding — Forward confirmation emails to your trip's unique address; itinerary items are auto-created
- Day-by-Day Timeline — See your trip organized by day with local times
- Interactive Map — Visualize all your stops on a Mapbox-powered map
- Trip Sharing — One clean link for your group, with optional password protection
- Collaboration — Invite others as editors or viewers
- Comments — Discuss individual itinerary items
- Billing — Stripe-powered subscription management (Free + Plus tiers)
Tech Stack
- Framework: Next.js 14 (App Router)
- Auth: Clerk
- Database: PostgreSQL + Drizzle ORM
- Payments: Stripe
- Maps: Mapbox GL JS
- Styling: Tailwind CSS + shadcn/ui
- Testing: Vitest (165 tests)
- CI: Forgejo Actions (lint, typecheck, test)
Environment Variables
Copy .env.local and fill in:
# Database
# Supply credentials via the URL userinfo section (before the host) or, preferably,
# via the standard PGUSER / PGPASSWORD environment variables.
DATABASE_URL=postgresql://localhost:5432/planish
# Clerk Auth
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY=pk_test_...
CLERK_SECRET_KEY=sk_test_...
# Stripe
STRIPE_SECRET_KEY=sk_test_...
STRIPE_WEBHOOK_SECRET=whsec_...
STRIPE_PLUS_PRICE_ID=price_...
NEXT_PUBLIC_APP_URL=http://localhost:3000
# Resend (email forwarding)
RESEND_API_KEY=re_...
# Mapbox
NEXT_PUBLIC_MAPBOX_TOKEN=pk....
Getting Started
npm install
npm run dev
Database
npm run db:push # Push schema to database
npm run db:studio # Open Drizzle Studio
Schema Overview
| Table | Description |
|---|---|
users |
Clerk-synced user records |
trips |
Trip metadata (dates, timezone, share settings) |
trip_members |
Trip collaboration (owner/editor/viewer roles) |
itinerary_items |
Flights, hotels, activities, restaurants, notes |
inbound_emails |
Forwarded confirmation emails pending parsing |
comments |
Comments on trips or individual items |
subscriptions |
Stripe subscription status (free/plus) |
API Routes
| Route | Description |
|---|---|
GET/POST /api/trips |
List or create trips |
GET/PATCH/DELETE /api/trips/[tripId] |
Trip CRUD |
POST /api/trips/[tripId]/items |
Add itinerary item |
POST /api/trips/[tripId]/invite |
Invite trip member |
POST /api/trips/[tripId]/share |
Configure sharing |
POST /api/trips/[tripId]/inbound |
Process forwarded email |
GET/POST /api/trips/[tripId]/comments |
List or add comments |
POST /api/billing |
Create Stripe checkout/portal session |
POST /api/billing/webhook |
Stripe webhook handler |
POST /api/inbound/resend |
Resend inbound email webhook |
GET /api/s/[shareSlug] |
Public trip sharing endpoint |
Scripts
| Command | Description |
|---|---|
npm run dev |
Start dev server (0.0.0.0:3000) |
npm run next-build |
Build for production |
npm run build |
Build with logging (used by NodeHub) |
npm test |
Run tests |
npm run lint |
Lint with Next.js ESLint config |
CI
Forgejo Actions runs on push/PR to main:
- lint — ESLint
- typecheck — TypeScript (
tsc --noEmit) - test — Vitest
Deployment
No live deploy target is currently configured. The repository has no .forgejo/workflows/deploy.yml,
no NodeHub app registered for planish, and no webhook configured on this repo (verified
2026-09-18 via GET /api/v1/repos/AuWoMe/planish/hooks returning [], see issue #17). Merged
fixes to main ship through CI (lint / typecheck / test) but are not automatically deployed.
To deploy manually, build the production image (docker build -t planish .) and run it with the
same environment variables CI uses, or stand up a NodeHub app with a push webhook — see
Dockerfile and .forgejo/workflows/ci.yml for the build inputs that any future deploy
pipeline will need.