Skip to content

Architecture

Project Structure

coordinator-web/
├── app/                    # Next.js App Router pages
│   ├── api/               # API routes (logging endpoint)
│   ├── portal/            # Authenticated portal routes
│   ├── profile/           # User profile routes
│   └── (marketing)/       # Public marketing pages
├── components/            # Reusable UI components
│   ├── ui/               # Base primitives (shadcn/Radix)
│   ├── forms/            # Form components by domain
│   ├── tables/           # Data table components
│   ├── cards/            # Card components
│   ├── layout/           # Layout components
│   ├── modal/            # Modal dialogs
│   ├── stream/           # Video streaming components
│   └── upload/           # File upload components
├── context/              # React context providers
├── hooks/                # Custom React hooks
│   ├── embeddings/       # Embedding-related hooks
│   ├── sessions/         # Session-related hooks
│   └── trainings/        # Training-related hooks
├── lib/                  # Shared utilities
│   ├── auth-client.ts    # BetterAuth client
│   ├── logger.ts         # Server-side Winston logger
│   ├── logger-client.ts  # Client-side logger
│   ├── stripe.ts         # Stripe client
│   ├── tutorial.ts       # Tutorial system
│   └── utils.ts          # Common utilities
├── types/                # TypeScript type definitions
├── public/               # Static assets
└── docs/                 # This documentation

Routing Architecture

Public Routes

Route Purpose
/ Home/landing page
/about About page
/pricing Pricing information
/contact Contact form
/login Sign in
/sign-up Registration
/reset-password Password recovery

Profile Routes (Authenticated)

Route Purpose
/profile User dashboard
/profile/settings Personal settings
/profile/organizations Organization list
/profile/organizations/create Create new org
/profile/invites Pending invitations
/profile/teams Teams membership

Portal Routes (Authenticated + Organization Scoped)

Base path: /portal/[organizationSlug]

Route Purpose
/ Organization landing
/pay Billing checkout
/pay/success Checkout confirmation
/accept-invite/[inviteID] Accept org invite
/settings/members Organization members
/settings/teams Organization teams
/settings/billing Billing management

Team-Scoped Routes

Base path: /portal/[organizationSlug]/[teamID]

Route Purpose
/ Team landing
/chat Chat home
/chat/[chatID] Specific conversation
/sessions Sessions overview
/sessions/manage Session list
/sessions/new Create session
/sessions/forms Form templates
/sessions/[sessionID] Session detail
/context Context overview
/context/upload Upload files
/context/manage Manage embeddings
/training Training overview
/training/new Create training job
/training/jobs Job list
/settings/team Team settings

Architectural Patterns

Provider Hierarchy

<TanstackProvider>          {/* TanStack Query client */}
  <ConditionalLayout>        {/* Marketing vs Portal layout */}
    <RoleProvider>           {/* RBAC enforcement */}
      {children}
    </RoleProvider>
  </ConditionalLayout>
</TanstackProvider>

Data Flow

┌─────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│   Component     │────▶│   Custom Hook    │────▶│   TanStack      │
│                 │     │   (useSession)   │     │   Query         │
└─────────────────┘     └──────────────────┘     └─────────────────┘
                                │                        │
                                ▼                        ▼
                        ┌──────────────────┐     ┌─────────────────┐
                        │   fetchJSON()    │────▶│   REST API      │
                        │   + Auth Token   │     │                 │
                        └──────────────────┘     └─────────────────┘

Authentication Flow

┌─────────────────┐
│   middleware    │  Route protection via proxy.ts
│   (proxy.ts)    │
└────────┬────────┘
┌─────────────────┐
│   BetterAuth    │  Session verification
│   get-session   │
└────────┬────────┘
┌─────────────────┐
│   authClient    │  React client for auth state
│   useSession()  │
└────────┬────────┘
┌─────────────────┐
│   useAuth()     │  JWT token + active org sync
│                 │
└─────────────────┘

Key Files

Configuration

File Purpose
next.config.ts Next.js configuration, external packages
tsconfig.json TypeScript configuration
components.json shadcn/ui configuration
eslint.config.mjs ESLint configuration
postcss.config.mjs PostCSS/Tailwind configuration

Entry Points

File Purpose
app/layout.tsx Root layout with providers
proxy.ts Auth middleware
lib/auth-client.ts BetterAuth client initialization

Core Utilities

File Purpose
lib/utils.ts fetchJSON, cn, formatting helpers
lib/logger.ts Winston server logger
lib/logger-client.ts Client-side logger
lib/tutorial.ts Tutorial step management