Conversation
…onts, cache headers, lazy routes
Six coordinated changes shipping the 1-year roadmap of perf + design
debt in one push. Net result: 56% smaller tangle-dapp main chunk, 63%
smaller font payload, 4250 LOC of dead bridge code removed, modern
design surface adopted across tangle-cloud.
────────────────────────────────────────────────────────────────────────
1. Package bumps
- @tangle-network/sandbox-ui: ^0.13.0 -> ^0.15.3 (SegmentedControl,
StatCard, EmptyState, InlineCode/CodeBlock/CopyButton, TaskBoard,
CalendarView, ApprovalQueue, ModelPicker, HarnessPicker, tokenized
typography/spacing, font-loading fix)
- @tangle-network/brand: ^0.2.0 -> ^0.3.0 (themed code primitives)
- @tangle-network/ui: new direct dep at ^1.0.1 (sandbox-ui peer)
2. Implicit-any cleanup (46 files)
New sandbox-ui re-exports raw Radix primitives whose callback types
don't auto-infer in TS. Added explicit React.ChangeEvent / MouseEvent
/ FormEvent / boolean / string types to every callback site. Zero
'any', zero @ts-ignore, real types only.
3. Dead-code removal (~4,250 LOC)
Deleted @hyperlane-xyz/{sdk,registry,utils}, @livepeer/* (lpt), and
astar chain configs. They're not coming back — the bridge UI was a
half-finished hubble pivot. Removed: 12 files (incl. orphan bridge-
dapp + 3,932-LOC bridge config), 5 SVG icons, 3 modified type files.
Net effect on bundle: dead chunks (livepeer 117KB, lpt 117KB,
astar 24KB, astr 24KB, hyperlane.*) gone forever.
4. Font externalization (1.19MB -> 443KB)
Cousine + Satoshi families converted from TTF to WOFF2 (per-file
~33-41% smaller, ~750KB saved per app). Added font-display: swap to
all 11 @font-face declarations so text renders immediately with
fallback while fonts stream in.
5. Cache + immutable asset headers (netlify.toml)
/assets/* and /fonts/* get max-age=31536000 immutable (Vite hashes
filenames so this is safe). /index.html stays no-cache so deploys
replace atomically. Repeat-visit loads near-instant.
6. Route-level React.lazy (tangle-dapp)
Converted 7 top-level routes to React.lazy() with a Suspense boundary
wrapping <Routes> and a SkeletonLoader fallback. tangle-dapp main
index chunk: 3.36MB -> 1.47MB (-56%). tangle-cloud was already lazy
pre-existing — left alone.
7. Design surface adoption (12 tangle-cloud files)
Replaced ad-hoc UI with sandbox-ui 0.15.3 primitives:
- Filter pill row -> SegmentedControl (BlueprintListing)
- Card+stat-number-with-label -> StatCard (SlashingSummaryCards,
payments/pool)
- 'No X yet' placeholders -> EmptyState (rewards, blueprints/manage,
services/[id]/JobHistoryTable + JobResultsModal,
SandboxBlueprintServicePage, TxHistoryDrawer, CreditBalanceContainer)
- <code> spans -> InlineCode (blueprints/create)
- 3-stack manual Skeletons -> SkeletonTable (JobHistoryTable)
Unified module shim type definitions for the new primitives.
────────────────────────────────────────────────────────────────────────
Bundle deltas summary:
| Chunk | Before | After | Delta |
| tangle-dapp main index | 3.36 MB | 1.47 MB | -56% |
| tangle-cloud font payload | 1.19 MB | 443 KB | -63% |
| dead chain chunks (combined) | 282 KB | 0 | gone |
| TOTAL CODE / LOC removed | - | -4,250 | net loss |
Verified: typecheck + build pass on both apps.
✅ Deploy Preview for tangle-leaderboard ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
✅ Deploy Preview for tangle-dapp ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
✅ Deploy Preview for tangle-cloud ready!
To edit notification comments on pull requests, go to your Netlify project configuration. |
This was referenced May 7, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The omnibus perf + design polish PR. Six coordinated changes that ship the 1-year roadmap of debt in one push.
TL;DR — bundle deltas
indexWhat ships
Package bumps:
@tangle-network/sandbox-ui0.13 → 0.15.3,@tangle-network/brand0.2 → 0.3,@tangle-network/ui(new direct dep) 1.0.1. New components available:SegmentedControl,StatCard,EmptyState,InlineCode/CodeBlock/CopyButton,SkeletonCard/SkeletonTable, plus tokenized typography/spacing.Implicit-any cleanup: 46 callback param types fixed across the dapp after the bump exposed Radix passthrough types. Real types (
React.ChangeEvent<HTMLInputElement>,MouseEvent<HTMLButtonElement>, etc.) — zeroany, zero@ts-ignore.Dead-code purge (~4,250 LOC):
@hyperlane-xyz/{sdk,registry,utils},@livepeer/*(lpt),astarchain configs gone. Includes orphanapps/bridge-dapplegacy hubble code and a 3,932-LOC bridge config file. The bridge UI was a half-finished hubble pivot — not coming back.Font externalization: Cousine + Satoshi families converted from TTF to WOFF2 (33-41% smaller per file, 750KB saved per app).
font-display: swapon all 11@font-facedeclarations.Cache headers: Both apps'
netlify.tomlgetCache-Control: public, max-age=31536000, immutablefor/assets/*and/fonts/*(Vite hashes filenames so this is safe)./index.htmlstays no-cache for atomic deploys. Repeat-visit loads near-instant.Route-level React.lazy on tangle-dapp: 7 routes converted, dropping main bundle 3.36MB → 1.47MB. tangle-cloud was already optimally lazy-loaded; left alone.
Design surface adoption (12 tangle-cloud files): replaced ad-hoc filter pills, stat blocks, empty placeholders, and skeleton shimmers with sandbox-ui 0.15.3 primitives (
SegmentedControl,StatCard,EmptyState,InlineCode,SkeletonTable).Verified
tangle-cloud:typecheck✓tangle-cloud:lint✓tangle-cloud:build✓tangle-dapp:typecheck✓tangle-dapp:lint✓tangle-dapp:test✓ (5 lazy-route tests converted to asyncfindByTestId)tangle-dapp:build✓