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.
Plan itineraries, organize tasks, collaborate and track expenses with your travel organizer.
AI translation
Planeje roteiros, organize tarefas, colabore e acompanhe despesas com seu organizador de viagens.
LifestyleTypeScript · PLpgSQLGitHub @vallsilvaaOnlineOwner 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.
A collaborative web application for planning trips: itinerary, reservations,
pre-trip prep tasks, shared expenses, documents, and organizer invitations,
all scoped per trip with row-level security in Postgres.
Live at travel-organizer-zeta.vercel.app.Read the full README ↗A collaborative web application for planning trips: itinerary, reservations, pre-trip prep tasks, shared expenses, documents, and organizer invitations, all scoped per trip with row-level security in Postgres.
Live at travel-organizer-zeta.vercel.app.
.ics calendar file
with the trip's own timezone attached to each event./api/health endpoint for Supabase and the
reminder service.docs/security/rls-audit.md)docs/operations/incident-investigation.md)src/
app/ # Routes, layouts, and API routes (App Router)
api/ # /api/cron/task-reminders, /api/health, /api/trips/[id]/itinerary.ics
auth/ # sign-in, sign-up, forgot/reset password, callback
dashboard/ # trip list, search/filter/sort, profile, invitations
trips/[tripId]/ # trip detail: itinerary, reservations, tasks, expenses, docs, organizer
components/ # Shared UI: shadcn primitives (ui/), theme toggle, confirm-delete dialog, etc.
features/ # One module per domain, each with actions.ts, validation.ts, and tests:
attachments/ auth/ comments/ expenses/ invitations/ itinerary/
notifications/ participants/ realtime/ reminders/ reservations/ tasks/ trips/
i18n/ # next-intl request config, locale cookie helpers, setLocale action
lib/ # Supabase clients (server/client/proxy), timezone helpers, cn()
messages/ # pt.json / en.json translation catalogs
supabase/
migrations/ # SQL migrations (schema, RLS policies, RPCs)
tests/ # pgTAP RLS authorization tests
e2e/ # Playwright end-to-end and accessibility specs
docs/
security/ # RLS authorization audit
operations/ # Incident investigation workflow
Requirements: Node.js 22+ (CI and production run Node 22; Node 20 works but
@supabase/supabase-js prints deprecation warnings), npm, and Docker
(only needed to run Supabase locally for real auth/data or the e2e suite).
npm install
cp .env.example .env.local # points at local Supabase defaults
npm run dev
Open http://localhost:3000. Without a running local
Supabase instance, pages that require auth/data will fail — start one with
npm run supabase:start (see below) if you need real sign-up/sign-in.
| Variable | Purpose |
|---|---|
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY | Supabase project connection (client + server) |
SUPABASE_SERVICE_ROLE_KEY | Server-only key used by the reminder cron to bypass RLS |
RESEND_API_KEY, REMINDER_EMAIL_FROM | Transactional email for invitations and task reminders |
CRON_SECRET | Authorizes Vercel's call to /api/cron/task-reminders and /api/cron/overdue-tasks |
NEXT_PUBLIC_APP_URL | Public base URL used in email links and calendar exports |
VAPID_PUBLIC_KEY, VAPID_PRIVATE_KEY, VAPID_SUBJECT | Web push (server-side signing). Generate a pair with npx web-push generate-vapid-keys |
NEXT_PUBLIC_VAPID_PUBLIC_KEY | Same value as VAPID_PUBLIC_KEY, exposed to the browser for pushManager.subscribe() |
SENTRY_DSN, NEXT_PUBLIC_SENTRY_DSN | Sentry error reporting (server and client) |
SENTRY_ORG, SENTRY_PROJECT, SENTRY_AUTH_TOKEN | Build-time only, for source map upload — not needed for local dev |
Never expose the service-role key, Resend key, or Sentry auth token through
NEXT_PUBLIC_ variables. Reminder delivery failures are logged with only a
technical failure code and delivery ID, never trip content or recipient
email (see the incident-investigation doc).
npm run supabase:start # starts local Supabase (requires Docker)
npm run db:reset # (re)applies every migration to the local database
npm run supabase:stop
Create a new migration with npm run db:diff -- <name> or by hand under
supabase/migrations/. Migrations are applied to production explicitly with
npm run db:push against the linked project — pushing to main does not
apply them automatically.
npm run lint
npm test # unit/component tests (Vitest)
npm run build
npm run test:db # pgTAP RLS tests, requires local Supabase running
npm run test:e2e # Playwright, requires local Supabase running (see e2e/README.md)
The same checks (lint, test, build, then test:db + test:e2e against
a fresh local Supabase instance) run in GitHub Actions for every pull request
and push to main.
Production runs on Vercel, but automatic deploy-on-push is disabled
(vercel.json sets git.deploymentEnabled: false) since database
migrations must be pushed to Supabase explicitly and in order with the code
that depends on them. To ship a change once its PR is merged to main:
npm run db:push # apply any new migrations to production first
vercel deploy --prod
Then confirm /api/health returns {"status":"ok"} and check Sentry/Vercel
runtime logs for errors.
main (e.g. agent/<short-description>).