schema: spec-driven # Project context (optional) # This is shown to AI when creating artifacts. # Add your tech stack, conventions, style guides, domain knowledge, etc. context: | Project: elcsa frontend — a crypto/finance web app (currency converter, wallet, networks, auth) for the ЭКСА platform. Tech stack: - React 19 + Vite, TypeScript (strict, tsc -b before build) - TanStack Query (React Query) for server state - React Router for routing - Plain CSS Modules (.module.css) — NO Tailwind, NO CSS-in-JS - Design tokens live in src/app/styles/variables.css Architecture — Feature-Sliced Design (FSD). Layers are strictly ordered; a lower layer must never import from a higher one: app → pages → widgets → features → entities → shared Path aliases map to layers: @app/* @pages/* @widgets/* @features/* @entities/* @shared/*. Each widget/feature owns its model/, ui/ and a barrel index.ts. Key conventions: - Auth is two-step email+code for both register and login. Access token is kept in an in-memory tokenStore (NOT localStorage); refreshed via an HttpOnly cookie against the auth service. Every request attaches a cached CSRF token and retries once on 401 after a silent refresh. - Reusable UI lives in shared/ui (Button, PrimaryButton, FormField, Pill, Title, TokenIcon, Notification), each with its own CSS Module. - Routes are centralized in shared/config/routes.ts (ROUTES const). ProtectedRoute / GuestRoute guard auth-only and guest-only pages. - VITE_API_URL must be set (src/shared/config/env.ts). - No test runner is configured. # Per-artifact rules (optional) # Add custom rules for specific artifacts. rules: proposal: - Keep it concise and focused on user-facing behavior and the "why". - State which FSD layer(s) the change touches and any cross-layer impact. specs: - Write requirements as observable behavior, not implementation details. - Cover the error/edge paths (network failure, 401 refresh, validation). design: - Place new code in the correct FSD layer and justify the placement. - Reuse existing shared/ui components and shared/api helpers before adding new ones. - Note any new env vars, routes (ROUTES const), or React Query keys. tasks: - Break work into small, verifiable steps ordered by FSD dependency (shared → up). - Include a "type-check passes (npm run build)" and "npm run lint" step; there are no automated tests.