michaelml.dev / Michael_Portfolio.ipynb
🏆 1st Place Hackathon Winner - Multi-agent legal AI platform solving the chaos of personal injury case management. Four specialized AI agents collaborate to process messy legal documents (PDFs, audio, scanned faxes), perform strategic case analysis, and draft legally-safe client communications.
[ ]
code · SimplyLaw
project = load_project("simply-law")
project.summary()Output

SimplyLaw
🏆 1st Place Hackathon Winner - Multi-agent legal AI platform solving the chaos of personal injury case management. Four specialized AI agents collaborate to process messy legal documents (PDFs, audio, scanned faxes), perform strategic case analysis, and draft legally-safe client communications.
Multi-Agent SystemsGoogle-ADKFastAPINext.jsOCR (Tesseract)TwilioPostgreSQLOpenCVPythonAWSPrismaPyDubReactDocker
[ ]
code · Problem definition
project = load_project("simply-law")
project.problem()Output
ProblemLegal teams lose time and context when case information arrives as inconsistent PDFs, scans, audio, faxes, and client messages.
ApproachCoordinate four specialized Google ADK agents for intake, document analysis, case reasoning, and legally careful client communication behind a FastAPI service.
OutcomeWon 1st Place in the Morgan & Morgan challenge at KnightHacks VIII with a working legal-automation system.
[ ]
code · Constraints
project = load_project("simply-law")
project.constraints()Output
Constraints
- Inputs included low-quality scans, audio, handwriting, and protected PDFs.
- Agent outputs needed traceable routing and conservative client-facing language.
- The service needed fallbacks when an extraction path failed.
[ ]
code · Role and implementation
project = load_project("simply-law")
project.implementation()Output
Role and implementation
My role: Developed the multi-agent workflow and AI Orchestrator with intent classification, keyword scoring, and agent routing, then deployed the backend with AWS and Docker.
- Built Orchestrator, Document, Sherlock, and Client Communications agent roles.
- Combined OCR, document parsing, RAG, REST endpoints, and collaborative agent turns.
- Packaged and deployed the backend with Docker on AWS.
[ ]
code · Architecture
project = load_project("simply-law")
project.show_architecture()Output
Document Chaos HandlingAccept ANY file: pristine PDFs, blurry scanned faxes, audio with "uhh", handwritten notes, password-protected files
Smart ConversionConvert everything to text using PyPDF, pydub speech-to-text, Tesseract OCR with automatic fallback handling
Intelligent RoutingOrchestrator analyzes intent via keyword scoring: Email setup→Comms | Doc processing→Doc Agent | Strategy→Collaborative Mode
Agent CollaborationDoc Agent (logical) & Sherlock Agent (creative) debate for up to 10 iterations, sharing context until consensus
Legal-Safe MessagingClient Comms Agent translates technical analysis into empathetic, plain English, legally-appropriate communications
Multi-Channel DispatchDeliver via Twilio SMS, Resend email (@simplylaw.com domain), or structured API response to Next.js frontend
[ ]
code · Demo and media
project = load_project("simply-law")
project.media()Output

[ ]
code · Evaluation
project = load_project("simply-law")
project.evaluation()Output
Evaluation
- Exercised routing across communication, document-processing, and strategy requests.
- Tested extraction fallbacks against heterogeneous file inputs.
- Limited collaborative debates to a deterministic maximum of ten iterations.
[ ]
code · Results
project = load_project("simply-law")
project.results()Output
Results
- Delivered a functioning multi-agent legal workflow spanning intake, analysis, and communication.
- Awarded 1st Place in the Morgan & Morgan challenge at KnightHacks VIII.
[ ]
code · Tradeoffs and failures
project = load_project("simply-law")
project.tradeoffs()Output
Tradeoffs
- Specialized agents improve separation of concerns but increase orchestration complexity.
- Generated analysis supports legal teams and requires professional review.
[ ]
code · What I would improve
project = load_project("simply-law")
project.improvements()Output
Improvements
- Add stronger citation provenance and case-level evaluation sets.
- Expand permission controls and audit trails for production legal environments.
[ ]
code · Links and repository
project = load_project("simply-law")
project.links()Output