feat(ui): unify gittensory-ui and gittensory-miner-ui on one design system - #4973
Conversation
) Moves the 46 shadcn-style component primitives, design tokens, cn() utility, and use-mobile hook out of apps/gittensory-ui into a new @jsonbored/gittensory-ui-kit workspace package, so gittensory-ui and gittensory-miner-ui can share one real design system instead of two. gittensory-ui's own copies become thin re-export shims (matching the existing gittensory-engine parity pattern) so none of the 84+ consumer files needed changes. styles.css now imports the shared theme and scans the new package's source for Tailwind class usage in addition to its own. Verified pixel-identical rendering and working Radix-based interactions (command palette) via local preview; full typecheck/build/lint/test suite green.
…4967) Replaces the hand-rolled dark palette and raw Tailwind classes in gittensory-miner-ui's routes with the shared @jsonbored/gittensory-ui-kit components and design tokens, so both apps render from a single UI system. Moves .focus-ring/.hover-surface into the shared theme since both apps now use them directly, keeping only site-specific marketing flourishes local to gittensory-ui's stylesheet.
…4967) Ports gittensory-ui's no-restricted-syntax ESLint rule into miner-ui's routes, blocking raw text-size/leading/rounded/border Tailwind classes so a contributor can't silently reintroduce the old hardcoded look. Also swaps the remaining raw leading-none/leading-relaxed/tracking-tight in the three route headings for the shared theme's token classes (or drops them, since the base h1-h6 layer already sets font-family and letter-spacing).
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ❌ Deployment failed View logs |
gittensory-ui | df317d4 | Jul 11 2026, 06:18 AM |
|
Superagent didn't find any vulnerabilities or security issues in this PR. |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #4973 +/- ##
=======================================
Coverage 94.27% 94.27%
=======================================
Files 451 451
Lines 38900 38909 +9
Branches 14172 14178 +6
=======================================
+ Hits 36674 36683 +9
Misses 1574 1574
Partials 652 652
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
|
Caution 🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥🟥 🛑 Gittensory review result - fixes requiredReview updated: 2026-07-11 06:27:52 UTC
🛑 Suggested Action - Manual Review Review summary Nits — 7 non-blocking
CI checks failing
Linked issue satisfactionAddressed Review context
Contributor next steps
Signal definitions
Visual preview
Click any thumbnail to open the full-size screenshot. Before = production · After = this PR's preview deploy. 🟩 Safe / merged · 🟦 Advisory · 🟨 Held for review · 🟥 Blocked / closed 💰 Earn for open-source contributions like this. Gittensor lets GitHub contributors earn for the work they already do — register to start earning →. Checked by Gittensory, a quiet PR intelligence layer for OSS maintainers.
|
…test/build apps/gittensory-ui and apps/gittensory-miner-ui both import compiled output from packages/gittensory-ui-kit/dist, which is gitignored like every other workspace package's dist and does not exist on a fresh checkout. Nothing built it before ui:lint/ui:typecheck/ui:test/ui:build ran, so CI's UI typecheck failed with "has no exported member" against every shimmed component on a clean npm ci (it only worked locally because a previous manual build had left a stale dist sitting in the working tree). Adds a ui:kit:build script, prepends it to the four ui:* composite scripts, and adds an explicit "Build UI-kit package" CI step mirroring the existing "Build engine package" step for gittensory-engine, which has the same gitignored-dist-needs-building-first shape.



Summary
Extracts the gittensory-ui design system (46 shadcn/Radix components, tokens, utils) into a new shared package,
@jsonbored/gittensory-ui-kit, and migrates gittensory-miner-ui onto it — replacing its hand-rolled dark palette and raw Tailwind classes with the same shared components and tokens the main site uses. Also ports gittensory-ui's token-enforcement ESLint rule into miner-ui so a contributor can't silently reintroduce ad hoc colors/spacing.Closes #4966, Closes #4967.
Changes
packages/gittensory-ui-kit/(new)theme.css,utils.ts,use-mobilehook — copied verbatim from gittensory-uiapps/gittensory-ui/src/components/ui/*export *shims re-exporting from the shared packageapps/gittensory-ui/src/lib/utils.ts,src/hooks/use-mobile.tsxapps/gittensory-ui/src/styles.csstheme.css; keeps only site-local marketing flourishes (hero glow, grid, gradient border)apps/gittensory-miner-ui/src/routes/*.tsxCard/Badge/Tablecomponents and design tokens instead of rawborder-white/10/text-emerald-300/80-style classes; data-fetching logic unchangedapps/gittensory-miner-ui/index.htmlclass="dark"(matches gittensory-ui's current dark-only deployment — no toggle exists on either app yet)apps/gittensory-miner-ui/eslint.config.jsno-restricted-syntaxtoken-enforcement rule gittensory-ui already has, scoped tosrc/routes/**package-lock.jsonvitebumped^7.3.1→^8.1.3to match gittensory-ui/dedupe the workspace treeScope
type(scope): short summaryConventional Commit format.CONTRIBUTING.md; nosite/, VitePress, orCNAMEchanges.maintainer-only/roadmap, authored and merged by the owner.Validation
git diff --checknpm run actionlint(not run — no workflow changes in this PR)npm run ui:typecheck(both apps)npm run ui:test(both apps — 169 + 27 = 196/196 passing)npm run ui:build(both apps, incl. gittensory-ui's SSR/Cloudflare nitro target)npm run ui:lint(both apps — 0 errors)npm audit --audit-level=moderate— 0 vulnerabilitiesnpm run test:coverage/test:workers/build:mcp/test:mcp-pack/ui:openapi:check— not run locally; this PR touches onlyapps/**andpackages/gittensory-ui-kit/**(nosrc/**, no API/OpenAPI/wrangler changes), so these are unaffected. CI will confirm.ui:lintfailed, reverted.If any required check was skipped, explain why:
actionlint/test:coverage/test:workers/build:mcp/test:mcp-pack/ui:openapi:checkskipped locally because this PR has zero changes undersrc/**,.github/workflows/**, or any OpenAPI/wrangler surface — onlyapps/gittensory-ui/**,apps/gittensory-miner-ui/**, and the newpackages/gittensory-ui-kit/**. CI runs these regardless and will catch anything I've misjudged.Safety
fetchRunStates,fetchPortfolioQueue) unchanged — no mock/demo fallback introduced.visuallabel. Happy to attach if wanted — just say the word and I can walk through it via browser automation, or attach them yourself from the screenshots already shared in this conversation.UI Evidence
Not embedded as GitHub-hosted images (see Safety note above) — visually verified via local dev-server screenshots + an accessibility-tree snapshot confirming
Card/Badge/Table/heading semantics render correctly, already shared with the maintainer directly during this session.Notes
#4967depended on#4966's package existing first; both are included in this single PR since they were always meant to ship together and splitting them would create an unmergeable stacked-branch dependency.maintainer-only/roadmap— owner-authored, not subject to the contributor one-shot gate.