CleanFrame
삼성 The Frame용 개인 홈 화면, 포크와 맞춤을 위한 시작점
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
Travel planner: save places you want to visit, plan trips day by day on a map, and share them with an edit or view link (Next.js · Supabase)
README 전체를 불러오는 중입니다.
README 전문 보기 ↗English | 한국어
A travel planner for collecting the places you want to go, planning a trip day by day on a map once it's decided, and editing it together with companions through a single link.
Demo: https://triplan-beryl.vercel.app
1. Collect. Save countries and cities you want to visit someday on a world map, with a priority and notes. When you're ready, one button turns a place into a trip.
2. Plan.
3. Prepare.
4. Share.
5. On the trip, and after.
/archive.Korean and English, a home currency, and light and dark themes are supported, and the app can be installed to the home screen (PWA).
| Who | How | Can do |
|---|---|---|
| Admin | Log in with ADMIN_PASSWORD | Everything (all trips, members) |
| Member | Log in with an ID the admin created | Own trips, invite other members |
Edit link /t/<token> | Anyone with the link | Edit that one trip |
View link /v/<token> | Anyone with the link | Read that one trip (booking codes hidden) |
| Demo member | Log in with an ID the admin created | Read only trips marked as public |
Links can be reissued at any time, which blocks the old one immediately. Every API checks access on the server (src/lib/auth.ts).
# 1. Start Postgres and apply the migrations in order
docker run -d --name triplan-pg -e POSTGRES_PASSWORD=triplan -e POSTGRES_DB=triplan -p 5433:5432 postgres:16-alpine
for f in supabase/migrations/*.sql; do docker exec -i triplan-pg psql -U postgres -d triplan < "$f"; done
# 2. Run the app (log in at http://localhost:3000 with ADMIN_PASSWORD)
npm install
cp .env.example .env.local
npm run dev
Checks: npm run lint, npm test (self-checks for the calculation logic), npm run build.
Only DATABASE_URL, ADMIN_PASSWORD and SESSION_SECRET (32+ random characters) are required. The app works without the rest; each one turns something on or improves it.
| Variable | Adds |
|---|---|
KAKAO_REST_KEY | Place search in Korea |
ODSAY_API_KEY | Korean transit routes (otherwise an estimate) |
NVIDIA_API_KEY | NVIDIA NIM: area names in the Maybe list (otherwise neighbourhood names), AI place ideas, reading booking emails |
MYMEMORY_EMAIL | Raises the map-label translation quota from 5,000 to 50,000 characters a day |
EXCHANGE_RATE_API_KEY | A keyed exchange-rate API (otherwise a free keyless endpoint) |
NEXT_PUBLIC_MAPBOX_TOKEN | Mapbox instead of MapLibre |
SITE_URL | Base URL for share-link preview images, e.g. https://triplan-beryl.vercel.app |
SAMPLE_TRIP_PATH | A "Browse a sample trip" button on the landing page, e.g. /v/abc123 |
The app and Postgres run on one Oracle Cloud VM, with Caddy in front for TLS. A push to main runs CI: lint, tests and build, then deploy/deploy.sh on the VM. If /api/health fails, it rolls back to the previous release.
deploy.sh does not run them.~/triplan/.env on the VM. The GitHub secrets are VM_HOST, VM_SSH_KEY and VM_KNOWN_HOSTS.triplan-beryl.vercel.app is only a proxy to the VM (deploy/vercel/vercel.json). Redeploy it from deploy/vercel. Running vercel deploy from the repo root replaces the proxy with a build that has no database.Next.js 16 (App Router) · React 19 · TypeScript · Tailwind CSS 4 · PostgreSQL 17 · MapLibre + OpenFreeMap. Routes come from Valhalla and ODsay, opening hours from OpenStreetMap (Overpass), translations from MyMemory, and weather from Open-Meteo.
Country and city photos are from Wikimedia Commons (public/backgrounds/CREDITS.md). Map data © OpenStreetMap contributors, tiles by OpenFreeMap.