tux roadmap
What's missing from tti-ux today, ordered by impact. Adapted from the aggieux batch-roadmap (which was React/JSX-specific) into a Vue + Nuxt-shaped backlog. Each entry lists a working name, what it covers, and any shipped neighbors that already partly fill the gap.
When you ship one, register it in
app/utils/tuxCatalog.ts (which drives the
sidebar nav, the /components index grid, and the homepage count) and add
a row to the doctrine table in components.md.
tests/tux-catalog.test.ts fails CI until both agree with the filesystem.
Update CHANGELOG.md under Unreleased.
Priority A — High-value system-level — ✅ closed 2026-04-29
All three sub-families shipped in one batch. See CHANGELOG "Priority A roadmap batch (2026-04-29)" for the full inventory.
Status states — ✅ shipped
The "what shows when nothing's there / something broke / something's loading" family. Closes a real product gap.
TuxEmptyState— shipped (no-data placeholder).TuxErrorPage— shipped 2026-04-29; 404 / 500 / 403 / 503 templates with editorial header + recovery actions.TuxSkeleton— shipped 2026-04-29; shimmer / pulse / never modes; six composed presets; honorsprefers-reduced-motion.TuxStepper— shipped 2026-04-29; numbered-circle indicator, horizontal/vertical with container-query collapse, error-status override per step.
Banners & tags — ✅ shipped
TuxAnnouncementBanner— shipped 2026-04-29; localStorage- backed dismissal; four tones;urgentreserves the maroon fill.TuxCookieConsent— shipped 2026-04-29; bottom-right or bottom-strip; surface only (host owns categories via slot); decision persisted + emitted.TuxBetaRibbon— shipped 2026-04-29; corner ribbon · top stripe · inline pill; preview/beta/dev tones.
Form primitives reference — ✅ shipped
The roadmap's intent was breaking the inline /forms catch-all
into per-primitive state-matrix pages, not new Tux* wrappers
(the existing /forms explicitly stated "No Tux wrappers here yet"
because Nuxt UI's form primitives don't need brand deviation). The
Tux*-prefixed names below were renamed at delivery to plain
section titles.
TuxTextField→ ships as /forms/text-field.TuxSelect→ ships as /forms/select.TuxChoice→ ships as /forms/choice.TuxDatePicker→ ships as /forms/date-picker.TuxFileUpload→ ships as /forms/file-upload.TuxInlineValidation→ ships as /forms/inline-validation — masked inputs (phone, NIH grant ID), live character counter, async availability check.
The legacy all-in-one form demo lives at
/forms/all-in-one; /forms
itself is now a landing tile page.
Priority B — Data patterns
Charts & data viz — ✅ closed 2026-05-22
TTI is a research institute — charting is the most under-served family
in the catalog. Note: simple cases compose TuxVizEmbed + a Tableau
or Superset URL. These were for first-class native rendering.
TuxSparkline— shipped (inline mini trend line, no axes; pairs with TuxBigStat / TuxFactoid for KPI rows).TuxChartBar— shipped 2026-05-22; vertical + horizontal, grouped + stacked, comparison overlay for projections-vs-actuals.TuxChartLine— shipped 2026-05-21; native SVG single + multi-series, end-of-line value labels (default), optional previous-period dashed overlay, optional confidence band, markers, auto-derived screen-reader summary, brush selector. See/visualizations/chart-line.TuxChartScatter— shipped 2026-05-22; bivariate scatter with linear-regression trendline + R², bubble-chart mode via per-point size.TuxStatComparison— shipped 2026-05-21; before/after stat block with delta + tone, direct/invert/neutral polarity, three layouts (row/stack/inline). Pairs withTuxBigStat. See/components/stat-comparison.chart-foundations doc— shipped 2026-05-21 asdesign/chart-foundations.md. Palette, axis/grid/legend tokens, in-bar vs above value labels, end-of-line default, previous-period overlay, confidence bands, brush selector, KPI strip composition, accessibility (SR summaries + alt-text patterns).
Map & geospatial — ✅ closed 2026-05-22
TTI does heavy GIS work. Cluster shipped as sprint 3 of the four-family expansion alongside identity + research-publishing + forms-wrapper.
TuxMapEmbed— shipped 2026-05-22; Mapbox / Leaflet wrapper with TTI tokens (basemap palette, marker styles, popup chrome).TuxMapLegend— shipped 2026-05-22; choropleth legend with the editorial maroon rule.TuxMapMarker— shipped 2026-05-22; branded marker with cluster + popup affordances.TuxCorridorStrip— shipped 2026-05-22; linear "strip map" diagram for highway-corridor reports.
Priority C — Navigation gaps
Tabs & sectioning
TuxTabsHorizontal/TuxTabsVertical— shipped 2026-05-21 asTuxTabs(single component,orientationprop covers both). WrapsUTabs; adds maroon active underline +boldintent for eyebrow-rhythm contexts. See/components/tabs.TuxSideSheet— shipped 2026-05-14 asTuxSlideover. Three sides (right · left · bottom), built on the native<dialog>, Batch-J ease-corridor slide animation. See/components/slideover.
Pagination extras — ✅ shipped 2026-05-21
We have basic numbered pagination only — was. Now three more.
TuxLoadMore— shipped 2026-05-21; explicit button with remaining count + terminal divider on completion. SEO-friendly middle ground between paginated and infinite. See/components/load-more.TuxInfiniteScroll— shipped 2026-05-21; IntersectionObserver sentinel + loading state; honorsprefers-reduced-motionwith explicit-button fallback. See/components/infinite-scroll.TuxResultCount— shipped 2026-05-21; "Showing 1–24 of 412 corridors · 24 per page." Pairs with any of the three pager components. See/components/result-count.
Priority D — Content patterns
Comments & feedback
TuxCommentThread— shipped 2026-05-26; peer-review / editorial-comment threads with reply, resolve, @mention. Stateless renderer over a v-modeled array; host owns persistence. See/components/comment-thread.TuxReactionBar— shipped 2026-05-21; light-touch acknowledgement strip (helpful · question · disagree default, fully configurable). v-modeled active reactions + display-only counts. See/components/reaction-bar.
Tooltips & help
TuxTooltip— shipped 2026-05-21; wrapsUTooltip. Adds optional title + hairline rule + tuned max-width (~22ch) + shortcut glyphs viakbds. See/components/tooltip.TuxPopover— shipped 2026-05-26; title + body + optional actions panel. Click mode by default (hover-with-actions is bad UX); three width tiers; maroon hairline under title. See/components/popover. The "two consumer surfaces" bar was already cleared (~7 UPopover- direct call sites existed at ship time).TuxKeyboardShortcuts— shipped 2026-05-14 asTuxShortcutsHelp. Modal overlay triggered by?, auto-classifies combo vs sequence rows, usesTuxKbdfor every key glyph. Mounted globally inapp.vuealongside the command palette. See/components/kbdfor the kbd primitive and the shell'sdefineShortcutsblock for the wired bindings.
Priority E — Foundations & meta
Accessibility documentation — ✅ shipped 2026-05-21
All four foundation pages live under /accessibility/*. Each is
referenced from the accessibility index
with a tile card.
— keyboard-first foundations page. WCAG 2.4.1 Bypass Blocks; how the skip link is wired, where it lands, how to verify./accessibility/skip-to-content— visible-focus reference, focus-trap behavior in modals/slideovers/popovers, tab-order rules, three exceptions (inputs, linked cards, HC theme)./accessibility/focus-model— USWDS-style summary of the top 10 token pairs by traffic across light/dark/HC themes. Full 282-surface audit at/accessibility/contrast-matrix/contrast-audit.— six-breakpoint scale + the container-query preference (ADR-0007) + 200% zoom reflow guarantees./accessibility/breakpoints
Mobile frames — ✅ shipped 2026-05-26 as TuxMobileFrame
CSS-only, doc-only nicety. The platform-awareness doctrine still
stands for runtime: reach for TuxAppFrame + TuxTabBar when the
chrome needs to be live.
TuxMobileFrame— single component withplatform="ios" | "android"prop. iPhone 16 Pro or Pixel 9 proportions; per-platform color sets; Android nav-style options; shared:widthpivot for cross-platform mockups. See/components/mobile-frame.
Polish queue — shipped components
Small follow-ups for components already in the catalog. Each one is worth less than a fresh component; collect them here so they don't get lost. Pick from the top when there's a slow afternoon.
Wire— done 2026-05-21.TuxTOCintoTuxReportWebFrame's#tocslot./reports/web-frameexample now uses<TuxTOC target=".tux-report-web-frame article" />inside the#tocslot for IntersectionObserver-driven active-section tracking. The fallback (plain anchor list from thetocprop) still renders when the slot is empty.Refresh— done 2026-05-21. Now uses the full sidebar layout +/examples/landscape-dashboard#asideslot for the activity rail + inline TuxSparkline next to the treemap header + KPI deltas in factoidsourcefields.Refresh— done 2026-05-21. Added a TuxStatComparison year-over-year delta row beneath the by-the-numbers factoid; one of the three uses inverted polarity (non-compliance going down = success tone)./examples/research-landingRefresh— done 2026-05-22 (second polish queue commit). Spot-checked the message-action row vs/examples/tti-ai-studio-sessionTuxReactionBar; left as-is per documented Conventions. Page now exercises the full chat-surface cluster end-to-end.
Recently shipped — four-family TTI expansion + dogfood pass (2026-05-22)
After closing the Figma absorption pipeline at 70/70 triaged (51 absorbed + 19 in SKIP-RATIONALE), the user picked all four proposed new component families. Each shipped as its own focused sprint with the full 6-step wiring (source + showcase + nav + index + components.md + CHANGELOG). The catalog grew from ~110 to ~130 Tux* components in one batch.
Research-publishing cluster — sprint 1 of 4
Editorial-research surfaces for the published-paper shape — what JOSS, eLife, Distill, and TRR pages all need. Eight components:
TuxAbstract— structured abstract (Background / Methods / Results / Conclusions) with optional plain-language summary.TuxAuthorByline— author list with affiliations, ORCID iDs, corresponding-author marker; compact/full layouts.TuxPaperMeta— DOI / license / received-accepted-published dates / version history / funder strip.TuxFigureCaption— numbered figure wrapper with source citation and inline alt-text reveal.TuxTableCaption— numbered table caption sister.TuxFootnote— inline marker + bottom-of-document list; scrollspy bidirectional linking.TuxCitationExport— six-format export popover (BibTeX / RIS / EndNote / APA / MLA / Chicago).TuxAcknowledgments— gratitude block with role taxonomy.
TTI identity / brand cluster — sprint 2 of 4
The institutional-identity surfaces that map directly to TTI organizational structure. Five components:
TuxResearcher— researcher card with ORCID, h-index, active grants, recent publications.TuxLab— division/lab hero with leaders, focus areas, project/people counts, location.TuxProgram— sponsored-research program card with funders, leads, and headline metrics.TuxFundingSource— funder badge with abbreviation + grant number; size sm/md.TuxCenterBadge— TTI center identity chip (mobility / safety / freight / roadways / policy / operations).
Geospatial / map cluster — sprint 3 of 4
Closed the Priority B "Map & geospatial" roadmap section. Four components:
TuxMapEmbed— Mapbox/Leaflet wrapper, deferred runtime via lazy load, TTI-themed marker + popup chrome.TuxMapLegend— choropleth legend with editorial maroon rule and numeric / categorical variants.TuxMapMarker— branded SVG marker with cluster + popup affordances.TuxCorridorStrip— linear strip-map for highway- corridor reports (mile markers, segment tones, callouts).
Forms wrapper cluster — sprint 4 of 4
The "TUX wrapper above Nuxt UI form primitives" layer the original Priority A forms-as-primitives sprint had deliberately deferred — shipped now because the research-publishing dogfood surfaced two real consumer-shape needs (markdown drafting + dropzone uploads). Five components:
TuxFormField— labeled wrapper with description, error, required marker, andTuxInfoLabelintegration.TuxMarkdownEditor— no-deps markdown source editor with toolbar + preview + character counter. Chose markdown over Tiptap for source-controllable editorial-research outputs.TuxFileDropzone— drag-and-drop file upload with progress- per-file remove + validation slot.
TuxValidationSummary— inline form-level error summary with anchor links to each invalid field.TuxConfirmDialog— sentence-cased confirmation modal with destructive tone variant + keyboard-shortcut hints.
Dogfood pass — 2 new examples + 3 refreshed
After the four families shipped, the user requested a dogfood pass to prove the components compose under realistic constraints. Two new pages exercise the new families end-to-end; three existing pages were refreshed to sprinkle the new identity primitives into already-shipped surfaces:
— full editorial-research paper page exercising the research-publishing cluster end-to-end (12 Tux* components, including a TuxChartLine inside TuxFigureCaption + an inline TuxFootnote × 3 with reverse-link list at document end)./examples/paper-page— TTI Mobility Division landing using the identity cluster end-to-end (TuxLab hero + TuxResearcher × 3 with stagger entrance + TuxProgram × 3 + TuxFundingSource × 7 + cross-division TuxCenterBadge links)./examples/center-landing— identity-cluster sprinkle (TuxCenterBadge + TuxAuthorByline + TuxFundingSource strip)./examples/research-landingrefresh— corridor strip + map markers + I-35 cross-link to the new paper page./examples/landscape-dashboardrefresh— TuxMarkdownEditor composer wired into the chat surface./examples/tti-ai-studio-sessionrefresh
Compositions doctrine
— "X + Y composes more value than they do alone" doctrine. Seven sections: layout shells, headlines+summaries, chart surfaces, browse+detail, chat, cross-app nav, editorial-research. Pairs withdesign/compositions.mdcomponents.md(catalog) andtux.md(manifesto) to make the three-doc design triangle complete.
Figma absorption — closed at 70/70
Coverage gap closure— five remaining stubs (shadcn_ui original, TailwindCSS v4.2.4, Airbnb UI Kit, Material UI ×2) got proper NOTES.md. Skip-rationale rebased 22 → 21 entries. Pipeline now closed: 51 absorbed + 19 in SKIP-RATIONALE = 70/70.
Carry-forwards
Deferred-with-criterion items surfaced in this batch:
TuxRichTextEditor— shipped 2026-05-26 as the canonical TUX rich-text surface; Tiptap-based WYSIWYG with 7 toolbar groups including tables, task lists, source-mode toggle, full-screen, word count, save event, and code-block syntax highlighting via lowlight. Feature set mirrors thedocs-tti-tamu-eduadmin-center editor so one component covers Landscape · tti-ai-studio · docs. See/components/rich-text-editor.- Map runtime decision —
TuxMapEmbedships as a wrapper around Mapbox + Leaflet; pick one when the first consumer surface forces the question. Default lean: Leaflet for OSS-friendly + no token registration. - Paper-page hardening — when a real journal consumer materializes, audit footnote bidirectional-scroll polish, citation-export format details, and figure number auto-incrementing.
User shifted TUX target from web-only to Tauri desktop shells on Windows / macOS / Linux plus future Tauri Mobile (iOS / Android). Doctrine doc + 8 components + 2 composables + 1 CSS utility + safe-area support landed in one sprint. Held the line on 5 visual- language rejections (Liquid Glass surface, Mica wholesale, Material tonal palette, elevation-as-color, SF Symbols).
Doctrine:
design/platform-awareness.md— "One component tree, platform-adaptive at the chrome layer." Two- layer mental model; 8 dimensions of variation.
Foundations:
- useTuxPlatform() — composable; sets
[data-platform]on<html>. - tux-scrollbar.css — per-platform scrollbar styles.
- Safe-area-inset CSS on
default.vue+sidebar.vue.
Components shipped:
- TuxAppFrame — custom Tauri titlebar with platform-correct controls.
- TuxFocusView — full-viewport content overlay (Teams Stage view analog).
- TuxMenuBar — in-window File/Edit/View menu for Win/Linux.
- TuxSplashScreen — branded app-launch overlay.
- TuxTabBar — bottom-anchored 3-5 mobile tabs with maroon top-edge active rule.
- TuxFAB — Floating Action Button (Material pattern).
Composables shipped:
- useTuxSwipe — pointer/touch swipe with directional callbacks.
- useTuxRipple — Material tap-feedback ripple, opt-in only.
Enhancements:
- TuxKbd — extended for Super (Linux) / Win (Windows) keys
via
useTuxPlatform(). - TuxModal —
sizeprop +variant: 'standard' | 'sheet' | 'auto'(mobile sheet from iOS/M3 patterns).
Recently shipped — next-sprint batch (2026-05-22)
TuxAppSwitcher— shipped 2026-05-22. Waffle button + popover grid for hopping between TTI consumer apps.TuxSplitPane— shipped 2026-05-22. In-page master-detail layout with resizable list pane (localStorage-persistent), optional bottom pane, URL-bound selection.TuxChartBar— shipped 2026-05-22. Second Priority B chart; single / grouped / stacked, vertical / horizontal, comparison overlay for projections-vs-actuals.— shipped 2026-05-22. Companion doc enumerating which TUX components call which Tauri APIs + the capability allowlist template.design/tauri-bindings.md
Native chart family — closed 2026-05-22
The Priority B chart family is now complete:
TuxChartLine— shipped 2026-05-21 (end-of-line labels, previous-period overlay, confidence band).TuxChartBar— shipped 2026-05-22 (single / grouped / stacked / horizontal / comparison overlay).TuxChartArea— shipped 2026-05-22 (overlay + stacked variants; pairs withTuxBigStatfor the KPI-strip composition).TuxChartDonut— shipped 2026-05-22 (center stat slot, slice-label colored to wedge, auto-fold tiny slices into "Other").TuxChartScatter— shipped 2026-05-22 (linear-regression trendline + R², bubble-chart mode via per-point size).TuxChartGauge— shipped 2026-05-22 (270° arc with needle- bands, or radial-progress variant).
Plus the pre-existing TuxChartGeographic (Texas map) and
TuxChartSunburst (two-ring radial) for specialized surfaces.
Recently shipped — Figma absorption pass (2026-05-19 / 2026-05-20)
Sequenced absorption of seven high-signal Figma reference systems
(Windows UI kit, Aggie UX, shadcn_ui Jan 2026, Vercel AI Elements,
Primer Web, Microsoft Fluent 2 Web, Backstage). "Absorb the thinking,
skip the chrome" — most findings confirmed TUX's architecture; the
rest landed as net-new components, a layout, build-pipeline additions,
and one MDC infrastructure fix. Per-file findings cached under
reference/figma-cache/; each NOTES.md
records the skip/absorb/tension/decisions framework.
New components (8)
TuxSuggestionChips— horizontal prompt chip row (Vercel)TuxBranchNav—‹ N of M ›response-alternative nav (Vercel)TuxInlineCitation— academic[N]pill + hover popover (Vercel)TuxContextMeter— token-utilization badge + cost popover (Vercel)TuxArtifact— container for AI-generated output (Vercel)TuxRemovableChip— dismissible chip primitive (Primer)TuxInfoLabel— form-field label +(i)help popover (Fluent 2)TuxTeachingPopover— onboarding/guided-tour tooltip (Fluent 2)
Enhancements (5)
TuxCodeBlockgained a download button + filename resolutionTuxEmptyStategainedcompact(Primer) +kindpreset library with 5 named cases (Backstage)TuxChatMessagegained a#header-trailingslot surfaced by dogfooding thetti-ai-studio-session.vuerefactorTuxFilterPanelrefactored to consumeTuxRemovableChipsidebar.vue layoutrewritten onUDashboardGroup+UDashboardSidebar+UDashboardPanel; new demo example at/examples/sidebar-shell
Build pipeline + infrastructure
Breakpoint tokens—breakpointblock indesign/tokens.json@theme --breakpoint-*inglobals.css. Sourced from Microsoft's Windows UI kit responsive ladder, rebased to TUX's editorial widths.
LaTeX math in MDC—remark-math+rehype-katex+ KaTeX CSS imported globally.$inline$and$$display$$now render in any markdown surface.MDC component resolution fix—nuxt.config.tsnow setscomponents: [{ ..., global: true }]so::tux-alert{...}and other Tux* embeds in markdown actually resolve at runtime. Closes a long-standing[Vue warn]: Failed to resolve component: TuxAlertthat fired on every markdown render.
Conventions
Added "Conventions" section to
design/components.md with two documented standards:
Chat-message actions— standard 5-icon set forTuxChatMessage#tools: Copy / Regenerate / Share / Helpful / OffForm validation — when to use which— decision tree across inline field error / inline form summary / blocking dialog / page banner / toast
Carry-forwards
Deferred-with-criterion items (in NOTES.md follow-ups; build when a consumer surface forces the question):
TuxSegmentedControl(Primer) — only if URadioGroup-as-buttons doesn't compose cleanly for a real surfaceTuxCommentBox(Primer) — markdown editor with toolbar; bigger build, deferred to tti-ai-studio drafting/annotation contextTuxSparkline.autoTone(Backstage) — auto-color by trend direction; ~10 LOC if any consumer needs it- TuxDataTable cross-check against Primer's 17 frames + Fluent 2's variant matrix when next material update lands
TuxChatMessagevsUChatMessagedead-code audit — verify the TUX wrapper still adds TTI-specific value once dust settles
Medium-signal pass (2026-05-21): Charts UI Kit + Data Viz Graphs
- Data Table + Snow Dashboard + Empty State Illustration Kit absorbed.
Net new: 0 components shipped, 1 doc stance added (no decorative
illustrations in
TuxEmptyState). New deferred-with-criterion items:
- TuxChartLine (Priority B): default end-of-line value labels
colored to match series; support
withBrush/#rangeslot for time-series scrubbing; supportseries.previousoverlay + tooltip - TuxChartBar (Priority B):
valuePlacement: "in-bar" | "above" | "auto"prop (auto: bar pixel-height ≥ 24px → in-bar); support acomparisonseries with muted fill for projection-vs-actual - TuxChartArea (Priority B): stacked variant; KPI strip composed above by parent template, not baked in
TuxRuleBuilder— shipped 2026-05-26; relational query UI with five operator families, nestable groups (depth-bounded), and type-aware value editors. RecursiveTuxRuleBuilderGroupinternal child. See/components/rule-builder.- TuxRichDataGrid: per-column
headerMenuslot for sort / hide / pin / filter from the column header (Snow + data-table kit) - TuxRichDataGrid: inline column-header filter popover as a
second filter mode alongside
TuxFilterPanel sidebar.vue:#asideslot for an optional right rail (notifications + activities). Defer until two surfaces request it.chart-foundations.mddoc — series palette, axis/grid/legend tokens, accessibility (alt-text + screen-reader summaries), in-bar vs above value-label decision, brush/previous-period patterns. Ship alongside the first TuxChart* component."Faceted vs relational filtering — when to use which"— shipped 2026-05-26 indesign/components.mdConventions alongsideTuxRuleBuilder.
AI-studio chat-surface pass (2026-05-21): Chat UI kit + Chat Input Box + ChatGPT UI Kit + MCP Apps for Claude absorbed. Net new: 0 components shipped. The chat surface was saturated after the prior Vercel AI Elements + Fluent 2 + Primer pass. New deferred- with-criterion items, mostly anchored on a future MCP integration in tti-ai-studio:
— shipped 2026-05-26; ~340 LOC (came in over the ~150 LOC estimate once the skeleton + reduced-motion fallback + collapse-state-sync landed). Sister toTuxMcpEmbedTuxArtifact. See/components/mcp-embed.— shipped (predates this entry's authorship; roadmap was stale). Horizontal scroll of cards with prev/next + optional pagination dots. Eyebrow + display title. WrapsTuxCardCarouselUCarousel(embla). See/components/card-carousel.MCP three-tier display taxonomy— done. Lives indesign/components.md§ "MCP tool output". Updated 2026-05-26 alongsideTuxMcpEmbedship to reflect the static-vs-interactive split on the inline-card tier.TuxComposer.cancelable(carry-forward, defer) — when a consumer wraps TuxComposer in a modal and wants explicit[Cancel] [Send]pair. Build only when forced.- First-run AI-surface taxonomy ("Examples / Capabilities /
Limitations") — document in
design/components.mdConventions when a consumer surface needs richer first-run framing thanTuxEmptyState kind="first-run". Compose with TuxFactoid 3-up or 3-up TuxCard grid; no new component.
Recently shipped — PECAN → Landscape rebrand (2026-05-21)
The downstream consumer formerly named PECAN is now Landscape. TUX touched ~50 files across pages, components, kits, and design docs; historical record (CHANGELOG, ADRs) was left intact by design.
Renamed:
app/pages/examples/pecan-dashboard.vue→landscape-dashboard.vue(file + route/examples/landscape-dashboard+ body text + nav entry inapp/app.vue+ index card inapp/pages/examples/index.vue)public/kits/pecan/→public/kits/landscape/(folder + README + AppShell + Pages.jsx + index.html;app/pages/kits.vueslug + label)
Prose updated (first mention per file uses "Landscape (formerly PECAN)" for continuity; later mentions are bare "Landscape"):
README.md,design/components.md,design/roadmap.md- ~30 showcase pages under
app/pages/(components, examples, forms, visualizations, reports, kits) - 10 component JSDoc blocks (TuxDescriptionList, TuxCodeBlock, TuxFilterPanel, TuxPagination, TuxTeachingPopover, TuxTreemap, TuxSearch, TuxSiteNav, TuxRichDataGrid, TuxFooter)
- Top-of-file comments in
nuxt.config.ts,app/app.vue,app/layouts/sidebar.vue - All
public/kits/aggieux/*.jsxdemo content (banners defaultproductName, footer demo text, breadcrumbs, overlays)
Leave alone (historical record, by design):
CHANGELOG.md— entries refer to the project under its name at the time the entry was written. Don't rewrite history.docs/adr/*.md— architectural decisions reference the name as it was when the decision was made.
Composition refresh shipped alongside: landscape-dashboard.vue
was rebuilt on the sidebar layout (left-rail nav with brand lockup +
two nav groups + user chip) and gained a KPI row with delta-vs-
previous readings, an inline ingest-rate sparkline next to the
treemap section header, and a right-rail aside composing Recent-
activity + Active-agents tiles. Composes ~15 Tux* + Nuxt UI 4
primitives. Per the Snow Dashboard absorption notes
(reference/figma-cache/snow-dashboard-ui-kit/NOTES.md). No new
components — the right rail is a host-driven grid, not a layout
slot. The sidebar.vue#aside slot carry-forward waits for a second
consumer surface before being formalized.
Recently shipped — keyboard shortcuts + prose layer + drawer + tree (2026-05-14)
Sliced delivery of the Nuxt UI gap-analysis follow-through. Three of
the five components close explicit roadmap entries above (under
different working names — TuxSideSheet → TuxSlideover,
TuxKeyboardShortcuts → TuxShortcutsHelp); the other two
(TuxKbd, TuxProse, TuxTree) emerged from the audit. Each one
followed the four-surface nav wiring rule (sidebar / index grid /
catalog table / doctrine table). See CHANGELOG for the full per-slice
inventory.
TuxKbd— token-styled<kbd>with Mac/PC modifier normalization, three sizes, built-in glyphs (enter→ ↵, arrows,tab,space, …). Slice 1.TuxShortcutsHelp— modal overlay listing wired bindings, triggered by?. Auto-classifies combo (meta_k) vs sequence (g-c) rows. Slice 1.Global—defineShortcutswiringmeta_k,/,?,g-c/g-t/g-d/g-hinapp.vue.TuxCommandPaletterefactored onto the same composable; mounted globally with groups derived fromnavTreeso sidebar and palette share a source of truth. Slice 1.TuxProse— typographic shell for long-form markdown. Consolidates ~400 lines of duplicated.prose-tux :deep(…)CSS that lived inline in/changelog,/design/[doc],/markdown. Slice 2.— four-family roster,/typographyrefreshheading--elegantdemo, style-variants triptych, TuxProse sample. Replaces the stale Public-Sans-only foundation page. Slice 2.ContentSurround on— Nuxt-UI-style prev/next sibling-doc navigation at article bottom. Slice 2./design/[doc]TuxTree— recursive hierarchical list (native, not aUTreewrapper). Sitemap, corpus/filesystem browser, BI dataset explorer (per ADR-0009). Mono leaf labels, sand guide lines, sessionStorage persistence,v-model:selected. Slice 3.TuxSlideover— edge-anchored<dialog>drawer (right / left / bottom). Closes the TuxSideSheet roadmap entry. Slice 4.
Carry-forwards
Two items adjacent to this batch worth tracking:
- The TuxTree selected-row background-color uncovered a Tailwind v4
@layer basecascade gotcha (button reset wins over scoped CSS even with!important). Documented in CLAUDE.md gotchas and thefeedback_tailwind_layer_button_resetmemory. defineShortcutsgrammar:_for combos,-for sequences. Documented in CLAUDE.md and thefeedback_define_shortcuts_grammarmemory after burning a verification cycle ong_cvsg-c.
Recently shipped — data density + geographic charts (2026-05)
Two batches plus the token-only prelude that should have shipped before them. Both batches were rebuilt from chat memory + the official source of truth (us-atlas + TxDOT MapServer) after a worktree got wiped pre-commit. See CHANGELOG entries.
Data density — neither was on the original roadmap; both were pulled in because Landscape-class consumers needed them.
- TuxRichDataGrid — interactive grid for operational surfaces.
Sticky header, row selection (with indeterminate header
checkbox), expandable detail rows, sortable columns, active-
filter chip strip, bulk-action bar (visible only when ≥1 row
selected), footer pagination. Host-driven via v-models +
events;
cell-<key>,expanded,bulk-actionsslots. - TuxDataTable — research-flavored static table for finished
deliverables. Numbered caption + Oswald display title +
tabular figures, uncertainty cells (
value ± CIwhenciKeyis set), footnote anchors, optional row groups + sticky header- totals row, source citation.
Geographic charts (real geometry) — adjacent to the still-
aspirational TuxMapEmbed line in Priority B (Mapbox/Leaflet
wrapper); these ship pre-projected static SVG geometry, not a
slippy-map runtime.
- TuxChartGeographic — five Texas-flavored map kinds in one
component (
countychoropleth from real TIGER/Line,districtsfrom the TxDOT MapServer feature service,us-contextvia AlbersUsa,dot-densityrejection-sampled inside the actual state outline,flowOD arcs between primary metros). - TuxMetroInset — 4-up neighborhood-grid companion (Houston /
DFW / Austin / SAT). Cell pattern seeded by metro name so SSR
- CSR match.
- TuxChartSunburst — two-ring radial breakdown sister to
TuxTreemap. Container-queried legend collapse below 36rem. - TuxChartFrame — editorial wrapper used by
/visualizations/*showcase pages so a multi-exhibit report reads as one document.
Geometry pipeline (build-time only). scripts/build-geo.mjs
projects us-atlas + the official TxDOT Boundaries MapServer GeoJSON
into static SVG path strings under app/assets/geo/. New
devDependencies: d3-geo, topojson-client/server/simplify,
us-atlas. Outputs are checked in; re-run via npm run build:geo
when upstream sources change. New tokens for chart palette
(--chart-1..8) and map ramps (--map-seq-maroon-1..5,
--map-seq-slate-1..5, --map-outline, --map-flow) across
light / dark / HC.
Visual-language evolution prelude. Token-only refresh; component
families inherit automatically. Two-ring focus token, transportation-
tempo easings (--ease-survey/corridor/arrival), four-tier
elevation system (--elevation-flat/rest/hover/overlay/pinned),
warm-neutral ramp extension (12 → 18 stops), survey-rhythm density
tokens (--rhythm-tight/snug/normal/loose/roomy), and
public/identity-primitives.svg (four <symbol>s: tux-star,
tux-chevron, tux-compass, tux-row-grid). Documented in
visual-language-evolution.md.
Recently shipped — reports + visualizations sections
Added 2026-04-28 after the design-kit port; rounded out 2026-04-29:
Reports — finished narrative deliverables (paper, PDF, print, or web-hosted long-form). The reader reads top-to-bottom.
- TuxReportFrame — page-sized canvas (letter / a4) for PDF + print.
- TuxReportPrintSheet — drop-in print stylesheet.
- TuxReportWebFrame — long-form web-hosted narrative (cover,
byline, lede, TOC, body, footer). Screen-native sibling to
TuxReportFrame; same family because it's still a finished narrative read top-to-bottom.
Visualizations — interactive data surfaces (BI dashboards, R artifacts, native charts). The reader pivots, filters, drills in.
- TuxVizEmbed — branded chrome for Tableau · Power BI · Apache
Superset · Grafana iframes (renamed from
TuxReportEmbed). - TuxVizRPlot — branded chrome for R-language plot artifacts
(PNG · SVG · htmlwidget; renamed from
TuxReportRPlot). - TuxVizGrid — small-multiples layout primitive (2/3/4-up) for comparing several embeds or R plots side-by-side.
- TuxSparkline — inline mini trend line, no axes; pairs with
TuxBigStat/TuxFactoidfor KPI rows.
Plus the chat-primitive batch (TuxChatMessage · TuxCitations · TuxComposer · TuxConversationList · TuxContextPanel).