← Back to Blog

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.