feat: initial commit

Signed-off-by: Noa Virellia <noa@requiem.garden>
This commit is contained in:
2026-02-18 11:54:42 +08:00
parent 23fb6f163d
commit 0a7d69e86b
167 changed files with 23952 additions and 0 deletions

61
AGENTS.md Normal file
View File

@@ -0,0 +1,61 @@
# PROJECT KNOWLEDGE BASE
**Generated:** 2026-02-18
**Stack:** React 19, Vite, TypeScript, TanStack (Router, Query, Form), Tailwind CSS, Shadcn/UI
## OVERVIEW
Modern React SPA using Schema-Driven Development (OpenAPI) and file-based routing.
Container-first deployment (Caddy + Podman/Docker).
## STRUCTURE
```
.
├── src/
│ ├── client/ # Generated API client (OpenAPI-TS)
│ ├── components/ # UI & Feature components
│ │ ├── events/ # [COMPLEX] Event system + KYC flow
│ │ └── ui/ # Shadcn/UI base components
│ ├── hooks/ # Custom hooks (Data & UI)
│ ├── routes/ # TanStack Router file-based routing
│ ├── stories/ # Storybook stories (Test source)
│ └── main.tsx # Entry point (No App.tsx usage)
├── Containerfile # Multi-stage build (Node -> Caddy)
└── openapi-ts.config.ts # API generation config
```
## WHERE TO LOOK
| Task | Location | Notes |
|------|----------|-------|
| **Routing** | `src/routes/` | File-based. `__root.tsx` is layout. `_workbenchLayout` is main app. |
| **API/Data** | `src/client/` | Generated via `pnpm gen`. DO NOT EDIT manually. |
| **Events/KYC** | `src/components/events/` | Complex container-view + Zustand state machine. |
| **UI Components** | `src/components/ui/` | Shadcn/UI. Extended in `shadcn-io` subdir. |
| **Testing** | `src/stories/` | Stories serve as tests via Vitest + Playwright. |
## CONVENTIONS
- **Style**: Antfu ESLint. 2 spaces. Semicolons. Single quotes.
- **Routing**: TanStack Router. Use `Link` component. File nesting determines URL.
- **State**: Server state = TanStack Query. Local complex state = Zustand. Global UI = Context.
- **Testing**: Create `.stories.tsx` for components. No separate `tests/` folder for units.
- **Imports**: Use `@/` alias for `src/`.
## ANTI-PATTERNS (THIS PROJECT)
- **Manual API Calls**: ALWAYS use generated hooks from `@/client`.
- **Global State**: Avoid Redux/Zustand for server data. Use Query Cache.
- **Dead Code**: `src/App.tsx` is unused. Ignore it.
- **`any` Usage**: Strictly forbidden. Use `unknown` or fix generated types.
- **Nesting**: Do not nest API logic inside `src/client` manually.
## COMMANDS
```bash
pnpm dev # Start Vite dev server
pnpm build # TSC + Vite build
pnpm gen # Regenerate API client (requires internal network)
pnpm storybook # Start component workbench
pnpm test # Run Vitest (headless browser)
```
## NOTES
- **Proxy**: API requests proxy to `http://10.8.0.11:8000` (VPN/Internal).
- **Deployment**: Uses Caddy as web server in production container.
- **Auth**: Handled via `useUserInfo` suspense query.