Spaces:
Running
Running
| # Repository Guidelines | |
| ## Project Structure | |
| - **`client/`**: Frontend React application | |
| - **`components/`**: Feature-based UI components (`Search`, `AiResponse`, `Analytics`). Each folder is self-contained with related styles, hooks, and utilities. | |
| - **`modules/`**: Core business logic (PubSub stores, search services, database layers) | |
| - **`hooks/`**: Custom React hooks | |
| - **`public/`**: Static assets | |
| - **`server/`**: Server hooks for search endpoints, caching, compression, CORS, and API validation | |
| - **`shared/`**: Utilities shared between client and server | |
| - **`vite.config.ts`**: Build and server configuration with environment-driven feature flags | |
| ## Development Commands | |
| - **`npm run dev`**: Start development server with HMR | |
| - **`npm run build`**: Compile for production | |
| - **`npm run start`**: Preview production build | |
| - **`npm run lint`**: Check code quality (Biome, TypeScript, dependencies) | |
| - **`npm run format`**: Auto-format code with Biome | |
| ## Coding Conventions | |
| **Tech Stack**: React + TypeScript + Mantine UI (`@mantine/core`, `@mantine/hooks`, `@mantine/form`) | |
| **Style**: | |
| - Run `npm run format` before committing (enforced via `husky` and `lint-staged`) | |
| - Named function exports: `export function ComponentName` (not `React.FC`) | |
| - Use `React.lazy()` for route-level components | |
| - PascalCase for components/types, camelCase for functions/variables, UPPER_SNAKE_CASE for constants | |
| **TypeScript**: | |
| - Use interfaces for data structures | |
| - Avoid comments; use TSDoc only for public APIs | |
| **State & Imports**: | |
| - Use `create-pubsub` for global state (avoid nested context providers) | |
| - Prefer absolute path aliases where configured | |
| **UI & Performance**: | |
| - Use Mantine components for consistency | |
| - Ensure keyboard navigation, ARIA labels, semantic HTML | |
| - Use `React.memo()` and `useCallback()` for optimization | |
| ## Pull Requests | |
| - Ensure `npm run lint` pass | |
| - Keep PRs focused on a single feature or fix | |
| - Include clear descriptions and screenshots for UI changes | |
| - Write descriptive commit messages | |
| ## Architecture | |
| - **Privacy-First**: Local storage via Dexie.js (IndexedDB) | |
| - **AI Inference**: Server-side (OpenAI, Horde) and client-side (WebLLM, Wllama) | |
| - **State Management**: PubSub pattern for decoupled state (no prop drilling) | |
| - **Search Pipeline**: Server hooks handle validation, caching, compression, reranking | |
| ## Configuration | |
| - **Environment**: See `.env.example` for options | |
| - **Docker Development**: `docker compose up` | |
| - **Docker Production**: `docker compose -f docker-compose.production.yml up --build` | |