Commit graph

19 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
159ce11eb8 Fix iPad PDF scroll issue - detect iOS and open in new tab 2025-12-19 17:44:14 -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
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
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
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
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
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
06a620406c Phase 1: Email subscription and document download features
- Created SubscriptionController with subscribe/unsubscribe endpoints
- Added subscription API routes (POST /api/subscribe, GET /api/unsubscribe/{token})
- Updated Vue Home component with working subscription form
- Created DocumentController with download endpoint
- Added document download route (GET /api/documents/{id}/download)
- Updated Vue component to link PDF buttons to download route
- Created DocketSeeder with 5 sample docket entries and documents
- Seeded database with test data for development

Features working:
- Email subscription with validation and duplicate checking
- Subscription reactivation for previously unsubscribed emails
- Document download functionality (ready for actual PDFs)
- Sample data for testing UI

Next: Admin dashboard for CRUD operations
2025-12-17 15:51:47 -07:00
80657cc209 v2.0: Laravel + Inertia + Vue foundation complete
- Replaced Next.js + Express + React stack with Laravel + Inertia + Vue
- Created database migrations for docket_entries, documents, subscriptions, admin_users
- Built Eloquent models with relationships (DocketEntry, Document, Subscription, AdminUser)
- Implemented HomeController with Inertia.js integration
- Created Vue home page component matching v1.0 design exactly
- Installed Laravel Breeze for authentication scaffolding
- Configured Vite 7 for Vue 3 + TypeScript compilation
- Updated .gitignore for Laravel project structure
- Tested locally - website rendering correctly with empty database
- All v1.0 Next.js/Express files removed, replaced with Laravel structure

Technology Stack:
- Backend: Laravel 12.43.1, PHP 8.3.28, Eloquent ORM
- Frontend: Vue 3, TypeScript, Inertia.js, Tailwind CSS 3.x
- Build: Vite 7.x, Composer 2.9.2
- Database: SQLite (dev), PostgreSQL (production)

Next steps: Email subscription API, document downloads, admin dashboard
2025-12-17 15:44:26 -07:00