Knowledge Base
For Developers
Architecture
JJI is organized around stable product systems: public support surfaces, an authenticated dashboard shell, shared UI primitives, server-owned analytics, and a companion mobile app.
System boundaries
- Public layer: Landing page, docs, feedback - share a coherent shell without requiring authentication
- Dashboard shell: Sidebar, navbar, filters, command palette, quick-add - the shared authenticated workspace
- Analytics engine: Server-side data aggregation powers dashboard, reports, and journal
- Mobile app: Flutter client consuming the same backend via REST APIs and Supabase Realtime
Data flow
User data flows through a consistent pipeline:
- User imports trades via the import system (file upload, webhook, broker sync)
- Data is stored in PostgreSQL via Prisma, scoped to the user
- Server-side aggregation computes metrics (P&L, win rate, drawdown, etc.)
- Dashboard and reports render from server-provided aggregations
- Filters modify aggregation scope without re-fetching raw data
Web-mobile architecture
The mobile app (Flutter) and web app (Next.js) share:
- Same PostgreSQL database via Supabase
- Same authentication provider (Supabase Auth)
- Same REST API v1 endpoints
- Real-time updates via Supabase Realtime channels
Each client renders its own UI layer independently.