02f0dc42410f4bafa8cdfa44eee8b48f13e4d7f1
- tailwindcss + @tailwindcss/vite, react-router-dom, date-fns, zod installed - vite.config.ts: Tailwind v4 Vite plugin wired in - index.css: single @import "tailwindcss" (zero-config v4) - main.tsx: wrapped in <BrowserRouter>; imports index.css - App.tsx: layout shell with <TopBar/> + <Routes> (/, /weekly, /monthly, /projects) - lib/api.ts: Zod schemas for all API types + typed fetch wrapper; all responses validated before field access (per CLAUDE.md rule) - lib/format.ts: minutesToHmm, hmmToMinutes, centsToEur, ISO week helpers, year-month helpers, formatDate - lib/types.ts: z.infer<> re-exports from api.ts - state/UserContext.tsx: selected user persisted in localStorage; auto- selects first user on load Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
App
React 19 + Spring Boot 3.4 web app backed by PostgreSQL 17.
Quick start
Requires a full JDK (not just JRE) for Maven compilation.
mise installbelow handles this. Without mise:sudo apt install openjdk-21-jdk.
# 1. Pin toolchain — installs Java 21 JDK, Node 22, Maven, lefthook, gitleaks
mise install
# 2. Install deps and git hooks (or run the four commands manually)
mise run setup
# 3. Start the database
docker compose up -d
Open two terminals:
# Backend → http://localhost:8080
mvn -f backend/pom.xml spring-boot:run
# Frontend → http://localhost:5173 (proxies /api → :8080)
cd frontend && npm run dev
Verify everything
mise run check # format-check + lint + test (both stacks)
Without mise:
mvn -f backend/pom.xml spotless:check -q
cd frontend && npx biome check src
mvn -f backend/pom.xml test -q
cd frontend && npx vitest run
Environment
.env.example documents all env vars. mise run setup copies it to .env automatically on first run.
Description
Languages
TypeScript
57.7%
Java
41.2%
Dockerfile
0.8%
HTML
0.3%