2025-06-12 - 2026-06-12

Overview

280 Active Pull Requests
63 Active Issues
Excluding merges, 8 authors have pushed 104 commits to main and 552 commits to all branches. On main, 169 files have changed and there have been 37843 additions and 3555 deletions.

280 Pull requests merged by 4 users

Merged #434 GRO-1636: seed.ts creates Better Auth credential accounts for UAT personas 2026-05-24 04:25:10 +00:00

Merged #433 promote: dev → uat (GRO-1489 lint fixes) 2026-05-23 19:27:34 +00:00

Merged #429 fix(GRO-1489): resolve 7 lint errors blocking dev CI 2026-05-23 19:10:13 +00:00

Merged #432 docs: add MCP-driven execution method to UAT playbook (GRO-1502) 2026-05-22 11:48:03 +00:00

Merged #431 Promote dev → uat: fix(e2e) PLAYWRIGHT_BASE_URL + host.docker.internal (GRO-1496) 2026-05-21 21:04:21 +00:00

Merged #430 fix(e2e): respect PLAYWRIGHT_BASE_URL env var and add host.docker.internal resolution 2026-05-21 21:04:05 +00:00

Merged #428 promote: dev → uat (GRO-1369 types sync) 2026-05-21 20:53:20 +00:00

Merged #427 fix(GRO-1369): add missing sizeCategory/coatType/bufferMinutes to @groombook/types 2026-05-21 20:00:40 +00:00

Merged #426 fix(GRO-1368): remove unused getDb import from consent.ts 2026-05-21 19:51:09 +00:00

Merged #423 fix(ci): Docker push auth + E2E DinD networking for Gitea 2026-05-21 00:43:08 +00:00

Merged #425 promote: dev → uat (GRO-1248 path prefix fix) 2026-05-20 13:01:27 +00:00

Merged #407 fix: correct apps/ path prefix in promote workflows (GRO-1248) 2026-05-20 13:01:11 +00:00

Merged #424 fix(ci): use REGISTRY_TOKEN + E2E DinD networking on main 2026-05-20 12:10:22 +00:00

Merged #411 docs: archive monorepo and link to successor repos (GRO-1081) 2026-05-20 12:10:20 +00:00

Merged #422 chore: migrate .github/workflows to .gitea/workflows 2026-05-20 01:34:08 +00:00

Merged #420 chore: promote dev → uat (GRO-1289 CI path fix) 2026-05-14 21:03:16 +00:00

Merged #418 fix(GRO-1289): correct infra repo paths in ci.yml Update Infra Image Tags job 2026-05-14 20:55:50 +00:00

Merged #419 chore: promote dev to uat (GRO-1287 ci.yml path fix) 2026-05-14 20:49:13 +00:00

Merged #417 fix: correct infra repo paths in ci.yml Update Infra Image Tags job 2026-05-14 20:37:48 +00:00

Merged #416 chore: promote dev to uat — VITE_API_URL fix (GRO-1280) 2026-05-14 20:32:09 +00:00

Merged #414 fix: correct infra paths in promote-to-uat workflow 2026-05-14 20:16:23 +00:00

Merged #415 fix: resolve VITE_API_URL hardcoding that breaks CI E2E (GRO-1280) 2026-05-14 20:11:31 +00:00

Merged #413 promote: dev → uat (GRO-1236 OAuth callback fix) 2026-05-14 19:36:14 +00:00

Merged #403 fix(GRO-1236): OAuth callback session not established for uat-tester 2026-05-14 19:25:37 +00:00

Merged #408 promote: dev → uat (GRO-1207 portal Communication tab real backend) 2026-05-14 16:59:10 +00:00

Merged #409 docs(UAT_PLAYBOOK): add §4.20 Staff Messages test cases 2026-05-14 16:45:02 +00:00

Merged #405 feat(GRO-106): staff messages page 2026-05-14 16:23:27 +00:00

Merged #406 fix(ci): correct infra repo paths in promote workflows 2026-05-14 16:12:52 +00:00

Merged #398 feat(GRO-106): portal Communication tab — real backend 2026-05-14 16:07:33 +00:00

Merged #404 chore: promote dev → uat (GRO-1212 portal test mock fix) 2026-05-14 12:08:39 +00:00

Merged #402 fix(GRO-1212/GRO-1213): fix DB mock imports in portal and waitlist test files 2026-05-14 09:08:27 +00:00

Merged #400 promote: dev → uat (GRO-1208 conversations API + GRO-1211 telnyx webhook fix) 2026-05-14 08:45:38 +00:00

Merged #401 fix(GRO-1211): skip auth middleware for /api/webhooks/* routes 2026-05-14 08:39:43 +00:00

Merged #399 feat(GRO-1208): conversations API route + staffReadAt migration 2026-05-14 07:53:25 +00:00

Merged #393 chore: promote dev → uat (fix auth rate limits) 2026-05-11 03:40:46 +00:00

Merged #392 fix(auth): override Better Auth sign-in rate limit defaults 2026-05-11 03:31:32 +00:00

Merged #391 Promote dev → uat: TELNYX_WEBHOOK_SECRET .env.example 2026-05-11 02:27:54 +00:00

Merged #390 Add TELNYX_WEBHOOK_SECRET to .env.example 2026-05-11 02:03:55 +00:00

Merged #388 Promote dev → uat: inbound Telnyx webhook FK fix (GRO-1002) 2026-05-11 00:51:17 +00:00

Merged #378 feat(GRO-106): inbound Telnyx webhook + persistence 2026-05-11 00:43:40 +00:00

Merged #386 chore: promote dev → uat (GRO-1036 security fixes) 2026-05-04 22:53:59 +00:00

Merged #385 fix(GRO-1036): secure stats endpoint + restore refund preconditions 2026-05-04 22:43:42 +00:00

Merged #384 promote dev → uat: portal mobile overflow fix (GRO-730) 2026-05-04 21:25:36 +00:00

Merged #372 fix: portal mobile overflow — hide scrollbar on tab rows (GRO-730) 2026-05-04 21:02:38 +00:00

Merged #381 promote dev → uat: 10DLC pilot registration runbook (GRO-106) 2026-05-04 20:55:50 +00:00

Merged #382 feat(GRO-984): outbound SMS persistence 2026-05-04 17:55:47 +00:00

Merged #375 docs(GRO-106): 10DLC pilot registration runbook 2026-05-04 15:58:12 +00:00

Merged #380 promote: dev → uat (GRO-693 E2E mock fixes) 2026-05-04 15:16:52 +00:00

Merged #349 fix(E2E): add missing API mocks for invoices stats and portal billing 2026-05-04 15:05:40 +00:00

Merged #376 promote: GRO-106 messaging schema → UAT 2026-05-04 02:25:32 +00:00

Merged #374 feat(GRO-106): messaging schema + migrations 2026-05-04 02:24:40 +00:00

Merged #373 promote: uat → main (GRO-887/GRO-958 chart hygiene) 2026-05-03 18:16:04 +00:00

Merged #371 chore(uat): promote dev → uat (includes GRO-887 chart hygiene) 2026-05-03 17:58:15 +00:00

Merged #369 fix(GRO-887): wire OIDC + BETTER_AUTH env vars into API deployment 2026-05-03 17:44:10 +00:00

Merged #367 fix(GRO-818): UAT defects — refund button, cardLast4, manual refund, seed data 2026-05-02 21:02:32 +00:00

Merged #366 fix(GRO-898): update CI to deploy on dev branch pushes 2026-04-24 15:53:15 +00:00

Merged #365 promote: dev → uat (GRO-876 refund button fix) 2026-04-24 15:27:25 +00:00

Merged #361 fix(GRO-876): wire up refund button in InvoiceDetailModal (cherry-pick to dev) 2026-04-24 15:22:26 +00:00

Merged #364 promote: dev → uat (GRO-766 portal mobile overflow fix) 2026-04-24 15:02:14 +00:00

Merged #362 fix(GRO-766): portal mobile overflow CSS fix at 390px viewport 2026-04-24 14:57:57 +00:00

Merged #358 fix(gro-609): cherry-pick refund/stats fixes to dev 2026-04-23 22:38:13 +00:00

Merged #359 fix(GRO-890): populate stripePaymentIntentId on paid seed invoices 2026-04-23 22:36:27 +00:00

Merged #357 fix(gro-609): include stripePaymentIntentId in invoice list and wrap stats endpoint in try/catch 2026-04-23 14:01:42 +00:00

Merged #356 promote: uat → main (GRO-865 logo proxy mixed content fix) 2026-04-22 03:50:15 +00:00

Merged #354 promote: dev → uat (GRO-870 branding logo proxy fix) 2026-04-22 03:49:30 +00:00

Merged #353 fix(GRO-870): /api/branding returns raw S3 URL — add public logo proxy 2026-04-22 03:21:15 +00:00

Merged #352 fix(GRO-867): proxy logo download through API server — eliminate mixed content 2026-04-22 02:48:54 +00:00

Merged #339 Promote dev → uat 2026-04-20 14:06:22 +00:00

Merged #345 fix(e2e): mock /api/invoices/stats/summary to prevent Invoices page crash 2026-04-20 13:59:11 +00:00

Merged #346 fix(GRO-816): fix PetProfiles crash from appointments response shape change 2026-04-19 11:02:07 +00:00

Merged #341 feat(gro-609): add refund handling and payment stats to admin 2026-04-19 02:05:06 +00:00

Merged #340 fix: allow groomer role to access invoices endpoint 2026-04-18 11:00:57 +00:00

Merged #338 chore(GRO-720): harden .gitignore against agent runtime leaks 2026-04-18 10:23:44 +00:00

Merged #312 fix(GRO-666): leave staff.user_id NULL in seed so middleware can auto-link by email 2026-04-18 10:18:39 +00:00

Merged #335 Promote dev → uat: ARIA modal fix + tip split atomicity 2026-04-17 22:58:00 +00:00

Merged #334 promote: uat → main (GRO-778, GRO-773, GRO-766, GRO-743) 2026-04-17 22:51:38 +00:00

Merged #333 feat(GRO-785): validate tip split totals before marking invoice paid 2026-04-17 22:50:45 +00:00

Merged #328 promote: GRO-766, GRO-743, GRO-773, GRO-778 fixes to UAT 2026-04-17 22:09:41 +00:00

Merged #329 fix(GRO-778): exempt /dev-session from validatePortalSession middleware 2026-04-17 21:54:33 +00:00

Merged #327 fix(GRO-772): raise auth rate-limit and exempt get-session 2026-04-17 18:04:41 +00:00

Merged #323 fix(GRO-766): prevent horizontal overflow on portal mobile pages 2026-04-17 17:40:25 +00:00

Merged #316 fix(GRO-743): client detail page fetches on direct URL navigation 2026-04-17 17:23:09 +00:00

Merged #326 promote: dev → uat (GRO-769 S3 mixed content fix) 2026-04-17 17:19:40 +00:00

Merged #325 fix(GRO-769): proxy logo uploads through API server to fix mixed content 2026-04-17 17:13:45 +00:00

Merged #324 promote: dev → uat (GRO-642 modal a11y + GRO-751 tip split validation) 2026-04-17 16:05:38 +00:00

Merged #321 fix(GRO-642): add ARIA dialog attributes to remaining modals 2026-04-17 15:55:03 +00:00

Merged #320 fix(GRO-751): add server-side tip split validation to markPaid 2026-04-17 12:33:43 +00:00

Merged #317 chore(uat): promote dev → uat (GRO-628 + batched) 2026-04-17 12:31:53 +00:00

Merged #319 fix(GRO-749): use correct impersonation header in portal Appointments 2026-04-17 12:23:44 +00:00

Merged #318 Promote dev → main: GRO-639, GRO-642, GRO-666, GRO-724 2026-04-17 11:43:47 +00:00

Merged #306 fix(reminders): replace N+1 per-appointment queries with single JOIN query 2026-04-17 10:45:17 +00:00

Merged #313 fix(GRO-628): implement frontend error handling and code quality fixes 2026-04-17 07:12:27 +00:00

Merged #315 fix(GRO-643): add appointment indexes to schema and S3 error handling 2026-04-17 06:42:01 +00:00

Merged #314 fix(GRO-666): leave staff.user_id NULL in seed so middleware can auto-link by email 2026-04-17 06:35:33 +00:00

Merged #308 fix(GRO-724): rename dev hostname to dev.groombook.dev 2026-04-16 18:58:03 +00:00

Merged #305 fix(GRO-624): input validation across 5 API routes 2026-04-16 12:34:57 +00:00

Merged #300 feat(GRO-653): add portal session middleware and server-side audit logging 2026-04-16 11:20:36 +00:00

Merged #304 docs: add CONTRIBUTING.md with branch strategy (GRO-702) 2026-04-16 10:59:16 +00:00

Merged #299 fix(GRO-640): replace N+1 queries in sendConfirmationEmail with single JOIN query 2026-04-16 10:14:07 +00:00

Merged #297 GRO-643: Add missing DB indexes, NOT NULL constraint on clients.email, and S3 error handling 2026-04-16 05:19:00 +00:00

Merged #302 fix(GRO-689): only validate authorizationUrl hostname, add OIDC_INTERNAL_BASE in dev 2026-04-16 05:18:58 +00:00

Merged #303 feat(GRO-690): add groomer persona seed support via env vars 2026-04-16 05:11:07 +00:00

Merged #296 fix(seed): populate userId for UAT staff and SEED_ADMIN_EMAIL staff 2026-04-16 04:17:14 +00:00

Merged #288 fix(GRO-634): implement auth & authorization security hardening (8 findings) 2026-04-15 07:00:24 +00:00

Merged #278 Fix invoice status transitions, tip-split validation, refund idempotency, and tip-split response format 2026-04-15 06:04:38 +00:00

Merged #295 fix(auth): add email-based staff auto-linking in resolveStaffMiddleware 2026-04-15 05:50:59 +00:00

Merged #279 fix(GRO-638): appointment scheduling correctness and client deletion integrity 2026-04-15 05:03:11 +00:00

Merged #294 fix(GRO-636): input validation fixes for 5 API routes 2026-04-15 04:26:21 +00:00

Merged #289 fix(GRO-655): create corepack cache dir in builder stage 2026-04-15 02:08:55 +00:00

Merged #292 feat(GRO-631): add graceful shutdown to API server 2026-04-15 01:54:01 +00:00

Merged #291 fix: set Manager 1 as super user in UAT seed to resolve OOBE redirect 2026-04-15 00:47:09 +00:00

Merged #290 fix(api): add server-side pagination to churn risk query (GRO-641) 2026-04-15 00:32:11 +00:00

Merged #287 fix: add corepack cache dir to Dockerfile (GRO-655) 2026-04-14 23:02:37 +00:00

Merged #285 fix(GRO-623): implement groomer data isolation in appointmentGroups, groomingLogs + batherStaffId conflict check 2026-04-14 18:15:05 +00:00

Merged #284 fix(GRO-631): pin pnpm version and guard against duplicate CD PRs 2026-04-14 17:41:07 +00:00

Merged #282 fix(GRO-631): add tag validation to promote-prod workflow 2026-04-14 16:40:08 +00:00

Merged #281 feat(GRO-631): add security headers to nginx.conf 2026-04-14 16:25:57 +00:00

Merged #275 feat(GRO-607): Stripe Elements payment UI replacing mock flow 2026-04-14 08:27:03 +00:00

Merged #273 fix(GRO-574): switch rate limit to memory storage to unblock UAT 2026-04-12 12:20:00 +00:00

Merged #268 feat(GRO-565): Better Auth Phase 3 - password change, OIDC discovery, session cleanup, email verification 2026-04-12 11:29:07 +00:00

Merged #271 Add rate_limit table migration for Better Auth (GRO-574) 2026-04-12 03:30:45 +00:00

Merged #266 fix(GRO-564): prevent admin nav logout button overflow 2026-04-12 02:31:46 +00:00

Merged #265 feat(GRO-564): Better Auth Phase 2 Security Hardening 2026-04-11 23:07:37 +00:00

Merged #264 fix(GRO-563): Better Auth Phase 1 - Stabilize OAuth Login 2026-04-11 21:07:41 +00:00

Merged #263 fix(e2e): use domcontentloaded instead of networkidle in admin invoices test 2026-04-11 16:50:35 +00:00

Merged #261 fix(gro-558): add paginated mock for /api/invoices 2026-04-11 16:38:51 +00:00

Merged #260 fix(api): move Google/GitHub from plugins[] to socialProviders{} in Better-Auth config 2026-04-11 15:25:03 +00:00

Merged #258 GRO-551: Add social auth env vars to UAT api-patch.yaml 2026-04-11 13:21:01 +00:00

Merged #255 fix(GRO-395): Add demo pet images to seed data 2026-04-11 03:01:15 +00:00

Merged #257 Fix GitHub/Google OAuth redirect URI configuration (GRO-546) 2026-04-11 03:01:13 +00:00

Merged #256 fix(GRO-540): add missing OIDC env vars to prod API deployment 2026-04-10 22:04:52 +00:00

Merged #253 feat(GRO-537): add UAT user personas to seed script 2026-04-10 20:23:16 +00:00

Merged #251 feat(db): add UAT persona staff records to seed script (GRO-528) 2026-04-10 16:16:58 +00:00

Merged #252 fix: remove hardcoded seed image in promote-to-uat workflow (GRO-534) 2026-04-10 10:53:49 +00:00

Merged #250 Parameterize seed script with SEED_PROFILE env var 2026-04-10 04:00:37 +00:00

Merged #249 feat: Add Google/GitHub social login providers for Demo environment (GRO-531) 2026-04-10 02:37:56 +00:00

Merged #246 feat: implement SEED_ADMIN_EMAIL support for admin staff survival on demo resets 2026-04-09 22:45:52 +00:00

Merged #245 fix: remove reset-demo-data CronJob from prod — move to dev/UAT only 2026-04-08 19:54:44 +00:00

Merged #242 fix: set isSuperUser=false for Jordan Lee in full seed path 2026-04-08 03:05:15 +00:00

Merged #240 chore: implement hourly reset CronJob for prod and UAT (GRO-507) 2026-04-07 21:49:19 +00:00

Merged #241 GRO-505: Use paginated invoices API, eliminate over-fetching 2026-04-07 21:49:17 +00:00

Merged #238 feat(invoices): add indexes, pagination, and client name enrichment (GRO-504) 2026-04-07 19:43:07 +00:00

Merged #236 fix(web): resolve OOBE loop after setup completion (GRO-494) 2026-04-05 23:19:27 +00:00

Merged #235 fix(web): redirect authenticated admin users to /admin 2026-04-05 21:35:06 +00:00

Merged #234 fix(api): exempt OOBE setup from staff middleware and auto-create staff (GRO-485) 2026-04-05 20:22:41 +00:00

Merged #233 fix(ci): remove dead kubectl steps from promote workflows (GRO-482) 2026-04-05 17:33:33 +00:00

Merged #232 fix(ci): delete completed Jobs before Flux reconciles (GRO-481) 2026-04-05 15:57:29 +00:00

Merged #231 fix(api): auto-link staff to Better-Auth user via email on first SSO login (GRO-480) 2026-04-05 15:05:51 +00:00

Merged #230 fix(ci): rename base Jobs in promote-to-uat and promote-prod workflows (GRO-311) 2026-04-05 11:31:08 +00:00

Merged #228 fix(GRO-472): exclude OAuth callback from service worker caching 2026-04-05 08:55:07 +00:00

Merged #226 fix(api): remove duplicate authProviderRouter registration 2026-04-04 23:29:18 +00:00

Merged #225 fix(db): generate unique random salt per encryptSecret call (GRO-453) 2026-04-04 22:22:51 +00:00

Merged #223 fix(db): use random per-encryption salt in crypto.ts (GRO-453) 2026-04-04 14:06:14 +00:00

Merged #224 fix(api): use correct schema in POST /admin/auth-provider/test (GRO-454) 2026-04-04 13:34:56 +00:00

Merged #222 fix(GRO-451): re-seal UAT secrets with correct cluster certificate 2026-04-04 12:34:28 +00:00

Merged #221 fix(api): wrap encryptSecret in try/catch to return proper JSON error (GRO-441) 2026-04-04 00:24:40 +00:00

Merged #220 chore(GRO-429): add promote-to-uat workflow for CTO-triggered UAT promotion 2026-04-03 20:50:34 +00:00

Merged #218 fix(GRO-392): reinitAuth on config change, SSRF timeout, and trailing-slash URL fix 2026-04-03 13:28:38 +00:00

Merged #217 feat(GRO-390): restart-on-save for auth provider config 2026-04-03 08:48:28 +00:00

Merged #216 feat(web): auth provider section in settings page (GRO-391) 2026-04-03 08:16:17 +00:00

Merged #215 fix(api): needsSetup guard ordering in setup auth endpoints (GRO-392 UAT fix) 2026-04-03 07:17:13 +00:00

Merged #214 feat(oobe): conditional auth provider bootstrap step (GRO-392) 2026-04-03 01:55:13 +00:00

Merged #213 fix(api): correct authProvider unit test mocks 2026-04-03 01:26:29 +00:00

Merged #211 fix(web): services toggle + devFetch guard (GRO-404, GRO-406) 2026-04-02 20:20:19 +00:00

Merged #212 feat(api): DB-first auth config loading with env-var fallback (GRO-389) 2026-04-02 19:58:17 +00:00

Merged #210 feat(db): auth_provider_config table + AES-256-GCM encryption helpers 2026-04-02 17:49:34 +00:00

Merged #209 Add GroomBook logo and demo pet images 2026-04-02 17:10:54 +00:00

Merged #206 fix(api): enforce requireSuperUser on settings PATCH and fix dev-mode auth bypass 2026-04-02 12:57:56 +00:00

Merged #205 fix(web): clear server session on dev login user switch 2026-04-02 01:44:28 +00:00

Merged #203 fix(db): move impersonation TRUNCATE before staff upsert to avoid FK violation 2026-04-02 01:03:36 +00:00

Merged #202 fix(e2e): mock /api/setup/status to prevent redirect to /setup 2026-04-01 23:38:27 +00:00

Merged #200 fix(db): add impersonation_sessions to seed TRUNCATE chain (GRO-372) 2026-04-01 21:24:58 +00:00

Merged #201 fix: enable Go to Dashboard button on setup wizard final step 2026-04-01 21:15:06 +00:00

Merged #198 fix(db): add migration 0020 UNIQUE(name) + align admin seed ON CONFLICT 2026-04-01 20:06:01 +00:00

Merged #199 fix(db): seed staff_id FK fix (GRO-369) 2026-04-01 14:19:49 +00:00

Merged #197 fix(db): truncate downstream tables before services dedup to avoid FK violation (GRO-365) 2026-04-01 13:21:31 +00:00

Merged #196 fix(db): cast uuid to text for MIN() in services dedup query (GRO-364) 2026-04-01 12:53:35 +00:00

Merged #187 feat(e2e): add Playwright E2E test suite for critical user journeys (GRO-306) 2026-04-01 12:37:44 +00:00

Merged #185 fix(db): idempotent services seed — no more duplicate services 2026-04-01 12:28:35 +00:00

Merged #195 fix(ci): replace yq //= with expanded form (.field // default) 2026-04-01 12:13:41 +00:00

Merged #194 fix(portal): prevent /login redirect for client dev users (GRO-354) 2026-04-01 10:35:46 +00:00

Merged #193 fix(ci): export SHORT_SHA + fix(db): deterministic staff IDs (GRO-355) 2026-04-01 10:21:41 +00:00

Merged #191 fix(portal): redirect unauthenticated users to login — never show portal chrome (GRO-309) 2026-04-01 03:50:40 +00:00

Merged #186 fix(api): use UTC in reports date helpers — reports show no data 2026-03-31 19:47:31 +00:00

Merged #190 fix(ci): use unique Job names per deploy to prevent Flux immutability errors (GRO-311) 2026-03-31 02:29:35 +00:00

Merged #183 fix(staff): count only active super users in last-super-user guardrail (GRO-206) 2026-03-30 18:25:04 +00:00

Merged #184 fix(portal): wire dev client login to portal session 2026-03-30 18:25:01 +00:00

Merged #182 fix(db): seed ON CONFLICT target uses clients.id instead of non-unique clients.email 2026-03-30 14:44:38 +00:00

Merged #176 fix(db): guarantee 5 UAT test clients with pending invoices (GRO-290) 2026-03-30 13:40:15 +00:00

Merged #178 ci: add workflow_dispatch trigger for manual CI runs 2026-03-30 13:12:23 +00:00

Merged #173 fix(web): portal header fixes (GRO-286) + password/retry fixes (GRO-287) 2026-03-30 13:04:47 +00:00

Merged #172 fix: show Pay Now button during impersonation 2026-03-30 10:56:21 +00:00

Merged #168 fix: billing portal session header and response format mismatch 2026-03-30 01:54:11 +00:00

Merged #166 fix: show login page before needsSetup guard for unauthenticated users 2026-03-29 20:58:02 +00:00

Merged #167 fix(portal): wire Pay Now button with payment modal (GRO-261) 2026-03-29 20:24:56 +00:00

Merged #162 fix(portal): wire Rebook Now button + date validation (GRO-265, GRO-266) 2026-03-29 15:14:44 +00:00

Merged #148 fix: increase deployment rollout timeout to 300s (GRO-147) 2026-03-29 14:07:21 +00:00

Merged #158 fix(web): set VITE_API_URL= empty for production builds 2026-03-29 13:08:59 +00:00

Merged #157 ci: add production promotion workflow 2026-03-29 12:36:08 +00:00

Merged #156 ci: update cd job to target dev overlay 2026-03-29 09:46:37 +00:00

Merged #145 fix(db): make seed script idempotent (GRO-179) 2026-03-29 08:11:34 +00:00

Merged #152 feat(portal): replace mock data with real session-driven API calls 2026-03-29 07:08:35 +00:00

Merged #147 feat: add cd job to update groombook/infra image tags on main merge (GRO-178) 2026-03-28 23:19:29 +00:00

Merged #144 fix(portal): implement Customer Portal reschedule button and modal 2026-03-28 22:10:50 +00:00

Merged #150 feat(schema): add is_super_user to staff table 2026-03-28 20:39:46 +00:00

Merged #142 fix(portal): disable non-functional stub buttons in customer portal 2026-03-28 08:24:32 +00:00

Merged #136 feat(api): Better-Auth integration — sessions, auth middleware, staff resolution, RBAC tests (GRO-118) 2026-03-28 03:50:45 +00:00

Merged #141 fix(gro-158): admin page blank — TypeError: b.filter is not a function 2026-03-28 02:53:20 +00:00

Merged #140 fix(rbac): GRO-153 — resolveStaffMiddleware fallback for dev login 2026-03-28 02:50:02 +00:00

Merged #138 fix(auth): dev login 403 — resolve staff by id, not oidcSub (GRO-150) 2026-03-28 01:48:16 +00:00

Merged #137 fix(web): import App.tsx (not App.js) in App.test.tsx 2026-03-28 00:45:21 +00:00

Merged #135 docs: update license reference in README to AGPL-3.0 2026-03-27 18:55:05 +00:00

Merged #132 Add Helm chart scaffold with Chart.yaml, values.yaml, and helpers 2026-03-27 18:36:29 +00:00

Merged #134 chore: add AGPL-3.0 license and update package.json license fields 2026-03-27 18:22:19 +00:00

Merged #126 Update README with marketing positioning and key features 2026-03-27 17:12:13 +00:00

Merged #129 fix(ci): use correct postgres secret for dev deploys 2026-03-27 16:54:03 +00:00

Merged #128 fix(gro66): E2E selector ambiguity in impersonation.spec.ts 2026-03-27 14:23:19 +00:00

Merged #120 feat: auto-select client from GlobalSearch highlight param (GRO-46) 2026-03-27 07:16:53 +00:00

Merged #116 feat: iCal calendar feed (GRO-107) 2026-03-27 02:37:07 +00:00

Merged #117 fix(gro-38): prod/demo auth and API-based seed 2026-03-26 20:51:08 +00:00

Merged #109 feat: customer-facing appointment notes (GRO-106) 2026-03-26 08:24:21 +00:00

Merged #113 feat: add PR preview deployment to groombook-dev 2026-03-26 03:56:50 +00:00

Merged #112 chore: remove docs/ folder (migrated to groombook.github.io) 2026-03-25 06:39:51 +00:00

Merged #108 Add marketing docs for GitHub Pages site 2026-03-25 02:03:16 +00:00

Merged #104 feat: appointment confirmation and cancellation (GH #98) 2026-03-24 21:15:07 +00:00

Merged #102 feat: pet photo upload via presigned S3 URLs (GH #93) 2026-03-22 19:45:41 +00:00

Merged #101 test(e2e): add login and impersonation test coverage (GRO-77) 2026-03-22 15:43:01 +00:00

Merged #103 feat: quick-find search for clients and pets (GH #97) 2026-03-22 08:22:46 +00:00

Merged #100 feat: unify site theming via CSS custom properties (GH #91) 2026-03-22 04:17:30 +00:00

Merged #99 test(db): add unit tests for test factories 2026-03-22 00:04:39 +00:00

Merged #96 feat(db): add indexes on impersonation tables 2026-03-21 23:44:19 +00:00

Merged #92 feat: deterministic seed, impersonation migration, test factories (GRO-110) 2026-03-21 23:18:36 +00:00

Merged #89 feat: RBAC middleware and role-based route guards (Phase 1) 2026-03-21 19:31:18 +00:00

Merged #85 test: Phase 1 unit tests for API routes and web components 2026-03-21 03:05:38 +00:00

Merged #83 docs: add staff impersonation to README features list 2026-03-21 03:05:31 +00:00

Merged #82 fix: redirect to /admin/clients after ending impersonation 2026-03-20 23:37:04 +00:00

Merged #78 feat: Wire customer portal impersonation to real backend API 2026-03-20 23:17:11 +00:00

Merged #75 feat: Staff Impersonation backend + frontend wiring 2026-03-20 08:16:09 +00:00

Merged #73 ci: remove deploy job in favor of Flux Image Automation 2026-03-19 21:12:02 +00:00

Merged #71 ci: switch Docker image tags to CalVer versioning 2026-03-19 20:56:10 +00:00

Merged #70 ci: auto-update infra image tags after Docker push 2026-03-19 20:18:05 +00:00

Merged #69 feat: client disable/deletion with soft-delete 2026-03-19 20:03:18 +00:00

Merged #68 fix(e2e): block service workers to prevent route mock bypass 2026-03-19 13:57:47 +00:00

Merged #64 feat: add View as Customer impersonation button on Clients page 2026-03-19 12:47:26 +00:00

Merged #63 feat: customizable business branding (name, logo, colors) 2026-03-19 11:07:07 +00:00

Merged #62 Add dev/demo login selector for quick user switching 2026-03-19 07:35:07 +00:00

Merged #59 Improve admin UI visual design — polish look and feel 2026-03-19 03:33:35 +00:00

Merged #57 feat: flip routing — customer portal at /, admin at /admin 2026-03-19 02:47:19 +00:00

Merged #55 fix: render customer portal as full-page layout 2026-03-19 02:05:08 +00:00

Merged #54 feat: customer portal with 7 sections and staff impersonation 2026-03-19 00:23:49 +00:00

Merged #52 fix(packages): reorder exports conditions to fix API crash 2026-03-18 19:47:33 +00:00

Merged #51 fix(reports): add error handler and improve error messages for diagnosis 2026-03-18 13:36:32 +00:00

Merged #50 Fix reports crash on client churn risk query 2026-03-18 13:26:26 +00:00

Merged #48 Add Renovate configuration for dependency management 2026-03-18 11:47:32 +00:00

Merged #45 Fix API crash: reorder Dockerfile to copy dist before pnpm install 2026-03-18 03:44:39 +00:00

Merged #47 fix(e2e): mock reports API with shaped responses in navigation tests 2026-03-18 03:26:54 +00:00

Merged #44 Fix API crash: add exports field and clean runtime image 2026-03-18 03:13:47 +00:00

Merged #43 Add Playwright E2E testing 2026-03-18 02:52:59 +00:00

Merged #42 Set up unit testing infrastructure 2026-03-18 01:55:02 +00:00

Merged #41 Fix tsconfig rootDir for correct dist output paths 2026-03-18 01:52:26 +00:00

Merged #38 Fix Docker build: compile TS packages for runtime 2026-03-18 01:34:26 +00:00

Merged #37 Add seed/migrate Docker stages and CI image push 2026-03-17 23:47:56 +00:00

Merged #36 Add test data seed script 2026-03-17 23:37:18 +00:00

Merged #35 Update CI to push Docker images to ghcr.io 2026-03-17 22:23:33 +00:00

Merged #34 feat: tip and payment splitting between staff roles 2026-03-17 22:03:46 +00:00

Merged #33 feat: multi-groomer calendar view with per-groomer filtering 2026-03-17 21:55:07 +00:00

Merged #32 feat: detailed pet profile attributes and grooming visit history (closes #13) 2026-03-17 21:46:41 +00:00

Merged #31 feat: multi-pet client group booking (closes #10) 2026-03-17 21:36:04 +00:00

Merged #30 feat: reporting dashboard (closes #6) 2026-03-17 21:33:33 +00:00

Merged #29 feat: automated appointment reminders via email 2026-03-17 20:46:49 +00:00

Merged #28 feat: recurring appointments with cascading change propagation 2026-03-17 20:37:33 +00:00

Merged #27 feat: online booking portal (closes #3) 2026-03-17 20:16:12 +00:00

Merged #26 feat: basic POS & invoicing 2026-03-17 20:02:04 +00:00

Merged #25 feat: pet health alerts field and delete actions (closes #2) 2026-03-17 19:40:29 +00:00

Merged #24 fix: appointment conflict detection, soft-delete, and auth guardrail (#18-22) 2026-03-17 19:32:24 +00:00

Merged #23 fix(ci): restore pnpm cache now that lockfile is on main 2026-03-17 19:03:17 +00:00

Merged #16 feat: Docker self-hosting setup 2026-03-17 18:50:07 +00:00

Merged #15 feat: appointment scheduling, client/pet/service/staff CRUD UI 2026-03-17 18:45:28 +00:00

Merged #17 fix(ci): use GitHub-hosted runners until self-hosted are deployed 2026-03-17 18:41:12 +00:00

Merged #14 Bootstrap monorepo: Hono API, React PWA, Drizzle DB, CI/CD 2026-03-17 17:26:31 +00:00

63 Issues closed from 1 user

Closed #227 Service worker intercepts OAuth callback URL, blocking OIDC login 2026-04-20 10:05:27 +00:00

Closed #237 Invoices page slow to load (performance) 2026-04-20 10:05:26 +00:00

Closed #239 feat: Add hourly data reset CronJob for Prod (demo) and UAT 2026-04-16 10:10:43 +00:00

Closed #247 Dev/UAT/Demo data seeding and authentication strategy 2026-04-10 04:00:39 +00:00

Closed #149 OOBE/Super User — Engineering Implementation (GRO-198) 2026-04-01 10:15:33 +00:00

Closed #139 [CRITICAL] App crashes with blank screen after login — all users affected (GRO-150) 2026-03-28 02:54:08 +00:00

Closed #133 Change license from MIT to AGPL-3.0 across all repos 2026-03-27 19:00:56 +00:00

Closed #131 Add Helm chart for Kubernetes deployment 2026-03-27 18:42:29 +00:00

Closed #122 feat: customer appointment confirm/cancel in portal (GRO-47) 2026-03-27 16:57:33 +00:00

Closed #118 Row-level data scoping for groomer role (RBAC Phase 2) 2026-03-27 16:54:11 +00:00

Closed #107 Calendar export (iCal feed) 2026-03-27 10:24:13 +00:00

Closed #114 GitHub Pages outage: docs/ removed, Pages still configured on groombook/groombook 2026-03-27 10:24:12 +00:00

Closed #115 Disable GitHub Pages on groombook/groombook (docs migrated) 2026-03-27 10:24:11 +00:00

Closed #119 Quick-find search: auto-select client from global search result 2026-03-27 07:16:54 +00:00

Closed #105 Waitlist / cancellation backfill 2026-03-26 21:48:13 +00:00

Closed #106 Customer-facing appointment notes 2026-03-26 21:48:11 +00:00

Closed #84 Product Backlog: Prioritized feature roadmap after MVP 2026-03-26 21:38:47 +00:00

Closed #111 Flea Flicker (UAT) needs GitHub App credentials 2026-03-26 03:56:52 +00:00

Closed #80 Set up Playwright E2E tests via MCP 2026-03-24 21:25:32 +00:00

Closed #98 Customer appointment confirmation and cancellation 2026-03-24 21:15:09 +00:00

Closed #93 Pet photo upload: staff and customer portal 2026-03-22 19:45:42 +00:00

Closed #97 Quick-find search for clients and pets 2026-03-22 08:22:47 +00:00

Closed #91 Unify site theming: align staff site with customer portal design, add branding customization 2026-03-22 04:17:31 +00:00

Closed #94 Add unit tests for test factories (packages/db/src/factories.ts) 2026-03-22 00:04:40 +00:00

Closed #95 Add database indexes on impersonation tables 2026-03-21 23:44:19 +00:00

Closed #90 Sample/dev data strategy: deterministic seed, test factories, E2E data 2026-03-21 23:18:37 +00:00

Closed #88 Implement role-based API authorization 2026-03-21 19:31:19 +00:00

Closed #87 Self-hosted runner missing docker compose plugin 2026-03-21 07:42:19 +00:00

Closed #79 Add unit and integration tests for API routes and web components 2026-03-21 03:05:40 +00:00

Closed #81 issue: ending impersonation session 2026-03-20 23:37:05 +00:00

Closed #76 Wire customer portal impersonation to real backend API 2026-03-20 23:17:12 +00:00

Closed #77 Impersonation routes: missing auth checks on 3 endpoints + expiry bug 2026-03-20 08:17:06 +00:00

Closed #74 bug: Staff Impersonation Mode missing from customer portal 2026-03-20 08:16:12 +00:00

Closed #72 Replace CI deploy job with Flux Image Automation 2026-03-19 23:46:40 +00:00

Closed #67 feature: client disable/deletion 2026-03-19 20:03:20 +00:00

Closed #65 E2E: booking flow test fails — time slot buttons not found 2026-03-19 13:57:50 +00:00

Closed #61 Customizable colors, logo, and business name in admin settings 2026-03-19 11:07:08 +00:00

Closed #60 Dev/demo login experience — quick-login and impersonation for demos 2026-03-19 07:35:09 +00:00

Closed #58 Improve UI visual design — less bland, more polished 2026-03-19 03:33:36 +00:00

Closed #56 Flip routing: customer portal at /, admin at /admin 2026-03-19 02:47:21 +00:00

Closed #53 feature: customer portal 2026-03-19 00:23:50 +00:00

Closed #49 issue: reports are failing 2026-03-18 13:26:28 +00:00

Closed #46 E2E test failure: reports page loads 2026-03-18 03:38:56 +00:00

Closed #40 Set up Playwright E2E testing 2026-03-18 02:53:00 +00:00

Closed #39 Set up unit testing infrastructure 2026-03-18 01:55:04 +00:00

Closed #12 Tip and payment splitting between staff roles 2026-03-17 22:03:58 +00:00

Closed #11 Multi-groomer calendar management 2026-03-17 21:55:19 +00:00

Closed #13 Detailed pet profile attributes and grooming preferences 2026-03-17 21:46:42 +00:00

Closed #10 Multi-pet client group booking 2026-03-17 21:36:05 +00:00

Closed #6 Reporting Dashboard 2026-03-17 21:33:35 +00:00

Closed #4 Automated Reminders (SMS & Email) 2026-03-17 20:46:51 +00:00

Closed #9 Recurring appointments with cascading change propagation 2026-03-17 20:37:35 +00:00

Closed #3 Online Booking Portal 2026-03-17 20:16:15 +00:00

Closed #5 Basic POS & Invoicing 2026-03-17 20:02:06 +00:00

Closed #22 Security: AUTH_DISABLED has no production guardrail 2026-03-17 19:32:41 +00:00

Closed #21 Bug: Staff DELETE has no FK protection for existing appointments 2026-03-17 19:32:39 +00:00

Closed #20 Bug: Appointment DELETE permanently removes records instead of soft-delete 2026-03-17 19:32:37 +00:00

Closed #19 Bug: PATCH appointment skips conflict detection when staffId omitted 2026-03-17 19:32:35 +00:00

Closed #18 Bug: Appointment conflict detection race condition 2026-03-17 19:32:26 +00:00

Closed #7 Docker Deployment & Self-Hosting Setup 2026-03-17 18:50:09 +00:00

Closed #8 Service & Pricing Management 2026-03-17 18:46:16 +00:00

Closed #2 Pet & Client Records 2026-03-17 18:46:14 +00:00

Closed #1 Appointment & Schedule Management 2026-03-17 18:46:11 +00:00

63 Issues created by 0 users

Opened #1 Appointment & Schedule Management 2026-03-17 12:07:43 +00:00

Opened #2 Pet & Client Records 2026-03-17 12:07:45 +00:00

Opened #3 Online Booking Portal 2026-03-17 12:07:48 +00:00

Opened #4 Automated Reminders (SMS & Email) 2026-03-17 12:07:49 +00:00

Opened #5 Basic POS & Invoicing 2026-03-17 12:07:51 +00:00

Opened #6 Reporting Dashboard 2026-03-17 12:07:53 +00:00

Opened #7 Docker Deployment & Self-Hosting Setup 2026-03-17 12:07:56 +00:00

Opened #8 Service & Pricing Management 2026-03-17 12:07:58 +00:00

Opened #9 Recurring appointments with cascading change propagation 2026-03-17 14:58:12 +00:00

Opened #10 Multi-pet client group booking 2026-03-17 14:58:17 +00:00

Opened #11 Multi-groomer calendar management 2026-03-17 14:58:20 +00:00

Opened #12 Tip and payment splitting between staff roles 2026-03-17 14:58:24 +00:00

Opened #13 Detailed pet profile attributes and grooming preferences 2026-03-17 14:58:29 +00:00

Opened #18 Bug: Appointment conflict detection race condition 2026-03-17 18:59:41 +00:00

Opened #19 Bug: PATCH appointment skips conflict detection when staffId omitted 2026-03-17 18:59:50 +00:00

Opened #20 Bug: Appointment DELETE permanently removes records instead of soft-delete 2026-03-17 19:00:05 +00:00

Opened #21 Bug: Staff DELETE has no FK protection for existing appointments 2026-03-17 19:00:14 +00:00

Opened #22 Security: AUTH_DISABLED has no production guardrail 2026-03-17 19:00:27 +00:00

Opened #39 Set up unit testing infrastructure 2026-03-18 01:40:28 +00:00

Opened #40 Set up Playwright E2E testing 2026-03-18 01:40:33 +00:00

Opened #46 E2E test failure: reports page loads 2026-03-18 03:20:53 +00:00

Opened #49 issue: reports are failing 2026-03-18 13:13:15 +00:00

Opened #53 feature: customer portal 2026-03-18 23:14:41 +00:00

Opened #56 Flip routing: customer portal at /, admin at /admin 2026-03-19 02:05:47 +00:00

Opened #58 Improve UI visual design — less bland, more polished 2026-03-19 02:51:27 +00:00

Opened #60 Dev/demo login experience — quick-login and impersonation for demos 2026-03-19 03:15:54 +00:00

Opened #61 Customizable colors, logo, and business name in admin settings 2026-03-19 03:18:59 +00:00

Opened #65 E2E: booking flow test fails — time slot buttons not found 2026-03-19 12:47:43 +00:00

Opened #67 feature: client disable/deletion 2026-03-19 13:00:34 +00:00

Opened #72 Replace CI deploy job with Flux Image Automation 2026-03-19 21:07:04 +00:00

Opened #74 bug: Staff Impersonation Mode missing from customer portal 2026-03-20 01:07:33 +00:00

Opened #76 Wire customer portal impersonation to real backend API 2026-03-20 02:19:42 +00:00

Opened #77 Impersonation routes: missing auth checks on 3 endpoints + expiry bug 2026-03-20 02:26:32 +00:00

Opened #79 Add unit and integration tests for API routes and web components 2026-03-20 22:13:28 +00:00

Opened #80 Set up Playwright E2E tests via MCP 2026-03-20 22:13:32 +00:00

Opened #81 issue: ending impersonation session 2026-03-20 22:56:18 +00:00

Opened #84 Product Backlog: Prioritized feature roadmap after MVP 2026-03-21 00:57:30 +00:00

Opened #87 Self-hosted runner missing docker compose plugin 2026-03-21 07:21:11 +00:00

Opened #88 Implement role-based API authorization 2026-03-21 07:40:10 +00:00

Opened #90 Sample/dev data strategy: deterministic seed, test factories, E2E data 2026-03-21 18:11:20 +00:00

Opened #91 Unify site theming: align staff site with customer portal design, add branding customization 2026-03-21 18:59:06 +00:00

Opened #93 Pet photo upload: staff and customer portal 2026-03-21 19:05:30 +00:00

Opened #94 Add unit tests for test factories (packages/db/src/factories.ts) 2026-03-21 23:20:41 +00:00

Opened #95 Add database indexes on impersonation tables 2026-03-21 23:20:45 +00:00

Opened #97 Quick-find search for clients and pets 2026-03-21 23:33:31 +00:00

Opened #98 Customer appointment confirmation and cancellation 2026-03-21 23:34:05 +00:00

Opened #105 Waitlist / cancellation backfill 2026-03-24 21:26:21 +00:00

Opened #106 Customer-facing appointment notes 2026-03-24 21:26:25 +00:00

Opened #107 Calendar export (iCal feed) 2026-03-24 21:26:29 +00:00

Opened #111 Flea Flicker (UAT) needs GitHub App credentials 2026-03-25 02:18:29 +00:00

Opened #114 GitHub Pages outage: docs/ removed, Pages still configured on groombook/groombook 2026-03-25 06:43:51 +00:00

Opened #115 Disable GitHub Pages on groombook/groombook (docs migrated) 2026-03-25 06:50:15 +00:00

Opened #118 Row-level data scoping for groomer role (RBAC Phase 2) 2026-03-26 21:41:47 +00:00

Opened #119 Quick-find search: auto-select client from global search result 2026-03-26 21:53:06 +00:00

Opened #122 feat: customer appointment confirm/cancel in portal (GRO-47) 2026-03-26 22:04:21 +00:00

Opened #131 Add Helm chart for Kubernetes deployment 2026-03-27 17:20:38 +00:00

Opened #133 Change license from MIT to AGPL-3.0 across all repos 2026-03-27 17:32:02 +00:00

Opened #139 [CRITICAL] App crashes with blank screen after login — all users affected (GRO-150) 2026-03-28 01:23:37 +00:00

Opened #149 OOBE/Super User — Engineering Implementation (GRO-198) 2026-03-28 20:16:51 +00:00

Opened #227 Service worker intercepts OAuth callback URL, blocking OIDC login 2026-04-05 08:45:28 +00:00

Opened #237 Invoices page slow to load (performance) 2026-04-07 19:17:52 +00:00

Opened #239 feat: Add hourly data reset CronJob for Prod (demo) and UAT 2026-04-07 19:57:52 +00:00

Opened #247 Dev/UAT/Demo data seeding and authentication strategy 2026-04-10 00:47:47 +00:00