- Added comprehensive .gitignore file with .DS_Store and common ignores - Updated backend/.env SMTP_PORT from 587 to 2525 for Gmail smuggler - Updated Memory Bank documentation with Gmail smuggler implementation - Removed smtp-relay-container directory (moved outside project)
8.4 KiB
Active Context - Current Work Status
Current Task: GMAIL SMUGGLER FULLY OPERATIONAL ✅
SMTP Relay Solution Successfully Implemented:
- DigitalOcean Server (chrishaulmark.com): SMTP ports 25, 465, 587 BLOCKED by DigitalOcean
- Dedicated Server (74.80.182.50): All SMTP ports WORKING ✅
- Gmail Smuggler Container: DEPLOYED and RUNNING ✅ on port 2525 (unblocked)
Solution: DNS override + port 2525 SMTP relay bypasses DigitalOcean SMTP blocking completely.
Gmail Smuggler Final Configuration
- Container Name:
gmail-smuggler - Location:
10.4.0.206:~/gmail-smuggler/(internal VM) - Status: Running with Docker Compose auto-restart
- Port: 2525 (external) → 587 (internal, forwarding to smtp.gmail.com:587)
- Technology: Alpine Linux + socat TCP relay
- OPNsense: Port forwarding 2525 → 10.4.0.206:2525
Implementation Details
- DNS Override:
74.80.182.50 smtp.gmail.comin/etc/hosts✅ - Backend Configuration:
SMTP_PORT=2525inbackend/.env✅ - Port Forwarding: OPNsense forwards port 2525 to internal VM ✅
- Connection Verified: DigitalOcean VPS → 74.80.182.50:2525 → Gmail ✅
Email Flow
Court Docket Website → smtp.gmail.com:2525 → 74.80.182.50:2525 → 10.4.0.206:2525 → Gmail SMTP
Previous Task: COMPLETED ✅
DeafGain LLC Footer Addition - Added "Designed by DeafGain LLC" footer to the court docket website.
Previous Task: COMPLETED ✅
Email System URL Fix - Updated email notifications to use production domain and added unsubscribe instructions.
Previous Task: COMPLETED ✅
PDF Upload Issue Resolution - Successfully identified and fixed all issues preventing PDF document uploads in the admin dashboard.
Recent Work Completed
DeafGain LLC Footer Addition - COMPLETED ✅
Problem: Website was missing professional branding footer like other DeafGain websites.
Solution Implemented:
-
Footer Design ✅ ADDED
- Implementation: Added footer section at bottom of home page
- Styling: Matches website theme with dark background and yellow accent text
- Content: "Designed by DeafGain LLC" with link to http://deafgain.org
- File:
frontend/src/app/page.tsx
-
Visual Consistency ✅ ACHIEVED
- Reference: Based on Chris Haulmark website footer implementation
- Colors: Gray text with yellow (#fbbf24) DeafGain LLC link
- Hover Effect: Color changes to darker yellow (#f59e0b) on hover
- Layout: Centered text in footer section
Footer Implementation:
<footer style={{
width: '100%',
padding: '2rem 0',
backgroundColor: 'rgba(57, 64, 83, 0.95)',
borderTop: '1px solid #4E4A59',
textAlign: 'center',
display: 'block'
}}>
<div style={{ textAlign: 'center', display: 'block', width: '100%' }}>
<span style={{ color: '#9ca3af' }}>Designed by </span>
<a href="http://deafgain.org" target="_blank" rel="noopener noreferrer"
style={{ color: '#fbbf24', textDecoration: 'none' }}>
DeafGain LLC
</a>
</div>
</footer>
Email System URL Fix - COMPLETED ✅
Problem: Email notifications were linking to localhost instead of production domain, and missing unsubscribe instructions.
Issues Fixed:
-
Production URL Issue ✅ FIXED
- Problem: Email links pointed to
localhost:3000instead of production domain - Impact: Subscribers couldn't access website from email notifications
- Solution: Updated all email links to use
https://mad-lawsuit.org/ - File:
backend/src/services/emailService.ts
- Problem: Email links pointed to
-
Email Text Improvement ✅ FIXED
- Problem: Generic "court docket website" text in emails
- Impact: Less professional email presentation
- Solution: Changed to "You can view the complete docket and any associated documents by visiting the website:" with website as clickable link
- File:
backend/src/services/emailService.ts
-
Missing Unsubscribe Instructions ✅ FIXED
- Problem: No clear unsubscribe instructions for email recipients
- Impact: Users couldn't easily unsubscribe from notifications
- Solution: Added "To unsubscribe, please send an email to eliza.kragh@gmail.com" in footer
- File:
backend/src/services/emailService.ts
Email Changes Made:
<!-- Before -->
<p>You can view the complete docket and any associated documents by visiting the court docket website:</p>
<a href="${process.env['FRONTEND_URL'] || 'http://localhost:3000'}" class="button">View Court Docket</a>
<!-- After -->
<p>You can view the complete docket and any associated documents by visiting the <a href="https://mad-lawsuit.org/">website</a>:</p>
<a href="https://mad-lawsuit.org/" class="button">View Court Docket</a>
<p>To unsubscribe, please send an email to eliza.kragh@gmail.com</p>
PDF Upload Issue - FULLY RESOLVED ✅
Problem: Users could not upload PDF documents through the admin dashboard, receiving various errors.
Root Causes Identified and Fixed:
-
Network Connectivity Issue ✅ FIXED
- Problem: Frontend container only on
caddy_network, backend onapp-network - Impact: Frontend couldn't reach backend for API calls
- Solution: Added frontend to both networks in
docker-compose.yml - Commit:
910bd525
- Problem: Frontend container only on
-
MIME Type Validation Issue ✅ FIXED
- Problem: Backend fileFilter only accepted
application/pdfMIME type - Impact: Valid PDFs rejected due to browser MIME detection variations
- Solution: Enhanced fileFilter to accept multiple PDF MIME types + file extension fallback
- File:
backend/src/routes/documents.ts - Commit:
9ab09196
- Problem: Backend fileFilter only accepted
-
Missing Form Data Issue ✅ FIXED
- Problem: Frontend only sending
fileanddocketEntryId, missing requiredtitlefield - Impact: Backend validation failing with "title is required" error
- Solution: Added all required fields to FormData in dashboard upload
- File:
frontend/src/app/admin/dashboard/page.tsx - Commit:
8027ef0a
- Problem: Frontend only sending
Technical Details
Network Architecture Fixed:
frontend:
networks:
- app-network # Added for backend communication
- caddy_network # Existing for reverse proxy
Enhanced PDF Detection:
const allowedMimeTypes = [
'application/pdf',
'application/x-pdf',
'application/acrobat',
'applications/vnd.pdf',
'text/pdf',
'text/x-pdf'
];
Complete Form Data:
uploadFormData.append('file', selectedFile);
uploadFormData.append('docketEntryId', data.entry.id.toString());
uploadFormData.append('title', selectedFile.name.replace('.pdf', ''));
uploadFormData.append('summary', '');
uploadFormData.append('notes', '');
Current Status
What's Working ✅
- Network connectivity between frontend and backend
- PDF MIME type detection (multiple formats)
- Form validation with all required fields
- Error logging and debugging
- Email system with production URLs (https://mad-lawsuit.org/)
- Professional unsubscribe instructions (eliza.kragh@gmail.com)
- DeafGain LLC footer branding with professional styling
- All code committed and pushed to Git
Next Steps for User
- Redeploy frontend container in Portainer to apply footer changes
- Redeploy backend container in Portainer to apply email fixes
- Test website footer - should show "Designed by DeafGain LLC" at bottom
- Test email notifications - should now link to https://mad-lawsuit.org/
- Verify unsubscribe instructions appear in email footer
Files Modified
docker-compose.yml- Network configurationbackend/src/routes/documents.ts- Enhanced PDF validationfrontend/src/app/admin/dashboard/page.tsx- Fixed form databackend/src/services/emailService.ts- Updated URLs and unsubscribe infofrontend/src/app/page.tsx- Added DeafGain LLC footer
Deployment Notes
- User manages deployment via Portainer (not direct SSH)
- All fixes are committed to Git repository
- Backend and frontend both need redeployment to apply fixes
Investigation Process
- Network Analysis: Discovered frontend/backend network isolation
- Log Analysis: Found MIME type validation errors in production logs
- Code Review: Identified missing form fields in upload request
- Systematic Fixes: Applied fixes in logical order with proper testing
The PDF upload functionality should now work completely once containers are redeployed.