Skip to content

Materialize feature badges#574

Draft
authzed-catherine wants to merge 7 commits into
mainfrom
materialize-feature-badges
Draft

Materialize feature badges#574
authzed-catherine wants to merge 7 commits into
mainfrom
materialize-feature-badges

Conversation

@authzed-catherine

@authzed-catherine authzed-catherine commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Description

Identified the Materialize content for the accelerated queries use-case versus the event streams use-case.

Follow-up: pill + note split

The badge was carrying two jobs in one control — which feature a page documents, and how finished that feature is. A pill suits the first and not the second: it has no room to say what "Early Access" means or who to contact, and since both features share the same status today it read as ten repetitions of a word that couldn't explain itself.

Split into two markers that read as one:

  • Pill — feature identity, plus an asterisk. Links to the feature's section on Overview.
  • Note — what the asterisk means, tinted with the same accent token as its pill, docked in the TOC rail.

Snapshots documents both features and renders both pills from a single tag.

Implementation notes for reviewers

  • Accent tokens moved to :root. The Sandworm palette was scoped under .docs-home, so feature-badge.css had to hardcode the teal and violet HSL values with a comment as the only link back to the source of truth. They now live in app/globals.css and the badge reads them via var(), which also removes its two html.dark override blocks — the tokens flip themselves. Colour values are unchanged: --teal-500 is 178 35% 33% light / 177 28.2% 45.9% dark, --violet-500 is 253 62% 50% / 253 73.4% 63.1%. The --stone-* ramp stays scoped to .docs-home; it's inverted for that page and isn't general-purpose.

  • Authoring changed. MDX now uses a bare <FeatureBadge />; the page-to-feature mapping lives in lib/materialize-features.ts. This is forced by Nextra — toc.extraContent is a global slot with no access to page props, so the note can only learn its feature from the route, and keeping a prop on the pill as well would have been a second source of truth. Adding a new Materialize page now means adding an entry to that map. Worth a second opinion: the inline prop may be preferable even at the cost of duplication.

  • ⚠️ Breakpoint duplication. Nextra hides the TOC below 80rem (x:max-xl:hidden), which would leave the asterisk pointing at nothing on a laptop. The note therefore renders in both placements and CSS shows exactly one. That 80rem is duplicated in feature-notes.css because Nextra doesn't expose it as a variable — a future Nextra upgrade needs to re-check it, or the two placements desync and you get either both notes or neither.

  • Early access is a separate flag from the feature list, so a feature reaching GA is a one-line change that drops its asterisk and note while keeping its pill and colour.

Testing

  • pnpm build passes (92 pages), pnpm format:check clean.
  • Verified rendering on /materialize/concepts/snapshots (two pills, two notes) and the single-feature pages (one each); confirmed nothing leaks onto non-Materialize pages.
  • Confirmed the two breakpoint rules are mutually exclusive in the served CSS. Reviewers: resize across 1280px — the note should move between the TOC rail and inline, never showing twice or disappearing. Worth checking in both light and dark.

Open questions

  • getting-started/limitations is the only Materialize page besides Overview without a badge. Deliberate, or an oversight?
  • Does Early Access need to be louder on the API pages, where someone may start integrating without seeing Overview?

References

@github-actions

github-actions Bot commented Jul 20, 2026

Copy link
Copy Markdown
Contributor

Preview deployment status for this pull request.

Name Status Preview Updated (UTC)
docs 🟢 Ready Visit Preview Jul 21, 2026 08:04pm

The badge was carrying two jobs in one control: which Materialize feature a
page documents, and how finished that feature is. A pill is the right form
for the first and a poor one for the second — it has no room to say what
"Early Access" means or who to contact — and since both features share the
same status today, it read as ten repetitions of a word that couldn't
explain itself.

Split them. The pill carries identity plus an asterisk; a colour-matched
note carries what the asterisk means, docked in the TOC rail beside the
pill it belongs to. Same accent token on both, so they read as one marker
across two columns rather than two unrelated notices.

Nextra hides the TOC below 80rem, which would leave the asterisk pointing
at nothing on a laptop, so the note also renders inline under the pills and
CSS shows exactly one. That 80rem is duplicated from Nextra's own
`x:max-xl:hidden` — it isn't exposed as a variable, so a future Nextra bump
needs to re-check it.

Also lifts the Sandworm accent palette out of `.docs-home` onto :root and
html.dark. It was scoped to the landing page, so feature-badge.css had to
hardcode the teal and violet HSL values with a comment as the only link back
to the source of truth. The badge now reads them via var(), and its two
html.dark override blocks go away since the tokens flip themselves. The
--stone-* ramp stays scoped: it's inverted for that page, not general-purpose.

Page-to-feature mapping moves into lib/materialize-features.ts. Nextra's
toc.extraContent is a global slot with no access to page props, so the note
can only learn its feature from the route; keeping a prop on the pill as
well would have been a second source of truth. MDX now uses a bare
<FeatureBadge /> and Snapshots renders both pills from it. Early access is a
separate flag from the feature list, so a feature going GA is a one-line
change that drops its asterisk and note while keeping pill and colour.

Colour values are unchanged throughout: --teal-500 resolves to 178 35% 33%
light / 177 28.2% 45.9% dark and --violet-500 to 253 62% 50% /
253 73.4% 63.1%, matching what shipped.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
authzed-catherine and others added 2 commits July 21, 2026 13:42
…gram

- New concept pages: Hydration and Watched Permissions, grounded in the
  Tiger source (../internal/tiger)
- Overview page: adds a system architecture diagram showing the services
  behind Materialize (Snapshotter, Hydrator, Datastore, SpiceDB, Cache
  Server, Event Log) and how they connect to a customer's own systems
- Renamed "Consuming Client" to "Event Processor" (guide + diagram) to
  avoid confusion with a SpiceDB client
- Recolored the Accelerated Queries badge/diagram accent from teal to
  blue for better legibility, still sourced from the authzed.com palette
- Flagged the new/changed pages as "Needs Review" in the sidebar nav

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
…to the overview and some improvements to the concept pages
Reworks the diagram to follow AuthZed's Sandworm design system
(design/diagrams.md): dashed 7-3 scope containers vs. solid node
borders, mono-caps container labels riding the dashed edge, orthogonal
connectors with rounded corners, and stone/teal color tokens instead
of black/grey. Also fixes several label-overlap and text-wrapping
issues found along the way.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants