A django starter for internal apps that leverages the include admin theme and components.
| 9aae746 | v0.12.3: fix invisible status calendar/timeline cells on standalone pages |
| 18b528b | v0.12.2: maintenance-aware status + test robustness |
| 0e663c6 | v0.12.1: add merge-0.12.0 upgrade skill |
| a4f1373 | Merge remote-tracking branch 'origin/main' |
| c76558f | Merge feat/pluggable-status-monitoring: pluggable status monitoring system |
| 11d94a7 | Remove temporary "Status Links (dev)" hub |
| ac24b33 | Status round-3 fixes: decouple MCP/Search, daily-timeline today coloring, doctor flag-awareness |
| 69dc206 | Status module improvements and polish |
| 3cb60b3 | Merge branch 'main' into feat/pluggable-status-monitoring |
| 89d3166 | fix(explorer): detail grid/form rendered every boolean as ✓ regardless of value |
| 72cc876 | docs(skills): add testing skill (pytest, email/auth-flow/CRUDView patterns, gotchas) |
| 4c01e6d | test(auth): cover invite, passwordless, email login, create-with-password, guardrails |
| 4b671b8 | Merge branch 'feat/account-invites-passwordless' |
| 29c0115 | fix(usermanager): restore tabbed user form (v0.11.19 template-suffix regression) |
| a0ce6a3 | feat(auth): enable username-or-email login (EmailOrUsernameBackend) |
| 28d3f72 | feat(usermanager): password-on-create, edit actions, guardrails; fix v0.11.19 template regression |
| 2ee076e | feat(accounts): invite-by-email, passwordless code login, branded emails |
| 703571f | v0.11.19: consolidate dashboard stat cards into one {% stat_card %} standard |
| 5c9560e | feat(activity): link usernames in the All Users drill-down to user detail |
| cd9b3bb | feat(status): cap the SLA maintenance-windows table at 5 rows |
| 0ee2047 | style(admin): unify status pills onto a shared {% status_badge %} tag |
| fc46576 | v0.11.18: clickable list rows, stat-card drill-down modals, table pagination |
| 299c46d | v0.11.16: editorial Getting Started redesign + Search section on Home |
| db8ac90 | v0.11.15: API endpoints page, MCP filter fix, test-isolation + marker re-scoping |
| 81e6e47 | v0.11.14: pin test settings + hermetic dev-superuser test + v0.12 upgrade note |
| 38c54fd | v0.11.13: platform re-audit hardening — security, Postgres, CI, tables2 removal |
| ba0ad5d | audit: log programmatic API/MCP writes + fix Django-6 log_action breakage (L9) |
| 9a122b3 | email: wire branded HTML reset email + SITE_NAME; test the surface (L4/L5/L6) |
| ca59d11 | harden: dev-superuser DEBUG guard, atomic epoch reset, drop no-op DJANGO_DEBUG (L3/L10/I3) |
| aecaaec | backup: record non-SQLite skip + treat retention<1 as disabled (L7/L8) |
| f2d5353 | mcp: return -32600 for non-object JSON-RPC bodies instead of 500 (L2) |
| 7e187d6 | search: collision-resistant GIN index name + honest provisioning health (L1/I1/I2) |
| 618f252 | security: OAuth hardening — cap scope→role, atomic code redemption (M1/M2/L11) |
| a79757e | test: make H4 backup test backend-agnostic (was SQLite-coupled) |
| 67b910a | security: fix v0.11.13 High audit findings (OAuth, token scope, backups, hosts) |
| 6a3b1f1 | ci: add GitHub Actions test workflow (SQLite + Postgres matrix + ruff) |
| 069a4db | docs(skills): add PostgreSQL skill set (setup, prod, testing, differences) |
| 5dccc67 | postgres: unblock setup + self-provision FTS for bundled models |
| a40c0e0 | v0.12.0 prep (2/4): finish django-tables2 code removal |
| 957fbee | v0.12.0 prep (1/4): migrate usermanager off django-tables2 |
| 331ce94 | search: fix tools/list visible-but-non-functional carry-over (v0.11.12) |
| 13214d4 | audit close-out: test brittleness + CONTRIBUTING + dead-doc cleanup + button drift (v0.11.11) |
| 0563574 | audit polish: hover sweep + MCP end-user doc + tools/list filtering + a11y (v0.11.10) |
| a8627df | audit r3 close-out: MCP search gate, user-facing site doc, quality polish (v0.11.9) |
| 2c27cdf | audit r2: registry first-wins, lift search to auth, decouple scope, filter+order validation (v0.11.8) |
| 3744d29 | docs+devx: address audit findings 2-5 (v0.11.7) |
| 5619e74 | chore: release v0.11.6 |
| d2e1337 | search: defer FTS ensure_index past AppConfig.ready (v0.11.5) |
| 28dafbc | search: access audit report + admin badges + AI skill update (v0.11.4) |
| ad2f3a6 | search: 3-level access model + public /search/ for help docs (v0.11.3) |
| d4299b8 | search: per-view security model — staff gate + visibility filter (v0.11.2) |
| 3fa5509 | Editorial theme refresh + public search page + purple default (v0.11.1) |
| 78a5e54 | Update search docs + skills for vibe-coder workflow |
| bf96b09 | Swagger-style collapsible source registry on search page |
| 0426c95 | test(search): make register_idempotent resilient to default opt-ins |
| eb4992d | feat(search): default opt-in for User + APIToken |
| b17e106 | feat(search): model browser in the search-page empty state |
| 6c8df23 | feat(search): discoverability + editorial omnibar restyle |
| 09a808e | test(search): update empty-state assertion for the redesigned label |
| 3bd14c0 | fix(search): cinematic-editorial page redesign + omnibar overlay bug |
| c267128 | Bump version to 0.11.0 |
| f47131e | Merge feat/search: keyword search + MCP tool + help-docs RAG (v0.11.0) |
| d035e12 | feat(search): Phase 2 — help docs in the unified search index |
| 86a7a25 | feat(search): apps/search/ — keyword search + MCP tool from day one |
| 62600e7 | docs: point README at www.smallstack.site for additional info |
| f286b80 | docs: succinct README rewrite |
| 6e34794 | Bump version to 0.10.0 |
| 4ed5b2b | Merge feat/api-admin: API admin module + modern-dark theme + AI docs |
| 5ce5492 | fix(theme): mute layout_preview — diagrams + drop hard-coded hexes |
| efb985e | docs: CLAUDE.md for vibe coders cloning SmallStack |
| 2026d6b | docs(theme): canonical AI skill + architecture doc for modern-dark theme |
| 406c086 | fix(theme): push accent-palette surfaces another 3 points cool |
| 655eda7 | fix(theme): drop hard-coded warm-gray in dark-mode help cards |
| 4f3d9ec | fix(theme): --accent-band-bg variable for single-point band override |
| 5f2831d | fix(theme): neutral .hero-section for orange + django palettes |
| c7b8fe2 | fix(theme): pure-neutral high-contrast surfaces + neutral hero band |
| 9a7d904 | fix(theme): always set data-palette so django override actually applies |
| 172a85f | fix(theme): stronger cool bias on django palette surfaces |
| 0d3bb95 | fix(theme): modern black + vibrant emerald accent for django dark palette |
| 7ec7dbb | fix(theme): drop the muddy-brown page-header band on orange palette |
| 956428f | fix(theme): modern black + vibrant orange accent for dark-orange palette |
| 4efae1a | fix(theme): modern black + vibrant purple accent for dark-purple palette |
| 4003080 | fix(theme): nudge dark-blue surfaces cool to resist color-context warming |
| 8a16a6c | fix(theme): neutral table striping — keep accent reserved for data |
| c63c4fe | fix(theme): modern black + vibrant blue accent for dark-blue palette |
| 4292926 | fix(theme): navy-tinted surfaces for the dark-blue palette |
| 9b94098 | docs(cli): unified CLI reference + AI-agent decision tree |
| 19062b3 | test+docs(api-admin): widget + view tests + threat heuristics + docs |
| 1f1ed48 | feat(api-admin): Activity page with per-endpoint groupby + threat panel |
| 08f38c4 | feat(api-admin): /smallstack/api/ skeleton + Health page |
| f0cdfad | feat(api): api_doctor management command — health checks + self-test |
| de7b50d | Bump version to 0.9.2 |
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.