- 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
368 lines
16 KiB
Markdown
368 lines
16 KiB
Markdown
# 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**:
|
|
- URL: http://127.0.0.1:8000/admin/login
|
|
- Username: admin
|
|
- Password: password
|
|
|
|
### 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:
|
|
- [x] Install PHP 8.3 and Composer locally
|
|
- [x] Create Laravel 12 project
|
|
- [x] Install Laravel Breeze with Vue + Inertia + TypeScript
|
|
- [x] Resolve NPM dependency conflicts (Vite 7 compatibility)
|
|
- [x] Install all NPM packages successfully
|
|
- [x] Create database migrations (docket_entries, documents, subscriptions, admin_users)
|
|
- [x] Create Eloquent models with relationships
|
|
- [x] Run migrations successfully (SQLite)
|
|
- [x] Create HomeController with Inertia
|
|
- [x] Build Vue home page component matching v1.0 design
|
|
- [x] Test locally with development servers (php artisan serve + npm run dev)
|
|
- [x] Verify website rendering correctly
|
|
- [x] Implement email subscription API
|
|
- [x] Add document download functionality
|
|
|
|
**Phase 2 - Admin Dashboard** ✅ COMPLETE:
|
|
- [x] Build admin authentication (session-based)
|
|
- [x] Create AdminUser model and migration
|
|
- [x] Implement AuthController (login/logout)
|
|
- [x] Create AdminAuth middleware
|
|
- [x] Build Admin/Login.vue page
|
|
- [x] Implement DashboardController with statistics
|
|
- [x] Create Admin/Dashboard.vue page
|
|
- [x] Implement DocketEntryController (all 7 CRUD methods)
|
|
- [x] Create all DocketEntry Vue pages (Index, Create, Edit, Show)
|
|
- [x] Implement DocumentController (store, destroy)
|
|
- [x] Implement SubscriberController (index, destroy)
|
|
- [x] Create Admin/Subscribers/Index.vue page
|
|
- [x] Set up file storage for PDFs
|
|
- [x] Configure storage symlink
|
|
|
|
**Phase 3 - Data Migration** ✅ COMPLETE (100%):
|
|
- [x] Export v1.0 production data (PostgreSQL dump)
|
|
- [x] Copy PDF files from production (69 files, 158MB)
|
|
- [x] Create V1DataMigrationSeeder (tested with sample data)
|
|
- [x] Create Python parser script (parse_sql_to_seeder.py)
|
|
- [x] Identify parser limitation (only captured 32/63 entries)
|
|
- [x] Create improved parser v2 (parse_sql_to_seeder_v2.py) with multi-line support
|
|
- [x] Generate complete PHP arrays (63 entries, 63 docs, 28 subs)
|
|
- [x] Update seeder with all production data
|
|
- [x] Run seeder to import ALL data
|
|
- [x] 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.id` → `docket_entries.id`
|
|
- `docket_entries.date` → `docket_entries.date`
|
|
- `docket_entries.title` → `docket_entries.title`
|
|
- `docket_entries.summary` → `docket_entries.summary`
|
|
- `docket_entries.notes` → `docket_entries.notes`
|
|
- `docket_entries.createdAt` → `docket_entries.created_at`
|
|
- `docket_entries.updatedAt` → `docket_entries.updated_at`
|
|
- `documents.docketEntryId` → `documents.docket_entry_id`
|
|
- `documents.storedFilename` → `documents.stored_filename`
|
|
- `documents.originalFilename` → `documents.original_filename`
|
|
- `documents.fileSize` → `documents.file_size`
|
|
- `documents.mimeType` → `documents.mime_type`
|
|
- `documents.displayOrder` → `documents.display_order`
|
|
- `subscriptions.isActive` → `subscriptions.is_active`
|
|
- `subscriptions.unsubscribeToken` → `subscriptions.unsubscribe_token`
|
|
- `subscriptions.createdAt` → `subscriptions.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**:
|
|
```bash
|
|
# 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 ✅
|
|
- **Website**: https://mad-lawsuit.org (HTTP/2 200 ✓)
|
|
- **Backend API**: https://files.mad-lawsuit.org (HTTP/2 200 ✓)
|
|
- **Database**: 63 docket entries with all historical data ✓
|
|
- **PDF Files**: 69 court documents accessible ✓
|
|
- **All Containers**: Running and healthy ✓
|
|
|
|
## 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.
|