Pages

Pages

Click-through recreations of the live sites and an example dashboard, built only from the components and tokens in this system.

rendata.nl

Personal hub: Home, Work, Play (tag filters and empty state), Blog grouped by year, Post, About and the 404 tide.

ui_kits/website/index.htmlOpen the website full screen

Page layout

A 272px sidebar beside a content column capped at 1100px. Under 860px the sidebar becomes a top bar.

function WorkPage({ projects }) {
  const [tag, setTag] = React.useState("All");
  const shown = tag === "All" ? projects : projects.filter((p) => p.tags.includes(tag));
  return (
    <div style={{ display: "grid", gridTemplateColumns: "var(--sidebar-width) minmax(0, 1fr)" }}>
      <Sidebar name="Renze Terpstra" items={nav} active="work" />
      <main style={{ padding: "var(--main-pad)", maxWidth: "var(--main-max)" }}>
        <Eyebrow mark>Work</Eyebrow>
        <h1>Tools that make aid data work</h1>
        <ChipRow label="Filter projects">
          {["All", "Python", "IATI"].map((t) => (
            <Chip key={t} pressed={tag === t} onClick={() => setTag(t)}>{t}</Chip>
          ))}
        </ChipRow>
        <div style={{ display: "grid", gridTemplateColumns: "repeat(auto-fill, minmax(240px, 1fr))", gap: 20 }}>
          {shown.map((p) => <ProjectCard key={p.title} {...p} dense />)}
        </div>
      </main>
    </div>
  );
}

Style guide and colour picker

The data-visualisation style guide and the colour picker share one docs frame: Guide home, Principles (Callout, RulePair, BigNumber) and Colour (Swatch rows, sequential and diverging builders, config-error Alert).

ui_kits/style-guide/index.htmlOpen the style guide full screen

Principle page

function PrinciplePage() {
  return (
    <article style={{ maxWidth: "var(--measure)", display: "grid", gap: "var(--gap-group)" }}>
      <Eyebrow>Principles</Eyebrow>
      <h1>Use one colour, plus grey</h1>
      <Callout kind="rule">Highlight the series that carries the message in Teal. Everything else is Steel.</Callout>
      <RulePair doItems={doList} avoidItems={avoidList} />
      <BigNumber label="Security incidents, March 2026" value="112" context="+24% on the 12-month average" trend="up" />
    </article>
  );
}

Dashboard

An overview page at 1920 × 1080, scaled to fit: filter rail, KPI row, main and support bands, table and footer. Built from dashboards/dashboard.css; see Dashboards for the parts.

ui_kits/dashboard/index.htmlOpen the dashboard full screen