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 engine | MIT |
| docassemble.NJForms — this site's form package | MIT |
| Python | PSF |
Web serving
| Component |
License |
| nginx — web server | BSD-2-Clause |
| uWSGI — application server | GPL-2.0 (linking exception) |
| Flask — web framework | BSD-3-Clause |
| Jinja2 — templating | BSD-3-Clause |
Data layer
| Component |
License |
| PostgreSQL — session database | PostgreSQL License |
| Redis — cache and locks | AGPL-3.0 / RSALv2 |
| SQLAlchemy — database access | MIT |
| cryptography — session encryption | Apache-2.0 / BSD |
PDF machinery
| Component |
License |
| pdftk-java — form filling | GPL-2.0 |
| pikepdf / qpdf — PDF surgery | MPL-2.0 / Apache-2.0 |
| pdfminer.six — field survey | MIT |
| reportlab — PDF generation | BSD-3-Clause |
| LibreOffice — document conversion | MPL-2.0 |
Platform
| Component |
License |
| Ubuntu LTS — container OS | various (free software) |
| Docker — container runtime | Apache-2.0 |
| cloudflared — Cloudflare Tunnel | Apache-2.0 |
Build-time tools (never in the request path)
| Component |
License |
| poppler-utils (pdftotext) — reads every filled PDF back before a release | GPL-2.0 / GPL-3.0 |
| web2 word list — the dictionary behind the plain-language check on every question | public domain |
| Git — every release is a tagged branch with a public log | GPL-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 only | Apache-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