nodsv0.1.0 Draw the credit
nods.to
  1. nods
  2. The package
  3. Draw the credit

Draw the credit

The credit is one line of HTML and a stylesheet. It runs no script and makes no request.

© 2026 Kiln · Privacy · Designed and built by Marigold with Pocket MondayCreditsKiln, 2026. Design: Marigold. Build: Pocket Monday. Made with Five colours.

The code for what is on screen

import { creditHTML } from '@nodsto/credit';
import '@nodsto/credit/credit.css';

const html = creditHTML(record, {
  leading: ['© 2026 Kiln', { text: 'Privacy', href: '/privacy' }],
  join: { two: ' with ' },
  page: { text: 'Credits', href: 'https://kiln.example/credits' },
});

Call creditHTML with a record.

It returns one element as a string. Import the stylesheet once and put the string in your footer.

footer.js

import { creditHTML } from '@nodsto/credit';
import '@nodsto/credit/credit.css';

const html = creditHTML(record);

html

<span class="nods" aria-describedby="nods-summary">
  <span class="nods-label">Designed and built by </span>
  <a
      class="nods-name"
      href="https://marigold.example"
      rel="author nofollow noopener"
      target="_blank">Marigold</a>
  <span class="nods-sep"> and </span>
  <a
      class="nods-name"
      href="https://pocketmonday.example"
      rel="author nofollow noopener"
      target="_blank">Pocket Monday</a>
  <span
      class="nods-sr"
      id="nods-summary">Kiln, 2026. Design: Marigold. Build: Pocket Monday. Made with Five colours.</span>
</span>

Paste one block where there is no build.

snippet returns the stylesheet and the markup as one string, for Webflow, Squarespace, WordPress or a plain template. For this record the block is 1048 bytes gzipped.

build.js

import { snippet } from '@nodsto/credit';

const block = snippet(record);

Set tokens to restyle the line.

The credit inherits the font and the colour of the footer it sits in. Every other value is a custom property with a default, so a rule of yours sets a token and never has to out-specify the stylesheet.

site.css

footer .nods {
  --nods-size: 0.75em;
  --nods-ink: #1a4bff;
  --nods-rule: 2px;
}
TokenDefaultWhat it sets
--nods-size.8125emThe size of the credit against the footer around it.
--nods-tracking.01emLetter-spacing.
--nods-mutedcolor-mix(in oklab, currentColor 72%, transparent)The colour of the words and separators around the names.
--nods-fade.18sHow long the words around a name take to change colour.
--nods-easecubic-bezier(.16, 1, .3, 1)The easing of both.
--nods-focus-width2pxThe width of the focus ring.
--nods-focus-offset3pxThe gap between a name and its focus ring.
--nods-inkinheritThe colour of a credited name.
--nods-rule1pxThe weight of the line under a name.
--nods-draw.24sHow long that line takes to draw under a pointer.
--nods-more-gap.5emThe space before the control that opens the card.
--nods-more-size.92emThe size of that control.

Style a part by its class.

.nods
The credit.
.nods-lead
Your own line before the credit, such as a copyright.
.nods-label
The words of the statement around the names.
.nods-name
A credited name. It is a link.
.nods-sep
A separator or a joining word.
.nods-page
The control after the names, which links to the record or opens the card.
.nods-sr
The summary a screen reader is given. It is not drawn.

Pass options for the words around the names.

A footer’s legal line is usually one sentence. The credit can carry the rest of it, and the settings at the head of this page pass three of these.

OptionDefaultWhat it sets
rel'author nofollow noopener'The rel on every credited link.
target'_blank'Where a credited link opens.
tone'auto'Forces light or dark ink where the footer sits over a picture.
classNameUnsetA class added to the credit, which is how a line style is chosen.
leading[]Your own line before the credit. Each item is text, or text and a link.
separator' · 'What stands between your line and the statement.
join{ two: ' and ', series: ', ', last: ' and ', more: ' and 2 others' }The words between names, as two, series and last.
linkTo'creator'Whether a name links to its creator or to the record.
pageUnsetA control after the names. With an href it is a link to the record.
summarytrueWhether the summary for screen readers is written.
summaryId'nods-summary'The id of that summary. Give each credit on a page its own.
identityUnsetThe project and installation, written on the credit as data attributes.

Keep the two defaults that protect a credit.

The words around a name are muted to 72% of the footer’s ink, which keeps them readable. Set --nods-muted lower and the contrast is yours to check.

Every credited link carries rel="author nofollow noopener". A followed link repeated across every site a studio has built can read to a search engine as a link scheme, so the default asks for no ranking.

Next, mark your name on the line.