# MEMORY.md - Curated Long-Term Memory ## Critical Information ### Who I Am - Name: Max - Role: Digital assistant to Matt Bruce - Mission: Help build iOS empire for retirement ### Matt's Identity - Name: Matt Bruce - Email: mbrucedogs@gmail.com - Work: iOS Lead Architect at Toyota (contractor) - Goal: Build side hustle to retire early, travel with Heidi ### Project Locations (ALWAYS CHECK TOOLS.md) All projects in: `/Users/mattbruce/Documents/Projects/OpenClaw/` **Active Web Projects:** - Gantt Board: https://gantt-board.vercel.app (port 3000) - Login: mbruce+max@topdoglabs.com / !7883Gantt - Stack: Next.js + Supabase + Vercel - Deploy: `npm run build && vercel --prod` - Blog Backup: https://blog-backup-two.vercel.app (port 3002) - Mission Control: https://mission-control-rho-pink.vercel.app/ (port 3001) - Heartbeat Monitor: port 3005 ### Infrastructure - Gitea: http://192.168.1.128:3000 (ai-agent / !7883Gitea) **Supabase Projects (separate for each app):** - gantt-board: https://qnatchrjlpehiijwtreh.supabase.co - Other projects: Each has their own Supabase project (see TOOLS.md) ### Key Decisions - All web projects use Supabase for auth/database - Vercel CLI deployment (no GitHub for gantt-board) - Project folder structure enforced (Web/iOS/Documents) ## Lessons Learned ### 2026-02-21 - Memory Failures **Problem:** Complete memory loss of previous day's work caused frustration. **Root Cause:** Didn't read files at session start, relied on failed memory_search. **Solution:** - Created SESSION_STARTUP.md with explicit checklist - Updated AGENTS.md with mandatory file reading order - All project info now in TOOLS.md - Created PROJECT_SETUP.md for folder structure rules **Never Again:** - Always read SESSION_STARTUP.md first - Read TOOLS.md for all project locations - Read memory files for recent context - Files are my memory - use them ### 2026-02-21 - Gitea Installation Disaster **Problem:** Installed Gitea locally on Matt's Mac, causing port 3000 conflict with Next.js dev server. **Root Cause:** Forgot Gitea was already running on separate machine (192.168.1.128:3000). **Solution:** Uninstalled local Gitea, documented in TOOLS.md that it's on another machine. **Never Again:** - Gitea runs at http://192.168.1.128:3000 (remote server) - Port 3000 is for Next.js dev server on Matt's Mac - NEVER run `brew install gitea` or `gitea web` on Matt's machine - Use existing Gitea server for all git operations ## Quick Commands ```bash # Deploy Gantt Board cd /Users/mattbruce/Documents/Projects/OpenClaw/Web/gantt-board npm run build && vercel --prod # Check all projects ls /Users/mattbruce/Documents/Projects/OpenClaw/Web/ ``` ## Gantt Board Task CRUD I have full CRUD capabilities on gantt board tasks via Supabase API: **Bash script:** `/Users/mattbruce/.openclaw/workspace/scripts/gantt-task-crud.sh` ```bash # List tasks (optionally filter by status) ./scripts/gantt-task-crud.sh list [open|done|...] # Get single task ./scripts/gantt-task-crud.sh get # Create task ./scripts/gantt-task-crud.sh create "Task title" [status] [priority] [project-id] [assignee-id] # Update task field ./scripts/gantt-task-crud.sh update # Delete task ./scripts/gantt-task-crud.sh delete ``` **TypeScript module:** `/Users/mattbruce/.openclaw/workspace/scripts/gantt-task-crud.ts` - `listTasks(status?)` - List all tasks - `getTask(taskId)` - Get single task - `createTask(params)` - Create new task - `updateTask(taskId, updates)` - Update task fields - `deleteTask(taskId)` - Delete task - `updateTaskStatus(taskId, status)` - Update status - `assignTask(taskId, assigneeId)` - Change assignee - `completeTask(taskId)` - Mark as done **Default assignee:** Max (9c29cc99-81a1-4e75-8dff-cd7cc5ceb5aa) ## Natural Language Task Parsing Matt can rattle off tasks naturally and I'll parse them: **Example formats:** - "Add task: Fix the login bug by Friday" - "For Max: Research Stripe integration, low priority" - "Urgent: Deploy blog backup to Vercel tomorrow" - "Create task: Update iOS app icons" **I parse:** - **Title** — the main task description - **Assignee** — "for [Name]" or defaults to Matt - **Priority** — "urgent/asap" = high, "low priority" = low, else medium - **Due date** — tomorrow, next week, by Friday, etc. (natural language) ## Task Link Format **Always send FULL LINKS to tasks, not just IDs.** ❌ Wrong: "Task 33ebc71e-7d40-456c-8f98-bb3578d2bb2b is done" ✅ Right: "https://gantt-board.vercel.app/tasks/33ebc71e-7d40-456c-8f98-bb3578d2bb2b is done" **Link format:** `https://gantt-board.vercel.app/tasks/{task-id}` --- ## Document/File Management Rules ### RULE: Task Documents → Attach Only, Don't Keep Local Copies When creating documents for gantt board tasks: 1. ✅ Create the document 2. ✅ Attach it to the task via gantt board UI/API 3. ❌ **DELETE the local file immediately after attaching** 4. ❌ **Never keep local copies after attachment** **Why:** Prevents workspace clutter and ensures single source of truth is in the gantt board. --- ## Memory Maintenance — Critical Rule **Update memory files CONTINUOUSLY throughout the day, not at the end.** - After significant decisions → write to MEMORY.md - After task completions → update memory/YYYY-MM-DD.md - After new processes established → document immediately - Waiting until end-of-day = lost context and repeated mistakes This prevents the nightmare of today (Feb 21) where session issues caused complete memory loss of critical work. ### My Memory Update Plan **TRIGGERS — Update memory when:** 1. ✅ Task completed → Log to memory/YYYY-MM-DD.md 2. ✅ Decision made → Document in MEMORY.md 3. ✅ New process/tool discovered → Add to TOOLS.md or MEMORY.md 4. ✅ Error/lesson learned → Write to MEMORY.md "Lessons Learned" 5. ✅ Context switch → Quick checkpoint update 6. ✅ Every 30-60 min of continuous work → Quick status save **WHAT to save:** - **MEMORY.md:** Decisions, lessons, key info, processes (curated) - **memory/YYYY-MM-DD.md:** Raw log of work, conversations, tasks done - **TOOLS.md:** Project locations, credentials, environment specifics **CHECKPOINT habit:** Before saying "done" or switching topics → ask "What needs to be remembered?" **Safety net:** If session crashes, next session reads files first. Files are source of truth.