Frontend
Nuxt.js (Vue 3)
SSR · SSG · SPA · Per-route rendering via Nitro
Lighter runtime
Better perf
Less attack surface
Clean DX
Backend services
Supabase
Postgres · RLS · Realtime
Supabase Auth
Users stored in your Postgres
Cloudflare R2
S3-compatible · Zero egress fees
Open-source core
Self-hostable
Postgres = clean exit
R2 = S3 swap anytime
Notifications & jobs
Novu
Orchestration · All channels
Trigger.dev
Background jobs · Open-source
Resend
Transactional email
MSG91
SMS · India-first pricing
Push notifications
Firebase FCM
Mobile & browser push · Free tier
Web Push API
Self-hosted browser push · No dependency
Architecture rule
Your service adapter layer
All third-party services abstracted behind your own interface — swap providers without touching app code
Migration ladder
STAGE 1
Build & Validate
Managed everything · Move fast · Validate product
→
STAGE 2
Growing
Storage → Email → Jobs · Own piece by piece
→
STAGE 3
Own Your Infra
Self-hosted Postgres · Auth · Novu · Full control
Key principles
Open-source cores only
Every service must be self-hostable
Clean exit ramps
No vendor lock-in on critical data
Adapter pattern
Swap providers, never the app