# Project Brief — Strava Frontend (cycle-rider) ## What is this project Vue 3 SPA frontend for the "cycle-rider" (Strava-like) cycling application. It is the web client for the FastAPI backend located at `../` (backend repo, same monorepo parent). Production host: `https://cycle-rider.ru`. ## Core goals - Display a public feed of workouts (dashboard), routes, and public/private workout detail pages with charts (speed, power, heart rate, elevation) and Yandex Maps route rendering. - Provide workout upload (FIT/GPX files) and attachment management. - Provide user auth (JWT Bearer + Google/Yandex OAuth via backend), profile/preferences pages. - Internationalization with Russian as default/fallback locale. ## Key requirements - Vue 3 (Composition/Options API as present) + TypeScript, strict mode. - Vuestic UI component library + Tailwind CSS for styling. - Pinia for state management. - vue-router with lazy-loaded pages. - Axios instances (`axiosAuth` with Bearer token interceptor, `axiosPublic`) injected via `app.provide`. - All API endpoints live under `/api/v0` on the backend. - No local backend mock — the frontend always talks to the real API host. ## Non-goals - No test runner configured in this repo (no vitest/jest) — verification is `yarn lint` + `yarn build`. ## SSR / SEO - Express server (`server/`) renders SEO-critical pages: landing (`/`), `/explore`, `/routes`, `/public/workouts/:id`, `/sitemap.xml`, `/robots.txt`. - Nginx proxies these routes to the SSR server (port 3001); all other routes serve the SPA (`dist/index.html`). - Production host: `https://cycle-rider.ru` (env `SSR_BASE_URL`).