Direction: the familiar, slightly off-axis home.

Approved A, grounded in versions/v1 + v2: burgundy on warm paper, peach portrait framing, Newsreader display type and Lato. A personal personal greeting leads; projects carry the substance; the notification stream shares smaller changes from around Burooj's internet.

We considered the activity-first desk and the navigation-first circular index. The welcome stays because it is the direction Burooj selected. The composition revision pairs portrait with introduction and brings the first project into the opening screen. Its layout still awaits Burooj's visual review; preserving the palette is not enough on its own.

The hero, in context

Burooj Rashid wearing round sunglasses
That's me

Hey there!

Burooj here!

Frontend developer & designer

I make places on the web. Feel free to look around!

Composition → WelcomeHero imports Heading, Link, and the singular Portrait. The curved arrow below is retained as a historical specimen, no longer placed between the homepage introduction and work.

The ball nav, homepage form

On the homepage the same nav takes v1's uneven cluster and hangs into the introduction; narrower than 62.5rem it is the ordinary row. A ball lifts under the pointer and squishes when pressed, but its target never moves, so a press is always a click. A clicked ball becomes the page transition, which swells from that ball. No-JavaScript, touch and Reduced Motion visitors get the same links, without the sunrise.

The peeking B and J

v0's giant initials no longer sit at the foot of the homepage. Now and then, on any page, a B or a J peeks in from a screen edge or up from behind a section rule (on phones, from behind a picture too), and ducks when it is noticed or after a few seconds. One at a time, never over a line of text, never while scrolling; phones see them more often than wide screens. Reduced Motion turns it off; without JavaScript it does not exist.

Foundations

Paper --color-page
Burgundy --color-accent
Peach --color-surface-strong
Note --color-surface
Ink --color-text
Quiet ink --color-text-soft
Rule --color-border

Newsreader gives the page its voice.

Lato does the everyday work: introductions, metadata, navigation, and notes.

  • Quiet metadata
  • Readable detail
  • No decorative pills

Shared colors, type scales, spacing, focus rings and motion timing live in src/design/tokens.css. The decorative corner alone owns its magnetic spring mechanics. Responsive contracts are 40.625rem and 62.5rem. Native media conditions cannot consume custom properties.

Links and wayfinding

The site navigation is one row of balls on every page, a tight honeycomb on phones. The current destination is the burgundy ball. Every destination stays visible on mobile and works without JavaScript.

An arrow means leaving the site, and nothing else. Inside the site a link has no arrow: the peach is the affordance, stretching under a pill's label or growing behind a text link's words, and on click the cover swells from that same shape. Leaving the site, a link wears the satellite: a small burgundy ball carrying one hand-inked arrow pointed out of the page, after the words or on a ball's rim. On hover the peach reaches it and kicks it a little way along its arrow.

One link language, one set of ball tokens. Navigation is balls; a standalone action is a pill, a peach ball resting behind its first letters that stretches under the whole label on hover; a primary action is the burgundy pill. Links inside prose stay text on a pencil rule, and on hover the same peach pill grows behind the words. Tab shows a ring that follows the shape.

From parts to real content

Nov 2024 · Development

API3 Ecosystem

A discovery site where developers could publish and explore dApps in the API3 ecosystem, combining product UI, data-rich browsing, and supporting content.

  • Nuxt3

Nov 2024 · Development

API3 Ecosystem

A discovery site where developers could publish and explore dApps in the API3 ecosystem, combining product UI, data-rich browsing, and supporting content.

  • Nuxt3

Nov 2024 · Development

API3 Ecosystem

A discovery site where developers could publish and explore dApps in the API3 ecosystem, combining product UI, data-rich browsing, and supporting content.

  • Nuxt3

Currently

I’m maintaining bjslab, my home-lab environment for the tools and services I use.

Little signals from around my internet.

A few things worth sharing, collected by hand.

A note can hold arbitrary content without inventing a new card style.

Project art specimen

A smaller section title

The same heading grammar serves secondary sections.

API3 Ecosystem cover image

Work, over time

2024

  1. API3 Ecosystem

    A discovery site where developers could publish and explore dApps in the API3 ecosystem, combining product UI, data-rich browsing, and supporting content.

    • Nuxt3

Anatomy and contracts

Component Parts / slots Variants State and boundary
BallNavSemantic navigation list → shared Link primitive (ball)Row / compact honeycomb / homepage cluster; current / hover / focus / pressThe one site navigation, on every page. Current page is the burgundy ball; project details retain the Projects marker. CSS only: no JavaScript dependency, and the hit area never moves.
LinkLabel → arrow only when it leaves the siteText / ball / pill / action; paper / wineNative navigation; hover, focus, press, current, disabled. Disabled is a span.
HeadingSemantic heading → text or Link slotDisplay / page / section / card / label; level 1–4Level does not change visual scale. No interactive behavior.
MediaFrameTextured surround → imageContain / coverReserved media space. Optional pointer shortcut beside an accessible title link; no duplicate tab stop.
NotePeach silhouette → arbitrary content slotPaper silhouette / plain contentPassive. No button behavior or card shadow.
TagListLabeled list → items + editorial separatorsOne metadata recipeNot controls; never styled like clickable filters.
ProjectRowMediaFrame + Heading/Link + summary + TagListRow / stack / featureFeatured work on Home and this guide; ProjectTimeline uses the same primitives for the full chronology.
CurrentNote / UpdateEntryNote + Heading + Link / event glyph + sentence + date + provenanceCanonical current note / mixed notification streamProjects persist; updates mark anything that changed. Curated events are not live presence.
SectionHeading / PageHeader / SectionIntroHeading + optional context and LinkSection navigation / page title / compact introNever duplicate heading typography in the wrapper.
LabCard / MediaRailMediaFrame + Heading/Link / image-video sequenceLab listing / detail mediaVideo has native controls, no autoplay.
SiteHeader / SiteFooterIdentity + BallNav / identity + contact LinksSame shared chrome on every routeActive route is semantic; Resume remains available in footer.

Shared colors and geometry belong to tokens; interaction belongs to its public component; assemblies import their children. The portrait, curve stay singular. Do not paste navigation markup into a page, put raw palette values in a composition, or fork project rows for this guide.