style(13-03): apply Prettier formatting across repo

Mechanical reformat — no logic changes. 398 files changed, 19125
insertions(+), 16457 deletions(-). Prettier 3.8.4 with .prettierrc
(singleQuote:true, semi:true, tabWidth:2, trailingComma:all,
printWidth:100). Isolated per D-13-08 for reviewability.
This commit is contained in:
Lucas Berger
2026-06-11 20:35:18 -04:00
parent 4bc0445173
commit 982438dc10
398 changed files with 19050 additions and 16382 deletions
+35 -33
View File
@@ -1,4 +1,5 @@
<!-- generated-by: gsd-doc-writer -->
# FamilySync
A self-hosted family organization hub for a two-person household. One color-coded calendar view across all family members' Fastmail calendars, plus shared collaborative lists (groceries, gift ideas) — delivered as a React PWA with no app store required.
@@ -32,19 +33,19 @@ cp .env.example .env # then fill in values — see Environment Variables below
Required environment variables (set in `.env` or your Docker host):
| Variable | Description |
|---|---|
| `DB_PASSWORD` | MariaDB password for the `familysync` user |
| `DB_ROOT_PASSWORD` | MariaDB root password |
| `OIDC_ISSUER` | Authelia OIDC issuer URL |
| `OIDC_CLIENT_ID` | OIDC client ID (default: `familysync`) |
| `OIDC_CLIENT_SECRET` | OIDC client secret |
| `OIDC_REDIRECT_URI` | Callback URL registered in Authelia |
| `OIDC_AUTH_SECRET` | Random secret for session cookie signing |
| `APP_PASSWORD_ENCRYPTION_KEY` | Key used to encrypt stored Fastmail app passwords |
| `VAPID_PUBLIC_KEY` | VAPID public key (`npx web-push generate-vapid-keys --json`) |
| `VAPID_PRIVATE_KEY` | VAPID private key (never commit) |
| `VAPID_SUBJECT` | VAPID subject (`mailto:you@example.com`) |
| Variable | Description |
| ----------------------------- | ------------------------------------------------------------ |
| `DB_PASSWORD` | MariaDB password for the `familysync` user |
| `DB_ROOT_PASSWORD` | MariaDB root password |
| `OIDC_ISSUER` | Authelia OIDC issuer URL |
| `OIDC_CLIENT_ID` | OIDC client ID (default: `familysync`) |
| `OIDC_CLIENT_SECRET` | OIDC client secret |
| `OIDC_REDIRECT_URI` | Callback URL registered in Authelia |
| `OIDC_AUTH_SECRET` | Random secret for session cookie signing |
| `APP_PASSWORD_ENCRYPTION_KEY` | Key used to encrypt stored Fastmail app passwords |
| `VAPID_PUBLIC_KEY` | VAPID public key (`npx web-push generate-vapid-keys --json`) |
| `VAPID_PRIVATE_KEY` | VAPID private key (never commit) |
| `VAPID_SUBJECT` | VAPID subject (`mailto:you@example.com`) |
## Quick Start
@@ -84,29 +85,29 @@ docker-compose.dev.yml Dev overrides (bind-mount src/, expose DB/Redis ports)
## Commands
| Command | What it does |
|---|---|
| `pnpm dev:api` | Start API in watch mode (`dist/` must be built first) |
| `pnpm dev:pwa` | Start Vite dev server with HMR |
| `pnpm build` | Build both api and pwa |
| `pnpm test` | Run API test suite (vitest) |
| `pnpm lint` | Lint all workspaces |
| `pnpm typecheck` | Type-check all workspaces |
| `pnpm --filter @familysync/api db:generate` | Generate Drizzle migration from schema changes |
| `pnpm --filter @familysync/api db:migrate` | Apply pending migrations to MariaDB |
| Command | What it does |
| ------------------------------------------- | ----------------------------------------------------- |
| `pnpm dev:api` | Start API in watch mode (`dist/` must be built first) |
| `pnpm dev:pwa` | Start Vite dev server with HMR |
| `pnpm build` | Build both api and pwa |
| `pnpm test` | Run API test suite (vitest) |
| `pnpm lint` | Lint all workspaces |
| `pnpm typecheck` | Type-check all workspaces |
| `pnpm --filter @familysync/api db:generate` | Generate Drizzle migration from schema changes |
| `pnpm --filter @familysync/api db:migrate` | Apply pending migrations to MariaDB |
## Tech Stack
| Layer | Technology |
|---|---|
| Backend runtime | Node.js 22 + TypeScript, Hono 4.12.23 |
| Database ORM | Drizzle ORM 0.45.2 on MariaDB 11 (via mysql2) |
| Auth | `@hono/oidc-auth` 1.8.3 — authorization code + PKCE against Authelia |
| Calendar | tsdav 2.2.2 (CalDAV) + ical.js 2.2.1 against Fastmail |
| Push | web-push 3.6.7 (VAPID) |
| Live sync | Server-Sent Events + Redis 7 pub/sub |
| Frontend | React 19, Vite 8, vite-plugin-pwa 1.3, TanStack Query 5, Zustand 5 |
| Calendar UI | Schedule-X 4.6 |
| Layer | Technology |
| --------------- | -------------------------------------------------------------------- |
| Backend runtime | Node.js 22 + TypeScript, Hono 4.12.23 |
| Database ORM | Drizzle ORM 0.45.2 on MariaDB 11 (via mysql2) |
| Auth | `@hono/oidc-auth` 1.8.3 — authorization code + PKCE against Authelia |
| Calendar | tsdav 2.2.2 (CalDAV) + ical.js 2.2.1 against Fastmail |
| Push | web-push 3.6.7 (VAPID) |
| Live sync | Server-Sent Events + Redis 7 pub/sub |
| Frontend | React 19, Vite 8, vite-plugin-pwa 1.3, TanStack Query 5, Zustand 5 |
| Calendar UI | Schedule-X 4.6 |
## Calendar Integration
@@ -129,6 +130,7 @@ Publishing happens automatically on every push to `main` — i.e. when a PR merg
**Image:** `git.bergerhouse.net/luckberg/familysync-api`
**Tags (two per release):**
- `:latest` — moving pointer for easy pulls
- `:<MILESTONE>-<shortsha>` — immutable, rollback-traceable (e.g. `v1.1-98acff8`)