My App
Architecture

Structure du projet

L'arborescence du monorepo Vantablvck, dossier par dossier.

Le projet est un monorepo Nx sur Bun. Les applications vivent dans apps, les briques partagées dans packages.

Arborescence

vantablvck/
├── apps/
│   ├── web/                     # Next.js App Router, la PWA (client web-first)
│   ├── server/                  # Elysia (Bun), API et montage de l'auth
│   ├── native/                  # Expo, application mobile (gelée)
│   └── fumadocs/                # Site de documentation
├── packages/
│   ├── db/                      # Drizzle : schéma, migrations, accès PostgreSQL
│   ├── core/                    # Logique métier pure, testée en isolation
│   ├── auth/                    # Configuration Better Auth partagée
│   ├── ui/                      # Composants partagés, coss et Base UI
│   ├── env/                     # Validation des variables d'environnement (Zod)
│   └── config/                  # Configuration TypeScript partagée
├── docs/                        # Documentation interne (hors site public)
├── CLAUDE.md                    # Garde-fous rechargés à chaque session
├── progress.md                  # État vivant du projet
├── docker-compose.yml           # PostgreSQL et services
├── biome.json                   # Lint et format
├── nx.json                      # Orchestration Nx
└── package.json                 # Workspaces Bun

Le détail par dossier

apps

DossierContenu
webLe client web Next.js, cible principale, servi comme PWA. Contient le manifest, les pages, les composants d'interface.
serverL'API Elysia. Aujourd'hui, montage de l'authentification. Demain, les modules métier et le plugin de sécurité.
nativeL'application Expo, gelée. L'authentification y est déjà câblée, aucune feature métier n'y est développée pour le MVP.
fumadocsCe site de documentation, en Next.js et MDX.

packages

DossierContenu
dbLe schéma Drizzle découpé par domaine, les migrations, et le client PostgreSQL.
coreLa logique métier pure, sans dépendance à un framework, testable directement sur le runner Bun.
authLa configuration Better Auth, partagée entre le serveur et les clients.
uiLes composants d'interface partagés, construits sur coss et Base UI.
envLa validation des variables d'environnement avec Zod, une source de vérité par cible (serveur, web, natif).
configLa configuration TypeScript de base, étendue par chaque package.

Conventions de frontières

Les frontières entre modules sont explicites. Un module ne fait pas de jointure sauvage dans le domaine d'un autre, ce qui permettra plus tard de séparer des services ou d'introduire une fédération sans tout réécrire. Les routes délèguent aux services, les services passent par les repositories Drizzle, jamais l'inverse.

On this page