151

Product Documentation Website Template

£29 View live demo or the whole Vault, £99

Seventeen-page documentation website template for product docs, help centres, knowledge bases, design systems and company handbooks. A flat saturated colour band, large heavy type and live examples that really validate, shown as the docs for Pigeonhole, a small forms library. Four palettes on one set of tokens, plus light and dark.

Flip intermediate
6 more details
flip-layoutprogressive-enhancementkeyboard-navigationview-transitionscontainer-queries 4 colour palettes

Released

About this template

A plain documentation site that sells on being easy to read and easy to rebrand. One flat colour runs edge to edge across the header and, on the home page, on down through the hero. Body text is 19px on every screen and headings are heavy, with no shadows, gradients, illustrations or icons in cards. A buyer changes one logo and one colour and the site is theirs. The worked example is Pigeonhole, a fictional open-source forms library of nine components and three patterns.

Read the full template overview

The pages repeat one shape on purpose. Each component page opens with a live example in a bordered box, with its code in tabs underneath, then says when to use the thing and how it works. Every example really works: submit one empty and a red summary drops in, the fields slide aside and focus moves to the summary; correct a field and its message folds away. Drag the edge of the box and the form reflows at that width, with the width printed live.

Around the reading column sit four section tabs that swap the sidebar, a solid bar on the current page, a right rail that tracks the heading in view and a search dialog on the / key. The fiction is a forms library because every example needs no artwork, but the same pages suit product docs, a help centre, a design system, a company handbook or an API reference. Four pages on accessibility, personal data, upgrading and browser support run to about 2,000 words each, so you can judge the type on long reading as well as short component pages. All the text is ordinary HTML in seventeen plain files.

Product Documentation - website template preview

What's included

15 items
  • Seventeen plain HTML pages: home, get started, install, five long guides, a components index, three component pages, a three-step pattern, a configuration reference, dated release notes, a browser support page and a 404 page
  • A flat colour band across every header that runs on as the home page hero, with a real sign-up form joined to its lower edge and already showing its errors
  • Live example box above the code: every example validates for real, with an error summary, links that move focus to the field, and messages beside each field
  • Date input that names the missing part, marks only the boxes at fault, and catches 31 February, a short year and a date in the future
  • Three-step check answers flow inside an example box, with Change links that go back to one question and return straight to the check step
  • Width handle on the example box: drag it, use the slider or press Phone, Tablet or Full, and the form reflows through container queries
  • Numbered install steps with npm, pnpm, Yarn and Bun tabs, and the choice is remembered across pages
  • Four section tabs that swap the sidebar without leaving the page, with a solid current bar in the sidebar
  • Right rail that tracks the heading in view, which collapses into an On this page list on smaller screens
  • Search dialog on the / key that filters the real list of pages, with a plain list of all pages at the foot of each page as the no-JS path
  • Filter boxes over the components list and the configuration options, and a filter by kind of change on the release notes
  • Four palettes (blue, green, plum and black) on one group of tokens, each measured for contrast, with a light and dark toggle that ships on every page
  • Saved theme applied before the stylesheet and one preloaded self-hosted font, so pages open without a flash
  • Full-panel phone menu with the sections and their pages, Escape and focus handling, and a plain link in its place without JS
  • Works with no JS, with reduced motion and with the animation library blocked: only the movement goes away

Perfect for

5 use cases
  • Product and software documentation sites
  • Help centres and customer support knowledge bases
  • Design system and component library sites
  • Company handbooks and internal guides
  • API and SDK reference sites

How it works

5 sections

Three columns of ordinary HTML

Each page is a complete file with the band, section tabs, sidebar, reading column and right rail written out in full, so a page can be read, edited or deleted by itself. Navigation between pages is plain links with a short cross-document view transition where the browser supports it. There is no build step.

Rules and wording written on the field

Each form field carries its own rules and its own message for each rule as attributes in the HTML. On submit, the script checks every field, writes the summary from those messages and moves focus to it. After that first submit each field is checked again as it is corrected, so nobody is told off halfway through typing.

The example box

The form in each example sits in a frame whose width you can change by dragging, by slider or by named size. Layouts inside respond to the frame rather than the window, so a narrow box really does stack the fields. Under the frame, code tabs remember the language you last picked.

One group of colour tokens

A palette is a short block of values for the band, its text, links and tints in light and dark. Set one attribute on the html element to choose a palette, or replace the values with your own brand colour. Error red and success green stay fixed so that an error always looks like an error.

Motion that can go missing

The interface does not depend on the animation library at all. If the CDN is blocked or the reader asks for reduced motion, the summary, the fields and the tabs all change at once and everything still works. Without JS, examples show their error state as a static picture and all tabs are open.

Plugins Flip
Difficulty Intermediate
Colour palettes 4 ready-made palettes, each measured for AA contrast. Switch with one attribute, or copy the values you want into :root. Try them in the preview above.
Includes HTML + JS + CSS source, documentation, AI setup prompt, lifetime updates

Lighthouse, as measured

Google Lighthouse on this template's demo (17 pages, lowest score shown), from the latest scan. A measurement of the demo as shipped, not a promise for your page.

Accessibility
100
Best practices
100

No performance score, on purpose. That figure depends on how you deploy: your server's compression and caching, your CDN, the connection and the device doing the test, none of which the code controls. The same page can score very differently on two consecutive runs, so measure it where it will live.

Questions about this template

Which kinds of site does this suit besides documentation for a code library?

Anything people read to get a job done: product docs, a help centre, a knowledge base, a design system, a company handbook or an API reference. The worked example is a forms library, but the page shapes are general. Replace the example boxes with screenshots or your own components, and rename the four section tabs to fit your content.

How do I change the colour and logo to match my brand?

The wordmark is a small inline drawing and a word in the header and footer of each page, so a find and replace across the files swaps it. For colour, either set data-palette on the html element to green, plum or black, or put your own values in the token block at the top of the stylesheet. Check that your text still measures 4.5:1 on your band.

Do the forms send anything anywhere?

No. The sign-up, updates and example forms are an unwired front end. They collect names, email addresses and example answers, validate them in the browser and show a confirmation in place. To receive real sign-ups, point the form at Formspree, Netlify Forms or your mailing list provider, and keep the same checks on your server as well.

Is Pigeonhole a real library I can install?

No. Pigeonhole, its package name, version numbers, options and release notes are all invented for the worked example, so the install commands will not work. The validation behind the examples is real and ships in the template's own script, which you can reuse on your own forms. Replace all the Pigeonhole copy before you publish.

How do I add a page or a new section?

Copy the page closest to what you need, then add its link to the sidebar and to the All pages list at the foot. Both lists are written out on each page, so a find and replace updates them together. Search reads the All pages list, so a new page shows up in search as soon as it is listed there.

Do I need the example boxes and form validation on my pages?

No. Long pages like the guides are ordinary prose with headings and flat coloured asides, and they work without any example on them. Delete an example box and the script does nothing for it, because each feature only runs where it finds its markup. The right rail, section tabs and search keep working on what is left.

Paid template

Purchase to unlock the code.

Buying Product Documentation opens the HTML, CSS and JavaScript source, the full documentation, an AI setup prompt for your editor, and every update we ship to it. Standard license: unlimited personal and commercial projects. Every paid product is tested for desktop and mobile layouts, reduced-motion handling, animation cleanup and keyboard controls wherever there is something to operate.

£29 Standard license, unlimited projects

Browse free effects

Or the whole library: the Vault, £99, one payment.

Documentation

Quick Start

  1. Unzip and open index.html in a browser, or upload the folder to any static host. There is no build step.
  2. The pages are index.html, get-started.html, install.html, validating-a-form.html, writing-error-messages.html, making-forms-accessible.html, personal-data.html, upgrading.html, components.html, text-input.html, error-summary.html, date-input.html, check-answers.html, configuration.html, whats-new.html, browser-support.html and 404.html.
  3. Set your colour at the top of assets/style.css, and replace the wordmark in the header and footer of each page.
  4. Replace the copy. Every page is ordinary HTML.

Using It With Your Own Design

The band, tabs, sidebar and footer are ordinary markup repeated on each page, so a page can be read and edited by itself. To change a sidebar or footer link, use find and replace across the files.

Everything interactive is found by a data- hook, and assets/script.js does nothing for a hook it cannot find. Delete any example, filter or page without touching the script.

Pages and Configuration

The frame

  • Section links in the header go to the first page of each section, and each page's sidebar lists its own section. In the phone menu (data-section-tabs) they swap the panels with matching ids (menu-guides and so on) so people can browse before choosing a page.
  • Right rail (data-rail) lists links to the headings on the page. The bar follows the heading in view. The same links are repeated in details.toc for smaller screens.
  • Search reads the #all-pages list at the foot of each page. data-k on each link holds extra search words. A new page appears in search once it is in that list.
  • Phone menu is #menu-panel, opened by [data-menu-button].

Forms

A form needs data-form. Inside it, data-form-body wraps the summary, the fields and the button, and data-done is the confirmation panel. Each field states its rules and its wording:

Code snippet omitted: it ships with the download.

The rules are required, email, min (with data-min), max (with data-max), checked, choice and date. A date field holds three inputs marked data-part="day", "month" and "year", and takes the messages required, day, month, year, yearlength, real and past.

data-start="errors" shows a form in its error state from the start, as on the home page. Without it a form opens clean. Without JS, the text inside each data-error and summary shows as a static error state and the browser's own required checks apply.

These forms are a front end and send nothing. To use one for real, remove the data-done panel and let a valid form post to your server or a service such as Formspree or Netlify Forms. Listen for the pigeonhole:valid event if you want to send it yourself, and call event.preventDefault() to stop the confirmation panel appearing. Always repeat the checks on your server.

Example box

data-example on a figure adds the width controls. .ex__frame is a size container, so anything inside can respond with @container rules. The Phone and Tablet buttons read their widths from data-snap.

Tabs

data-tabs makes a tab group. Add data-remember="pkg" to keep the choice across pages and to keep every group with the same key in step.

Check answers

data-flow holds one data-step for each step, each with its own form. data-answer="fieldname" is filled in from that field, and data-change="0" goes back to that step and returns straight to the check step. On a real service, consider making each step its own page.

Filters

data-filter="id" on a box holding an input filters each data-filter-item inside the element with that id. data-filter-group hides itself when all its items are hidden.

404 page

404.html uses relative paths. If your host serves it at deep addresses, make the assets/ and page links absolute.

Palettes

Four palettes ship in assets/style.css. Set one on <html>, for example <html lang="en-GB" data-palette="plum">, or copy a block's values into :root and delete the others.

Palette Band Text on band Dark theme band Display face
Blue (default) #0b52d0 white, 6.71:1 the same Public Sans
Green #0a6b45 white, 6.56:1 the same Public Sans
Plum #6a1b6e white, 10.53:1 #8a2b8e, 7.46:1 Public Sans
Black #141414 white, 18.42:1 #f2f2f2 with #111111, 16.87:1 Public Sans

The black palette flips to a white band in the dark theme, as a black band would vanish into the ground. Error red and success green do not change with the palette. All measured pairs are recorded at the top of the stylesheet.

The light and dark toggle is part of the site. A saved choice is applied by the short script in <head>, before the stylesheet, so nothing flashes. Without a saved choice the site follows the reader's system setting, with or without JS.

Accessibility

Native form controls throughout. The summary takes focus after a failed submit, each of its links focuses its field, and the page title gains "Error:" while problems remain. Tabs use arrow keys. The search dialog and phone menu close on Escape and return focus. Reduced motion, no JS and a blocked CDN all leave a complete working site.

Dependencies

GSAP 3.15.0 and its Flip plugin from a CDN, loaded with defer (works with GSAP 3.12+). They add only movement, and the site script does not wait for them. Public Sans is self-hosted in assets/fonts/ under the SIL Open Font License (see OFL.txt), and code uses the reader's system monospace font.

There is no photography.

Teardown

These are plain pages with ordinary page loads, so nothing needs tearing down. If you move a form into a single-page app, remove its element when you remove the route; listeners are attached to the elements themselves, apart from one keydown on the document for the / key and Escape.

Worked examples, the events and programmatic API, and the class reference ship with the download, alongside the full source.