Skip to content

SECTION

Work entry

One project: a shot, then a title, a description and a spec table underneath.

A single entry

Stack a few inside .work-list, which spaces them further apart than anything within a single entry.

PLACEHOLDER Editor, mid-stroke β€” 16:9
01

Flatty

DESIGN Β· ENGINEERING Β· SHIPPED

A pixel editor that turns 2D artwork into game-ready extruded geometry. Seven drawing tools, a live depth model and a single-binary export path.

ROLESole engineer
STACKGo, OpenGL
SHIPPED2026
HTML
<article class="work-entry">
  <div class="placeholder work-entry-shot" style="--ratio:16/9">
    <span class="placeholder-kicker">PLACEHOLDER</span>
    <span class="placeholder-note">Editor, mid-stroke β€” 16:9</span>
  </div>
  <div class="work-entry-body">
    <div class="work-entry-head">
      <div style="display:flex; align-items:baseline; gap:14px">
        <span class="work-entry-index">01</span>
        <h3 class="work-entry-title"><a href="#">Flatty</a></h3>
      </div>
      <span class="work-entry-role">DESIGN Β· ENGINEERING Β· SHIPPED</span>
    </div>
    <p class="work-entry-text">A pixel editor that turns 2D artwork into game-ready extruded geometry. Seven drawing tools, a live depth model and a single-binary export path.</p>
    <div class="rule-stack">
      <div class="rule-row rule-row-spec"><span class="rule-row-key">ROLE</span><span class="rule-row-value">Sole engineer</span></div>
      <div class="rule-row rule-row-spec"><span class="rule-row-key">STACK</span><span class="rule-row-value">Go, OpenGL</span></div>
      <div class="rule-row rule-row-spec"><span class="rule-row-key">SHIPPED</span><span class="rule-row-value">2026</span></div>
    </div>
  </div>
</article>

Reference

Read from sections/work-entry.css when this page was built, so it cannot fall behind the stylesheet.

CLASSES.work-entry.work-entry-shot.work-entry-body.work-entry-head.work-entry-index.work-entry-title.work-entry-role.work-entry-text.work-list
READS--ds-accent--ds-arrow--ds-arrow-gap--ds-font-body--ds-font-display--ds-gap-loose--ds-hit-min--ds-ink--ds-ink-faint--ds-ink-soft--ds-measure-wide--ds-shot-max-h--ds-text-chip--ds-text-h3--ds-text-label--ds-text-small--ds-track-key--ds-track-snug--ds-weight-display--ds-work-col--ds-work-gap--ds-work-list-gap

Notes

THREE COLUMNS THAT COLLAPSE INDEPENDENTLY

On a medium screen you get the title and the text side by side with the spec table beneath; on a phone all three stack. There is no breakpoint and no intermediate rule β€” auto-fit is doing all of it.

--ds-shot-max-h is what stops a 21:9 hero becoming six hundred pixels tall on a wide screen. The aspect ratio sets the shape; the cap sets the limit.

THE TITLE MAY BE A LINK

A project usually has a page of its own, so the title is usually an a. It keeps the heading's ink rather than taking the accent every other link gets: a heading that repaints itself when it becomes clickable stops being a heading and starts being interface. The ledger's rows do the same thing for the same reason.

The affordance is a north-east arrow after the text, and it appears only when the title is a link. There is no modifier to switch it off: the same block draws a project as a row in a list, where the title links to the case study, and at the head of that case study, where it is an h1 that links nowhere. One has an a inside and the other does not, so the selector is the condition β€” a flag would be a second way of saying what the markup already says, and the kind that gets forgotten on the page where it matters.

It is drawn as a mask rather than typed as a β†— character, because this library ships no fonts: a glyph would come from whatever face a consumer brought, present in one and silently replaced by a fallback in the next. It carries no colour of its own and takes the text's, and it is invisible to a screen reader β€” the link's accessible name is the project title and nothing else, where a character would have added "north east arrow" to every row in the list.

It takes the global focus ring from the base layer unchanged, rather than stating a second one here that would drift from it.