deafgain-website/cline_docs/memoryBank.md

16 KiB

DeafGain Website - AI Assistant Memory Bank

IMPORTANT: User Profile & Expectations

USER: Eliza Kragh

  • Experience Level: Novice web developer, NOT interested in learning web development
  • Role: Project owner and content provider
  • Expectation: AI assistant (Cline) handles ALL technical work
  • User Interaction: Provides content, approves changes, makes high-level requests only
  • NO USER EDUCATION: Do not teach or explain technical concepts unless specifically asked

AI Assistant Responsibilities

What I (AI) Do Autonomously:

  1. Edit/Create/Delete Files: All code changes without user intervention
  2. Git Operations: Pull, commit, push using Eliza's credentials
  3. Local Testing: Test changes before deployment
  4. Remote Deployment: SSH to production server and deploy via Docker
  5. Troubleshooting: Debug and fix issues independently
  6. Documentation: Update memory bank after significant changes

What User Does:

  1. 📝 Content Requests: "Add this video", "Update map with this location"
  2. Approve Actions: Review and approve proposed changes
  3. 📦 Provide Assets: Supply video files, images, text when needed
  4. 🎯 Strategic Decisions: Final say on design/content direction

Critical Credentials & Access

Git Access (Eliza's Account)

SSH Production Access (Chaulmark's Account)

  • Server: 10.4.0.205
  • SSH User: chaulmark
  • Project Path: /home/chaulmark/websites/deafgain.org
  • Purpose: Deploy Docker containers on production server
  • VPN Required: Yes - Automatically handled by deploy.sh script

Production Environment

  • URL: https://deafgain.org/
  • Behind: Caddy reverse proxy
  • Network: caddy_network (172.22.0.0/16)
  • Containers: web (port 804), api (port 3000), redis

AI Workflow for Changes

Standard Change Process (I Handle Everything)

  1. User Request: User says "Add location to map" or "Fix email"
  2. Pull Latest: git pull to ensure working with latest code
  3. Make Changes: Edit necessary files (no user involvement)
  4. Test Locally: Run pnpm dev to verify changes work
  5. Commit & Push:
    git add .
    git commit -m "Descriptive message"
    git push
    
  6. Deploy to Production (Automated via deploy.sh):
    ./deploy.sh
    
    This script automatically:
    • Connects to VPN via WireGuard
    • Tests server connectivity
    • SSHs to production server
    • Pulls latest changes from Git
    • Rebuilds and restarts Docker containers
  7. Verify: Check https://deafgain.org/ to confirm changes live
  8. Report: Tell user "Done! Changes are live at deafgain.org"

Git Commands I Use (User Never Runs These)

# Start every task
git pull

# After making changes
git add .
git commit -m "Clear description of what changed"
git push

# Check what changed (for my reference)
git status
git diff
git log --oneline -15

Automated Production Deployment

The production server is on a private network (10.4.0.0/24) requiring VPN access. All deployment is now automated via deploy.sh script.

Deployment Script: deploy.sh in project root

  • Automatically connects VPN via WireGuard
  • Tests server connectivity
  • SSHs to production and deploys

What deploy.sh does:

  1. Checks if VPN is connected, connects if needed
  2. Tests connectivity to 10.4.0.205
  3. SSHs to chaulmark@10.4.0.205
  4. Changes to /home/chaulmark/websites/deafgain.org
  5. Runs git pull to get latest code
  6. Runs docker compose up --build -d to rebuild containers
  7. Reports success

When I Need to Deploy:

./deploy.sh

That's it! The script handles VPN, SSH, Git pull, and Docker rebuild automatically.

Manual VPN Tool (Optional): vpn-manager.command

  • Interactive menu-driven script for manual VPN management
  • Can connect/disconnect VPN manually
  • Tests connectivity to production server

Token Management (If Needed)

When Token Expires:

What I Tell User: "Your Git access token has expired. Please generate a new one:"

User Steps (only these 3):

  1. Go to https://gitea.sigd.net
  2. Settings → Applications → Access Tokens → Generate New Token
  3. Copy the new token and give it to me

What I Do: Update the git remote configuration with new token

git remote remove origin
git remote add origin https://eliza:NEW_TOKEN@gitea.sigd.net/chaulmark/deafgain-website.git
git pull

Website Components (What I Manage)

Pages (src/pages/)

  1. Home.tsx: Landing page
  2. About.tsx: About Eliza
  3. Services.tsx: Has the interactive US map with conference locations
  4. Resources.tsx: Video library (6 governance training videos)
  5. Contact.tsx: Contact form

Key Features I Maintain

Interactive Map (Services.tsx)

  • 23 locations across US showing conferences/events
  • Green = upcoming, Gray = past events
  • File: src/pages/Services.tsx
  • Array: relationshipPoints

When User Says: "Add [Event] to [City, State] on [dates]"

What I Do:

  1. Get coordinates from Google Maps for the city
  2. Open src/pages/Services.tsx
  3. Add to relationshipPoints array:
{
  coordinates: [-longitude, latitude],
  city: "City",
  state: "State", 
  events: [{
    name: "ORG",
    description: "Full event description",
    startDate: "Month DD, YYYY",
    endDate: "Month DD, YYYY"
  }]
}
  1. Commit: "Add [Event] to [City, ST] on interactive map"
  2. Push and deploy

Video Library (Resources.tsx)

  • 6 governance training videos with subtitles/transcripts
  • File: src/pages/Resources.tsx
  • Each video needs 4 files (user provides, I integrate)

When User Says: "Add new video [title]"

User Provides:

  • Video file (.mp4)
  • Subtitle file (.vtt) OR raw subtitle text
  • Transcript text
  • Thumbnail image (.png)

What I Do:

  1. Save files to correct locations:
    • public/videos/video-name.mp4
    • public/subtitles/video-name.vtt
    • public/transcriptions/video-name.txt
    • public/images/thumbnails/video-name.png
  2. Add entry to src/pages/Resources.tsx videos array
  3. Commit: "Add new video: [Title]"
  4. Push and deploy

Current Videos:

  1. governance-documents
  2. secretary-role-responsibilities
  3. minutes-approval-procedure
  4. board-participation-guidelines
  5. board-member-reprimands
  6. meeting-minutes-access-rights

Email System

  • Contact form → eliza@deafgain.org
  • Subscription form → welcome email
  • Config in .env file (never commit this!)
  • Current Gmail app password: idjcxxwzvloorfuk (generated 1/9/2026)
  • SMTP: smtp.gmail.com:587

When User Says: "Email not working"

What I Do:

  1. Check .env file for correct settings
  2. Test with execute_command
  3. If password expired, ask user to regenerate Gmail app password
  4. Update .env and redeploy

Task Execution Patterns (AI Internal Process)

Task: "Add Location to Map"

1. User Request: "Add RID conference in Missoula, MT on Jan 10, 2026"
2. I pull latest: git pull
3. I lookup coordinates: [-113.9940, 46.8721]
4. I edit Services.tsx, add to relationshipPoints array
5. I commit: "Add RID conference to Missoula MT on interactive map"
6. I push: git push
7. I deploy: ./deploy.sh (handles VPN, SSH, git pull, docker rebuild automatically)
8. I verify: Check https://deafgain.org/services
9. I report: "Done! RID conference added to map at deafgain.org"

Task: "Add New Video"

1. User Request: "Add this video [title]" + provides files
2. User provides: .mp4, .vtt (or subtitle text), transcript text, .png
3. I pull latest: git pull
4. I create/save files:
   - public/videos/video-name.mp4
   - public/subtitles/video-name.vtt (convert if needed)
   - public/transcriptions/video-name.txt
   - public/images/thumbnails/video-name.png
5. I edit Resources.tsx, add video to array
6. I test locally: pnpm dev (verify video plays)
7. I commit: "Add new video: [Title]"
8. I push: git push
9. I deploy: ./deploy.sh (handles VPN, SSH, git pull, docker rebuild automatically)
10. I verify: Check https://deafgain.org/resources
11. I report: "Done! New video '[Title]' is live on resources page"

Task: "Update Services/Content"

1. User Request: "Change [content] on [page]"
2. I pull latest: git pull
3. I identify correct file (Home.tsx, About.tsx, Services.tsx, etc.)
4. I make changes
5. I commit: "Update [page]: [description]"
6. I push: git push
7. I deploy: ./deploy.sh (handles VPN, SSH, git pull, docker rebuild automatically)
8. I report: "Done! Changes live at deafgain.org"

Task: "Fix Bug/Issue"

1. User reports: "Email form not working" or "Video won't play"
2. I pull latest: git pull
3. I diagnose issue (check logs, test locally, review code)
4. I fix the problem in relevant files
5. I test fix locally: pnpm dev
6. I commit: "Fix [issue description]"
7. I push: git push
8. I deploy: ./deploy.sh (handles VPN, SSH, git pull, docker rebuild automatically)
9. I verify fix: Test on live site
10. I report: "Fixed! [Explanation of what was wrong and what I did]"

Critical Files I Work With

Main Code Files

  • src/pages/Services.tsx - Interactive map (relationshipPoints array)
  • src/pages/Resources.tsx - Video library (videos array)
  • src/pages/Home.tsx - Landing page content
  • src/pages/About.tsx - About page content
  • src/pages/Contact.tsx - Contact form
  • src/api/contact.ts - Contact form backend
  • src/api/subscribe.ts - Subscription backend
  • .env - Environment variables (SECRETS - never commit!)

Asset Directories

  • public/videos/ - Video files (.mp4)
  • public/subtitles/ - WebVTT subtitle files (.vtt)
  • public/transcriptions/ - Text transcripts (.txt)
  • public/images/thumbnails/ - Video thumbnails (.png)

Configuration Files

  • docker-compose.yml - Production container setup
  • vite.config.ts - Build configuration
  • tailwind.config.js - Styling configuration
  • package.json - Dependencies

Environment Variables (.env)

NODE_ENV=production
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_SECURE=false
GMAIL_USER=system@deafgain.org
GMAIL_PASS=idjcxxwzvloorfuk
SMTP_FROM=system@deafgain.org
SMTP_TO=eliza@deafgain.org
API_URL=http://localhost:804
# REDIS_URL=redis://localhost:6379 (disabled)

Recent History (Reference Only)

  • April 6, 2026:
    • Updated Eliza's photo on About page
      • Copied IMG_8508.jpeg from Desktop (new photo with dog and Montana mountains)
      • Renamed to eliza-2026.jpg to bypass CDN/Cloudflare cache (old photo was cached for 30 days)
      • Updated About.tsx to reference new filename
      • Successfully deployed, new photo now visible to all visitors
    • Added American Institute of Parliamentarians membership to Certifications section
      • Now reads: "Certified ADA Coordinator, Insured Registered Parliamentarian (RP) of the National Association of Parliamentarians, Member of the American Institute of Parliamentarians"
    • Installed node_modules locally on Mac to clear VS Code editor errors
      • Ran npm install --legacy-peer-deps to install 410 packages
      • Cleared 56 TypeScript/linter errors that were showing in VS Code
      • This only affects local editor display, does not change live website or Git repository
      • node_modules folder is ignored by Git (.gitignore)
  • April 4, 2026:
    • Added 4 new network relationships to interactive map:
      • MCDi Board Training in Missoula, MT (April 25, 2026)
      • NAD Conference in San Francisco, CA (June 30 - July 5, 2026)
      • NAP National Training Conference in Birmingham, AL (August 26-30, 2026)
      • AIP Annual Session in San Diego, CA (July 29 - August 1, 2026)
    • Map now has 23 total locations (up from 20)
  • March 13, 2026:
    • Updated About page: Added "Insured" prefix to Registered Parliamentarian certification
      • Now reads: "Insured Registered Parliamentarian (RP) of the National Association of Parliamentarians"
  • March 5, 2026:
    • Cloned repo, created memory bank, established AI assistant role
    • Created automated deployment script (deploy.sh) with VPN and Docker rebuild
    • Installed WireGuard for VPN connectivity
    • Fixed server path to /home/chaulmark/websites/deafgain.org
    • Successfully tested full automated deployment workflow
    • Added MOAD Board Training event to Jefferson City, MO on interactive map (now 20 total locations)
    • Updated About page:
      • Changed NAP certification to "Registered Parliamentarian (RP) of the National Association of Parliamentarians"
      • Updated Leadership to "Founding Former President of Missoula Council of the Deaf (MCDi), Owner of DeafGain LLC"
      • Added Certificate in Deaf Studies and Social Justice from University of Kansas to Education
      • Removed comma from advocacy quote
  • January 26, 2026: Added RID conference to Missoula MT
  • January 20, 2026: Added anti-spam honeypot
  • January 9, 2026: Fixed email (SMTP 587, new Gmail password)
  • May 27, 2025: Fixed security vulnerabilities, deployed to production

Common Issues & AI Solutions

Issue: "Email not working"

What I Do: Check .env Gmail settings, test email, regenerate app password if needed, redeploy

Issue: "Video won't play"

What I Do: Verify all 4 files exist (.mp4, .vtt, .txt, .png), check file paths, test locally, fix and redeploy

Issue: "Map not showing location"

What I Do: Check coordinates format [-long, lat], verify array syntax, test locally, fix and redeploy

Issue: "Changes not live on website"

What I Do: Run ./deploy.sh to automatically connect VPN, SSH to production, pull latest, rebuild Docker containers

Issue: "Git token expired"

What I Tell User: "Please generate new token at gitea.sigd.net → Settings → Applications → Access Tokens" What I Do: Update git remote with new token when provided

Communication Style

Good Responses (User-Friendly):

"Done! I've added the RID conference to Missoula, MT on the map. Changes are live at deafgain.org/services" "Fixed the email issue - it was using the wrong port. Everything works now!" "I've added your new video to the Resources page. You can see it at deafgain.org/resources"

Bad Responses (Too Technical):

"I updated the relationshipPoints array in Services.tsx with the new coordinates..." "The SMTP configuration in the .env file had the wrong port value..." "I modified the videos array and committed to the main branch..."

Rule: Report WHAT was done and RESULTS, not HOW it was done technically

Quick Reference

User Says → AI Does

  • "Add [Event] to map" → Get coordinates, edit Services.tsx, commit, push, run deploy.sh
  • "Add video [Title]" → Save 4 files, edit Resources.tsx, commit, push, run deploy.sh
  • "Update [Page] content" → Edit page file, commit, push, run deploy.sh
  • "Email not working" → Diagnose, fix .env or code, commit, push, run deploy.sh
  • "Fix [problem]" → Diagnose, fix code, test locally, commit, push, run deploy.sh

AI Never Asks User To:

  • Run git commands
  • Edit code files
  • SSH to server
  • Run Docker commands
  • Install dependencies
  • Debug code

AI Always:

  • Pull before starting work
  • Test locally when possible
  • Commit with clear messages
  • Push to Git repository
  • Deploy to production via ./deploy.sh (handles VPN and everything automatically)
  • Verify changes are live
  • Report completion simply

Status

🟢 System Operational - All components working, production live at https://deafgain.org/ 🤖 AI Assistant Ready - Waiting for user requests to make changes, add content, or fix issues