{
  "_meta": {
    "updated_at": "2026-06-09T18:56:37.176Z",
    "commit": "99f59c3999f4ef992f01ef8f8a38c1d86d2f2a0f",
    "version": 3
  },
  "languages": ["TypeScript", "SQL"],
  "frameworks": ["Hono 4.12.23", "React 19", "Drizzle ORM 0.45.2"],
  "tools": [
    "Vite 8.0.16",
    "vite-plugin-pwa 1.3.0",
    "Vitest",
    "drizzle-kit 0.31.10",
    "ESLint",
    "node-cron"
  ],
  "build_system": "pnpm workspaces + tsc (api) + vite build (pwa)",
  "test_framework": "Vitest",
  "package_manager": "pnpm 11.5.1",
  "runtime": "Node.js 22 LTS",
  "database": "MariaDB via mysql2 3.22.4",
  "cache": "Redis (ioredis — available in infra; not yet wired; in-memory EventEmitter used for Phase 4 list SSE fan-out)",
  "auth": "Authelia OIDC — authorization_code + PKCE via @hono/oidc-auth 1.8.3",
  "calendar_backend": "Fastmail CalDAV via tsdav 2.2.2 + ical.js 2.2.1",
  "calendar_ui": "@schedule-x/calendar 4.6.0",
  "server_state": "@tanstack/react-query 5.101.0",
  "client_state": "zustand 5.0.14",
  "routing": "react-router 7.17.0 (BrowserRouter, /calendar + /lists + /lists/:listId)",
  "drag_and_drop": "@dnd-kit/core 6.3.1 + @dnd-kit/sortable 10.0.0 (list item reorder)",
  "fractional_rank": "fractional-indexing 3.2.0 (list item ordering — utf8mb4_bin collation in DB)",
  "content_formats": [
    "TypeScript (source)",
    "SQL (Drizzle migrations)",
    "iCalendar / VCALENDAR (CalDAV payloads)",
    "Markdown (planning docs)"
  ],
  "infra": {
    "hosting": "Unraid + Docker Compose",
    "networking": "Pangolin/Newt tunnel (no open ports), split-DNS"
  },
  "workspaces": {
    "root": "familysync (pnpm workspace root)",
    "api": "@familysync/api — apps/api",
    "pwa": "@familysync/pwa — apps/pwa"
  }
}
