Skip to content

feat: add Interview Prep Town (content-only)#22

Open
AggManik wants to merge 8 commits into
mainfrom
feat/interview-prep-town
Open

feat: add Interview Prep Town (content-only)#22
AggManik wants to merge 8 commits into
mainfrom
feat/interview-prep-town

Conversation

@AggManik

@AggManik AggManik commented Jul 3, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds a new showcase town — Interview Prep Town (interview-prep) — a content-only town with 4 department buildings, each housing role-specific dual-mode (Coach / Mock Interview) NPCs. No engine, catalog, or schema changes; purely towns/interview-prep/ content plus the spec/plan docs.

  • The Dev Den (Tech) — Backend/AI, Frontend, ML/Data (3 NPCs)
  • The Sales Floor — Account Executive, SDR/BDR, Sales Manager (3 NPCs)
  • The Growth Lab (Marketing) — Growth, Product Marketing, Content/Brand (3 NPCs)
  • The Product Room — PM, Designer (2 NPCs)

11 NPCs total, each following the shared template: Identity → dual-mode behavior (Coach / Mock Interview) → Role knowledge → Question bank → Rubric → Difficulty tiers → Style. Every department building has groupChatEnabled: true for panel-style [G] group chats.

Files

  • towns/interview-prep/town.json — 5 buildings (home + 4 departments)
  • towns/interview-prep/customPlots/{tech,sales,marketing,product}/plot.json — 4 custom plots, 10×7 interior footprint, all sprites reused from the existing catalog (no uploads needed)
  • towns/interview-prep/npcs/*.mdx — 11 role NPC prompts
  • docs/superpowers/specs/2026-07-03-interview-prep-town-design.md — product spec
  • docs/superpowers/plans/2026-07-03-interview-prep-town.md — implementation plan

Important: town ownership

Like roast-town, this town's ownership is PAT-based at deploy time (there's no owner field in content — Town.ownerId in packages/db is set from the authenticated user when the town is first created, and is immutable afterward). This must be deployed using the same dedicated CORE-support account that owns roast-town — not a personal account — since a workspace can now own multiple towns.

How this was verified

Every task was validated with the structural check scripts from the plan (JSON parsing, slot-id ↔ NPC-filename consistency, sprite-ref presence in packages/catalog/src/catalog.json, Block B1/B2 boilerplate fully expanded with no leftover placeholders). A final whole-branch review confirmed:

  • Zero changes under packages/ or apps/ (content-only, as required)
  • town.json has exactly 5 buildings, all departments have groupChatEnabled: true, and each plotKey/variantId pair matches its plot.json
  • All 11 NPCs are structurally consistent, role-specific (no generic filler reused across departments), and hold tone (never break character / reference being an AI)

Test plan

  • Structural validation scripts (JSON parse + slot/filename/sprite consistency) — all pass, see commit history
  • Deploy: pnpm --filter @redplanethq/town run dev-cli -- deploy --dir "$(pwd)/towns/interview-prep" --slug interview-prep as the CORE-support account
  • In-app acceptance pass (spec §12): all 5 buildings render; NPC counts per department (3/3/3/2); every NPC greets and asks Coach vs. Mock Interview before anything else; Coach mode gives role-appropriate prep; Mock Interview mode asks one question at a time; [G] opens department group chat; no NPC breaks character

🤖 Generated with Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants