project-westside-agency updated 2026-04-06Westside 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 | /send-email skill + sop-email-send + 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
User (GroupMe / CLI)
→ ~/westside-agency/ (front door — user never picks an agent)
→ NEMO (westside-ai-assistant, Qwen 3.5:4b on Ollama, deployed in k8s)
→ Agent Index (structured routing, 10 pathways)
1. westside-email-agent — email campaigns (ACTIVE)
2. roster-agent — player/team management
3. contract-agent — contract status/offers
4. payment-agent — billing/subscriptions
5. schedule-agent — practices/tournaments
6. player-data-agent — profile management
7. coach-agent — coach assignments
8. sponsor-agent — sponsorship outreach
9. report-agent — dashboard/audits
10. help-agent — "what can you do?"
Directory Model
| Directory | Purpose | Who uses it |
|---|---|---|
~/westside-agency/ |
Front door — unified entry point | Admin user (Marcus, Lucas) |
~/westside-email-agent/ |
Email campaign agent dev/debug | Developer |
~/westside-ai-assistant/ |
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 | /send-email — 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 | ~/westside-agency/ 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 |
|---|---|
westside-ai-assistant |
NEMO router service (Qwen 3.5:4b, k8s) |
basketball-api |
Backend endpoints that agents call |
claude-custom |
Skills, hooks, agent definitions |
pal-e-docs |
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