Subscriptional is a production-oriented Flutter + Node.js + PostgreSQL application for tracking subscriptions, renewal reminders, and cancellation workflows.
apps/mobile- Flutter mobile app (Riverpod + GoRouter + Material 3)backend/api- Node.js + Express TypeScript API (PostgreSQL + JWT)sample_data- seed-style sample JSON datasetsdocs- architecture notes.github/workflows- CI pipelines
- Flutter stable + Dart null safety
- Riverpod state management
- GoRouter
- Material 3 custom light/dark theme
- FL Chart + Shimmer for dashboard experience
- Node.js + Express + TypeScript
- PostgreSQL + node-postgres
- JWT authentication + bcrypt password hashing
- Zod validation + centralized error handling
- Node-cron schedulers for reminder/cancellation maintenance jobs
- Flutter 3.41+
- Node 22+
- npm 11+
- PostgreSQL 16+ (local or cloud)
Copy backend/api/.env.example to backend/api/.env.
Required values:
NODE_ENVPORTPOSTGRES_URIJWT_SECRET
Use one of the following:
- local PostgreSQL instance
- managed PostgreSQL connection string
Quick local option:
docker compose up -d postgrescd apps/mobile
flutter pub get
flutter run --dart-define=SUBSCRIPTIONAL_API_BASE_URL=http://localhost:8080cd backend/api
npm ci
npm run devPOST /api/v1/auth/registerPOST /api/v1/auth/loginGET /api/v1/auth/meGET /api/v1/catalog/popular-subscriptionsGET /api/v1/subscriptionsPOST /api/v1/subscriptionsPATCH /api/v1/subscriptions/:idDELETE /api/v1/subscriptions/:id
cd apps/mobile
flutter analyze
flutter testcd backend/api
npm run lint
npm run build- Do not commit
.envfiles. - Use a strong
JWT_SECRETin each environment. - Validate and sanitize all incoming API payloads.
- Hash passwords with bcrypt (already enforced in auth route).
Implemented in this iteration:
- Flutter app shell with auth gate, session restore, and Cupertino-inspired liquid-glass UI
- Live mobile login/register and profile session against Node API
- Live subscription sync (list/add/update/delete) with PostgreSQL-backed API
- Smart popular-catalog flow with autofill for URLs, cancellation, and logos
- Node API foundation with JWT auth and PostgreSQL-backed subscription CRUD routes
- Background scheduler scaffolding via node-cron
- CI skeleton for mobile + backend
Next implementation steps:
- Add offline-first Drift caching on top of live API repositories
- Implement reminder delivery channels (email/push provider)
- Add analytics persistence and export flows (CSV/PDF)
- Expand unit/widget/integration tests for critical flows