| name | bits&bytes™ Design System — Print Riot Edition (v5) | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| canonical-kit | design/neobrutalism-design-system.html | ||||||||||||||||||||||||
| colors |
|
||||||||||||||||||||||||
| typography |
|
||||||||||||||||||||||||
| rounded | 0px everywhere | ||||||||||||||||||||||||
| borders | 3px ink standard, 5px heavy, 2px for small tags | ||||||||||||||||||||||||
| shadows | hard offset only: 3/6/10/16px ink; never blurred |
"redesign-rethink-reimage bitsnbytes from the given website links. don't rely on the old stuff. focus on the given references."
The reference sites drive layout, structure, motion and art direction. Old page layouts and old components
(components/ui/hero-movement.tsx, features-8, mini-navbar, flickering-footer, design-testimonial, the current page
shells) are replaced, not restyled. Old files are only a source of copy and behaviour (forms, APIs, dialogs), not design.
What survives from before: the brand theme (palette, Anton/Helvetica/Georgia/mono/script type, the isometric cube mark,
bits&bytes™ spelling) and every word of content. The Print Riot kit (design/neobrutalism-design-system.html) is the
token source and an accent vocabulary (hard-shadow buttons, halftone/riso texture, bursts, window chrome) — use it where it
serves the reference-driven design, not as the skeleton of every surface.
Reference sites (copy mechanics + layout ideas, never their images, 3D models, fonts, copy or source):
- buttermax.net — homepage 1:1 in our brand: loader glyph, full-bleed campaign-color hero with a giant wordmark + script accent and a floating 3D object that flies away on scroll, black reel that expands to full-bleed, giant indented "who we are" statement, works grid of objects with thin dividers, black "reach out" footer with a 3D object overlapping giant type.
- shopify.com/editions/winter2026 — "copy this": the site as an Edition. Opening frame (construction lines + framed title) that expands into full-bleed art, sticky left chapter index, full-bleed chapter heroes with giant titles, torn-paper transitions into paper sections, serif-italic statements with a swash initial, floating UI-card collages with parallax.
- kprverse.com, stripe.dev, revelatio.studio, bfcm.shopify.com/2025, inkfishnyc.com — see "Reference playbook" below.
- House voice, true facts (round 3, 2026-09-26; replaces the old content freeze). Marketing copy on every page
and the prospectus is rewritten with the humanizer skill (
D:/YSP/SKILL.md) anda3roxyz-voice, in normal case: candid, specific, "we", no hype, no em dashes, no AI vocabulary. Left verbatim: legal pages (terms, privacy, cookies, refund, IP, CoC), quotes attributed to real people, partner names, trailer captions. No aggregate numbers (member, fork, event or project counts, team age, visitor counts); per-event facts may stay inside that event's entry. bits&bytes™ is pan-India (Lucknow is one fork, not a base). Never invent facts, numbers, dates, names, quotes, partners, or claims. - Brand spelling per AGENTS.md:
bits&bytes™(orbitsnbyteswhere&is impossible). Legal entity name only in legal contexts. - Preserve behaviour. Forms, API calls, hCaptcha, consent checkboxes, cookie consent, AI assistant, analytics, JSON-LD, metadata exports, and links must keep working exactly as before. (Round 3 removed the driver.js site tour and the About "Book a Call" button on request.)
- Brand-safe finish. Square corners by default (a reference may justify pills/rounded shapes for a specific control). No generic SaaS glass cards or purple AI gradients; if a reference uses blur/glow, translate it into print texture instead.
- Accessibility. One
h1per page; semantic landmarks; visible focus (3px cobaltoutline, 3px offset); text contrast ≥ 4.5:1 (ink on orange/marker/cream OK; never white text on orange or marker); dialogs trap focus and close on Esc; every animation honoursprefers-reduced-motionand the site's motion toggle (html[data-immersive-motion="off"]). - Dark mode keeps working (next-themes,
.darkclass): paper ↔ ink swap; borders/shadows flip to cream/paper.
Surfaces: paper #faf8f5 (default page), paper-2 #eae8e4 (muted panel), cream #fee9cf (warm fill), ink #120f0a.
Brand core: burgundy #97192c (serious core, primary buttons), burgundy-dk #791423, orange #fc920d (controlled heat,
campaign surfaces, secondary buttons), orange-lt #fda83d, warm #c94218.
Electric pops, one per view, never wallpaper: cobalt #2b39ff (focus, links, jolt), marker #df8e74 (brand warm-60 coral highlight; no yellow anywhere),
slime #12e29b (rare success).
Structure: --bw 3px, --bw-thick 5px; shadows --sh-sm 3px 3px 0 ink, --sh 6px 6px 0 ink, --sh-lg 10px 10px 0 ink,
--sh-xl 16px 16px 0 ink, --sh-color 6px 6px 0 burgundy.
Texture primitives (CSS utilities): .halftone, .halftone-orange, .halftone-fade, .riso (orange→warm→burgundy plate with
halftone bite), .dither, .noise, plus a faint page-wide halftone dot field (opacity ≈ .05).
Color roles: paper sections are the default rhythm; ink "poster" sections punctuate (reel, statements, footer); the homepage hero is a burgundy → warm → orange brand ramp (AGENTS.md: "gradients from burgundy/plum into orange warmth for hero and campaign surfaces"; user, 2026-09-26: hero in brand colours, no yellow); orange stays the campaign surface elsewhere; burgundy carries primary actions and the core voice.
- Display (Anton, uppercase): hero wordmark
clamp(96px, 22vw, 360px)/ line-height .8; section titlesclamp(40px, 7vw, 112px)/ .86. - Big statement (buttermax "who we are"): sans 900 uppercase
clamp(28px, 4.2vw, 64px)/ 1.0, first line indented ~25%. - Serif italic statement (Editions): Georgia italic
clamp(32px, 5vw, 80px)/ 1.05; optional script (Yellowtail) initial. - Lede: Georgia 18–20px / 1.5, max 60ch. Body: Georgia 16–17px.
- Labels: Space Mono 11–12px, 700, uppercase, tracking .14–.34em.
Button (burgundy / orange / outline / cobalt / marker / ghost; sm / md / lg): 3px ink border, hard shadow; hover lifts (−2px,−2px & larger shadow), active slams flush (3px,3px & no shadow), spring-driven. Tag, Eyebrow (ink bar + pulsing orange square), Burst / Star / Plus / Flower stickers (one per view), Window chrome (title bar with 3 square lights), Stat, Accordion, Chapter (numbered section wrapper that registers with the chapter index), TornEdge (SVG jagged paper edge), Marquee (ink band, Space Mono or Anton), HalftoneImage (grayscale photo + halftone/duotone overlay, hard frame), VideoFrame (window-chrome player with poster, big play, sound-on click, Esc to close when modal).
- Every page is an edition: an opening frame (h1) and numbered chapters. Chapters are
<section data-cinematic-section data-cinematic-title="…">;ExperienceProviderdiscovers them for the chapter index (desktop ≥1280px: sticky left column listing01 Title … 02 Title, active chapter marked, click scrolls there). - Chapter heads:
§0N — LABELin mono burgundy, Anton title, optional serif description to the right, 3px ink rule below. - Transitions between ink and paper use a TornEdge at most once per boundary.
- GSAP:
gsap.registerPlugin(ScrollTrigger)at module scope in client components; alwaysuseGSAP(() => {…}, { scope })from@gsap/react(never rawuseEffectfor GSAP).ExperienceProvideralready runs Lenis → ScrollTrigger; never create a second Lenis or scroller. - Animate transform, opacity, clip-path only. No animating width/height/top/left/filter-blur on scroll.
- Pinning: no ancestor of a pinned/sticky element may keep a
transform,filter, oroverflow: hidden|auto— useoverflow-x: clipfor horizontal overflow guards. - 3D (R3F + drei): only where it earns its place (home hero cube).
next/dynamicwithssr: false,dpr={[1, 1.75]}, pause rendering when offscreen (frameloop="demand"+ invalidate, orframelooptoggled by IntersectionObserver), flat/toon materials + ink<Edges>so it matches print. Scroll → 3D via a custom ticker: ScrollTrigger progress written to a ref and read insideuseFrame(no drei<ScrollControls>— it would fight Lenis). Reduced motion / no WebGL → static SVG logo. - Springs for interaction (Emil Kowalski): hover/press/menus/drag use
framer-motionsprings (type: "spring", stiffness 400–600, damping 30–40, orbounce: 0); enter animations ease-outcubic-bezier(.23,1,.32,1)under 300ms for UI; never animate fromscale(0)(start ≥ .9); stagger 30–60ms; one focal motion at a time (choreography: headline → supporting → actions); keyboard-initiated actions don't animate; defer heavy state updates until after the animation (onAnimationComplete/requestIdleCallback). - Reduced motion: no scroll-scrubbed transforms, no autoplaying video loops, no parallax; content fully visible.
LCP must be text (the wordmark), never the canvas. next/image with sizes; video preload="none" or "metadata" + poster,
play only when in view; lazy-load below-fold heavy components with next/dynamic. No new dependencies unless unavoidable —
gsap, @gsap/react, three, @react-three/fiber, @react-three/drei, lenis, framer-motion are already installed. Use pnpm.
kprverse "i love the intro section" · stripe.dev "copy this 1:1" · buttermax "create this 1:1" · inkfish "omg wow copy this too" · shopify editions "copy this copy this 1:1" · revelatio, bfcm (liked)
| Surface | 1:1 reference |
|---|---|
| Home — first-visit intro | kprverse preloader + logo assembly: paper panel, hairline progress rule, LOADING - NN% + file-path ticker, the logo's pieces assembling, cut to the hero. Skippable, no sound gate. |
| Home — everything after the intro | buttermax (hero, 3D logo cube, curtain reel, statement, works grid, poster footer) |
| /events | inkfish (black playlist reel hero — the reel itself is the play target, one video at a time, no PiP; [S.0N]/[NN] bracket mono UI, barcode stripe rows, event archive as a list only, self-arranging justified rows of uncropped photos, contact "window" with fixed backdrop, custom fullscreen player) |
| /about, /impact, /fork, legal docs | Shopify Editions (opening frame, chapter index, chapter heroes, torn paper, serif statements, card collages) |
| /press | stripe.dev (kept: the user signed it off on 2026-09-26 — "it's very good"; the press.stripe.com WebGL shelf is shelved) |
| /cloud, /join, /contact, /faq, /qna, /minecraft | stripe.dev (24-col hairline grid with + registration marks, pixel-block glyph titles, / LABEL table headers, seeded "Fig. N" generative windows, feed tables with mono dates, sticky router figure, get-help grid, endless outlined footer word) |
| Site-wide chrome | buttermax nav fused with stripe.dev bracket hotkeys ([E] EVENTS [A] ABOUT [J] JOIN [M] MENU, [C] console = the AI assistant as a stripe.dev console window), inkfish pixel-mountain route transition, kprverse menu, buttermax/kprverse footer |
Single-key shortcuts must be switchable off (WCAG 2.1.4), ignored while typing or with modifiers, and exposed via aria-keyshortcuts.
Full teardowns (measurements, timings, mechanisms) live in tmp/research-full.json (one object per site). Decisions:
- Wordmark / mega display (buttermax): Archivo 900 with
font-stretch: 125%(variablewdthaxis loaded), tracking −0.04em, lowercasebits+ Yellowtail script&bytesoverlapping the baseline, small™. Accessible text staysbits&bytes™. Hero sizeclamp(96px, 21vw, 340px). - Chapter hero titles (Editions' 190px sans title): Archivo 900 wide,
clamp(64px, 13vw, 200px), line-height .85. - Big indented statement (buttermax "who we are"): Archivo 800 uppercase
clamp(28px, 4.2vw, 64px)/ 1.0, first line indented 25–28% with the§0N — LABELeyebrow sitting in the indent. - Serif-italic statement (Editions): Georgia italic
clamp(32px, 5vw, 80px)/ 1.05, first letter a Yellowtail swash (burgundy on paper, orange on ink) hanging into the gutter. - Numerals (odometers, stats, dates): Anton. Labels: Space Mono 11–12px 700 uppercase, bracket style
[07%],[S.01],EVENTS [06](counts computed from data, never invented).
- Homepage = brand poster like buttermax: burgundy
#97192chero ramping into orange#fc920d, ink#120f0atype on orange, cream on burgundy (3D cube faces, duotones). Paper/cream sections for reading. - Edition pages: ink opening frame → full-bleed duotone chapter art (our "paintings": real photos from
public/event_pictures,public/imagesin grayscale → burgundy/orange duotone + halftone) → torn paper → paper/cream reading chapters. - Electric pops (cobalt/marker/slime): one per view, max.
- Loader (buttermax + inkfish): first visit per session only, ink screen, brand four-point star glyph breathing (scale .94↔1),
Space Mono
LOADING [07%]driven by real readiness (fonts + hero poster), hard cap 800ms, "yank" exit (curtain up, content settles). The DOM wordmark is painted underneath (LCP never waits on it). Skip under reduced motion. - Nav (buttermax): fixed, 3 zones. Left: cube mark → home. Centre: small
bits&bytes™wordmark. Right: square outline buttons (2px, Space Mono 12px, uppercase) for EVENTS / ABOUT / JOIN + MENU; hover = fill wipes in (scaleY 0→1 from top, .45s cubic-bezier(.215,.61,.355,1)); oversized hit areas. Section-aware colour (kprverse): each chapter carriesdata-surface="ink|paper|orange"; a ScrollTrigger flipshtml[data-nav-surface]so the nav reads ink on paper/orange and paper on ink (no blend-mode over burgundy). Hide on scroll down / show on scroll up. - Menu (kprverse): burgundy rail slides first, then an ink panel wipes out with giant Archivo links (every route), active route marked with a coral marker block; paper halftone underlay; focus-trapped, Esc closes, springs.
- Chapter index (Editions): ≥1280px on edition pages, sticky LEFT column: page title (from the opening frame) + chapter list
01 Titlewith CSS counters, active row marked (3px rule revealed by clip-path), click scrolls via Lenis. Below 1280px a compact "CH 02/05 ▾" jump menu. Replaces the old right-hand progress rail inExperienceProvider. - Page transition (buttermax/inkfish): reveal-only tile wipe on route mount in
app/template.tsx— 8×5 burgundy/orange/ink tiles scaleY 1→0, stagger 30ms rising from bottom-centre, ≤700ms total, never leaves a transform on the page wrapper. Skipped under reduced motion. - Cursor label (bfcm/revelatio): elements opt in with
data-cursor-label="PLAY TRAILER"; one fixed Space Mono tag (paper on ink, 2px border, 3px orange hard shadow) moved withtranslate3din rAF; pointer:fine only; hidden for keyboard. - Scramble labels (revelatio/kprverse):
<ScrambleText>for Space Mono labels only (eyebrows, chapter numbers, nav hover, coordinates, bracket counters); charset01&#*+=/<>; real text stays in the DOM (animate an aria-hidden mirror). - Footer (buttermax + kprverse): ink poster. Top row of 4 columns split by 2px paper rules (console column with routes +
20.5937° N, 78.9629° E(centre of India: pan-India, no HQ), nav, socials, contact incl. legal/trust links), then a full-bleed giantbits&bytes™wordmark uncovered from a slot (counter-translated mask scrub), with the cube mark (inline logo.svg geometry, opaque paper body + ink cut-outs, ink knockout ring) locked into the "s"; its pieces snap into register in the same scrub. All existing footer links/text preserved.
- Hero — full-bleed burgundy (cream wordmark) ramping through warm to orange behind the cube slot, copy + CTAs on the
orange band; every size height-aware so the whole first screen fits 1280×650; wordmark centred edge-to-edge, tiny uppercase caption line under its left side
(existing tagline: "India's boldest builder network" + "innovate • collaborate • hack"), a 3D "byte" floating in front:
a 2×2×2 cluster of 8 "bit" cubes (8 bits = 1 byte) with flat/toon burgundy/ink/cream faces and ink
<Edges>, one face carrying the B letterform, a four-point star on top. It idles (slow spin, pointer spring tilt), every ~8s does a choreographed burst-apart-and-reassemble (the buttermax object swap), and on scroll outruns the page (rises ~1.6× scroll speed, rotates, bits drift apart) so it's gone by ~40% of the first viewport. Hero footer row: mono dots glyph left, down-arrow centre. Riso misregistration: burgundy + orange copies of the wordmark slip ±10px with scroll velocity and snap back. Primary CTAs (existing: "Join the crew" → /join, "Watch film" → film modal) sit small and precise, not as a hero button block. - Curtain reel — a fixed full-bleed reel of the film (
/movie/bnb-trailer.mp4, the Techfest IITB teaser; itsFilmPlayerrides the film's last frames into the site: window blows open, an SVG logo card replaces "COMING SOON" on the cut frame, unassembles into construction lines, a hexagonal iris opens onto the hero whose wordmark rises again, and the logo flies into the nav cube mark; plain player under reduced motion), low-res → full-bleed copy under a halftone/dither screen, plus a sharp inset window playing it clean) uncovered as the hero scrolls up, then covered by the next paper panel (TornEdge top).[ WATCH FILM ]opens the FilmPlayer with sound. Plays only in view; none under reduced motion. - Statement — "who we are" indented mega statement from existing mission copy; words fade 0.15→1 as you scroll.
Numbers— removed in round 3 (no aggregate numbers anywhere); the works grid follows the statement directly.- Works grid — buttermax hairline grid → our "What we do" programs + events: 3 columns, 2px ink dividers, each cell a halftone-duotone photo "object" at 75%, label bottom-left in mono, small glyph bottom-right, cursor lens (circle clip-path reveals the full-colour photo under the pointer; keyboard focus shows it too).
Now showing— removed at the user's request (2026-09-26); the Regional Hackathon Series lives on /events only.- Partners — draggable ink marquee band.
- FAQ + Voices (existing content) in the kit's accordion / a horizontal quote rail.
- Footer (global).
- Opening frame (Editions): ink stage with construction lines derived from the isometric cube (hexagon, 30° diagonals, nested rhombi, circumscribed circle) in cream 1px strokes drawing in; a centred square frame holding the page h1 + chapter list. On scroll the frame expands (clip-path inset → 0) into chapter 01's full-bleed duotone art, and the title + list hand off into the sticky chapter index. Secondary routes use a static framed title (no expansion).
- Chapter hero: full-bleed duotone photo + giant Archivo title (cream on art, ≥4.5:1 via an ink scrim band, not blur).
- TornEdge into paper chapters; serif-italic statements with a swash initial; sticky copy stacks beside pinned media.
- /events: ch.01 = the Regional Hackathon Series (trailer
/movie/regional-series-trailer.mp4, poster/movie/regional-series-trailer-poster.jpg): a framed "monitor" that scroll-zooms to full-bleed (revelatio CRT zoom, clip-path- transform), click = theatre mode (bfcm: clip-path from the card rect to full screen, chrome fades, Esc exits, sound on). Copy comes ONLY from the trailer: "High schoolers, your city's got competition." / "bits&bytes™ is launching a regional hackathon series across India." / "Win your qualifier — here's where you're headed: IIT Bombay." / "December 17th and 18th, qualifier winners compete here for the title." / "So who's carrying your city?". ch.02 = the archive as a table-list feed (stripe.dev/inkfish: mono date column, barcode stripe-wipe row hover, expand for existing details) + photo galleries.
- /about: origin story as a pinned horizontal timeline (July 2025 → mid-Aug 2025 cancellation → Nov 2025 founded →
2 Jun 2026 incorporated) with a bracket scrubber
[NN%]; principles as serif-italic statements; team with halftone portraits (hover → colour,VIEW BIOcursor label; the Book a Call buttons and booking dialog were removed in round 3, the assistant keeps its booking tools); volunteers/early contributors; governance as a construction-line grid (Board → Executive Officers → Forks → Safeguarding). - /impact: opening frame → word stats (Community, Forks, Events, Teen-led; no numbers) → "spotlight wall" of the track record (sticky list, focused item full
opacity + orange underline, others dim; cursor image trail on pointer:fine) → globe chapter (existing globe marking the 10 forks from
lib/forks.ts, no arcs from a hub city) → pillars as a sticky stack beside a pinned event photo (the research metrics collage was removed with the numbers).
Their images, 3D models, Lottie files, fonts, copy, source; WebGL-rendered text; full-page fixed canvases or post-processing;
second scrollers / ScrollSmoother; blur/glow/bloom; pill radii; mix-blend-mode: difference over burgundy; audio; UA sniffing;
zoom-blocking viewport meta; loaders that gate content without a cap.