Skip to main content Skip to navigation
Back to Projects

LegalEase AI

Legal discovery search for messy evidence on Firebase: Nuxt 4 dashboard, Genkit flows, Gemini summaries, Chirp 3 transcription, and hybrid search in Qdrant Cloud.

NuxtVueTypeScriptFirebaseGenkitGeminiQdrantSpeech-to-Text
LegalEase AI search page in the dark pink theme, with the hybrid search box and filters for cases, types and levels

Overview

LegalEase AI is a workspace for legal teams, investigators, and anyone who has to wrestle with piles of unstructured evidence like PDFs, video and audio. It turns raw files into transcribed, summarized, searchable case material.

The first version was self-hosted (FastAPI, Celery, Ollama, WhisperX); that design lives on the repo's archive/self-hosted branch. The current main is a cloud-native rewrite on Firebase.


Problem

Legal discovery is chaos: mixed file formats, poor metadata, and a lot of audio and video nobody has time to listen to. I wanted a way to search, summarize, and reason across a case's files without reading every one.



Solution

The current app is a Nuxt 4 dashboard (Nuxt UI, Firebase Auth and Firestore) backed by Firebase Cloud Functions (2nd gen) running Genkit flows:

  • Transcription with Google Speech-to-Text v2 (Chirp 3), including speaker-labelled segments.
  • Summaries generated with Gemini 2.5 Flash.
  • Hybrid retrieval combining keyword and vector search in Qdrant Cloud.
  • Document extraction through a provider registry that includes a Docling service.
  • A separate landing and docs site (Nuxt Content on GitHub Pages) at legal-ease.app. The app itself is not hosted publicly; the demo link is the landing page.

Because this version sends audio and text to Google Cloud services, it is not an air-gapped tool; the earlier self-hosted architecture is the one built for that.


Challenges & Lessons

Getting transcription and search to work together on long recordings meant treating each step as its own retryable flow. Swapping the stack also taught me to keep providers (transcription, storage, document parsing) behind small registries so the pipeline survives a rewrite of any one piece.


Reflection

LegalEase started as a local-first experiment and was rebuilt around managed services to get to a working product faster. It remains a good example of choosing a stack on purpose, and the base for several spin-off tools in my stack.


Tech Stack

Nuxt 4, Vue 3, TypeScript, Firebase (Auth, Firestore, Cloud Functions), Genkit, Gemini, Google Speech-to-Text v2, Qdrant Cloud, Docling