Travel Agency CRM
Side project · In productionIndependently designed and built an end-to-end CRM for my family's travel agency, in production from the PostgreSQL data model to the Customer 360 workspace and release process. Tenant isolation is enforced in PostgreSQL, and the same E2E-verified build is promoted from staging to production.
- Access control lives in PostgreSQL: requests run as non-owner NOBYPASSRLS logins with row-level security, so a missed API check still cannot cross tenants.
- 30+ forward-only migrations and idempotent Python imports; one build moves from staging to production only after end-to-end tests, so what was tested is what ships.
- A public read-only demo runs as a separate synthetic tenant, in English and Traditional Chinese.
Outcome
One workspace for customers, tours, surveys, and AI questions, with access rules enforced by the database.
- Next.js
- React
- TypeScript
- Python
- PostgreSQL
- Auth.js
- GitHub Actions
- Vercel
