What this site runs on

Every component is open-source and publicly auditable. Versions, hostnames and network layout are not published — a transparency page is not an attack map.

The application

Component License
docassemble — interview engineMIT
docassemble.NJForms — this site's form packageMIT
PythonPSF

Web serving

Component License
nginx — web serverBSD-2-Clause
uWSGI — application serverGPL-2.0 (linking exception)
Flask — web frameworkBSD-3-Clause
Jinja2 — templatingBSD-3-Clause

Data layer

Component License
PostgreSQL — session databasePostgreSQL License
Redis — cache and locksAGPL-3.0 / RSALv2
SQLAlchemy — database accessMIT
cryptography — session encryptionApache-2.0 / BSD

PDF machinery

Component License
pdftk-java — form fillingGPL-2.0
pikepdf / qpdf — PDF surgeryMPL-2.0 / Apache-2.0
pdfminer.six — field surveyMIT
reportlab — PDF generationBSD-3-Clause
LibreOffice — document conversionMPL-2.0

Platform

Component License
Ubuntu LTS — container OSvarious (free software)
Docker — container runtimeApache-2.0
cloudflared — Cloudflare TunnelApache-2.0

Build-time tools (never in the request path)

Component License
poppler-utils (pdftotext) — reads every filled PDF back before a releaseGPL-2.0 / GPL-3.0
web2 word list — the dictionary behind the plain-language check on every questionpublic domain
Git — every release is a tagged branch with a public logGPL-2.0
Google Gemini (Flash-Lite, API) — drafted the one-line "when you need this" note under each catalog title from the first page of that form; a second, locally run model (Qwen 2.5) re-read a sample against the same page before release. Runs at build time only.proprietary service (build-time)
nomic-embed-text (via Ollama) — finds catalog titles that mean the same thing so duplicates can be retired; local, build-time onlyApache-2.0

How the questions were written

The question you see for each blank on a form was drafted from the printed page by large language models (Anthropic’s Claude; OpenAI’s Codex for independent reads), then held to three checks before publishing: a dictionary-based classifier that rejects abbreviations and jargon, a second model reading every question as a person with no legal training, and an automated gate that fills the real PDF and reads the answers back. Totals the form adds up are computed for you, never asked. All of that happens on the maintainer’s machine before a release; nothing here consults a model while you use the site.

What is deliberately not here

No analytics library, no ad network, no tracking pixel, no third-party font or CDN script, no AI service in the request path. Forms are generated ahead of time by scripts, not by a model answering live — your answers are never sent to any AI or third-party service.


← How this works & your privacy · All forms