Skip to content
Michael_Portfolio.ipynb
MR
File browser
Michael_Portfolio.ipynb
profile.jpg
resume.pdf

One editable portfolio notebook. Edits survive refreshes in this tab and reset when the tab closes or the notebook is reset.

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 project preview

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
SimplyLaw project media
[ ]
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
GitHub Demo Project page
Python 3 · PyodideWorker: CPUConnecting…Command modeLn 1, Col 1