🏑 Quality Hangouts

Two lead-gen concept sites β€” Backyard Hangout (outdoor builds) and Home Hangout (indoor hangout spaces) β€” from one pnpm monorepo. Shared UI kit, 18 AI-generated lifestyle photos, in-browser planner quiz, deployed to Vercel.

Overview Features Flow Tech Roadmap Test results πŸ§ͺ Pair test plan

Overview

LiveCI

Repomicrospaces/qualityhangouts (private; created 2026-09-04)
LocalC:/Users/AI/Repos/qualityhangouts
Owner agentqualityhangoutsdev
Backendnone β€” static lead-gen; the quiz runs entirely client-side
AppDomainVercel projectRoot directory
backyard-hangoutbackyardhangout.com (+ www)backyard-hangoutapps/backyard-hangout
home-hangouthomehangout.com (+ www)home-hangoutapps/home-hangout

App features

Flow

Build

src/content (categories, site)  +  packages/ui components
        β”‚
        β–Ό
  next build   β†’  17 static routes per app  (SSG)
        β”‚
        β–Ό
  Vercel (framework: nextjs, rootDirectory apps/<app>)

Runtime request

  1. Browser hits the *.vercel.app domain (Vercel project per app).
  2. Static SSG HTML served; next/image optimizes the webp photos at the edge.
  3. The quiz is the only interactive piece β€” pure client-side React, no API calls.
  4. No serverless functions, no CRM, nothing to go down.

Deploy

Push to main (paths apps/**, packages/**, or the workflow file) or workflow_dispatch. Matrix job per app: vercel link --project $APP, PATCH rootDirectory to apps/$APP, vercel deploy --prod. Full monorepo is uploaded so workspace:* resolves. Not Vercel git integration. Deploy auth is the VERCEL_TOKEN repo secret.

Monorepo gotcha (2026-08-29): deploying from inside apps/<app> fails β€” the root pnpm workspace (with workspace:* deps) must be uploaded, and the project's rootDirectory must point at apps/<app>. Same family of issue as the Around Town domain gotcha; when custom domains get attached here, leave gitBranch unset since CLI deploys carry no branch metadata.

Tech

Monorepopnpm 9.15.0 workspaces (no Turbo). Root package name qualityhangouts.
Appsapps/backyard-hangout, apps/home-hangout
Sharedpackages/ui (@qh/ui β€” Hero, Card, Section, CostTiers, ZoneList, TipList, QuizFlow, SiteHeader/Footer) and packages/config (@qh/config β€” shared tsconfig.base.json)
StackNext 16.3.3 Β· React 19.2.8 Β· Tailwind CSS v4 (@tailwindcss/postcss) Β· TypeScript 5.9
Imagery18 photos via gpt-image-2 (3:2) β†’ ffmpeg webp (scale 1536, q82; 66–306 KB each) in apps/<app>/public/images
Vercelframework nextjs, rootDirectory apps/<app>, default next build, deploys from CI
CI.github/workflows/vercel-deploy.yml β€” matrix of the two apps (same pattern as aroundtown)
Localpnpm install Β· pnpm build Β· pnpm dev:backyard / pnpm dev:home β€” Git Bash on Windows; local prod check via next start -p 3011 / -p 3012 (3001/3002 are taken by other apps on this host)
apps/backyard-hangout/
  src/app/          # /, /ideas, /ideas/[slug], /quiz, /about
  src/components/   # HeroArt, CategoryMedia, CategoryHeroArt, HangoutQuiz
  src/content/      # categories.ts, site.ts
  public/images/    # hero + 8 category webp photos
apps/home-hangout/  # same shape, indoor categories
packages/ui/
packages/config/

πŸ—‚οΈ Roadmap

Live roadmap, managed as GitHub issues (qualityhangouts issues). Add or close items on GitHub β€” β˜‘ = done, close as β€œnot planned” to remove.

Test results

Canonical check: builds + route checks (no TEST_PLAN.md yet).

2026-09-04 β€” repo + CI + custom domains cutover

2026-08-29 β€” v2 imagery + first deploy

Not yet covered: quiz interaction matrix, mobile browsers, Lighthouse passes β€” treat the current state as deploy + visual verification, not a full QA pass.