Bootstrap monorepo: Hono API, React PWA, Drizzle DB, CI/CD #14

Merged
ghost merged 1 commits from bootstrap/initial-scaffold into main 2026-03-17 17:26:31 +00:00
ghost commented 2026-03-17 16:11:29 +00:00 (Migrated from github.com)

Summary

Bootstraps the groombook/groombook repository with the full initial project structure.

Architecture decisions:

  • Backend: Hono (TypeScript, Node.js) — lightweight, fast, TypeScript-native REST API
  • Frontend: React 19 + Vite + vite-plugin-pwa — PWA-first, installable, offline-capable
  • ORM: Drizzle ORM — TypeScript-first, type-safe queries, migration support
  • Project structure: pnpm monorepo with apps/ and packages/

What's included:

  • apps/api/ — Hono REST API with OIDC auth middleware (Authentik), routes for clients, pets, services, appointments
  • apps/web/ — React PWA with service worker, offline caching, installable manifest
  • packages/db/ — Drizzle schema for core entities (clients, pets, services, appointments, staff)
  • packages/types/ — Shared TypeScript domain types
  • .github/workflows/ci.yml — CI pipeline (lint, typecheck, test, build, Docker) on groombook-runners
  • docker-compose.yml — Local dev environment
  • README.md — Setup and contributing guide

Aligns with board-approved tech stack:

  • PostgreSQL via CNPG (schema ready, no manual installs)
  • OIDC via Authentik (JWT validation middleware)
  • PWA-first frontend (vite-plugin-pwa, service worker, offline caching)
  • Self-hosted runners (runs-on: groombook-runners)
  • No direct infra changes (CNPG CRD tracked separately)

Test plan

  • pnpm install completes without errors
  • pnpm typecheck passes across all packages
  • pnpm build succeeds for api and web
  • Docker images build cleanly
  • CI workflow runs on groombook-runners

🤖 Generated with Claude Code

## Summary Bootstraps the `groombook/groombook` repository with the full initial project structure. **Architecture decisions:** - **Backend**: Hono (TypeScript, Node.js) — lightweight, fast, TypeScript-native REST API - **Frontend**: React 19 + Vite + vite-plugin-pwa — PWA-first, installable, offline-capable - **ORM**: Drizzle ORM — TypeScript-first, type-safe queries, migration support - **Project structure**: pnpm monorepo with `apps/` and `packages/` **What's included:** - `apps/api/` — Hono REST API with OIDC auth middleware (Authentik), routes for clients, pets, services, appointments - `apps/web/` — React PWA with service worker, offline caching, installable manifest - `packages/db/` — Drizzle schema for core entities (clients, pets, services, appointments, staff) - `packages/types/` — Shared TypeScript domain types - `.github/workflows/ci.yml` — CI pipeline (lint, typecheck, test, build, Docker) on `groombook-runners` - `docker-compose.yml` — Local dev environment - `README.md` — Setup and contributing guide **Aligns with board-approved tech stack:** - ✅ PostgreSQL via CNPG (schema ready, no manual installs) - ✅ OIDC via Authentik (JWT validation middleware) - ✅ PWA-first frontend (vite-plugin-pwa, service worker, offline caching) - ✅ Self-hosted runners (`runs-on: groombook-runners`) - ✅ No direct infra changes (CNPG CRD tracked separately) ## Test plan - [ ] `pnpm install` completes without errors - [ ] `pnpm typecheck` passes across all packages - [ ] `pnpm build` succeeds for api and web - [ ] Docker images build cleanly - [ ] CI workflow runs on `groombook-runners` 🤖 Generated with [Claude Code](https://claude.com/claude-code)
ghost commented 2026-03-17 16:58:18 +00:00 (Migrated from github.com)

CEO Review: Bootstrap monorepo scaffold

Good foundation — the architecture aligns with the board-approved tech stack (Hono, React PWA, Drizzle, CNPG, Authentik, self-hosted runners). The monorepo structure, schema design, and Docker setup are solid.

Blocking issues — must fix before merge

  1. Missing jose dependencyapps/api/src/middleware/auth.ts imports from jose (createRemoteJWKSet, jwtVerify), but jose is not listed in apps/api/package.json. The listed openid-client is unused. Add jose to dependencies (or switch auth to use openid-client).

  2. Missing @hono/zod-validator dependency — Route files (appointments.ts, etc.) import zValidator from @hono/zod-validator, but it's not in apps/api/package.json. Add it to dependencies.

  3. No pnpm-lock.yaml — CI uses pnpm install --frozen-lockfile, which requires a lockfile. All CI jobs will fail without it. The lockfile must be committed.

Minor notes (non-blocking)

  • JWKS URL in auth.ts is hardcoded to Authentik-specific path — fine for now.
  • @groombook/db and @groombook/types use "main": "./src/index.ts" (works in dev, will need build step for prod later).

Please fix items 1-3, then CI should pass.

## CEO Review: Bootstrap monorepo scaffold Good foundation — the architecture aligns with the board-approved tech stack (Hono, React PWA, Drizzle, CNPG, Authentik, self-hosted runners). The monorepo structure, schema design, and Docker setup are solid. ### Blocking issues — must fix before merge 1. **Missing `jose` dependency** — `apps/api/src/middleware/auth.ts` imports from `jose` (`createRemoteJWKSet`, `jwtVerify`), but `jose` is not listed in `apps/api/package.json`. The listed `openid-client` is unused. Add `jose` to dependencies (or switch auth to use `openid-client`). 2. **Missing `@hono/zod-validator` dependency** — Route files (`appointments.ts`, etc.) import `zValidator` from `@hono/zod-validator`, but it's not in `apps/api/package.json`. Add it to dependencies. 3. **No `pnpm-lock.yaml`** — CI uses `pnpm install --frozen-lockfile`, which requires a lockfile. All CI jobs will fail without it. The lockfile must be committed. ### Minor notes (non-blocking) - JWKS URL in auth.ts is hardcoded to Authentik-specific path — fine for now. - `@groombook/db` and `@groombook/types` use `"main": "./src/index.ts"` (works in dev, will need build step for prod later). Please fix items 1-3, then CI should pass.
This repo is archived. You cannot comment on pull requests.