diff --git a/CLAUDE.md b/CLAUDE.md index 2ea745b..a9b1dde 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -55,6 +55,46 @@ jupyter notebook notebook.ipynb There is no project test suite, lint command, or build system configured in the current repository. +## Fullstack app commands + +The TypeScript application scaffold lives at the repository root and uses Bun workspaces with Moon tasks. + +Install dependencies: + +```bash +bun install +``` + +Run all development tasks through Moon: + +```bash +bun run dev +``` + +Run type checks: + +```bash +bun run typecheck +``` + +Run production builds: + +```bash +bun run build +``` + +Run the API directly: + +```bash +cd apps/api && bun run start +``` + +Run the web app directly: + +```bash +cd apps/web && bun run dev +``` + ## High-level architecture - `Machine_Learning/preprocessing.py` prepares the training dataset locally. It extracts three source ZIP files, merges selected class folders into `dataset/`, maps selected Mandarin labels from Dataset 3 via `desc.json`, removes known problematic image files, then creates `dataset.zip` for upload to Google Drive/Colab. @@ -62,6 +102,16 @@ There is no project test suite, lint command, or build system configured in the - `Machine_Learning/save_model.py` is the production export step. It loads `best_model/best_model.keras`, rebuilds a clean EfficientNetV2B0 architecture without training-time augmentation layers, copies weights into that model, exports `model/saved_model/`, and writes `model/model.tflite`. - TensorFlow.js export is intentionally done with the `tensorflowjs_converter` CLI rather than from Python to avoid protobuf/runtime conflicts documented in the README. +## Fullstack application architecture + +The root TypeScript workspace is a Bun + Moon monorepo: + +- `apps/web/` contains the React + Vite + TypeScript frontend with React Router, TanStack Query, Zustand, Tailwind, and shadcn/ui-style components. +- `apps/api/` contains the Elysia backend with health/status routes and Drizzle/PostgreSQL configuration. +- `packages/shared/` contains shared TypeScript types and utilities consumed by both apps. + +The backend reads `DATABASE_URL` for Drizzle/PostgreSQL, but the initial health/status endpoints do not require a live database connection. + ## Model labels and dataset mapping The classifier targets four Indonesian labels: diff --git a/apps/api/moon.yml b/apps/api/moon.yml index 67695a2..f60e469 100644 --- a/apps/api/moon.yml +++ b/apps/api/moon.yml @@ -14,7 +14,6 @@ tasks: - package.json - tsconfig.json - drizzle.config.ts - - ../../packages/shared/dist/**/* outputs: - dist typecheck: @@ -26,4 +25,3 @@ tasks: - package.json - tsconfig.json - drizzle.config.ts - - ../../packages/shared/dist/**/* diff --git a/apps/web/moon.yml b/apps/web/moon.yml index d8bc7f8..e5569d5 100644 --- a/apps/web/moon.yml +++ b/apps/web/moon.yml @@ -18,7 +18,6 @@ tasks: - vite.config.ts - tailwind.config.ts - postcss.config.js - - ../../packages/shared/dist/**/* outputs: - dist typecheck: @@ -32,4 +31,3 @@ tasks: - tsconfig.node.json - vite.config.ts - tailwind.config.ts - - ../../packages/shared/dist/**/*