The Bee Team . Product Canon
The Crown Bees look-and-feel basis
Version
v1.0
Status
Approved . canon
Brand
Crown Bees
btt-server v61
client EAS build 24
main 69ed4b5
Contents
The visual and interaction language the product is built in - the Crown Bees brand. Two colors, one typeface, warm neutrals, and a small, disciplined component vocabulary.
Durable document (designated Session 370, 2026-07-13). The 4th of the four canonical project documents per the Hub methodology [[10-Three-Document-Product-Canon]] (~/Documents/ Claude/Vaults/The Hub/25 Methodology/10-Three-Document-Product-Canon.md). This is the Design System - it answers "what is the visual + interaction language the product is built in?" and is the canonical entry point the other three documents point to for the skin. Version: v1.0 (first authoring; documents the shipped skin reconciled againstpackages/uiand thecrown-bees-designbrand authority). Current shipped-skin coordinates: btt-server v61, client EAS build 24, productmain69ed4b5. Living copy: this file. Dated, version-stamped snapshots underdocuments/snapshots/. Companions: As-Built (as-built-spec.md- what is live), UX Flow Atlas (ux-flow-atlas.md- the desired experience per persona per flow), and To Build (next-build-spec.md- what we build next). Shape: reference-hub, not a copy. This document summarizes the design system faithfully and points to the authoritative sources (Section 8). It deliberately does NOT duplicate the token files or component source - those live once, in the skill and the code, and copying them here would create a drift surface. Reproduce from the authoritative sources named below; never re-draw from memory.
STATUS: APPROVED - canon (2026-07-15). All Design System items in this document are the settled canon baseline - the shipped skin, confirmed by Scott with Dave and Kellie (discussed 2026-07-13). Changes are tracked deltas against this baseline. The Section 8 known-drift items are accepted as-is (documented, not blocking). This is a canon document (unlike the To Build Spec and UX Flow Atlas, which remain DRAFT until further work locks); the product is still ~60-80% complete overall, so the DS may yet gain net-add components, but its current items are settled.
IP notice. The design system is the Crown Bees brand - the sole IP of Dave Hunter / Crown Bees, LLC. The crown-bees-design skill's own notice governs: *"(c) 2026 Dave Hunter / Crown Bees, LLC. All rights reserved. Confidential - not for distribution. Produced by Scott Sands (advisor) and Claude under Scott's direction, on behalf of Dave Hunter / Crown Bees, LLC. No IP claim by Scott Sands or Claude."* The Bee Team's combined IP is the app that implements this brand, per IP-NOTICE.md - not the brand itself. When BT extends the DS with app-specific components (the @btt/ui net-adds), those components are combined BT work product built in the Crown Bees brand.
Section 1
The design system exists authoritatively in two layers, and they can drift. This document's first job is to name them and the rule between them.
| Layer | Where | Authority for |
|---|---|---|
| Brand design authority | ~/.claude/skills/crown-bees-design/ - colors_and_type.css (tokens as CSS custom properties), README.md (brand context, voice, visual foundations, iconography), LOGO.md (logo usage), preview/ (token + component specimens), ui_kits/marketing-site/ (faithful UI recreation), assets/logos/ (official logo artwork) | The design intent - what the brand is. Extracted verbatim from the Crown Bees Pollination Success App v0.1 prototype; the prototype is the ultimate source, and where the skill and the prototype disagree, the prototype wins. |
| Implemented | product repo packages/ui/src/tokens/*.ts (the shipped tokens) + packages/ui/src/components/*.tsx + charts/*.tsx (the @btt/ui component library) | What actually ships - the As-Built reality. This is what renders in the app on iOS / Android. |
The rule. The brand design authority governs *intent*; packages/ui governs *what is live*. Where a shipped value differs from the brand authority, that is a drift to reconcile - the implemented value is what the user sees (and so what the As-Built records), while the brand authority states what it should be. Known drift is listed in Section 8 so neither layer is read as complete on its own. New work reproduces from both: the brand authority for the rules and voice, packages/ui for the exact shipped tokens and component APIs.
Building a new screen is compose-from-the-kit, not a reskin: the live app skin already is this design system.
Section 2
Color
The palette
Two brand colors carry everything - green is frame, heading, and structure; orange is the only call-to-action, used sparingly so it always reads as "do this." Warm neutrals only, never cold grey.
Brand
Semantic status - GO / WAIT / HOLD
Warm neutrals
Chart accents
Two brand colors carry everything. Green is frame / heading / structure; orange is the only call-to-action color, used sparingly so it always reads as "do this."
| Role | Hex | CSS var (skill) | Code token (packages/ui) |
|---|---|---|---|
| Brand green (primary) | #004322 | --cb-green | colors.green |
| Green dark (hover / pressed) | #002e17 | --cb-green-dark | colors.greenDark |
| Green light (hero terminus) | #1d6a44 | --cb-green-light | colors.greenLight |
| Action orange (only CTA) | #e69100 | --cb-orange | colors.orange |
| Orange light (pale surface) | #fff6e6 | --cb-orange-light | colors.orangeLight |
| Orange dark (hover / pressed) | #b87100 | --cb-orange-dark | colors.orangeDark |
Semantic status trio (GO / WAIT / HOLD): success green #28a745 (--cb-success / colors.success), warning amber #eb9247 (--cb-warning / colors.warning), alert red #e95050 (--cb-red / colors.red). Red also carries "sale."
Warm neutrals (never cold grey): text #222222, muted #6b6760, soft #888888, white surface #ffffff, page field #f8f8f8, cream highlight #fdf6e6, hairline border #e6e3dd, faint divider #f0ede6. (Code tokens: colors.text / textMuted / textSoft / bg / bgSoft / bgCream / border / borderSoft.)
IP / confidentiality band palette (always-on notices): parchment #fdf6e3 (--ip-bg), brown text #6b5a2c (--ip-text), gold border #ecd9a3 (--ip-border).
Status-pill tints (pale bg + saturated text), via pillTints in code:
| Tone | bg | fg |
|---|---|---|
| green | #e6f5ec | #28a745 |
| orange | #fff2e0 | #b87100 |
| red | #fce8e8 | #e95050 |
| blue | #e6f0f7 | #2c5fa3 |
| grey | #ececec | #6b6760 |
Chart accent palette (added S209 / S242; implemented in colors.ts, see Section 8 drift note): clay #bd6b43 (early-tier / harvest / temp) + claySoft #f4e6dc; sage #74886b (mid-tier / Summer Leaf) + sageSoft #eef2e9; sky #2c5fa3 (late-tier / threshold / GDD) + skySoft #e6f0f7 / skyBorder #cfe0ee; plum #7a5ea8 (Huckleberry).
Section 3
Typography
One family: Inter
A single typeface (weights 400-800) carries the whole product. Display is tight and heavy; body is comfortable at 15 on a 1.5 line-height. System-mono for code and labels only; no serif in the live app.
A single family: Inter (weights 400-800), loaded via @expo-google-fonts/inter in the app and Google Fonts in the skill. System-mono fallback (SF Mono, Menlo, Consolas) for code / labels only. No serif in the live app.
Font-family tokens (fontFamily in typography.ts): Inter_400Regular, Inter_500Medium, Inter_600SemiBold, Inter_700Bold, Inter_800ExtraBold.
Scale (size / weight / tracking), from fontSize + fontWeight + letterSpacing:
| Role | Size | Weight | Tracking | Note |
|---|---|---|---|---|
| hero | 36 | 800 | - | welcome hero h1 |
| h1 | 30 | 800 | -0.3 | display, tight + heavy |
| h2 | 22 | 700 | -0.2 | |
| h3 | 16 | 700 | - | |
| lead | 17 | 400 | - | intro paragraph, muted |
| body | 15 | 400 | - | line-height 1.5 (= 22.5) |
| small | 13 | 400 | - | captions / muted |
| micro | 11.5 | 500 | - | IP band, eyebrow (uppercase, +0.3 tracking) |
Display is tight and heavy; body is comfortable at 15/1.5.
Section 4
spacing token:1:4 / 2:8 / 3:12 / 4:16 / 6:24 / 8:32 / 12:48.
radii token: default 10, lg 14 (cards / heroes / banners), xl 20, pill 999.0 1px 4px rgba(0,0,0,0.08) (shadows.header, platform-aware via Platform.select). Cards carry NO shadow - a 1px warm border + 14px radius does the separating.
--max-width / --gutter).0.18s ease (opacity 0->1, translateY 4px->0);hover / press 0.12s ease; progress-bar width 0.4s. No bounces, loops, or parallax.
green-light) and the GDD progress bar linear-gradient(90deg, green -> orange)`. Everything else is a flat fill - no photography, textures, or patterns.
Section 5
@btt/ui)Component vocabulary
The kit
Screens are composed from a small, disciplined set. A component not already in the kit is a net-add - flag it. Cards carry no shadow; a 1px warm border and a 14px radius do the separating.
Buttons
Pills - 5 tints (Title Case, no punctuation)
Card
Apple . Honeycrisp
White fill, 1px warm border, 14px radius, no shadow. The default container.
Decision banner - the daily release call
GO / WAIT / HOLD is the app's most saturated surface, reserved for the daily release decision. It is DecisionBanner, never a Pill.
The implemented library lives at packages/ui/src/; import from @btt/ui. Each has a test in __tests__/. Compose screens from these; a component not already here is a net-add (flag it).
Primitives:
Button - variants primary / outline / outlineOnDark / secondary / ghost / green / heroLight;sizes sm / md / lg. Hover darkens to the -dark token; disabled = 0.5 opacity.
Pill - 5 tones (Section 2 tints); toPillLabel Title-Cases + strips punctuation, all-capstokens survive. GO / WAIT / HOLD is DecisionBanner, not a Pill.
Card - white fill, 1px warm border, 14px radius, no shadow; padding default 24 / tight 16.Typography - the Section 3 variant scale.DecisionBanner - the large, full-color GO / WAIT / HOLD banner (the app's most saturatedsurface, reserved for the daily release call). Distinct from Pill.
TopProgressBar - the top loading line = the header's idle orange underline.Content components: Hero, DetailHero, StepCard, KvList, GddBar, PlantCard, AddPlantCard, AdviceItem, KnowledgeCard, BloomConfirmRow, AlertFeedRow, SpeciesAccordion, ActionDetailSheet, WeeklyTipSheet, TodayWeatherCard, WeatherGrid, HomeSummaryCards.
Charts (packages/ui/src/charts/): ChartFrame, GddYearChart, PollenGauge, VarietyTimelineChart, TempActiveBeesChart, BlossomWindowsChart (+ gdd-geometry / scale helpers).
Chrome (app-level, in apps/client, built on the kit):
#004322 app bar on every signed-in screen: orange-bee CROWNBEESwordmark -> Home, notifications bell -> Advice (orange unread badge), avatar -> Profile, a 3px orange bottom line (TopProgressBar). Mobile below 980px; horizontal nav row at/above 980px.
/ Yard / Advice**. The FAB (54x54, orange, floating) is the Rep-AI "Ask" entry point (BT-062).
Section 6
Voice (from the prototype's copy): warm, plain-spoken, confidence-building - an expert gardener, never a marketer.
cart. The app speaks as "we" (Crown Bees).
the only shouted words (plus all-caps status pills like BLOOM ACTIVE). Nav labels are Title Case ("My Plants", "Weather & Bees").
Days, cocoons, hatchery) always paired with a plain consequence.
Iconography = emoji, used functionally (never decoratively). No SVG / icon-font / line-icon set - introducing one (Lucide / Heroicons / etc.) breaks from the source; flag if a true icon is unavoidable.
garden flowers.
bee, bird, and the sun / cloud / rain forecast set.
Section 7
The mark: an apple / berry (a fruit body with two leaves holding seven seeds, one a bee) locked up with the CROWNBEES wordmark (CROWN green, BEES orange). Current selection is "Option 2" - a solid orange-disc bee (full color) / negative-space ring (reversed). Official artwork lives in assets/logos/; never recolor or rebuild it.
| File | Role | Use on |
|---|---|---|
crown-bees-horizontal.png | Primary - horizontal, full color | light backgrounds |
crown-bees-vertical.png | Primary - vertical, full color | square spaces, app icons, badges |
crown-bees-horizontal-ondark.png | Reversed - horizontal | Crown Green / dark backgrounds |
crown-bees-vertical-ondark.png | Reversed - vertical | Crown Green / dark backgrounds |
Logo color note: the logo's orange is the artwork's own gold-orange #F0A010 - intentionally a hair warmer than the UI action orange #e69100. Keep the logo's built-in orange; do not recolor it to the UI token. Clear space = the height of the "C" in CROWNBEES on all sides. Minimum ~120px wide (horizontal) / ~90px tall (vertical) on screen. For infinite-scale print, request the original vector from Crown Bees. Full rules: LOGO.md.
IP / confidentiality band appears on every brand surface and MUST stay visible: *"(c) 2026 Dave Hunter / Crown Bees, LLC. All rights reserved. Confidential - not for distribution."* Rendered in the parchment / brown / gold IP palette (Section 2). Blocks in assets/ip-notice.html.
Section 8
Point here for exhaustive detail; reproduce from these, never from memory:
| Source | Path | Authority for |
|---|---|---|
| Brand tokens (CSS) | ~/.claude/skills/crown-bees-design/colors_and_type.css | Color + type + spacing + radii + motion, as design intent |
| Brand context / voice | ~/.claude/skills/crown-bees-design/README.md | Brand story, copy voice, visual foundations, iconography |
| Logo usage | ~/.claude/skills/crown-bees-design/LOGO.md | Logo files, color, clear space, do / don't |
| Token + component specimens | ~/.claude/skills/crown-bees-design/preview/ | Rendered color / type / spacing / component cards |
| UI-kit recreation | ~/.claude/skills/crown-bees-design/ui_kits/marketing-site/ | A faithful HTML recreation of the app + storefront |
| Implemented tokens | packages/ui/src/tokens/*.ts (product repo) | The shipped color / type / spacing / radii / shadow values |
| Implemented components | packages/ui/src/components/*.tsx + charts/*.tsx | The @btt/ui component APIs actually shipped |
| Full skin reference (narrative) | outputs/s305/THE-BUILD-SPEC.md Appendix A | The reproduction-grade skin write-up that seeded this document |
Known drift between the two layers (the implemented layer leads the brand-authority layer; reconcile when the DS is next revised):
packages/ui radii carries an xl: 20 step the skill's colors_and_type.cssdoes not list (skill has default 10 / lg 14 / pill 999). xl:20 is shipped and canonical.
colors.ts carries the clay / sage / sky / plum chart accents (+ theirsoft tints, skyBorder) added S209 / S242; colors_and_type.css does not yet carry them. They are shipped, documented in THE-BUILD-SPEC Appendix A, and canonical - not yet back-ported to the skill CSS.
Neither drift is a defect in the app; both are the brand-authority CSS lagging shipped additions. A future DS revision should back-port them into the skill so the two layers reconcile.
Section 9
This document carries its own version, decoupled from product semver. The As-Built version tracks production (it changes on every build); the design system changes far less often - only when the DS itself changes (a new token, a new @btt/ui component, a palette or type shift). So the DS version bumps on DS changes, and the shipped-skin coordinates (server release, client build, commit) are pinned in the header for reference at authoring time.
v1.0 - first authoring, Session 370 (2026-07-13). Reference-hub over the two authoritative layers, reconciled against packages/ui at product main 69ed4b5 and the crown-bees-design skill. Shipped-skin coordinates: btt-server v61, client EAS build 24.
Provenance. The design system was extracted from the Crown Bees Pollination Success App v0.1 prototype (~/Documents/Claude/Vaults/Crown Bees/Crown-Bees-Pollination-App/prototype/index.html) into the crown-bees-design skill, then implemented in packages/ui. This document consolidates the As-Built Section 4 skin summary and the THE-BUILD-SPEC Appendix A reference into the canonical DS entry point, per Scott's Session 369 direction that the Design System become the 4th canon document. It is a reference-hub (Option A), not a copy - the token files and component source remain the single source of truth in the skill and the code.
*Design System v1.0 - The Bee Team. The 4th canonical product document per the Hub Three-Document Product Canon methodology (expanded to four at Session 369-370). The design system is the Crown Bees brand (Dave Hunter / Crown Bees, LLC sole IP); the app that implements it is combined BT IP. Reference-hub over two authoritative layers - the crown-bees-design brand skill (intent) and packages/ui (what ships). Change history lives in git + the LMA records + the dated snapshots, never this footer.*