Skip to content

noamrazbuilds/legal-hold-manager

Repository files navigation

Legal Hold Manager

A litigation hold management tool for creating, issuing, tracking, and managing legal holds. Built for non-technical legal professionals — in-house counsel, legal ops teams, and paralegals.


Getting Started

Option 1: Run Locally (Easiest)

./start.sh        # macOS/Linux
start.bat         # Windows

This installs everything, seeds sample data, starts the app, and opens your browser.

Default login: admin@acmecorp.com / admin123

Option 2: Docker

docker compose up

Then open http://localhost:8501.

Option 3: Deploy Your Own

Deploy on Railway

Or deploy manually using the included Dockerfile.railway and railway.json.


Features

  • Hold Management — Create, update, release, and suspend litigation holds with full metadata (matter name, trigger event, scope, date ranges)
  • Custodian Database — Manage custodians with contact info, department, title, and data source mapping
  • Hold Notices — Generate and send hold notices to custodians via email (real SMTP or simulation mode)
  • Acknowledgment Tracking — Custodians log in and acknowledge holds; track status per custodian (pending, notified, acknowledged, overdue)
  • Automated Reminders — Schedule recurring reminders for non-responsive custodians
  • Dashboard — View active holds, acknowledgment rates, and overdue custodians at a glance
  • Audit Log — Immutable record of all system actions for defensibility
  • Role-Based Access — Admin and custodian roles with appropriate permissions
  • Email Modes — Toggle between real SMTP delivery and simulation mode for testing

For Developers

Project Structure

lhm_app/           # FastAPI backend
  models/           # SQLAlchemy ORM models
  schemas/          # Pydantic request/response schemas
  routers/          # API route handlers
  services/         # Business logic layer
lhm_frontend/      # Streamlit frontend
  pages/            # Multi-page app views
data/sample/        # Synthetic seed data
tests/              # pytest test suite

API Documentation

With the API running, visit http://localhost:8000/docs for interactive Swagger documentation.

Running Tests

pip install -e ".[dev]"
pytest

Tech Stack

  • Backend: Python 3.11+, FastAPI, SQLAlchemy 2.0, Pydantic v2
  • Frontend: Streamlit
  • Database: SQLite (production-ready for PostgreSQL)
  • Auth: JWT with bcrypt password hashing
  • Email: SMTP with simulation fallback
  • Testing: pytest

Environment Variables

Variable Default Description
DATABASE_URL sqlite:///./data/legal_hold.db Database connection string
SECRET_KEY (dev default) JWT signing key — change in production
EMAIL_MODE simulation smtp or simulation
SMTP_HOST SMTP server hostname
SMTP_PORT 587 SMTP server port
SMTP_USER SMTP username
SMTP_PASSWORD SMTP password
SMTP_FROM legalholds@example.com Sender email address
API_BASE_URL http://localhost:8000 Backend URL for frontend

License

MIT License — Copyright (c) 2026 Noam Raz and Pleasant Secret Labs

About

Litigation hold management tool that creates, issues, tracks, and manages legal holds with custodian tracking, automated notices, acknowledgment workflows, and a full audit log for defensibility.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages