Skip to content

Releases: emichaud/smallstack-tabler

v0.10.3: Fix dropdown/modal transparency regression

Choose a tag to compare

@emichaud emichaud released this 21 Jun 00:09

Hotfix for a regression introduced in v0.10.2. If you pulled v0.10.2 and noticed the apps-grid dropdown, modal panels, or list groups rendering transparent over content — this is the fix.

What broke

v0.10.2 cleaned up our tabler_overrides.css to stop shadowing Tabler 1.4's cool dark palette. Part of that cleanup removed our explicit --tblr-card-bg assignment from the body.theme-dark block, expecting Tabler 1.4's defaults to take over.

But Tabler 1.4 only defines --tblr-card-bg scoped to .card elements themselves (.card { --tblr-card-bg: var(--tblr-bg-surface); }) — not at the root. On non-.card elements that our overrides target (.dropdown-menu, .modal-content, .list-group-item, plus the ported SmallStack components), var(--tblr-card-bg) resolved to empty/transparent.

Visible symptom: clicking the apps-grid dropdown (top-right square icon) opened a transparent panel; the dashboard content bled through every menu item.

What's fixed

A one-line addition to the dark-mode root block: re-expose --tblr-card-bg pointing at Tabler's globally-defined --tblr-bg-surface. Both resolve to #1f2937 (Tailwind slate-800) so visuals on .card elements are unchanged. Off-card elements now get the proper opaque slate-800 surface instead of falling through to transparent.

Also updated our SmallStack --card-bg alias to point at var(--tblr-bg-surface) directly for the same reason.

Verified

Debug overlay reading computed CSS-var values on document.documentElement in dark mode:

  • --tblr-card-bg: #1f2937 (was empty in v0.10.2)
  • --card-bg: #1f2937 (was empty in v0.10.2)
  • --tblr-bg-surface: #1f2937 (always was, unchanged)

Visually: apps-grid dropdown renders as a solid slate-800 panel. No bleed-through.

Upgrade

git pull origin main
# One-line CSS change. No tests/migrations/dependencies affected.

If you're already on v0.10.2 and seeing transparent dropdowns/modals: this is your fix.

🤖 Co-Authored-By: Claude Opus 4.7 (1M context)

v0.10.2: Tabler 1.4 dark-mode vibrancy restoration

Choose a tag to compare

@emichaud emichaud released this 20 Jun 23:54

Patch release — restores Tabler 1.4.0's native cool slate dark palette. No feature changes; the dark theme just looks the way Tabler 1.4 intended.

Why

When we bumped to Tabler 1.4.0 in v0.10.1, the upgrade spec called out a deferred "judgment pass" on our --tblr-* overrides — visual smoke would expose anything actively wrong. It did. Side-by-side vs preview.tabler.io, our dark mode read as dim, warm, slightly brown-tinted; Tabler's preview reads as crisp, cool, modern slate.

Root cause: our tabler_overrides.css still shipped beta20-era warm-gray defaults (#1a1c23 body, #212329 card, #2c2e34 border) that explicitly shadowed Tabler 1.4.0's cool Tailwind slate scale (#111827, #1f2937, #374151).

What changed

A single ~30-line deletion in apps/tabler/static/tabler/css/tabler_overrides.css:

  • Dropped the [data-bs-theme='dark'] 11-step warm gray scale that shadowed Tabler 1.4's Tailwind slate scale
  • Dropped the explicit --tblr-body-bg / --tblr-card-bg / --tblr-border-color / etc. assignments inside the dark-mode aliases block
  • Dropped the redundant background-color/color self-set on body (Tabler 1.4 already does it via [data-bs-theme=dark])

Kept all SmallStack-var aliases (--body-bg, --card-bg, --body-fg, --border-color, --hairline-color, --input-border, --muted-fg, --body-quiet-color, --code-bg), all .theme-dark / [data-bs-theme="dark"] component selectors below, the accent color, all ported SmallStack layout classes, and every other component override. Aliases reference var(--tblr-*) so they auto-pick-up Tabler 1.4's new cool values.

Verified

Pixel-sampled the rendered home dashboard:

OLD NEW
body bg #1a1c23 (warm near-black) #111827 (Tailwind slate-900)
card bg #212329 (warm) #1f2937 (Tailwind slate-800)
border #2c2e34 (warm gray) #374151 (slate-700, cool blue-gray)
  • 749 tests pass, 26 starter_content tests deselected (intentional)
  • Smoke /, /accounts/login/, /smallstack/explorer/, /smallstack/api/health/, /smallstack/mcp/health/, /smallstack/tokens/ all render correctly
  • Tabler 1.4's modern dark mode now propagates through every component without being shadowed by our beta20-era values
  • The visible win: cards have proper lift off the page (slate-800 on slate-900), borders read as cool blue-gray instead of olive-brown, chart sparklines POP against the new card backgrounds

Downstream impact

Most projects (those that extend our tabler/base.html) get the visual fix for free on git pull origin main. They'll see the dark mode shift from warm-bunker to cool-slate immediately.

Projects with a forked tabler_overrides.css should compare their fork to this commit (ad12020) and re-apply the deletion to get the same visual upgrade.

Upgrade

git pull origin main
# No migrations, no new dependencies, no template changes.

🤖 Co-Authored-By: Claude Opus 4.7 (1M context)

v0.10.1: Tabler 1.0.0-beta20 → 1.4.0 alignment

Choose a tag to compare

@emichaud emichaud released this 20 Jun 11:20

Patch release — brings the bundled Tabler version in line with preview.tabler.io. No feature changes; the chrome just renders the way it's supposed to.

Why

The project was pinned at @tabler/core@1.0.0-beta20 — a year-old beta — and the rendering drifted from preview.tabler.io (which ships 1.4.0). Symptoms:

  • Subtle shadow / border-color mismatches on dropdowns, popovers, focus rings
  • Accent color changes left fragments of the previous accent behind in places that only tabler-themes.min.css would catch
  • Glyph differences (italic g, numerals) because Inter was loaded from Google Fonts (static weights 300–700) instead of the rsms.me variable build Tabler was designed against

What changed

Three template touchpoints, each getting the same four edits:

  • apps/tabler/templates/tabler/base.html
  • apps/tabler/templates/registration/tabler_auth_base.html (auth scaffold — was also on the old CDN)
  • apps/preview/templates/preview/base_preview.html (was on 1.2.0, a different mid-version drift point — also aligned to 1.4.0)

Each one now loads:

<!-- Inter (variable font, matches preview.tabler.io exactly) -->
<link rel="preconnect" href="https://rsms.me">
<link rel="stylesheet" href="https://rsms.me/inter/inter.css">

<!-- Tabler core -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tabler/core@1.4.0/dist/css/tabler.min.css">
<!-- Tabler color-palette + theme variations (required for accent-color switching to fully cascade) -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@tabler/core@1.4.0/dist/css/tabler-themes.min.css">

<script src="https://cdn.jsdelivr.net/npm/@tabler/core@1.4.0/dist/js/tabler.min.js"></script>

Plus a mechanical CSS edit: 55 .theme-dark selectors in apps/tabler/static/tabler/css/tabler_overrides.css paired with [data-bs-theme="dark"] for forward compat with Tabler 1.4 (which targets the [data-bs-theme] attribute on <html>). Body class still applied by our blocking theme script, so both selectors stay valid; the paired form just keeps us cascade-clean on either signal. body:not(.theme-dark) light-mode selectors left untouched.

Theme-JS vocabulary (data-bs-theme-base|font|radius values) verified against Tabler 1.4 — all match. Our custom comic font value is owned by tabler_overrides.css and not in conflict with 1.4.

Downstream impact

  • Most downstream projects (those that extend our tabler/base.html and tabler_auth_base.html rather than forking) get the upgrade for free on git pull origin main. Re-run make test + visual smoke and you're done.
  • Downstream projects with a forked base.html or tabler_auth_base.html need to re-apply the four URL changes manually. The new "Upgrade history" section at the bottom of docs/skills/tabler/troubleshooting.md documents exactly what to change.
  • The 20+ Tabler skill files under docs/skills/tabler/ (the canonical vibe-coding reference) were updated in lockstep — they no longer point at the old CDN.

Stats

  • 749 tests passing, 26 starter_content deselected (intentional), 74% coverage
  • Django check clean
  • All 4 new CDN URLs return 200 (verified pre-push)
  • Visual smoke clean on /, /accounts/login/, /smallstack/explorer/, /smallstack/api/health/, /smallstack/mcp/health/

Upgrade

git pull origin main
# No migrations needed. uv sync --all-extras if you want the dev extras.

Reference

Full upgrade spec lives at ai_cowork/tabler-1.4-upgrade-spec.md.

🤖 Co-Authored-By: Claude Opus 4.7 (1M context)

v0.10.0: Merge upstream (API admin, modern-dark theme, AI docs)

Choose a tag to compare

@emichaud emichaud released this 18 Jun 01:06

Merges 25 commits from django-smallstack v0.10.0 into the Tabler-themed downstream, with theme integration so the new pages render cleanly inside the Tabler chrome.

What's New from Upstream

API admin module — apps/api/

  • /smallstack/api/health/ — schema validity, endpoint registry, Swagger / ReDoc shell checks, OpenAPI 3.0.3 validation. Same checks as manage.py api_doctor — refresh to re-run.
  • /smallstack/api/activity/ — per-endpoint operational view: top endpoints over 24h with hits / avg latency / error rate, recent /api requests with filters (method, status, IP, user, scanner-UA-only), threat-signals panel surfacing axes lockouts, auth-failure bursts, path scanning, request bursts, scanner user-agents, revoked-token use
  • api_doctor management command — health checks + self-test (schema · openapi · sample)
  • Dashboard widget on /smallstack/
  • Nav entry "API Health" in the staff sidebar

Modern-dark theme overhaul (upstream base)

Upstream rebuilt the SmallStack default palette system: cool-biased near-black surfaces (#161b22 cards), vibrant Tailwind-style accents (django→emerald, blue, purple, orange, high-contrast). Introduces the --accent-band-bg variable as a single-point band override.

This downstream uses Tabler, so the modern-dark theme is not in use here — but the new SmallStack templates still work because tabler_overrides.css aliases the SmallStack variable names (--primary, --card-bg, --body-fg, etc.) to their --tblr-* equivalents. No template rewrites needed.

AI docs (upstream)

  • docs/skills/cli-tools.md — task → tool / failure → tool decision tree
  • docs/skills/modern-dark-theme.md — upstream base theme patterns (NOT in use in this downstream)
  • docs/skills/modify-palettes.md — upstream palette guide
  • docs/skills/api-doctor.md — API admin pages reference
  • Project-level CLAUDE.md at the repo root

Tabler Integration

Two Tabler-specific adjustments sit on top of the merge:

  • docs/skills/README.md — the conflict in the "before X, read Y" section was resolved by keeping tabler-ui.md as the read-first for any page work in this downstream, surfacing cli-tools.md for operational tasks, and explicitly noting that modern-dark-theme.md / modify-palettes.md describe the upstream base theme that does NOT apply here
  • Root CLAUDE.md rewrite — replaces upstream's modern-dark-theme-centric guidance with a Tabler-aware version that routes AI agents to docs/skills/tabler/*.md, documents the apps/tabler/ structure (bridge templates, CSS overrides, theme engine), and explains the SmallStack-var aliasing strategy. Includes Tabler-specific anti-patterns ("don't follow modern-dark-theme.md", "don't forget to re-init Bootstrap JS after htmx swaps", etc.)

No CSS work was needed for the new /smallstack/api/health/ and /smallstack/api/activity/ pages — they use the same SmallStack classes/vars (.page-header-bleed, .page-header-with-actions, .crud-form, var(--primary), var(--card-bg), var(--body-fg), var(--body-quiet-color), var(--success-fg)) that were already aliased and ported into tabler_overrides.css during the v0.9.2 merge. Verified visually with shot-scraper.

Stats

  • 749 tests passing, 26 starter_content tests deselected (intentional), 74% coverage
  • 1 new Django app registered (apps.api); existing apps.preview / apps.mcp / apps.tokenmgr retained
  • No new migrations needed
  • openapi-spec-validator (dev extras) required to run the new OpenAPI validity test — uv sync --all-extras handles it

Upgrade

git pull origin main
make setup    # uv sync + migrate + create_dev_superuser
uv sync --all-extras   # for the new openapi-spec-validator dev dep

🤖 Co-Authored-By: Claude Opus 4.7 (1M context)

v0.9.2: Merge upstream (MCP, token manager, home redesign)

Choose a tag to compare

@emichaud emichaud released this 16 Jun 03:55

Merges 54 commits from django-smallstack v0.9.2 into the Tabler-themed downstream, with theme integration so the new pages render cleanly inside the Tabler chrome.

What's New from Upstream

Model Context Protocol (MCP) server — apps/mcp/

  • Full JSON-RPC dispatch with OAuth 2.0 (PKCE, Dynamic Client Registration, authorize / token / revoke endpoints, metadata discovery)
  • @tool decorator + auto-discovery (autodiscovers views.py and mcp_tools.py in every app)
  • CRUDView factory — enable_mcp = True on a CRUDView derives list/get/create/update/delete tools automatically
  • Per-action and per-model description maps, mcp_singular/mcp_plural for consistent tool naming
  • mcp_doctor diagnostics command and mcp_smoke end-to-end test command
  • /smallstack/mcp/ admin dashboard with Health, Tools registry browser, Activity (RequestLog filtered by /mcp path), self-test runner
  • 55-test suite covering dispatch, factory, OAuth, PKCE, tenancy, X-Forwarded-Proto, session-login rejection
  • Dashboard widget on /smallstack/

Token Manager — apps/tokenmgr/

  • Self-service UI for the existing APIToken model. Any user can mint a read-only token; staff can mint at any access level for any user
  • List page with search + filter dropdowns (active/user/token type/access level) and inline revoke
  • Mint and "reveal once" pages
  • Dashboard widget with active/revoked counts
  • 37 tests covering the permissions matrix
  • MCP OAuth consent page deep-links to tokenmgr for self-service management of granted tokens

Other

  • Home page redesigned as an editorial product page (templates/website/home.html rewritten; content extracted to apps/smallstack/templates/smallstack/pages/home_content.html)
  • Pagination fix — page_range_display attached on every list-pagination path
  • OpenAPI 3.0.3 spec validated on every test run
  • api-smoke and mcp-smoke end-to-end commands
  • Heartbeat migration 0006 adjusting epoch options
  • apps/smallstack/api.py exposes serialize/search/filter helpers as public API
  • usermanager.views cleaned up: @staff_member_required replaces @login_required + @user_passes_test

Tabler Integration

Two Tabler-specific commits sit on top of the merge to make the new pages render cleanly in the Tabler chrome:

  • CSS variable aliases — Map SmallStack-style var(--primary), var(--card-bg), var(--body-fg), var(--body-quiet-color), var(--body-bg), var(--border), var(--hairline-color), var(--input-border), var(--code-bg), var(--message-warning-bg), var(--delete-button-bg), var(--font-monospace), var(--radius-sm), var(--control-height) to their --tblr-* equivalents in both light and dark modes. Upstream templates render correctly without per-template rewrites.
  • Ported SmallStack layout + form classes that the new MCP and tokenmgr pages depend on:
    • .page-header-bleed, .page-header-with-actions, .page-header-content, .page-subtitle (the tinted bleed header)
    • .crud-form .crud-field/label/help/error/actions, .has-error (form-rendering scaffolding)
    • .list-toolbar, .list-toolbar-search, .list-toolbar-filter, .list-toolbar-overflow-toggle/-panel, .list-toolbar-count, .list-toolbar-clear (search + filter dropdown toolbar)
  • pyproject.toml — skip @pytest.mark.starter_content tests by default (the marker is documented as "safe to skip in downstream projects" — they assert upstream home-page copy that doesn't apply to our Tabler dashboard home)

Verified visually at /smallstack/mcp/health/, /smallstack/mcp/tools/, /smallstack/tokens/, and /smallstack/tokens/create/ in both light and dark themes with the amber accent.

Stats

  • 708 tests passing, 26 starter_content tests deselected (intentional), 73% coverage
  • 2 new Django apps registered (apps.mcp, apps.tokenmgr); apps.preview retained alongside
  • 2 new migrations applied (heartbeat.0006, mcp_server.0001)

Upgrade

git pull origin main
make setup    # uv sync + migrate + create_dev_superuser

🤖 Co-Authored-By: Claude Opus 4.7 (1M context)

v0.8.35: Comprehensive Tabler UI Skill Set

Choose a tag to compare

@emichaud emichaud released this 10 Jun 02:39

What's New

This release reorganizes and dramatically expands the Tabler UI documentation that AI agents (and humans) use when building pages in this project.

Comprehensive Tabler skill set

The previous single tabler-ui.md (1,105 lines, flat reference) is now a routing index pointing to 20 specialized skill files under docs/skills/tabler/:

Foundationsfoundations.md, theming.md, layouts.md
Componentscomponents.md, icons-typography.md
Forms & dataforms.md (Flatpickr, Choices, tom-select, Imask, Dropzone, Signature Pad, Star Rating, NoUiSlider, wizards), tables.md, charts.md, maps-calendar.md (jsVectorMap, FullCalendar, Sortable.js)
Interactivityhtmx-patterns.md
Page recipespage-dashboards.md, page-landing.md, page-content.md, page-api-explorer.md, page-auth.md, page-utility.md (kanban, todos, calendar, file manager, inbox)
Metacustomization.md, troubleshooting.md

Every skill cites real in-repo files, links to preview.tabler.io and docs.tabler.io, and includes copy-pasteable Django + Tabler snippets with SmallStack-specific gotchas.

Other changes

  • Adds 20 new Tabler skill entries to docs/skills/index.json (including the previously-unindexed tabler-ui.md)
  • Refreshes docs/skills/README.md with a dedicated Tabler section pointing to the new router
  • Slimmed tabler-ui.md from 1,105 → 92 lines (now a router + project rules)

Stats

  • 19 new files, ~8,300 lines of comprehensive Tabler documentation
  • 544 tests passing, 69% coverage
  • All Tabler skills now discoverable via index.json

Upgrade

Pull the latest:

git pull origin main

No code or migration changes — documentation-only release.

🤖 Co-Authored-By: Claude Opus 4.7 (1M context)

v0.8.34

Choose a tag to compare

@emichaud emichaud released this 12 May 01:16

What's new

  • Add upstream workflow skill documenting how smallstack-tabler relates to django-smallstack
  • Configure git remotes: origin → smallstack-tabler, upstream → django-smallstack
  • Merged upstream through v0.8.33 (inline worker, help content relocation, Django 6.0.5)
  • 544 tests passing