Westside Agency
Westside Agency
Vision
Agents are user story representatives. Any button a user can touch, their agent can touch. Agents are the interface between users and the system — not tools that execute tasks, but representatives that act on behalf of their role.
The admin UI is a conversation. The coach dashboard is a conversation. The parent portal is a conversation. The frontend (westside-app, westside-contracts) handles direct interactions (signing, paying, registering). The agent layer handles everything administrative.
Core Principle
User stories live in
project-westside-basketball. Agents live here. Each agent is the guardian of their role's stories.When a story says "As an admin, I want to send branded email announcements" — the admin agent can do that. The capability (skill, SOP, endpoint) is the bridge between the story and the agent. If the capability doesn't exist, that's a ticket.
Primary User Story
WA-S1: "As an admin, I want to go to
~/westside-agency/, say what I need, and have the system route my request to the right agent — so I never think about which agent to talk to."Agent-Role Mapping
| Role | Actor(s) | Agent | Stories | Interface |
|---|---|---|---|---|
| Superadmin | Lucas | Ava | WS-S1 through WS-S5 | Main session (CLI) |
| Admin | Marcus | Penny | WS-S5 through WS-S15 | GroupMe, email, or direct chat |
| Coach | Assigned coaches | TBD | WS-S13 through WS-S16 | TBD |
| Parent | Registered parents | TBD | WS-S17 through WS-S22 | TBD |
| Player | Registered players | TBD | WS-S23 through WS-S25 | TBD |
| Prospect | Unregistered families | TBD | WS-S26+ | Landing page + AI assistant |
Capabilities (Story-to-Skill Bridge)
Admin (Penny) — Marcus's Representative
| Story | Capability | Status |
|---|---|---|
| WS-S7: Send branded emails | <code>/send-email</code> skill + <code>sop-email-send</code> + NEMO email_blast tool | READY (CLI), GATED (GroupMe — needs NEMO_EMAIL_MODE) |
| WS-S5: View registration stats | Database query via basketball-api | Not built |
| WS-S6: Assign players to teams | Admin API endpoints exist | Needs skill |
| WS-S9: Track payment status | Admin API endpoints exist | Needs skill |
| WS-S10: Manage coaches | Coach onboarding endpoints exist | Needs skill |
| WS-S11: Stripe checkout for jerseys | Checkout endpoints exist | Needs skill |
| WS-S12: Manage user accounts | Keycloak admin + API | Needs skill |
| WS-S13: View/manage schedule | Not built | Not built |
| WS-S14: AI sponsor outreach | Sponsor model + endpoints shipped | Needs skill |
| WS-S15: 501(c)(3) registration | Ops — not agent-automatable | In progress (human) |
Superadmin (Ava) — Lucas's Representative
| Story | Capability | Status |
|---|---|---|
| WS-S1: Deploy via IaC | tofu plan/apply, ArgoCD | READY (manual) |
| WS-S2: Monitor health | Grafana dashboards, blackbox probes | READY |
| WS-S3: Manage Keycloak | Keycloak admin API | READY (manual) |
| WS-S4: Serve static assets | MinIO + minio-api | READY |
| WS-S5: CNPG database | CNPG operator + backup | In progress |
Architecture
Directory Model
| Directory | Purpose | Who uses it |
|---|---|---|
| <code>~/westside-agency/</code> | Front door — unified entry point | Admin user (Marcus, Lucas) |
| <code>~/westside-email-agent/</code> | Email campaign agent dev/debug | Developer |
| <code>~/westside-ai-assistant/</code> | NEMO router service (k8s) | GroupMe users, API consumers |
Current Blocker
westside-ai-assistant#35: NEMO_EMAIL_MODE gate. NEMO has the email_blast tool deployed but NO permission gate. A 4B model should not have unrestricted blast access. Must ship
NEMO_EMAIL_MODE=test_only before NEMO email goes live. Priority: HIGH.Milestones
| Milestone | Description | Status |
|---|---|---|
| M1: First capability | <code>/send-email</code> — admin can send branded emails via CLI agent | DONE (2026-04-03) |
| M2: NEMO email tool | email_blast tool added to westside-ai-assistant | DONE (2026-04-04) — GATED by #35 |
| M3: Profile completion query | incomplete_profiles query in email_queries.py | DONE (2026-04-04) |
| M4: Front door live | <code>~/westside-agency/</code> as unified entry point | DONE (2026-04-04) |
| M5: NEMO permission gate | NEMO_EMAIL_MODE env var (disabled/test_only/full) | TICKETED — westside-ai-assistant#35 |
| M6: Second agent | Roster or contract agent — second pathway in the index | Not started |
| M7: Full 10-pathway index | All 10 agent pathways routable via NEMO | Not started |
Repos
| Repo | Role |
|---|---|
| <code>westside-ai-assistant</code> | NEMO router service (Qwen 3.5:4b, k8s) |
| <code>basketball-api</code> | Backend endpoints that agents call |
| <code>claude-custom</code> | Skills, hooks, agent definitions |
| <code>pal-e-docs</code> | SOPs, architecture notes, project state |
Status
Email agent is pathway #1 — validated by 36 contract reminder sends (2026-04-03). NEMO email_blast tool deployed but gated pending #35. Front door (
~/westside-agency/) established 2026-04-04. Next: ship permission gate, then profile completion campaign as second validation.Related
project-westside-basketball— parent project (user stories, board, architecture)arch-email— email system architecturesop-email-send— email send workflowagent-ava— Ava's personality and role definition