mad-lawsuit/cline_docs/activeContext.md
TheMaddax b7125cf2b7 Phase 4: Production deployment configuration
- Add Docker configuration (Dockerfile, docker-compose.yml)
- Add Nginx and Supervisor configuration
- Add deployment documentation (DEPLOYMENT.md)
- Complete Phase 3 data migration (63 entries, 63 docs, 28 subs)
- Add responsive PDF viewer component
- Fix date format to American (MM/DD/YYYY)
- Update typography to match v1.0
- Add admin dashboard with full CRUD operations
- Configure PostgreSQL with secure password
- Connect to caddy_network for reverse proxy
- Ready for production deployment
2025-12-17 19:12:32 -07:00

16 KiB

Active Context - Current Work Status

Current Task: v2.0 PHASE 3 DATA MIGRATION - 100% COMPLETE

MAD Lawsuit Website v2.0 - Data Migration from v1.0 Production:

  • v1.0 Status: Fully operational at https://mad-lawsuit.org (Next.js + Express + React)
  • v2.0 Goal: Rebuild with Laravel + Inertia + Vue + TypeScript
  • Current Phase: Phase 3 - Data Migration (100% complete)
  • Status: ALL DATA MIGRATED SUCCESSFULLY - Ready for Phase 4

Phase 3 Complete - Data Migration

All Steps Completed:

  1. PostgreSQL Data Export

    • Exported via pg_dump from production server (10.4.0.205)
    • File: /tmp/v1-data.sql (local machine)
    • Contains: 63 docket entries, 63 documents, 28 subscriptions
  2. PDF Files Transfer

    • Copied via SCP from production: /docker/websites/mad-lawsuit/uploads/*.pdf
    • Destination: storage/app/public/documents/
    • Total: 69 PDF files (158MB transferred successfully)
  3. Parser Development

    • Created parse_sql_to_seeder.py (v1) - captured 32/63 entries
    • Identified limitation: only parsed single-line INSERT statements
    • Created parse_sql_to_seeder_v2.py - handles multi-line INSERTs
    • Successfully parsed ALL 63 entries from SQL dump
  4. Seeder Automation

    • Created update_seeder.py (v1) - for initial 32 entries
    • Created update_seeder_v2.py - for complete 63 entries
    • Automatically updates V1DataMigrationSeeder.php
    • Fixes file paths: /app/uploads/documents/
  5. Data Import Execution

    • Cleared database: php artisan migrate:fresh --seed --seeder=AdminSeeder
    • Ran seeder: php artisan db:seed --class=V1DataMigrationSeeder
    • Result: 63 entries, 63 documents, 28 subscriptions imported
  6. Data Integrity Verification

    • Database counts: 63/63/28
    • Sample entries verified (IDs 1-76)
    • All dates and titles accurate
    • Relationships intact (entries → documents)
    • File paths corrected for v2.0

Files Created:

  • parse_sql_to_seeder_v2.py - Multi-line INSERT parser
  • update_seeder_v2.py - Seeder automation script
  • seeder_data_full.txt - Complete parsed data (63 entries)
  • DATA_COMPARISON_REPORT.md - Detailed migration analysis
  • check_v1_data.js - v1.0 data verification script

v2.0 Phase 2 COMPLETED

Admin Dashboard - Fully Functional:

Controllers Implemented:

  • AuthController - Login/logout with session management
  • DashboardController - Statistics and recent entries
  • DocketEntryController - Full CRUD (7 resource methods)
  • DocumentController - PDF upload/delete with UUID naming
  • SubscriberController - List and deactivate subscribers

Vue Pages Created:

  • Admin/Login.vue - Professional authentication page
  • Admin/Dashboard.vue - Statistics cards, quick actions, recent entries
  • Admin/DocketEntries/Index.vue - Paginated table (20 per page)
  • Admin/DocketEntries/Create.vue - Form for new entries
  • Admin/DocketEntries/Edit.vue - Update existing entries
  • Admin/DocketEntries/Show.vue - View details + upload documents
  • Admin/Subscribers/Index.vue - Manage email subscribers (50 per page)

Features Implemented:

  • Session-based authentication (separate from Breeze)
  • Full CRUD operations for docket entries
  • PDF document upload with validation (10MB max, PDF only)
  • UUID-based file naming for security
  • File storage in storage/app/public/documents
  • Storage symlink configured (php artisan storage:link)
  • Pagination for entries and subscribers
  • Soft delete for subscribers (deactivate)
  • Cascade delete for entries (removes documents)
  • Professional UI with Tailwind CSS
  • Form validation with error display
  • Success/error flash messages
  • Responsive design

Admin Access:

v2.0 Technology Stack

Backend:

  • Framework: Laravel 12.43.1 (latest stable)
  • PHP: 8.3.28
  • Database: SQLite (development), PostgreSQL (production)
  • ORM: Eloquent (replacing Prisma)
  • Auth: Laravel Sanctum + Session
  • API: Inertia.js server-side

Frontend:

  • Framework: Vue 3 + TypeScript
  • Routing: Inertia.js (SSR-like experience)
  • Styling: Tailwind CSS 3.x
  • Build Tool: Vite 7.x
  • Components: Vue SFC (Single File Components)

Development Environment:

  • PHP: Installed via Homebrew (8.3.28)
  • Composer: 2.9.2
  • Node: Latest stable
  • NPM: With legacy-peer-deps for Vite compatibility
  • Servers: Laravel (8000), Vite (5173)

v2.0 Progress Checklist

Phase 1 - Public Website COMPLETE:

  • Install PHP 8.3 and Composer locally
  • Create Laravel 12 project
  • Install Laravel Breeze with Vue + Inertia + TypeScript
  • Resolve NPM dependency conflicts (Vite 7 compatibility)
  • Install all NPM packages successfully
  • Create database migrations (docket_entries, documents, subscriptions, admin_users)
  • Create Eloquent models with relationships
  • Run migrations successfully (SQLite)
  • Create HomeController with Inertia
  • Build Vue home page component matching v1.0 design
  • Test locally with development servers (php artisan serve + npm run dev)
  • Verify website rendering correctly
  • Implement email subscription API
  • Add document download functionality

Phase 2 - Admin Dashboard COMPLETE:

  • Build admin authentication (session-based)
  • Create AdminUser model and migration
  • Implement AuthController (login/logout)
  • Create AdminAuth middleware
  • Build Admin/Login.vue page
  • Implement DashboardController with statistics
  • Create Admin/Dashboard.vue page
  • Implement DocketEntryController (all 7 CRUD methods)
  • Create all DocketEntry Vue pages (Index, Create, Edit, Show)
  • Implement DocumentController (store, destroy)
  • Implement SubscriberController (index, destroy)
  • Create Admin/Subscribers/Index.vue page
  • Set up file storage for PDFs
  • Configure storage symlink

Phase 3 - Data Migration COMPLETE (100%):

  • Export v1.0 production data (PostgreSQL dump)
  • Copy PDF files from production (69 files, 158MB)
  • Create V1DataMigrationSeeder (tested with sample data)
  • Create Python parser script (parse_sql_to_seeder.py)
  • Identify parser limitation (only captured 32/63 entries)
  • Create improved parser v2 (parse_sql_to_seeder_v2.py) with multi-line support
  • Generate complete PHP arrays (63 entries, 63 docs, 28 subs)
  • Update seeder with all production data
  • Run seeder to import ALL data
  • Verify 100% data integrity in database (63/63/28)

Phase 4 - Production Deployment PENDING:

  • Configure PostgreSQL connection (for production)
  • Implement email notifications
  • Deploy to v2.mad-lawsuit.org for testing
  • Final testing and verification
  • Switch DNS to v2.0

v2.0 Design Specifications

Complete v1.0 documentation captured:

  • Visual design (colors, typography, layout)
  • Component specifications (forms, cards, buttons)
  • Functional requirements (interactions, animations)
  • Data structures (63 entries, 63 PDFs, 28 subscribers)
  • Admin dashboard specs (complete CRUD operations)
  • Production data verified from live database

Reference Document: cline_docs/v1_design_specifications.md (400+ lines)

Next Immediate Steps

Phase 3 Complete! Ready for Phase 4:

  1. Configure PostgreSQL - Set up production database connection
  2. Implement Email Notifications - SMTP configuration for subscriber alerts
  3. Deploy to v2.mad-lawsuit.org - Test subdomain deployment
  4. Final Testing - Comprehensive verification of all features
  5. Switch DNS - Point mad-lawsuit.org to v2.0

Data Migration Details

v1.0 Production Data:

  • Docket Entries: 63 entries with dates, titles, summaries
  • Documents: 63 PDF files (UUID filenames)
  • Subscriptions: 28 email subscribers
  • Total Size: 158MB of PDF files

Schema Mapping (v1.0 → v2.0):

  • docket_entries.iddocket_entries.id
  • docket_entries.datedocket_entries.date
  • docket_entries.titledocket_entries.title
  • docket_entries.summarydocket_entries.summary
  • docket_entries.notesdocket_entries.notes
  • docket_entries.createdAtdocket_entries.created_at
  • docket_entries.updatedAtdocket_entries.updated_at
  • documents.docketEntryIddocuments.docket_entry_id
  • documents.storedFilenamedocuments.stored_filename
  • documents.originalFilenamedocuments.original_filename
  • documents.fileSizedocuments.file_size
  • documents.mimeTypedocuments.mime_type
  • documents.displayOrderdocuments.display_order
  • subscriptions.isActivesubscriptions.is_active
  • subscriptions.unsubscribeTokensubscriptions.unsubscribe_token
  • subscriptions.createdAtsubscriptions.created_at

Previous Task: v1.0 PRODUCTION SERVER MIGRATION COMPLETED

MAD Lawsuit Website Successfully Migrated to New Infrastructure:

  • Old Server: chrishaulmark.com (DigitalOcean VPS - being decommissioned)
  • New Server: 10.4.0.205 (Dedicated server behind NAT)
  • Status: FULLY OPERATIONAL WITH ALL DATA MIGRATED
  • v1.0 Tagged: Git tag v1.0 created and pushed to Gitea

Migration Implementation Details

Infrastructure Changes:

  1. Package Upgrades COMPLETED

    • Frontend: React 18→19, Next.js 15→16, Tailwind 3→4
    • Backend: Prisma 5→7, Express 4→5
    • All Dependencies: Updated to latest stable versions
    • Docker Images: Rebuilt with new package versions
  2. Caddy Reverse Proxy Fix COMPLETED

    • Problem: Docker DNS resolving container hostnames to wrong network IPs
    • Impact: Caddy timing out trying to reach containers
    • Solution: Updated Caddyfile to use direct IP addresses on caddy_network
    • Frontend IP: 172.18.0.6:806 (instead of hostname)
    • Backend IP: 172.18.0.5:901 (instead of hostname)
    • File: /home/chaulmark/docker/caddy/config/Caddyfile on server
  3. Data Migration COMPLETED

    • Database: PostgreSQL data (47MB) migrated from old server
    • PDF Files: 158MB of court documents (69 files) migrated
    • Redis Cache: Cache data migrated
    • Method: Created tar archive, transferred via rsync, extracted on new server
    • Location: /docker/websites/mad-lawsuit/ on 10.4.0.205
  4. SSL Certificates COMPLETED

    • Provider: Let's Encrypt via Caddy
    • Domains: mad-lawsuit.org, files.mad-lawsuit.org
    • Status: Active and auto-renewing

Final Production Architecture

┌─────────────────────────────────────────────────────────┐
│              Caddy Reverse Proxy (10.4.0.205)          │
│                                                         │
│  mad-lawsuit.org → 172.18.0.6:806 (Frontend)          │
│  files.mad-lawsuit.org → 172.18.0.5:901 (Backend)     │
└─────────────────────────────────────────────────────────┘
                           │
                           ├─────────────────────────────┐
                           │                             │
                    ┌──────▼──────┐              ┌──────▼──────┐
                    │  Frontend   │              │   Backend   │
                    │  Port 806   │──────────────│   Port 901  │
                    │  Next.js 16 │   API Calls  │  Express 5  │
                    │  React 19   │              │  Prisma 7   │
                    └─────────────┘              └─────────────┘
                                                        │
                                                 ┌──────▼──────┐
                                                 │  PostgreSQL │
                                                 │  + Redis    │
                                                 └─────────────┘

Deployment Server Information

IMPORTANT: All deployments now go to 10.4.0.205 (NOT chrishaulmark.com)

Server Details:

  • Hostname: public-websites (internal: 10.4.0.205)
  • External Access: Via NAT through dedicated server
  • SSH Access: ssh chaulmark@10.4.0.205
  • Project Location: ~/websites/mad-lawsuit.org/
  • Docker Volumes: /docker/websites/mad-lawsuit/

Deployment Commands:

# SSH to production server
ssh chaulmark@10.4.0.205

# Navigate to project
cd ~/websites/mad-lawsuit.org

# Pull latest code
git pull

# Rebuild and restart containers
docker compose down
docker compose build
docker compose up -d

# Check container status
docker compose ps
docker compose logs -f

Verification

Current Status

What's Working

  • v2.0 Phase 1: Public website fully functional
  • v2.0 Phase 2: Admin dashboard complete with all CRUD operations
  • v2.0 Phase 3: 100% data migration complete (63/63/28)
  • Development Servers: Laravel (8000) and Vite (5173) running
  • Admin Authentication: Login working with session management
  • File Storage: PDFs uploading and downloading correctly
  • Database: SQLite with complete production data, ready for PostgreSQL migration
  • All 63 Entries: Imported and verified in database
  • All 63 Documents: Linked correctly with proper file paths
  • All 28 Subscriptions: Active and ready for notifications

Next Steps for User

Phase 4 - Production Deployment (On Hold):

  1. Configure PostgreSQL - Set up production database connection
  2. Implement Email Notifications - SMTP configuration
  3. Deploy to v2.mad-lawsuit.org - Test subdomain
  4. Final Testing - Comprehensive verification
  5. DNS Switchover - Point mad-lawsuit.org to v2.0

Files Modified (Phase 2 & 3)

Controllers:

  • app/Http/Controllers/Admin/AuthController.php
  • app/Http/Controllers/Admin/DashboardController.php
  • app/Http/Controllers/Admin/DocketEntryController.php
  • app/Http/Controllers/Admin/DocumentController.php
  • app/Http/Controllers/Admin/SubscriberController.php

Vue Pages:

  • resources/js/Pages/Admin/Login.vue
  • resources/js/Pages/Admin/Dashboard.vue
  • resources/js/Pages/Admin/DocketEntries/Index.vue
  • resources/js/Pages/Admin/DocketEntries/Create.vue
  • resources/js/Pages/Admin/DocketEntries/Edit.vue
  • resources/js/Pages/Admin/DocketEntries/Show.vue
  • resources/js/Pages/Admin/Subscribers/Index.vue

Middleware & Routes:

  • app/Http/Middleware/AdminAuth.php
  • routes/web.php

Database:

  • database/seeders/AdminSeeder.php
  • database/migrations/2025_12_17_223224_create_admin_users_table.php

Deployment Notes

  • Phase 2 Complete: All admin features working locally
  • Phase 3 In Progress: Data migration 50% complete
  • Ready for Seeder: SQL dump and PDFs ready for import
  • All code committed to Git repository

Investigation Process

  1. Phase 1: Built public website matching v1.0 design
  2. Phase 2: Implemented complete admin dashboard with CRUD
  3. Phase 3: Exported production data and transferred PDF files
  4. Next: Create seeder to import v1.0 data into v2.0

The MAD lawsuit website v2.0 rebuild is progressing well with Phase 2 complete and Phase 3 50% done.