Update README with comprehensive project documentation

This commit is contained in:
TheMaddax 2025-12-18 09:55:19 -07:00
parent 0187c2d822
commit 94fe847c22

298
README.md
View file

@ -1,59 +1,279 @@
<p align="center"><a href="https://laravel.com" target="_blank"><img src="https://raw.githubusercontent.com/laravel/art/master/logo-lockup/5%20SVG/2%20CMYK/1%20Full%20Color/laravel-logolockup-cmyk-red.svg" width="400" alt="Laravel Logo"></a></p>
# MAD Lawsuit Court Docket Website
<p align="center">
<a href="https://github.com/laravel/framework/actions"><img src="https://github.com/laravel/framework/workflows/tests/badge.svg" alt="Build Status"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/dt/laravel/framework" alt="Total Downloads"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/v/laravel/framework" alt="Latest Stable Version"></a>
<a href="https://packagist.org/packages/laravel/framework"><img src="https://img.shields.io/packagist/l/laravel/framework" alt="License"></a>
</p>
A public-facing website for displaying court documents and filings for the lawsuit: **Elizabeth Kragh v. Montana Association of the Deaf**.
## About Laravel
**Live Site**: https://v2.mad-lawsuit.org
**Admin Dashboard**: https://v2.mad-lawsuit.org/admin/login
Laravel is a web application framework with expressive, elegant syntax. We believe development must be an enjoyable and creative experience to be truly fulfilling. Laravel takes the pain out of development by easing common tasks used in many web projects, such as:
## 📋 Project Overview
- [Simple, fast routing engine](https://laravel.com/docs/routing).
- [Powerful dependency injection container](https://laravel.com/docs/container).
- Multiple back-ends for [session](https://laravel.com/docs/session) and [cache](https://laravel.com/docs/cache) storage.
- Expressive, intuitive [database ORM](https://laravel.com/docs/eloquent).
- Database agnostic [schema migrations](https://laravel.com/docs/migrations).
- [Robust background job processing](https://laravel.com/docs/queues).
- [Real-time event broadcasting](https://laravel.com/docs/broadcasting).
This website provides public access to court documents from an ongoing lawsuit in Montana state court. Since the Montana court system requires a licensed attorney electronic account for access, this platform ensures transparency by making all case filings, motions, exhibits, and court decisions publicly accessible.
Laravel is accessible, powerful, and provides tools required for large, robust applications.
### Purpose
## Learning Laravel
- **Public Transparency**: Makes court proceedings accessible to anyone interested
- **Document Organization**: Centralized, chronological display of all case filings
- **Real-time Updates**: Email subscription system for case updates
- **Professional Presentation**: Clean interface with document summaries and metadata
Laravel has the most extensive and thorough [documentation](https://laravel.com/docs) and video tutorial library of all modern web application frameworks, making it a breeze to get started with the framework. You can also check out [Laravel Learn](https://laravel.com/learn), where you will be guided through building a modern Laravel application.
### Target Audience
If you don't feel like reading, [Laracasts](https://laracasts.com) can help. Laracasts contains thousands of video tutorials on a range of topics including Laravel, modern PHP, unit testing, and JavaScript. Boost your skills by digging into our comprehensive video library.
- General public following the case
- Legal community (attorneys, paralegals, law students)
- Disability rights advocacy groups
- Media and journalists
- Researchers studying the case
## Laravel Sponsors
## 🛠️ Technology Stack
We would like to extend our thanks to the following sponsors for funding Laravel development. If you are interested in becoming a sponsor, please visit the [Laravel Partners program](https://partners.laravel.com).
### Backend
- **Framework**: Laravel 12.43.1
- **Language**: PHP 8.3.28
- **Database**: PostgreSQL 16
- **ORM**: Eloquent
- **Authentication**: Laravel Sanctum + Session
### Premium Partners
### Frontend
- **Framework**: Vue 3 with TypeScript
- **Routing**: Inertia.js (SSR-like experience)
- **Styling**: Tailwind CSS 3.x
- **Build Tool**: Vite 7.x
- **Components**: Vue Single File Components (SFC)
- **[Vehikl](https://vehikl.com)**
- **[Tighten Co.](https://tighten.co)**
- **[Kirschbaum Development Group](https://kirschbaumdevelopment.com)**
- **[64 Robots](https://64robots.com)**
- **[Curotec](https://www.curotec.com/services/technologies/laravel)**
- **[DevSquad](https://devsquad.com/hire-laravel-developers)**
- **[Redberry](https://redberry.international/laravel-development)**
- **[Active Logic](https://activelogic.com)**
### Infrastructure
- **Containerization**: Docker with Alpine Linux
- **Web Server**: nginx 1.28.0
- **PHP**: PHP-FPM 8.3.28
- **Reverse Proxy**: Caddy (with automatic SSL)
- **Deployment**: Production server at 10.4.0.205
## Contributing
## ✨ Features
Thank you for considering contributing to the Laravel framework! The contribution guide can be found in the [Laravel documentation](https://laravel.com/docs/contributions).
### Public Website
- **Court Docket Display**: Chronological list of all court filings
- **Document Viewer**:
- Desktop: Modal PDF viewer with download option
- Mobile: Opens PDFs in new tab (optimized for iOS Safari)
- **Email Subscriptions**: Users can subscribe for case updates
- **Responsive Design**: Optimized for desktop, tablet, and mobile
- **Case Information**: Status, last updated date, and case details
## Code of Conduct
### Admin Dashboard
- **Authentication**: Secure session-based login
- **Docket Entry Management**: Full CRUD operations
- Create new entries with date, title, and summary
- Edit existing entries
- Delete entries (cascades to associated documents)
- View entry details
- **Document Management**:
- Upload PDF documents (10MB max)
- UUID-based file naming for security
- Multiple documents per docket entry
- Delete documents
- **Subscriber Management**:
- View all subscribers (paginated, 50 per page)
- Deactivate subscribers
- Statistics dashboard (total, active, inactive)
- **Dashboard Statistics**: Quick overview of entries, documents, and subscribers
In order to ensure that the Laravel community is welcoming to all, please review and abide by the [Code of Conduct](https://laravel.com/docs/contributions#code-of-conduct).
## 🚀 Getting Started
## Security Vulnerabilities
### Prerequisites
- PHP 8.3+
- Composer
- Node.js 18+ and npm
- PostgreSQL 16+
- Docker (for production deployment)
If you discover a security vulnerability within Laravel, please send an e-mail to Taylor Otwell via [taylor@laravel.com](mailto:taylor@laravel.com). All security vulnerabilities will be promptly addressed.
### Local Development Setup
## License
1. **Clone the repository**
```bash
git clone https://gitea.sigd.net/chaulmark/mad-lawsuit.git
cd mad-lawsuit
```
The Laravel framework is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).
2. **Install PHP dependencies**
```bash
composer install
```
3. **Install JavaScript dependencies**
```bash
npm install
```
4. **Configure environment**
```bash
cp .env.example .env
php artisan key:generate
```
5. **Configure database**
Edit `.env` with your PostgreSQL credentials:
```env
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=mad_lawsuit
DB_USERNAME=your_username
DB_PASSWORD=your_password
```
6. **Run migrations**
```bash
php artisan migrate
```
7. **Seed admin user**
```bash
php artisan db:seed --class=AdminSeeder
```
8. **Create storage symlink**
```bash
php artisan storage:link
```
9. **Start development servers**
```bash
# Terminal 1: Laravel development server
php artisan serve
# Terminal 2: Vite development server
npm run dev
```
10. **Access the application**
- Public site: http://localhost:8000
- Admin dashboard: http://localhost:8000/admin/login
- Default credentials: See `database/seeders/AdminSeeder.php`
### Production Deployment
See [DEPLOYMENT.md](DEPLOYMENT.md) for detailed production deployment instructions using Docker.
## 📁 Project Structure
```
├── app/
│ ├── Http/
│ │ ├── Controllers/
│ │ │ ├── Admin/ # Admin dashboard controllers
│ │ │ ├── HomeController.php
│ │ │ └── SubscriptionController.php
│ │ └── Middleware/
│ │ └── AdminAuth.php # Admin authentication middleware
│ └── Models/
│ ├── AdminUser.php
│ ├── DocketEntry.php
│ ├── Document.php
│ └── Subscription.php
├── database/
│ ├── migrations/ # Database schema
│ └── seeders/
│ ├── AdminSeeder.php
│ └── V1DataMigrationSeeder.php
├── resources/
│ ├── js/
│ │ ├── Components/
│ │ │ └── PDFViewer.vue # PDF modal viewer
│ │ ├── Pages/
│ │ │ ├── Home.vue # Public homepage
│ │ │ └── Admin/ # Admin dashboard pages
│ │ └── app.ts
│ └── css/
│ └── app.css
├── routes/
│ └── web.php # Application routes
├── docker/ # Docker configuration
├── cline_docs/ # Project documentation
└── storage/
└── app/
└── public/
└── documents/ # Uploaded PDF files
```
## 🔐 Security
- **Admin Authentication**: Session-based authentication separate from Laravel Breeze
- **File Security**: UUID-based file naming prevents direct access guessing
- **CSRF Protection**: Laravel's built-in CSRF protection on all forms
- **SQL Injection**: Eloquent ORM prevents SQL injection
- **XSS Protection**: Vue.js automatic escaping
- **HTTPS**: Automatic SSL via Caddy in production
## 📊 Database Schema
### Tables
- **docket_entries**: Court filings with date, title, summary, notes
- **documents**: PDF files linked to docket entries
- **subscriptions**: Email subscribers with active/inactive status
- **admin_users**: Admin authentication
### Relationships
- One docket entry has many documents
- Documents cascade delete when entry is deleted
- Subscriptions are soft-deleted (is_active flag)
## 🧪 Testing
```bash
# Run PHP tests
php artisan test
# Run with coverage
php artisan test --coverage
```
## 📝 API Endpoints
### Public Routes
- `GET /` - Homepage with docket entries
- `POST /api/subscribe` - Email subscription
- `GET /api/documents/{id}/download` - Download PDF
### Admin Routes (requires authentication)
- `GET /admin/login` - Admin login page
- `POST /admin/login` - Process login
- `POST /admin/logout` - Logout
- `GET /admin/dashboard` - Admin dashboard
- Resource routes for:
- `/admin/docket-entries` - Docket entry management
- `/admin/documents` - Document management
- `/admin/subscribers` - Subscriber management
## 🐛 Known Issues & Solutions
### Mobile PDF Viewing
- **Issue**: iOS Safari renders PDFs in iframes as single-page images
- **Solution**: On screens < 768px, PDFs open in a new tab instead of modal viewer
### Admin Subscribers Page
- **Fixed**: Changed pagination from `->through()` to `->items()` to properly pass array to Vue
## 🤝 Contributing
This is a private project for a specific lawsuit. For questions or issues, contact the repository owner.
## 📄 License
Proprietary - All rights reserved.
## 👥 Credits
- **Development**: Built with Laravel, Vue.js, and Inertia.js
- **Design**: DeafGain LLC (http://deafgain.org)
- **Hosting**: Self-hosted on dedicated infrastructure
## 📞 Support
For technical issues or questions:
- Repository: https://gitea.sigd.net/chaulmark/mad-lawsuit
- Production URL: https://v2.mad-lawsuit.org
---
**Version**: 2.0
**Last Updated**: December 2025
**Status**: Production Ready ✅