Alien Pixels, adapted for an iOS-first tokenized-VC product. Dark luxury cockpit with neon-green data, mono numbers, glow-as-signal — and just enough disco to remember why we exist.
Version 1.0 · April 2026
Production target iOS · React Native + Expo
Owner Garrison Bullock
Foundations
Six principles
Every design and code decision should be checkable against these. If something on screen breaks one of them, that's the bug.
1. Dark-first
Background is always near-black. Cards lift by elevation, not borders. White is for light.
2. Glow is the accent
Color radiates. Bars, charts, active icons emit a soft ambient glow. Glow signals "alive."
3. Mono numbers, always
Every numerical value renders in JetBrains Mono / SF Mono. A number in a sans-serif face is a bug.
4. Color is meaning
Green = positive. Hot pink = negative. Cyan = link. Yellow = warning. Color is never decoration.
5. Breathing room
24px card padding, 32px section gaps. Whitespace is the system's most underused tool.
6. Agent-native
Every UI surface has a structured-data twin. Microcopy is authored to be parsed by Disco Dan.
Logo
Disco Capital marks
Four official logo variants. The disco-ball icon is the foundation, paired with the wordmark in three lockups. Pick the variant that fits the format — never modify proportions or relationships.
Ball mark
1080 × 1080 · square
The icon by itself. Use for favicons, app icons, profile bubbles, watermarks — anywhere too small for type to be legible.
Horizontal lockup
1920 × 1080 · 16:9
Primary horizontal version. Use for site headers, landing pages, signature blocks, business cards, anywhere wide.
Stacked lockup
1080 × 1080 · square
Square format with the wordmark stacked next to the ball. Social profile pictures, square ad units, app store icons.
Slogan lockup
1920 × 1080 · 16:9
Full brand statement with slogan beneath. Splash screens, pitch deck covers, hero areas, founding-investor moments.
Color usage
Marks are monochrome by default. Default is white on the dark app background.
Use --green-500 only for celebratory contexts (post-investment confetti, splash on first launch).
Never recolor outside the brand palette. No reds, oranges, or rainbow gradients on the marks.
On the rare light background, use --bg-app (#0D0E11) as the foreground.
Clear space & minimum sizes
Clear space. Maintain a margin equal to half the ball's diameter on all sides. No text, line, or edge inside that buffer.
Below these thresholds the type and slogan become illegible — fall back to the ball mark.
Production note
For final exports (App Store icon, OG image, print), outline the type in Illustrator before exporting so the lockups don't depend on the Satoshi font being available. Source .svg files live at ~/Desktop/DISCO - CoWork/Design System/logos/.
Do's & don'ts
Do
Pick the variant that fits the format's aspect ratio. Horizontal slot → horizontal lockup. Square slot → stacked or ball-only.
Don't
Crop, rotate, distort, or warp any mark. Proportions are locked.
Do
Use the ball-only mark for any spot under 88px wide. Type becomes unreadable below that.
Don't
Add drop shadows, glows, gradients, or strokes to the marks. They are pure path. Glow rules govern interactive elements only.
Do
Maintain clear space (½ ball diameter) on all sides. Tight crops kill the mark.
Don't
Pair the ball with arbitrary type or substitute fonts. If you need a wordmark, use one of the three official lockups.
Color
Palette
Click any swatch to copy its hex. The whole app is built from the values below — no hex anywhere else.
Backgrounds
bg.app
#0D0E11
App background. The deepest layer.
bg.card
#151618
Default card surface.
bg.cardHover
#1A1B1F
Pressed / hover card state.
bg.cardElevated
#1E1F23
Modals, popovers, sheets.
Hero — neon green
green.400
#33FF99
Highlights, chart peaks.
green.500
#00E87B
Hero. Primary CTA, positive deltas, active tab.
green.600
#00C466
Pressed state, secondary green.
Accents
lime.500
#84CC16
Climate / energy.
cyan.500
#00D4FF
Links, secondary data, trending. DeFi.
blue.500
#3B82F6
Stacked-chart middle stop.
indigo.500
#6366F1
Fintech.
purple.500
#8B5CF6
Stacked-chart segment.
violet.500
#A855F7
Biotech / health.
pink.500
#EC4899
Stacked-chart segment.
hotPink.500
#FF3B7A
Sell, take profit, exit position. Deep Tech / Defense.
Eight hues, evenly spread around the wheel. Every pair is at least 25° apart so each sector is unmistakable on a dark surface. Lock these mappings — don't improvise per screen.
AI / ML
#00E87B
Climate / Energy
#84CC16
Consumer / Creator
#FBBF24
Space / Aero
#FF6B35
Deep Tech / Defense
#FF3B7A
Biotech / Health
#A855F7
Fintech
#6366F1
DeFi / Crypto
#00D4FF
Stacked chart sequence
When a chart needs more than two colors, walk this sequence top-to-bottom.
Color do's & don'ts
Do
Use green for the primary action, the active tab, and the user's portfolio total.
Don't
Use green for body copy or large background fills.
Do
Use hot pink (#FF3B7A) for negative numbers, destructive actions, the Sell flow.
Don't
Use brand magenta (#E91E8C) anywhere in product UI. Magenta lives only in the wordmark and marketing.
Do
Walk the stacked-chart sequence in order.
Don't
Pick chart colors by feel. The order is part of the brand.
Typography
Type system
Inter for everything except numbers. JetBrains Mono for every numerical value, no exceptions. The mono number is the system's signature.
display
44 / 48 · 700
Turn doomers into dreamers.
text.4xl
36 / 40 · 700
$32,134
text.3xl
30 / 36 · 700
$8,903 ↑1.9%
text.2xl
24 / 32 · 700
Holdings
text.xl
20 / 28 · 600
Helion Energy
text.lg
18 / 26 · 600
Sub-header
text.base
14 / 20 · 400
Body copy. Default UI text. Small enough to be dense, large enough to read.
text.sm
12 / 16 · 400
Compared to last 7 days
text.xs
10 / 14 · 500 · UPPER
Pre-Seed · DeFi · 2026-01-12
text.label
11 / 14 · 600 · CAPS
Allocation
Metric display pattern
The most-repeated layout in the app. Use it everywhere a value needs context.
Portfolio value
$8,903 ↑1.9%
Compared to $8,734 last 7 days
Three-metric strip (Hyper Charts)
Inherited verbatim from Hyper Charts XL widgets. A row of three metrics above a chart.
● Weekly
$2,197 ↑19.6%
Compared to $1,340 last week
● Monthly
$8,903 ↑1.9%
Compared to $5,441 last month
● Yearly
$98,134 ↑22%
Compared to $76,330 last year
Spacing
4px scale
Every margin, gap, and padding value comes from the scale below. Don't invent a 14px to make a layout fit — re-do the layout.
Elevation & Glow
Glow is the accent
Three tiers — element glow, ambient card glow, area glow. Use them liberally on data, sparingly on text.
Add ambient glow for hot deals, top-of-feed posts. At most one per screen.
Glow do's & don'ts
Do
Glow data and active interactive elements (CTA, active tab, focused input).
Don't
Glow text. Text uses semantic colors and weight, not glow.
Do
Use ambient card glow on at most one card per screen.
Don't
Glow every card. Then nothing is featured.
Iconography
Custom navigation set
Six bespoke icons drive the bottom-nav. Inactive state is white. Active state is uniform hot-pink with 3-layer glow — same color for every tab so the active affordance is unmistakable and brand-consistent.
Inactive state
home
wallet
punchbowl
trade
social
profile
Active state — hot-pink fill + glow (uniform across all tabs)
home
wallet
punchbowl
trade
social
profile
Bottom-nav demo (one tab active)
Active token
all tabs (active) → --hot-pink-500 (#FF3B7A)
glow recipe → drop-shadow 4px / 10px / 20px @ 40% / 20% / 10% alpha
inactive → #FFFFFF @ 0.85 opacity, no filter
Uniform hot-pink keeps the active affordance instantly recognizable across every screen. The brand color becomes the "you are here" signal — no per-tab learning required.
Implementation notes
Single source. SVGs use fill="currentColor" so the icon color is driven entirely by parent CSS — no duplicate active/inactive markup.
Glow recipe. Active state uses three layered drop-shadow() filters at 40% / 20% / 10% alpha — same canonical recipe as element glow.
Transitions. 200ms ease on filter and color; tap feels responsive without flickering.
One active at a time. Only the current screen's nav icon glows. Others stay white. Mirrors the "at most one featured card per screen" glow discipline.
Do's & don'ts
Do
Use uniform hot-pink for every active nav tab — same color, same glow recipe.
Don't
Glow multiple nav icons simultaneously. Only the active screen glows.
Do
Use currentColor in SVG so a single icon file serves both states.
Don't
Per-screen colors on the nav. Save accent colors for sector chips, charts, and content — not navigation chrome.
Components
Component gallery
Every component has the state vocabulary: default, hover/press, focus, active, disabled, loading, error.
Six tabs, matching the production app. Active tab uses hot-pink.500 with element glow — uniform across all tabs; inactive uses text.tertiary.
Floors
Wallet
Punch Bowl
Social
Profile
Toast / banner
✓
Investment placed
$500 in Helion Energy. You're Founding Investor #312.
Hyper Charts ✦
Chart vocabulary
Eleven chart types, inherited from Alien Pixels' Hyper Charts template. Resist the urge to invent a twelfth — these cover every analytics surface Disco Capital needs.
Widget header anatomy
[Title] ───────────────── [✦]
[$Metric] [↑Delta]
[Compared to ... last X]
─────────────────────────────
[Chart fills remaining space]
Widget size tiers
Small tiles for inline metrics, the Large card for full analytics surfaces. The Large carries the three-metric strip and a footer table.
Income · Vertical Small
✦
$32,134 ↑2.5%
301.082 USD
Sales Report · Medium
✦
$8,438 ↑2.5%
Avg. score $185,301
Sales Report · Large
✦
Weekly
$2,197 ↑19.6%
Compared to $1,340 last week
Monthly
$8,903 ↑1.9%
Compared to $5,441 last month
Yearly
$98,134 ↑22%
Compared to $76,330 last year
The eleven chart types
Basic Bar
✦
Single-series growth over time.
Detailed Bar
✦
Dense daily series, no labels.
Column with Labels
✦
128
137
112
128
156
129
114
Each bar carries its value above.
Grouped Bar
✦
Multi-series side-by-side comparison.
Stacked Columns
✦
Slot-reel style. Dot markers per segment.
Stacked Horizontal Bar
✦
The signature look. Broken-pill segments.
Waterfall
✦
Sequential up/down flow. Pink for negative.
Bubble Bar
✦
Outcome over magnitude. Glowing yellow dots.
Rainfall
✦
Bars descending from a curved baseline.
Multiply Bars
✦
Two overlapping series, shared baseline.
Line and Column
✦
Volume bars with price line overlay.
Donut / Allocation
✦
$8,903
Allocation
Profile sector allocation.
Patterns
Production patterns
Real screens are built from these. If you're designing something that doesn't match a pattern below, write the new pattern down before shipping.
Wallet hero card
Portfolio value
$8,903
↑ 1.9% Compared to last 7 days
H
O
A
D
Dance Floor card (round in progress)
H
Helion Energy
Pre-Seed · Climate
AI / ML
Net-positive fusion via pulsed magnetic compression.
Funding
$680,000 / $1,000,000 goal
$680,000 raised12 days left
D
Dynastik Defense
Seed · Defense
Deep Tech
Autonomous loitering munitions for allied forces.
Funding
$1,420,000 / $2,000,000 goal
$1,420,000 raised23 days left
Inline company link (Greenroom)
"Spent 3 hours with the team at Helion Energy last week. The compression rig is real. Founders Fund just led a $300M round and I think they're underselling the timeline."
@apinski · 2h
Holding list card
H
Helion Energy
AI / ML
$2,340
↑ 12.4%
D
Dynastik Defense
Deep Tech
$1,680
↓ 4.2%
Filters
Multi-select filter dropdown
The grouped multi-select pattern used on Dance Floors, Trading, and any list view that needs cross-axis filtering. Multi-select within each group, no mutual exclusion, no cap. Selections persist across navigation.
Anatomy
Header
Collapsible row with two-piece label. Primary: "All Categories" or "{N} Filters Active" in --green-500. Secondary: live result count "{N} Rounds" in --text-secondary mono, separated by ·. Chevron rotates 180° on expand. Click anywhere on the row toggles.
Summary bar
Shown only when ≥1 filter is selected. Each active filter renders as a pill with ×. Right-aligned Clear All ghost button removes everything in one tap.
Group label
All caps, mono, --text-tertiary, 10px, 1.2px letter-spacing. Examples: INDUSTRY VERTICALS, FUNDING STAGE, VC HOST. Group labels are descriptive only — they never carry data. Result counts live in the header.
Chip
Pill, 7×13 padding, uppercase, 10.5px / 700 weight. Inactive: outlined, --text-secondary. Active: solid --green-500 fill with subtle green glow. Hover: brighter text + brighter border. Click toggles.
Multi-select within each group. Picking "Series A" doesn't deselect "Series B". Users can mix freely across all three groups.
No mutual exclusion. No filter blocks any other.
No cap. User can select every chip if they want.
Persistence. Selected filters survive when the user navigates away from the screen and comes back. Wipe only on Clear All or session reset.
Live header label. "{N} Filters Active" updates in real time. When N=0, label reverts to "All Categories".
Live header count. "{N} Rounds" suffix in the header always reflects the current filtered result count. Updates as filters are added or removed. When no filters are active, this shows the unfiltered total. Group labels stay purely descriptive — counts live ONLY in the header.
Two-way deselect. Removing a chip from the summary bar (× button) ALSO un-fills it in the dropdown. Same chip, two views.
Clear All button is visible in the summary bar whenever ≥1 filter is selected. One tap removes everything; header reverts to "All Categories"; summary bar disappears.
Collapse independent of selections. User can collapse the dropdown without losing selections. The summary bar stays visible if there are any active filters.
Do's & don'ts
Do
Show the live count in the header so users know their filter state at a glance.
Don't
Hide selected filters when collapsed. The summary bar must stay visible whenever filters are active.
Do
Always show Clear All when ≥1 filter is selected. Friction-free reset matters when users over-filter.
Don't
Cap selections or mutually exclude. Over-filtering is the user's problem to solve, not the UI's to prevent.
Do
Persist filters across navigation. If a user filters Dance Floors, leaves, and returns, their filters stay.
Don't
Reset filters on every screen entry. That trains users to distrust the filter system and stop using it.
Do
Use uppercase mono for group labels. Visual rhythm signals "this is metadata, not content."
Don't
Title-case group labels. They'll read as content headers and compete with the page title.
NFT identity
Stake-NFT cards
Each stake is a collectible. Two startups should never look interchangeable. Sector gradient + letter glyph + glow does the work.
H
Helion Energy
AI / ML
Pre-Seed Round 12026-01-12#312
O
Ondo Finance
DeFi
Series A Round 22026-02-04#118
A
Altos Labs
Biotech
Seed Round 12026-03-22#048
D
Dynastik Defense
Deep Tech
Seed Round 12026-02-18#087
V
Varda Space
Space
Series B Round 12026-01-30#021
F
Form Energy
Climate
Series A Round 32026-02-22#194
M
Mercury
Fintech
Series B Round 12026-03-15#066
P
Patreon
Consumer
Series C Round 12026-01-08#412
Motion
Durations & easing
Five durations, four easings. Use the named tokens in tokens.js — never raw values in component code.
fast
150ms
Hover, focus, button-press feedback.
normal
250ms
Tab switch, segmented selection, toggle.
slow
400ms
Modal entry, sheet slides, card fade-in.
chart
600ms
Line draws, bar growth, donut sweep.
splash
1200ms
Disco-ball intro on first launch only.
Glow-pulse (featured cards, live indicators)
live
trending
closing soon
iOS preview
System on a real screen
Every component above, wired together inside an iPhone frame. Safe areas honored, tab bar at the bottom.
9:41●●●●▲▮
DANCE FLOOR
Portfolio value
$8,903
↑ 1.9% last 7d
H
Helion Energy
Pre-Seed · Climate
AI / ML
$680K raised12 days left
A
Altos Labs
Seed · Biotech
Biotech
$420K raised30 days left
Floors
Wallet
Bowl
Social
Profile
Accessibility
WCAG 2.1 AA + Apple HIG
Minimum standards. Test every new pattern against this list.
Color contrast
White on bg.app is 19.5:1 — passes AAA. text.tertiary on bg.app is 4.7:1 — labels and metadata only, never body.
Touch targets
44 × 44 pt minimum on every interactive element. Use hitSlop on icon buttons.
Don't rely on color alone
Positive deltas always carry ↑. Negative always carry ↓. Sector chips pair color with the sector name.
Dynamic Type
Test layouts at xSmall through Accessibility 5. Mono numbers scale with the rest.
VoiceOver
Every interactive has an accessibilityLabel: imperative verb + object. Charts get an accessibilitySummary.
Reduce Motion
Glow-pulse and shimmer freeze. Celebrate-burst becomes opacity fade. Disco-spin disappears.
Master rules
Do's and don'ts
The non-negotiables. If you have to break one, write down why in the PR.
Do
Use mono for every number.
Don't
Mix sans-serif and mono inside the same metric line.
Do
Reserve green for the primary action and positive state.
Don't
Use green for body text or large filled backgrounds.
Do
Glow data and interactive elements.
Don't
Glow text or every card on screen.
Do
Use a single primary CTA per screen.
Don't
Stack two primary buttons together.
Do
Honor 44pt minimum touch targets and Dynamic Type.
Don't
Trust an icon's visual size as the tap area.
Do
Reserve the disco-ball for splash and the post-investment celebration.
Don't
Sprinkle disco motifs across the product.
Do
Add new tokens by editing tokens.js + tokens.css together.