SquareLog: Pro Se Family Court, Built Like Software
SquareLog turns daily reality into court-ready evidence — a SitRep app, a legal RAG over Connecticut Title 46b, and an AI declaration drafter, with both web and mobile surfaces.
SquareLog is what happens when a parent representing themselves in family court treats discovery, evidence, and declaration-drafting as a software problem instead of a folder of screenshots.
The MVP is jurisdictionally tight on purpose: Connecticut Title 46b family law. The product handles three jobs that pro se parents currently do badly with notebooks and Google Drive — log the day's events with timestamps, search case law in plain English, and convert weeks of log entries into a court declaration that cites its own record.
The product, by surface
| Surface | What it does |
|---|---|
| SquareLog Web — Blazor WebAssembly + MudBlazor | Full SitRep log, document attachments, legal RAG search, declaration drafting |
| SquareLog Mobile — .NET MAUI Blazor Hybrid (iOS + Android) | In-the-moment SitRep capture, on-device OCR, encrypted local-first store, resilient cloud sync |
Same UI framework (MudBlazor 9 across both), same backend contracts. The mobile app exists because evidence has a time-decay problem — what happened at 7:42pm is hardest to write up at 11pm.
How it fits together
┌──────────────────────────────────────────────┐
▼ │
┌──────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┴────┐
│ Blazor WASM │───▶│ SquareLog │───▶│ PostgreSQL │ │ SquareLog.AI │
│ + MAUI │ │ .Api │ │ (tenant- │ │ (FastAPI + │
│ (MudBlazor) │◀───│ (.NET 10) │◀───│ isolated) │ │ LangChain 1.x) │
└──────────────┘ └──────┬──────┘ └─────────────┘ └────────┬─────────┘
│ │
│ ┌──────────────┐ ▼
├──────────▶│ MinIO / S3 │ ┌────────────┐
│ │ (documents) │ │ Qdrant │
│ └──────────────┘ │ (Title │
│ │ 46b RAG) │
│ ┌──────────────┐ └────────────┘
└──────────▶│ SquareLog │◀── polls CT court dockets
│ .Scraper │
│ (Go + Colly) │
└──────────────┘
Four services. The .NET API is the front door — every other service either sits behind it or callbacks into it.
Why local-first on mobile
The mobile shell uses SQLite + EF Core + SQLCipher (256-bit AES) to persist SitRep entries offline. A parent recording incidents at a courthouse, at school pickup, or after a tense exchange shouldn't have to think about network signal — and shouldn't have unencrypted log entries sitting on disk.
| Mobile-specific tech | Why |
|---|---|
| SQLCipher | Encrypted local DB; logs must be safe if the phone is lost |
| Apple Vision / ML Kit | On-device OCR for document captures — text never leaves the device |
| APNs / FCM (silent) | Resilient sync without depending on the app being in the foreground |
| Cloudflare R2 | Media storage with zero egress cost vs. AWS S3 |
The legal RAG
The differentiator over a notes app + ChatGPT is the corpus. SquareLog runs a Qdrant vector index over Connecticut Title 46b statutes and published opinions. When a parent asks "what does CT case law say about denied parenting time," the answer is grounded in the actual text of 46b-56 and the relevant Appellate Court decisions — not a hallucinated paraphrase.
A small Go service (Colly) polls Connecticut court dockets and callbacks into the .NET API when new opinions land, so the corpus stays current without manual scraping.
Stack
| Layer | Tech |
|---|---|
| Web frontend | Blazor WebAssembly, MudBlazor 9, JWT + HttpOnly refresh-cookie auth |
| Mobile frontend | .NET MAUI Blazor Hybrid (iOS 18+, Android 8.0+), MudBlazor |
| API | ASP.NET Core Web API on .NET 10, EF Core with tenant-scoped global filters |
| Database | PostgreSQL 16 (primary), Supabase (mobile sync), Qdrant 1.17 (vectors) |
| AI service | Python 3.12 FastAPI + LangChain 1.x agents |
| Court scraping | Go + Colly |
| Object storage | MinIO (dev), AWS S3 (prod), Cloudflare R2 (mobile media) |
| Real-time | SignalR over WebSocket |
| Infra | Terraform, Docker Compose, ECR + EC2 |
Why CT only, for now
Pro se family court is a state-by-state problem. The corpus, the docket scraper, the declaration templates — all are jurisdictionally bound. Shipping a competent CT product beats shipping a mediocre 50-state product, and Connecticut's Title 46b is small enough to ingest cleanly and large enough to cover most pro se cases.