Add shared Supabase pattern and specialized agents to MEMORY.md

New sections added:
- Rule 2.1: Shared Supabase pattern for all Vercel web apps
  - Same Supabase project (qnatchrjlpehiijwtreh)
  - Table naming: <projectName>_tableName
  - Copy .env.local from existing projects

- Specialized Agent Profiles section
  - List of all available agents
  - When to use each
  - How to spawn them
  - Key benefit: auto-loaded skills

Now documented in both agent configs and curated memory
This commit is contained in:
Matt Bruce 2026-02-21 19:55:16 -06:00
parent b1d3546f70
commit 748a8d2bfb

100
MEMORY.md
View File

@ -60,6 +60,42 @@
--- ---
### 2.1. SHARED SUPABASE PATTERN FOR ALL VERCEL WEB APPS
**FORBIDDEN:** Creating separate Supabase projects for each web app
**REQUIRED:** All Vercel apps share the same Supabase project with prefixed tables
**The Pattern:**
- **Shared Supabase Project:** `qnatchrjlpehiijwtreh` (qnatchrjlpehiijwtreh.supabase.co)
- **Table Naming:** `<projectName>_tableName` format (e.g., `blog_messages`, `mission-control_tasks`)
- **Credentials:** Copy `.env.local` from existing project (blog-backup or gantt-board)
- **Auth:** Shared across all apps (same users table)
**Why This Pattern:**
- Prevents table name collisions (gantt-board uses unprefixed tables - legacy)
- Single auth source (users can access all apps with one login)
- Easier management (one Supabase dashboard)
- Cost efficient (free tier covers all apps)
**Example from blog-backup (CORRECT):**
```typescript
// Table name: blog_messages (prefixed)
supabase.from("blog_messages").select("*")
```
**Example from gantt-board (LEGACY - created before pattern):**
```typescript
// Table names: tasks, projects, sprints (NOT prefixed - problematic)
supabase.from("tasks").select("*")
```
**New Project Setup:**
1. Copy `.env.local` from blog-backup (same Supabase credentials)
2. Create tables with prefix: `<projectName>_tablename`
3. Set up RLS policies for the prefixed tables
4. Document table names in project README
---
### 2.5. CLI MUST STAY IN SYNC WITH WEB UI — ALWAYS ### 2.5. CLI MUST STAY IN SYNC WITH WEB UI — ALWAYS
**FORBIDDEN:** Web UI has features the CLI can't access **FORBIDDEN:** Web UI has features the CLI can't access
**REQUIRED:** Every web API endpoint has a matching CLI command **REQUIRED:** Every web API endpoint has a matching CLI command
@ -748,6 +784,70 @@ When creating documents for gantt board tasks:
--- ---
## Specialized Agent Profiles
**Created:** February 22, 2026
**Location:** `~/.openclaw/agents/<agentId>/agent/agent.json`
**Documentation:** `/Users/mattbruce/.openclaw/workspace/SPECIALIZED_AGENTS.md`
### Available Agents
| Agent ID | Name | Emoji | Purpose | Auto-loaded Skills |
|----------|------|-------|---------|-------------------|
| `main` | Main (default) | 🎉 | General purpose | — |
| `ios-dev` | iOS Developer | 📱 | iOS/Swift/SwiftUI | ios-26-role, swiftui-expert-skill, swift-clean-architecture |
| `web-dev` | Web Developer | 🌐 | Next.js/React/Supabase | nextjs-expert, frontend-design, shadcn-ui, ui-ux-pro-max |
| `research` | Research Assistant | 🔍 | Research & analysis | browser-automation, session-logs |
### When to Use Each
**ios-dev:**
- Any iOS app development
- SwiftUI view creation
- Xcode project work
- App Store preparation
**web-dev:**
- Next.js apps
- React components
- Supabase integration
- Vercel deployment
- **Follows shared Supabase pattern automatically**
**research:**
- Information gathering
- Documentation compilation
- Best practices research
- Competitive analysis
### How to Spawn
```json
// iOS task
{
"agentId": "ios-dev",
"task": "Build a habit tracker app..."
}
// Web task
{
"agentId": "web-dev",
"task": "Create a Next.js dashboard..."
}
// Research task
{
"agentId": "research",
"task": "Find OpenClaw best practices..."
}
```
### Key Benefit
Each agent **automatically loads relevant skills** and follows **domain-specific patterns**. No more generic solutions — iOS work uses iOS patterns, web work uses web patterns.
---
## Memory Maintenance — Critical Rule ## Memory Maintenance — Critical Rule
**Update memory files CONTINUOUSLY throughout the day, not at the end.** **Update memory files CONTINUOUSLY throughout the day, not at the end.**