Commit graph

108 commits

Author SHA1 Message Date
friday-bot
041fb91182 Add unique visitor total and CSV export to document access
Surfaces distinct visitors for the selected range as a headline figure, and
lets the current view be exported for use in filings without retyping.

Unique visitors are counted across the range as a whole rather than summed
per document, so one person pulling five filings counts once. Where visitor
IPs were never recorded the CSV leaves the cell blank instead of writing 0,
which would otherwise read as "nobody downloaded this".
2026-07-30 13:49:10 -06:00
friday-bot
04bd71aaaa Add document access statistics to admin dashboard
Records every successful document download and surfaces the counts in the
admin area, so the docket owner can see which filings are being pulled and
how often.

- document_accesses table + DocumentAccess model
- DocumentController@download records each successful download with IP and
  user agent
- documents:import-access-log backfills history from an archived nginx log
- Dashboard gains a 60-day downloads card and a most-requested list
- New Document Access page with a date-range filter and per-day trend

Client IPs were only captured from 2026-07-30, when the reverse proxy chain
started forwarding X-Forwarded-For correctly. Rows imported from the old
nginx log therefore have no IP, and the UI labels those periods as download
counts rather than unique visitors instead of showing a misleading number.
2026-07-30 13:14:01 -06:00
13e7d23e0a Add Copy Link button to PDF viewer
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-23 12:43:59 -06:00
8bc2a45e39 Update Gmail app password for email notifications 2026-01-11 09:53:00 -07:00
b85187c92b Fix PostgreSQL sequence issue after data import
- Added fixSequences() method to V1DataMigrationSeeder
- Automatically resets sequences for docket_entries, documents, and subscriptions
- Prevents 'duplicate key value violates unique constraint' errors
- Fixes issue where PDF uploads were failing due to out-of-sync sequences
2026-01-11 09:38:54 -07:00
ecb2322ac6 Update memory bank: DNS switchover complete, email notifications enabled, iPad fix deployed 2025-12-19 22:38:36 -07:00
81aaa22875 Enable email notifications to all active subscribers 2025-12-19 22:26:02 -07:00
d15a2fcb30 Add comprehensive DNS switchover instructions for v2.0 deployment 2025-12-19 22:10:21 -07:00
10b3f92cdd Change port from 8080 to 806 to match v1 configuration 2025-12-19 22:09:32 -07:00
8243ee1a92 Update .env for DNS switchover - change URLs to mad-lawsuit.org 2025-12-19 22:07:46 -07:00
159ce11eb8 Fix iPad PDF scroll issue - detect iOS and open in new tab 2025-12-19 17:44:14 -07:00
400678f4af Update memory bank with Phase 4.1 enhancements
- PDF upload fix (nginx permissions)
- Unsubscribe confirmation page
- Date format consistency (American MM/DD/YYYY)
- Removed pagination from docket entries admin page
- All features deployed and tested
2025-12-18 12:02:15 -07:00
b48b51ab6e Remove pagination from admin docket entries - show all on one page 2025-12-18 11:54:05 -07:00
1f3bf22553 Fix subscriber date format to American MM/DD/YYYY 2025-12-18 11:47:27 -07:00
e2930c6ce9 Fix CSRF token in unsubscribe page 2025-12-18 11:41:41 -07:00
474df2aa61 Add unsubscribe confirmation page
- Created Unsubscribe.vue with matching site styling
- Added showUnsubscribe method to SubscriptionController
- Updated routes: GET /unsubscribe/{token} shows confirmation page
- POST /api/unsubscribe/{token} processes unsubscribe
- Updated email template to use new unsubscribe route
- Prevents accidental unsubscribes with confirmation dialog
2025-12-18 11:33:47 -07:00
80b5adf3f4 Fix nginx parent directory permissions
- chmod 755 on /var/lib/nginx to allow www-data to traverse
- Parent directory was 750 (drwxr-x---) owned by nginx:nginx
- www-data couldn't access tmp subdirectory despite owning it
- This fixes the Permission denied error on PDF uploads
2025-12-18 10:52:23 -07:00
a81f26ce88 Fix nginx temp directory permissions in Dockerfile
- Create nginx temp directories during build
- Set proper ownership (www-data) and permissions (775)
- Fixes 'Permission denied' error on PDF uploads
2025-12-18 10:49:12 -07:00
b2b061b57a Add comprehensive debug logging for PDF upload
- Added detailed logging at each step of upload process
- Logs file info, validation, storage, and database creation
- Catches and logs full exception details with stack trace
- Will help diagnose 500 error on PDF upload
2025-12-18 10:40:37 -07:00
6f66e0987a Change email notifications to manual trigger
- Removed automatic email sending on docket entry creation
- Added sendNotification() method to DocketEntryController
- Added route for manual notification trigger
- Added 'Send Notification' button to Show page
- Email now only sends when admin explicitly clicks button
- Still in testing mode (chris@deafgain.org only)
2025-12-18 10:38:07 -07:00
2f9670caf9 Add PostgreSQL sequence fix script 2025-12-18 10:31:54 -07:00
9687b9b9be Add email notification system for new docket entries
- Created NewDocketEntryNotification mailable class
- Added professional HTML email template
- Updated DocketEntryController to send notifications on entry creation
- TESTING MODE: Only sends to chris@deafgain.org
- Configured SMTP with Gmail (system@deafgain.org)
- Added logging for email delivery tracking
- Production code commented out for safety during testing
2025-12-18 10:21:31 -07:00
2393f50b25 Update Memory Bank with bug fixes and configuration changes 2025-12-18 10:01:22 -07:00
4bfe443633 Increase file upload limit to 500MB for large court documents 2025-12-18 10:00:04 -07:00
94fe847c22 Update README with comprehensive project documentation 2025-12-18 09:55:19 -07:00
0187c2d822 Fix subscribers page - use items() instead of through() for pagination 2025-12-18 09:46:06 -07:00
9ad058339a Add mobile detection - open PDFs in new tab on screens < 768px 2025-12-18 08:56:36 -07:00
7d792fe635 Simplify PDF viewer to match v1.0 - remove wrapper div for mobile scrolling 2025-12-18 08:48:53 -07:00
0273caca03 Fix mobile PDF viewer scrolling - wrap iframe in scrollable container 2025-12-18 08:36:42 -07:00
73b0e7ae9e Fix mobile/tablet PDF viewer - enable viewing in all orientations with scrolling 2025-12-18 08:32:59 -07:00
7b409eba81 Match v1 background colors exactly (#6E6362 and rgba(57,64,83,0.95)) 2025-12-17 22:06:47 -07:00
d2d60f6e8b Add TrustProxies middleware to fix HTTPS detection behind Caddy 2025-12-17 22:00:12 -07:00
7258b35dda Fix AdminSeeder to use correct bcrypt hash format 2025-12-17 21:53:00 -07:00
047f81b73f Add ASSET_URL to fix mixed content issues 2025-12-17 21:50:13 -07:00
1b63d00560 Remove password mutator that was causing double-hashing 2025-12-17 21:38:46 -07:00
539df42dc5 Remove test route, set APP_DEBUG=false, fix storage volume mount to preserve permissions 2025-12-17 21:27:48 -07:00
a3c1ffd3b3 Add simple test route to debug 500 errors 2025-12-17 21:21:50 -07:00
f2183392e2 Change APP_ENV back to production (keep DEBUG=true) 2025-12-17 21:19:59 -07:00
ed43ef5622 Enable debug mode: Change APP_ENV to local for better error visibility 2025-12-17 21:14:16 -07:00
d36aa2a47d Change SESSION_DOMAIN to null for IP-based access 2025-12-17 21:07:59 -07:00
d104bf5471 Fix AdminSeeder to insert password hash directly without model mutator 2025-12-17 21:02:56 -07:00
f203bb03eb Fix DatabaseSeeder to call specific seeders instead of using factories 2025-12-17 20:55:57 -07:00
5d9997d3a6 Update AdminSeeder to use Eliza's credentials from v1.0 2025-12-17 20:52:04 -07:00
9772e4cb83 Fix .dockerignore to include .env file in Docker build 2025-12-17 20:45:39 -07:00
9492a3b08f Add .env file to repository for deployment 2025-12-17 20:38:07 -07:00
d7517442d6 Fix PHP-FPM command in supervisord
- Change php-fpm8.3 to php-fpm (Alpine uses generic command)
- Fixes 502 Bad Gateway error
2025-12-17 20:16:31 -07:00
55a5165d20 Fix V1DataMigrationSeeder for PostgreSQL
- Remove PRAGMA statements (SQLite-specific)
- PostgreSQL handles foreign keys automatically
2025-12-17 20:04:47 -07:00
1b8679965e Fix Dockerfile: Create supervisor log directory
- Add mkdir -p /var/log/supervisor before starting supervisor
- Fixes container restart loop
2025-12-17 19:55:52 -07:00
790fe8a48a Fix TypeScript errors in Home.vue
- Add type assertions for event.target in mouseover/mouseout handlers
- Fixes vue-tsc compilation errors during Docker build
2025-12-17 19:50:28 -07:00
7583712730 Fix Dockerfile: Use npm install instead of npm ci
- package-lock.json not in repo (.gitignore)
- npm ci requires existing lock file
- npm install will generate it during build
2025-12-17 19:45:08 -07:00