Skip to content

Components / Sections

Now List

A "now" page in one section: what one person is making, reading, learning and planning at the moment. Each row has a small drawn icon, its word in the mono face and a line, and over the rows sits when the page was last updated, beside a dot that pulses like a light left on, three times as it comes in, then stays lit. Eight icons are drawn: make, read, listen, learn, plan, watch, write and travel. With block the panel is a colour block. Zero JavaScript.

Live demo

Now

What I am on this month

  • Making

    A field guide to forms, chapter by chapter

  • Reading

    A book on how cities are mapped

  • Learning

    To draw letters by hand, badly so far

  • Planning

    Issue 200, and something for it

Live, from the library itself, at full size: scroll, hover, navigate away and back. The demo is never gated.

Variants · each row writes the attribute the prop writes; the section's own CSS answers

tone
density

Measured

JavaScript of its own

0 B

CSS 10.1 kB raw including the base tokens. Measured from a production build, and again in CI for every change that can move it.

Browser support

Baseline · widely available

Chrome 105 · Firefox 110 · Safari 16; needs container-units. Elsewhere: without container units the heading keeps the page's text size and the rows stay under it in one column.

Install Pro

The demo above is never gated; the source is. With a key in components.json (see account), the registry serves it like any other item:

terminal
npx shadcn@latest add @moonarc-pro/now-list
src/pages/index.astro
---
import NowList from '@/components/moonarc/pro/NowList.astro';
---
<NowList
  eyebrow="Now"
  copy="What I am up to this month, updated by hand."
  updated={{ text: 'Updated 3 October 2026', date: '2026-10-03' }}
  block={2}
  items={[
    { label: 'Making', text: 'A pocket guide to pricing for small shops.', icon: 'make' },
    { label: 'Reading', text: 'A history of the printing press.', icon: 'read' },
    { label: 'Learning', text: 'Screen printing, badly.', icon: 'learn' },
    { label: 'Planning', text: 'Two weeks offline in the spring.', icon: 'plan' },
  ]}
>
  <span slot="headline">What I am doing <em>right now</em></span>
</NowList>

Without a key the registry answers 401 with an upgrade message.

Props

PropTypeDefaultDescription
items{ label: string; text: string; icon?: Icon }[]noneThe rows, in order. label is the word in the mono face ("Making", "Reading"); text is the line. icon is one of make, read, listen, learn, plan, watch, write or travel (make when unset).
eyebrowstringnoneA short line above the heading. Slot "eyebrow" wins.
headlinestringnoneThe heading. Slot "headline" wins and may hold an <em>, set in the emphasis face and colour.
copystringnoneA line under the heading.
updated{ text: string; date?: string }noneWhen it was last updated: the words, and the date (YYYY-MM-DD) for the <time> element. Unset, no line and no light are drawn.
block1 | 2 | 3 | 4 | 5noneThe colour block the panel paints. Unset, the panel paints nothing and the section's own ground shows.
level2 | 32Heading level of the section's heading.
tone'surface' | 'muted' | 'ink' | 'brand'unset (paints nothing)The section's ground; a panel with a block keeps its block on every tone.
density'compact' | 'cozy' | 'roomy''cozy'Block padding ×0.8 / ×1 / ×1.25 through --ma-density.

Theming and overrides

The section reads the theme contract (shadcn's variable names with the base tokens as fallback), so a pasted theme or one --ma-brand recolours it. Its class names are the override surface and stay stable; a named slot replaces the matching prop with your own markup.

Classes

.ma-now.ma-now__copy.ma-now__eyebrow.ma-now__head.ma-now__headline.ma-now__icon.ma-now__item.ma-now__label.ma-now__light.ma-now__list.ma-now__panel.ma-now__text.ma-now__updated

Slots

slot="eyebrow"slot="headline"

Reduced motion

The light stays lit and does not pulse.

With ClientRouter

CSS only; nothing to rebind.

Why it is built this way

Replaces: Hand-written now pages (the nownownow.com format) · Personal site status sections. See the migration table.

Lists dated releases in a hairline list.

every browserscroll

The first screen of one person's work, as a bento.

newly · Chrome 105 · Firefox 128 · Safari 17pointerscrollalways

How a thing is made, as steps sewn on one thread: a stitched line runs down the section and each step is a knot on it (a round number in a colour block, stitched round its edge) with a title, a line and how long it takes.

Chrome 115 · not Firefox · Safari 26scroll

Sample services

What an imaginary studio does

Brand identity

A name, a mark and the rules that hold them together, for a company that is new or has outgrown its look.

Deliverables

  • Logo and mark
  • Type and colour
  • Guidelines
Websites

Sites designed and built by one team, from the first sketch to the code that ships.

Deliverables

  • Design system
  • Astro build
  • Content model
Product design

Screens for an app or a tool, drawn with the people who will use them and handed over as working components.

Deliverables

  • Flows
  • Interface
  • Components
Motion

The logo in motion, a product film, the interface itself: motion that says one thing each time.

Deliverables

  • Motion identity
  • Product film
  • Interaction specs

What a studio or a freelancer does, as numbered rows at display size that open one at a time: each row names a service, and opens to a short text beside the list of deliverables.

newly · Chrome 131 · Firefox 143 · Safari 18.4clickhover

A vertical timeline: the line draws itself down the page in step with the scroll, each step revealing from the line's side as it is reached, markers numbered or dated.

Chrome 115 · not Firefox · Safari 26scroll

Also: view transitions · how costs are measured · browser support · accessibility policy · five-minute setup · MCP for agents · this page as Markdown