deafgain-website/cline_docs/gitWorkflow.md

13 KiB

Git Workflow & Memory Bank

Git Configuration

Repository Information

  • Repository URL: https://gitea.sigd.net/chaulmark/deafgain-website
  • Gitea Server: gitea.sigd.net (private Gitea instance)
  • Username: eliza
  • Authentication: Personal Access Token
  • Current Token: 3dba996c9eca5b6267f7cd1b0996a94aac1ac0d5 (created 3/5/2026)
  • Local Path: /Users/Eliza/DeafGain-website
  • Main Branch: main
  • Latest Commit: 78aade0c94a4bad05e5b8ff95d025e0b68e17336

Token Permissions

The access token has been configured with:

  • Read repository access
  • Write repository access (for pushing changes)

Git Remote Configuration

# Remote is already configured:
origin: https://eliza:3dba996c9eca5b6267f7cd1b0996a94aac1ac0d5@gitea.sigd.net/chaulmark/deafgain-website.git

Common Git Workflows

1. Checking Repository Status

# Check current status
git status

# View current branch
git branch

# View remote branches
git branch -r

2. Pulling Latest Changes

# Pull from main branch (recommended before starting work)
git pull origin main

# Or simply
git pull

3. Viewing Changes History

# View recent commits (short format)
git log --oneline --graph --all -15

# View specific commit details
git show HEAD
git show <commit-hash>

# View changes between commits
git diff HEAD~1 HEAD
git diff <commit-hash1> <commit-hash2>

# View files changed in a commit
git show --stat HEAD

4. Making Changes

# After editing files, check what changed
git status
git diff

# Stage all changes
git add .

# Or stage specific files
git add src/pages/Services.tsx

# Commit changes with meaningful message
git commit -m "Add new feature: Interactive map updates"

# Push to remote repository
git push origin main
# Or simply
git push

5. Viewing File History

# View commit history for specific file
git log --oneline src/pages/Services.tsx

# View changes to a file over time
git log -p src/pages/Services.tsx

# Who changed what in a file
git blame src/pages/Services.tsx

6. Undoing Changes

# Discard changes to a file (before staging)
git checkout -- src/pages/Services.tsx

# Unstage a file (keep changes)
git reset HEAD src/pages/Services.tsx

# Undo last commit (keep changes)
git reset --soft HEAD~1

# Undo last commit (discard changes - DANGEROUS)
git reset --hard HEAD~1

7. Working with Branches

# Create new branch
git checkout -b feature/new-feature

# Switch branches
git checkout main

# List all branches
git branch -a

# Delete branch
git branch -d feature/old-feature

# Push branch to remote
git push origin feature/new-feature

Recent Commit History

Latest Changes (as of 3/5/2026)

78aade0 (HEAD -> main) - Update interactive map: Add RID conference to Missoula MT and update ASLTA description
4755cd3 - Consolidate services into single DeafGain Consultants offering
a565932 - Remove service selection field from contact form
ae7c52d - Add anti-spam honeypot field and update contact form service options
a0cf3e9 - Update memory bank status summary with current system state
df6c696 - Fix email configuration: Update SMTP port to 587 and regenerate Gmail app password
379c4e1 - Add Parliamentarian service and update Austin TX event
8b2b421 - Update email configuration: change SMTP port to 2525
5d49c9e - Remove ADA-compliant transcripts service
67c775a - Add two locations
86096d9 - Switch to Missoula from Helena
b1e7d29 - Add rebuild flags
b214427 - Added geographic locations for upcoming events

Git Authentication Troubleshooting

If Access Token Expires or Needs Regeneration

  1. Generate New Token in Gitea:

    • Log into https://gitea.sigd.net
    • Settings → Applications → Access Tokens
    • Delete old token
    • Generate new token with repository permissions
    • Copy the new token immediately
  2. Update Git Remote:

    # Remove old remote
    git remote remove origin
    
    # Add new remote with new token
    git remote add origin https://eliza:NEW_TOKEN_HERE@gitea.sigd.net/chaulmark/deafgain-website.git
    
    # Verify remote
    git remote -v
    
  3. Test Connection:

    git pull
    

Common Authentication Issues

Issue: 403 Forbidden error

  • Cause: Token doesn't have proper permissions or has expired
  • Solution: Generate new token with read:repository and write:repository permissions

Issue: Username incorrect

  • Cause: Using wrong Gitea username
  • Solution: Username is eliza (not email address eliza@deafgain.org)

Issue: Token doesn't work

  • Cause: Token permissions not properly configured
  • Solution: Ensure both read and write repository permissions are enabled

DeafGain Website Codebase Overview

Project Architecture

DeafGain-website/
├── Frontend (React + TypeScript)
│   ├── src/
│   │   ├── pages/           # Main page components
│   │   ├── components/      # Reusable UI components
│   │   ├── api/            # API integration layer
│   │   ├── context/        # React context providers
│   │   └── lib/            # Utility functions
│   └── public/             # Static assets
│       ├── videos/         # Video files (.mp4)
│       ├── subtitles/      # WebVTT subtitle files
│       ├── transcriptions/ # Text transcripts
│       └── images/         # Images and thumbnails
│
├── Backend (Node.js + Express)
│   └── server.ts           # API server
│
├── Docker Configuration
│   ├── docker-compose.yml        # Production orchestration
│   ├── docker-compose.dev.yml    # Development environment
│   ├── Dockerfile                # Frontend container
│   ├── Dockerfile.api            # Backend container
│   ├── Dockerfile.dev            # Dev frontend container
│   └── Dockerfile.dev.api        # Dev backend container
│
└── Configuration Files
    ├── vite.config.ts            # Vite build configuration
    ├── tailwind.config.js        # Tailwind CSS config
    ├── tsconfig.json             # TypeScript config
    ├── nginx.conf                # Nginx configuration
    ├── default.conf              # Nginx reverse proxy
    └── .env                      # Environment variables

Key Files and Their Purposes

Frontend Pages (src/pages/)

  • Home.tsx: Landing page with hero section and overview
  • About.tsx: Information about Eliza and DeafGain
  • Services.tsx: Service offerings + interactive US map with conference locations
  • Resources.tsx: Video library with 6 governance training videos
  • Contact.tsx: Contact form with email notifications

Components (src/components/)

  • Layout/: Navbar, Footer, Layout wrapper
  • VideoPlayer.tsx: Custom video player with WebVTT subtitle support
  • SnowPeaks.tsx: Animated background graphics
  • Toast.tsx: Notification component

Backend (server.ts & src/api/)

  • server.ts: Main Express API server
  • api/contact.ts: Contact form endpoint with email sending
  • api/subscribe.ts: Newsletter subscription endpoint
  • lib/email.ts: Email service integration (Gmail SMTP)
  • lib/rate-limit.ts: Rate limiting logic

Important Patterns

1. Video Resource Structure

Each video requires 4 files:

public/videos/video-name.mp4               # Video file
public/subtitles/video-name.vtt            # WebVTT subtitles
public/transcriptions/video-name.txt       # Full text transcript
public/images/thumbnails/video-name.png    # Thumbnail image

2. Interactive Map Data

Location data structure in Services.tsx:

const relationshipPoints: RelationshipPoint[] = [
  {
    coordinates: [-longitude, latitude],
    city: "City Name",
    state: "State",
    events: [{
      name: "Organization Acronym",
      description: "Full event description",
      startDate: "Month DD, YYYY",
      endDate: "Month DD, YYYY"
    }]
  }
]

3. Environment Variables

Critical .env variables:

NODE_ENV=production
GMAIL_USER=system@deafgain.org
GMAIL_PASS=gmail_app_password
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
REDIS_URL=redis://localhost:6379
API_URL=http://localhost:804

Development Workflow

Making Changes to the Website

  1. Pull latest changes

    git pull
    
  2. Make your changes

    • Edit files as needed
    • Test locally with pnpm dev
  3. Check what changed

    git status
    git diff
    
  4. Stage and commit

    git add .
    git commit -m "Descriptive message about changes"
    
  5. Push to Gitea

    git push
    
  6. Deploy to production

    • Changes are pulled to production server
    • Docker containers rebuilt with docker-compose up --build -d

Adding New Videos

  1. Prepare files:

    • Video: public/videos/video-name.mp4
    • Subtitles: public/subtitles/video-name.vtt
    • Transcript: public/transcriptions/video-name.txt
    • Thumbnail: public/images/thumbnails/video-name.png
  2. Update Resources.tsx:

    {
      id: 'video-name',
      title: 'Video Title',
      thumbnail: '/images/thumbnails/video-name.png',
      description: 'Description',
      category: 'Professional Development & Governance'
    }
    
  3. Commit and push:

    git add public/videos/ public/subtitles/ public/transcriptions/ public/images/thumbnails/ src/pages/Resources.tsx
    git commit -m "Add new video: Video Title"
    git push
    

Updating Interactive Map

  1. Edit Services.tsx
  2. Add new location to relationshipPoints array
  3. Use exact coordinates from Google Maps
  4. Commit and push changes
  5. Docker must rebuild with no_cache: true flag

Production Deployment

Current Production Setup

  • URL: https://deafgain.org/
  • Server: 10.4.0.206 (behind Caddy reverse proxy)
  • Network: caddy_network (172.22.0.0/16)
  • Containers:
    • deafgain-website-web-1 (port 804)
    • deafgain-website-api-1 (port 3000)
    • deafgain-website-redis-1

Deployment Process

# On production server
cd /docker/websites/deafgain/
git pull
docker-compose up --build -d
docker-compose logs -f  # Monitor logs

Common Tasks Reference

View Recent Changes

git log --oneline --graph --all -15

See What Files Changed in Last Commit

git show --stat HEAD

See Full Changes in Last Commit

git show HEAD

Compare Two Commits

git diff abc123 def456

Search Commit History

# Find commits by message
git log --grep="map"

# Find commits that changed a specific file
git log -- src/pages/Services.tsx

# Find commits by author
git log --author="eliza"

Undo Last Commit (Keep Changes)

git reset --soft HEAD~1

Discard All Local Changes

git reset --hard HEAD
git clean -fd

Best Practices

Commit Messages

  • Use descriptive, clear messages
  • Start with a verb (Add, Update, Fix, Remove)
  • Be specific about what changed
  • Examples:
    • "Add RID conference to Missoula MT on interactive map"
    • "Fix email SMTP configuration and update app password"
    • "Updates"
    • "Fixed stuff"

Before Making Changes

  1. Always git pull first
  2. Check current status with git status
  3. Review what you're about to commit with git diff

After Making Changes

  1. Test locally if possible
  2. Review changes with git status and git diff
  3. Commit with clear message
  4. Push to remote
  5. Verify on production if critical

Working with Production

  • Test changes locally before pushing
  • Be cautious with Docker configuration changes
  • Monitor logs after deployment
  • Keep .env file secure (never commit)

Security Notes

  • Never commit .env file - contains sensitive credentials
  • Keep access token secure - treat like a password
  • Regenerate token if exposed - create new one immediately
  • Use app-specific passwords - for Gmail integration
  • Review changes before pushing - especially configuration files

Quick Reference Commands

Task Command
Pull latest changes git pull
Check status git status
View recent commits git log --oneline -15
View last commit git show HEAD
Stage all changes git add .
Commit changes git commit -m "message"
Push to remote git push
Undo last commit (keep changes) git reset --soft HEAD~1
Discard local changes git reset --hard HEAD
View file history git log -- path/to/file
Search commits git log --grep="keyword"

Useful Git Aliases

Add these to your .gitconfig for shortcuts:

git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.lg "log --oneline --graph --all"
git config --global alias.last "show HEAD"

Then use:

  • git st instead of git status
  • git lg instead of git log --oneline --graph --all
  • git last instead of git show HEAD