# Frontend context Read `ai/shared.md` first. This file covers frontend-specific rules. ## Project context **Stack:** Vue 3.5, TypeScript 6, Vite 8, Vue Router 5, Pinia 4, Zod 4, Cypress 15, npm. **Location:** `frontend/website/`. The frontend is a standalone application. Keep its source, dependencies, development server, and production build independent from the backend unless the user explicitly requests integration. The application currently has route-level views, reusable authentication components, a Pinia authentication store, Zod schemas, API URL handling, and Cypress end-to-end specs. The main entry points are: - `src/App.vue` for the root component. - `src/main.ts` for app creation, Pinia, the router, and global styles. - `src/router/index.ts` for routes and authentication guards. - `src/stores/` for Pinia stores and API boundaries. - `src/views/` and `src/components/` for route and reusable UI. - `@` as the `src/` alias in Vite and TypeScript. ## Package management and commands Use npm and keep `package-lock.json` committed. Run commands from `frontend/website/`. Install dependencies in a fresh checkout or worktree: ```sh direnv exec "$(git rev-parse --show-toplevel)" npm install ``` `npm run format` and `npm run lint` rewrite files. Their `format:check` and `lint:check` counterparts are non-mutating completion checks. `npm run build` runs type checking and the production build; generated `dist/` output is ignored. `process-compose` starts the frontend as part of the complete development stack. The frontend is directly accessible on `VITE_PORT`; Caddy serves the backend and does not proxy the frontend. ## Vue conventions - Use the Composition API and `