A django starter for internal apps that leverages the include admin theme and components.
| 507cf6f | release: v0.20.1 — make lint runs mypy; typed-code convention |
| 8235f05 | feat(telemetry): make the logs readable by machines, not just people |
| 80282ba | fix(telemetry): close the gaps a seven-round verification found |
| 92d8f38 | fix(api): read-only tokens could write through any custom endpoint |
| 9674fc9 | feat(telemetry): staff log viewer at /smallstack/logs/ |
| bac6001 | docs: close the gaps left by the telemetry and JSON-logging work |
| 6be0ef6 | feat(telemetry): write logs to the database so a deployment can be debugged from inside it |
| a41046b | fix(logging): emit real JSON and stamp request IDs on every line |
| dcbd0f8 | release: v0.19.0 — operator-grade webhook event selection |
| 9b8a3b0 | fix(doctor): stop reporting test-module CRUDViews as unregistered opt-ins |
| 9ee4a88 | feat(calendar): cap events rendered per day, with a "+N more" drill-down |
| 450f00e | fix(crud): related tabs 500 without DETAIL, and rendered child rows via parent hooks |
| 68a56f8 | release: v0.15.2 — palette-correct light mode + invisible-control fixes |
| 7304b42 | fix(palettes): give django a light block and set --link-fg on every palette |
| f93a9e5 | fix(theme): make invisible controls palette-correct on gold + high-contrast |
| 6564c25 | build: add pre-commit hook running ruff + mypy |
| 87b6521 | chore(typecheck): widen mypy scope to all remaining apps |
| 07afe77 | chore(typecheck): widen mypy scope to apps/smallstack (framework core) |
| 4b3f513 | chore(typecheck): widen mypy scope to usermanager + tokenmgr + explorer |
| c2f3303 | chore(typecheck): widen mypy scope to scheduler + webhooks |
| 9d14e9c | fix(datasets): typecheck under mypy + fix offset string-coercion bug |
| d12b0ff | release: v0.15.1 — F4 test-coverage backfill |
| 6a04d69 | test(crud): cover HTML bulk views — update/delete/form (review F4) |
| ba815d3 | test: cover REST bulk-update + MCP write handlers (review F4) |
| 7e21c49 | test(api): cover auth endpoints — register, password change, admin reset (review F4) |
| b58c096 | test(search): cover PostgresFTSBackend 0%->83% (review F4) |
| f92281a | release: v0.15.0 — secure-by-default CRUDView auth, make typecheck, drop debug-toolbar |
| 586b8ae | review(round-2): fix fresh-clone check --deploy (F9) + restore examples tests (F10) |
| 9694cd4 | fix(search): remove obsolete test_phase2_integration (imports deleted modules) |
| 9db54da | review(round-1): fix XSS + PKCE timing, delete dead search layer, test integrity |
| ebbfc41 | docs(readme): bump version badge to 0.14.2 |
| 990f74c | docs: remove quality report-card system; refresh bundled README |
| 4e99be7 | release: v0.14.2 — https absolute URLs behind kamal-proxy |
| 7c1c236 | fix(production): trust X-Forwarded-Proto behind the proxy → https absolute URLs |
| 05b9d4b | docs(readme): reframe around "one backend, many roles"; drop report-card section |
| b7c69db | docs(help): add Webhooks and RSS/Atom Feeds reference pages |
| 5771491 | release: v0.14.1 — reproducible Docker builds + mcp_doctor AST fix |
| 54a4fb2 | test: silence pre-existing naive-datetime + ResourceWarning noise |
| 1f31eb6 | refactor(email): migrate to Django 6.1 MAILERS + drop deprecated fail_silently |
| 97bc84b | chore(deps): upgrade Django 6.0 → 6.1 |
| 2446ec0 | fix(a11y): WCAG 2.1 AA follow-ups across theme, CRUD, feeds surfaces |
| c39ed1e | fix(feeds): enforce master switch, Django-6 enclosure, consume-side auth |
| a856272 | release: v0.13.13 — accessibility foundation + RSS/Atom feeds surface |
| 229c731 | fix(api): api_view no longer force-parses multipart/form bodies as JSON |
| 984940d | fix(theme): make bare-button styling truly zero-specificity in all states |
| 0fb70c3 | perf(api): restrict list-endpoint SELECT to serialized columns via .only() |
| a3bc253 | feat(search): Postgres out-of-the-box hardening + search diagnostics |
| ccb261f | release: v0.13.11 — datasets bucketed grouping + drilldown (R8) |
| e426f80 | feat(datasets): scalar mode, FK expansion, and hardened API/MCP surfaces |
| 9bbf05a | chore(datasets): complete type annotations on the datasets module |
| 004d6a9 | docs(datasets): add datasets.md skill — schema introspection for UI builders |
| a9f1112 | feat(datasets): @dataset primitive — filtered querysets as typed rows/columns |
| b86573c | feat(help): lexical RAG passage index + search_help_docs MCP tool |
| bc68644 | release: v0.13.8 — webhooks foundation |
| a67d69d | Merge webhooks foundation into main (v0.13.8) |
| 38ce43d | docs(webhooks): update AI-skill routing + refs for the reshape |
| c763ea2 | feat(webhooks): strict is_paired key so pairing never adopts a hand-made object [F-031] |
| 22b10ad | fix(webhooks): harden sc webhook pair — stable slug, two secrets, honest UX [F-031] |
| 5e93347 | Integrate acceptance-verified webhooks foundation reshape |
| dfd45c0 | docs(webhooks): add 'Recipes per service' matrix to webhooks.md |
| 90ffe01 | fix(webhooks): surface pair + bulk replay in the webhook command help [F-030] |
| 07d6f9a | fix(webhooks): doctor WARN + docs for unresolved webhook origin [F-029] |
| 84870a6 | feat(webhooks): DX + docs — filter picker, doctor hints, webhooks.md [F-015][F-017][F-018][F-024][F-013] |
| c5dc716 | feat(webhooks): Azure Event Grid reference adapter — all four seams, zero core edits [F-028] |
| a3902b5 | feat(webhooks): one-step S2S pairing + backward-compat envelope upgrade [F-027][F-014] |
| aa4e03e | feat(webhooks): expose + prove the four extension seams [F-019][F-025][F-016][F-026] |
| 3527fe1 | feat(webhooks): stable event_id, Retry-After, bulk dead-letter replay [F-021][F-022][F-023] |
| 2157deb | feat(webhooks): loop guard + seam scaffolding foundation [F-020] |
| a5693c7 | fix(lint,tests): drop unused QueryDict import + order-independent MCP tool tests [F-012] |
| 093a27a | docs(webhooks): flag-table rows + no-retry/REST-path/gotcha fixes [F-007,F-009] |
| 2eecf16 | fix(webhooks): ops polish — doctor WARN, sc flags, monitor drill-down, disabled hints [F-003,F-008,F-010,F-011] |
| 44bed28 | feat(webhooks): secret write-path + detail-page actions [F-004,F-005] |
| c14611e | fix(crud): native-value form bridge for scripted surfaces [F-001,F-002,F-003,F-006] |
| 261745c | docs(changelog): backfill compare-link refs for v0.13.3–v0.13.6 |
Choose the color mode for your app.
The accent color for your app.
Choose the font family that fits your app.
Choose the gray shade for your app.
Choose the border radius factor for your app.
Choose the page layout for your app.