← Nomadic Owls OÜ · Op. 1

Critical edition · study score

How STAVE was written

The agency site as an orchestral score — scroll conducts the page.

1 The Concept

STAVE treats a portfolio site as a printed orchestral score. The page is the paper: cream stock, notation-ink type, staff lines as the literal layout grid. The visitor is the conductor — scroll velocity is read as a tempo (♩ = a number that rises when you flick and settles when you rest) and translated into a dynamic marking from pp to ff. That same reading scales every animation's easing, so the page genuinely plays faster under an agitated hand and relaxes — ritardando — when you settle into a movement.

The information architecture is a programme in four movements: I. Overture (the brand), II. The Ensemble (six services as instrument parts stacked into a system score), III. Repertoire (three projects as programme entries), IV. Coda (contact, closing on a double barline marked Fine). Program-note placards introduce each movement the way a concert booklet would, and keys 1–4 turn straight to a movement.

Honestly stated intent: the metaphor is a frame for restraint. One paper color, one ink, red spent only on dynamics, ochre only on rehearsal marks — so the typography and the rhythm of the staff grid carry the whole design.

2 Cited References

3 Design System

Palette

Type

Playfair Display — display. Engraver's elegance for the wordmark (900), movement titles (italic), lyric lines and dynamic marks (italic 700, the only red type). Self-hosted via @fontsource/playfair-display.

Work Sans — body and labels. 400 for running text, 500/600 for part names, chrome and the tempo console. Self-hosted via @fontsource/work-sans.

Spacing — the staff as grid

One beat = 28px. Body line-height is exactly one beat; every vertical margin and padding is a multiple of it. Staff systems are painted as five hairlines one beat apart (a repeating-linear-gradient), offset by --baseline-shift: 21px so text baselines land on the lines rather than floating between them. Section rhythm: headings enter on the beat, placards a half-beat later — the layout is quantized.

4 Tech & Motion

5 AI Assets

Three stills, generated with GPT Image 2 via the Higgsfield CLI and served as WebP. No Kling video was generated for STAVE — motion is procedural typographic choreography (see §4). Prompts verbatim from shared/assets/manifest.json:

score-texture.png · GPT Image 2 (via Higgsfield CLI) · hero score backdrop
Close-up of a hand-engraved orchestral score on cream paper, elegant black music notation, crescendo hairpins and dynamics markings, a red conductor pencil marking circling one bar, raking warm light showing paper grain, editorial photography, shallow depth of field
conductor-hands.png · GPT Image 2 (via Higgsfield CLI) · movement imagery
Black and white photograph of a conductor's hands mid-gesture with baton, motion blur tracing an arc, dark background, dramatic side lighting, expressive concert photography, no faces, no text
instrument-detail.png · GPT Image 2 (via Higgsfield CLI) · services imagery
Macro photograph of orchestral instrument details arranged on cream cloth: violin scroll, oboe keys, french horn valves, cello strings, warm brass and wood tones against soft cream, elegant editorial still life, no text

6 How to Reproduce

  1. Scaffold Astro v5, static output: npm create astro@latestoutput: 'static', site https://owls-stave.pages.dev.
  2. npm install @fontsource/playfair-display @fontsource/work-sans; import only the weights used (400/700/900 + italics; 400/500/600).
  3. Define the beat (--beat: 28px) and baseline shift; paint staff systems with a repeating gradient; set all line-heights and vertical spacing to beat multiples.
  4. Build the four movements with sticky heads, placards, the six-part system score and the programme list; copy the three WebP plates into public/assets/.
  5. Add the conductor script: rAF scroll-velocity loop → ♩/word/dynamic readout → --tempo easing scale; IntersectionObserver cues; keys 1–4; reduced-motion and visibility guards.
  6. npm run build → deploy the dist/ to Cloudflare Pages.

Designed & built by Claude (Anthropic) for Nomadic Owls. One of ten directions — index at owls-index.pages.dev.