This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Codetime Web V3 is a Nuxt.js web application for code time analytics, running at https://codetime.dev. This is the third iteration, evolved from Vue SPA to Next.js and now to Nuxt.js, with visualization switched from ECharts to Observable Plot.
- Install dependencies:
pnpm install(preferred package manager) - Development server:
pnpm run dev(runs on port 3001 with .env.dev) - Build for production:
pnpm run build - Lint and fix:
pnpm run lint(uses @jannchie/eslint-config with UnoCSS support) - Generate static site:
pnpm run generate - Preview production build:
pnpm run preview - Update API SDK:
pnpm openapi(regenerates from OpenAPI spec at test.codetime.dev) - Deploy:
pnpm deploy(updates API, builds, and starts with PM2)
- Frontend: Nuxt.js 4 with Vue 3 and TypeScript
- Styling: UnoCSS with @roku-ui/preset and @roku-ui/vue components
- API: Auto-generated TypeScript SDK from OpenAPI spec
- Deployment: PM2 cluster mode with health checks
- Visualization: Observable Plot for charts and data visualization
app/- Main application code (Nuxt 4 app directory structure)api/v3/- Auto-generated API client (ignored by ESLint)components/- Vue components organized by featurecomposables/- Shared reactive logici18n/- Internationalization with support for 12+ languageslayouts/- Page layouts (default, dashboard, landing, user)pages/- File-based routing with locale supportutils/- Helper functions and data formatters
public/- Static assets including VSCode iconsserver/- Server-side code
- Routing: File-based with locale parameter
[locale]/dashboard/workspace.vue - State Management: Vue's ref/computed + composables (no Vuex/Pinia)
- Data Fetching:
useAsyncDatacomposable with API client - Internationalization: Translation keys via
useI18N()composable - LRU Cache: Custom
useLRUcomposable for recent selections - Type Safety: Strict TypeScript with
@typescript-eslint/consistent-type-definitions
Badge/- Badge and card componentsDashboard/- Dashboard-specific components (calendar, stats, filters)Landing/- Landing page componentsPolt/- Observable Plot chart wrappersTag/- Tag management and statisticsR/- Reusable UI components (buttons, inputs, etc.)
- Auto-generated SDK from OpenAPI spec at
https://test.codetime.dev/v3/docs/openapi.json - Client configured with credentials and error handling in
app.vue - Base URL configurable via
NUXT_PUBLIC_API_HOSTenvironment variable
- UnoCSS utility-first approach with Roku UI preset
- Safelist includes platform icons (
i-mdi-apple,i-mdi-microsoft-windows, etc.) - Font stack: Inter for Latin, HarmonyOS Sans for CJK languages
- VSCode file type icons available in
public/vscode-icons/
- PM2 cluster mode with 2 instances
- Health checks on port 3000 at
/enendpoint - Memory limit: 500MB with automatic restart
- Production server runs on port 3001
- ESLint with strict TypeScript rules enforced
- Type definitions prefer
typeoverinterface - Auto-generated API code excluded from linting
- Binary operators indentation rule disabled for readability
- Support for 12+ languages (en, zh-CN, zh-TW, ja, de, es, fr, it, ru, ua, ms, pt-BR)
- All UI text must use translation keys
- Locale-aware routing with
[locale]parameter
- Observable Plot for charts (daily distribution, language stats, flame charts)
- Custom plot components in
components/Polt/ - D3.js available for advanced visualizations
- UnoCSS for optimized CSS
- Nuxt image optimization enabled
- Auto-imports for composables and utilities
- Code splitting via Nuxt's built-in features