Skip to main content
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:

  1. User imports trades via the import system (file upload, webhook, broker sync)
  2. Data is stored in PostgreSQL via Prisma, scoped to the user
  3. Server-side aggregation computes metrics (P&L, win rate, drawdown, etc.)
  4. Dashboard and reports render from server-provided aggregations
  5. 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.