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:
- ✅ Edit/Create/Delete Files: All code changes without user intervention
- ✅ Git Operations: Pull, commit, push using Eliza's credentials
- ✅ Local Testing: Test changes before deployment
- ✅ Remote Deployment: SSH to production server and deploy via Docker
- ✅ Troubleshooting: Debug and fix issues independently
- ✅ Documentation: Update memory bank after significant changes
What User Does:
- 📝 Content Requests: "Add this video", "Update map with this location"
- ✅ Approve Actions: Review and approve proposed changes
- 📦 Provide Assets: Supply video files, images, text when needed
- 🎯 Strategic Decisions: Final say on design/content direction
Critical Credentials & Access
Git Access (Eliza's Account)
- Repository: https://gitea.sigd.net/chaulmark/deafgain-website
- Username:
eliza(NOT eliza@deafgain.org) - Token:
3dba996c9eca5b6267f7cd1b0996a94aac1ac0d5(created 3/5/2026) - Local Path:
/Users/Eliza/DeafGain-website - Remote: Already configured in repository
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.shscript
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)
- User Request: User says "Add location to map" or "Fix email"
- Pull Latest:
git pullto ensure working with latest code - Make Changes: Edit necessary files (no user involvement)
- Test Locally: Run
pnpm devto verify changes work - Commit & Push:
git add . git commit -m "Descriptive message" git push - Deploy to Production (Automated via deploy.sh):
This script automatically:./deploy.sh- Connects to VPN via WireGuard
- Tests server connectivity
- SSHs to production server
- Pulls latest changes from Git
- Rebuilds and restarts Docker containers
- Verify: Check https://deafgain.org/ to confirm changes live
- 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:
- Checks if VPN is connected, connects if needed
- Tests connectivity to 10.4.0.205
- SSHs to chaulmark@10.4.0.205
- Changes to
/home/chaulmark/websites/deafgain.org - Runs
git pullto get latest code - Runs
docker compose up --build -dto rebuild containers - 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):
- Go to https://gitea.sigd.net
- Settings → Applications → Access Tokens → Generate New Token
- 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/)
- Home.tsx: Landing page
- About.tsx: About Eliza
- Services.tsx: Has the interactive US map with conference locations
- Resources.tsx: Video library (6 governance training videos)
- 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:
- Get coordinates from Google Maps for the city
- Open
src/pages/Services.tsx - Add to
relationshipPointsarray:
{
coordinates: [-longitude, latitude],
city: "City",
state: "State",
events: [{
name: "ORG",
description: "Full event description",
startDate: "Month DD, YYYY",
endDate: "Month DD, YYYY"
}]
}
- Commit: "Add [Event] to [City, ST] on interactive map"
- 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:
- Save files to correct locations:
public/videos/video-name.mp4public/subtitles/video-name.vttpublic/transcriptions/video-name.txtpublic/images/thumbnails/video-name.png
- Add entry to
src/pages/Resources.tsxvideos array - Commit: "Add new video: [Title]"
- Push and deploy
Current Videos:
- governance-documents
- secretary-role-responsibilities
- minutes-approval-procedure
- board-participation-guidelines
- board-member-reprimands
- meeting-minutes-access-rights
Email System
- Contact form → eliza@deafgain.org
- Subscription form → welcome email
- Config in
.envfile (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:
- Check
.envfile for correct settings - Test with execute_command
- If password expired, ask user to regenerate Gmail app password
- Update
.envand 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 contentsrc/pages/About.tsx- About page contentsrc/pages/Contact.tsx- Contact formsrc/api/contact.ts- Contact form backendsrc/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 setupvite.config.ts- Build configurationtailwind.config.js- Styling configurationpackage.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.jpgto 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-depsto 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)
- Ran
- Updated Eliza's photo on About page
- 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)
- Added 4 new network relationships to interactive map:
- 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"
- Updated About page: Added "Insured" prefix to Registered Parliamentarian certification
- 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