An employee handbook template for a small team: one page people read

Put the policies people actually ask about on one searchable page, and name the official document under each. The signed and legal documents stay where they are.

An employee handbook template for a small team can be one page: the policies people ask about most, each in a few lines, with the name of the official document under it.

Think hours, time off, sick days, expenses, equipment and who to ask. The contracts and full policies stay in your HR system.

A long PDF answers every question and gets opened by nobody. The question then goes to chat, and someone types the answer again.

The US Small Business Administration says that detailing benefits in the employee handbook "helps your staff make decisions, and they can use it as a reference for workplace requirements." A reference only helps if people can find the line they need.

Here is a finished page for a made-up studio. Search for "sick" or "laptop", or tap a topic to open it.

Live exampletry it here, then copy the code
Share it as a link
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Larkspur Studio: team handbook</title>
<style>
  * { box-sizing: border-box; }
  body { margin: 0; font-family: system-ui, sans-serif; background: #f4f5f7; color: #1f2937; line-height: 1.5; }
  .wrap { max-width: 720px; margin: 0 auto; padding: 20px 16px 32px; }
  h1 { font-size: 24px; margin: 0 0 4px; }
  .meta { font-size: 14px; color: #4b5563; margin: 0 0 14px; }
  .note { background: #fff8e6; border: 1px solid #f1dca0; border-radius: 10px; padding: 10px 14px; font-size: 14px; margin-bottom: 14px; }
  .tools { display: flex; gap: 8px; margin-bottom: 8px; }
  .tools input { flex: 1; min-width: 0; font: inherit; font-size: 16px; padding: 10px 12px; border: 1px solid #cbd2dc; border-radius: 10px; }
  .tools button { font: inherit; font-size: 14px; padding: 0 12px; border: 1px solid #cbd2dc; border-radius: 10px; background: #fff; cursor: pointer; }
  .count { font-size: 13px; color: #4b5563; margin: 0 0 10px; }
  details { background: #fff; border: 1px solid #e1e4ea; border-radius: 12px; margin-bottom: 8px; }
  summary { cursor: pointer; padding: 13px 14px; font-weight: 600; font-size: 16px; list-style-position: inside; }
  .body { padding: 0 14px 14px; }
  .body p { margin: 0 0 8px; }
  .body ul { margin: 0 0 8px; padding-left: 20px; }
  .src { font-size: 13px; color: #374151; background: #eef2f7; border-radius: 8px; padding: 8px 10px; margin: 0; }
  .src b { color: #111827; }
  .empty { display: none; text-align: center; color: #4b5563; padding: 16px; }
  mark { background: #fde68a; }
</style>
</head>
<body>
<div class="wrap">
  <h1>Larkspur Studio: how we work</h1>
  <p class="meta">Reviewed 1 Oct 2026 &middot; Questions: Mara Okafor, office manager</p>
  <div class="note"><b>This page is a short summary.</b> If it ever differs from the official document named under a topic, the official document wins.</div>

  <div class="tools">
    <input id="q" type="search" placeholder="Search: sick, expenses, laptop..." aria-label="Search the handbook">
    <button id="all" type="button">Open all</button>
  </div>
  <p class="count" id="count"></p>

  <div id="list">
    <details>
      <summary>Working hours</summary>
      <div class="body">
        <p>Core hours are 10:00 to 15:00. Be reachable then. Start and finish outside those hours as suits you.</p>
        <p class="src"><b>Official:</b> Employment contract, clause 4 (HR system &rarr; My documents)</p>
      </div>
    </details>
    <details>
      <summary>Time off and holidays</summary>
      <div class="body">
        <ul>
          <li>Ask in the team calendar and tell your lead.</li>
          <li>Requests of a week or more: ask at least a month ahead.</li>
          <li>Public holidays follow the studio calendar.</li>
        </ul>
        <p class="src"><b>Official:</b> Time Off Policy v3 (HR system &rarr; Policies)</p>
      </div>
    </details>
    <details>
      <summary>Sick days</summary>
      <div class="body">
        <p>Message your lead before 10:00 on the first day. You do not need to explain the illness. If you are off for several days, Mara will tell you what paperwork is needed.</p>
        <p class="src"><b>Official:</b> Sick Leave Policy v2 (HR system &rarr; Policies)</p>
      </div>
    </details>
    <details>
      <summary>Expenses</summary>
      <div class="body">
        <ul>
          <li>Keep the receipt. Photograph it the same day.</li>
          <li>Submit within 30 days, with the project name.</li>
          <li>Ask your lead first for anything over the limit in the policy.</li>
        </ul>
        <p class="src"><b>Official:</b> Expenses Policy v4 (finance folder &rarr; Policies)</p>
      </div>
    </details>
    <details>
      <summary>Working from home</summary>
      <div class="body">
        <p>Fine on any day without a client visit. Tell your lead in the team chat in the morning. Working from another city or country needs approval first.</p>
        <p class="src"><b>Official:</b> Remote Work Policy v1 (HR system &rarr; Policies)</p>
      </div>
    </details>
    <details>
      <summary>Laptop and equipment</summary>
      <div class="body">
        <p>Your laptop is on loan from the studio. Report loss or damage to Mara the same day. Return everything on your last day.</p>
        <p class="src"><b>Official:</b> Equipment Loan Form you signed (HR system &rarr; My documents)</p>
      </div>
    </details>
    <details>
      <summary>Who to ask</summary>
      <div class="body">
        <ul>
          <li><b>Pay, contracts, time off:</b> Mara Okafor</li>
          <li><b>Expenses:</b> Tomas Reyes, finance</li>
          <li><b>Laptop or logins:</b> Priya Nair, IT</li>
        </ul>
        <p class="src"><b>Official:</b> Org chart (shared drive &rarr; Studio)</p>
      </div>
    </details>
  </div>
  <p class="empty" id="empty">Nothing matches. Try another word, or ask Mara.</p>
</div>

<script>
  const input = document.getElementById('q');
  const items = [...document.querySelectorAll('#list details')];
  const count = document.getElementById('count');
  const empty = document.getElementById('empty');
  const allBtn = document.getElementById('all');

  function update() {
    const term = input.value.trim().toLowerCase();
    let shown = 0;
    items.forEach((d) => {
      const hit = !term || d.textContent.toLowerCase().includes(term);
      d.hidden = !hit;
      if (hit) shown++;
      if (term && hit) d.open = true;  // open matches so the answer is visible
    });
    count.textContent = term ? shown + ' of ' + items.length + ' topics match' : items.length + ' topics';
    empty.style.display = shown ? 'none' : 'block';
  }

  input.addEventListener('input', update);

  allBtn.addEventListener('click', () => {
    const open = allBtn.textContent === 'Open all';
    items.forEach((d) => { d.open = open; });
    allBtn.textContent = open ? 'Close all' : 'Open all';
  });

  update();
</script>
</body>
</html>
A one-page handbook summary. Each topic has a short answer and the official document it comes from. Edit the text and the example reruns.

The page is plain HTML. Each topic is one block of text, so you change words, not layout.

What goes on the page and what stays in the system

The page is a summary. It does not replace anything.

The short version goes on the page. The documents that count stay in the official system.
The short version goes on the page. The documents that count stay in the official system.

Put on the page what a person looks up in the moment: who to tell, how to ask, what the limit is. Keep out anything that is signed, personal to one employee, or would need a lawyer to reword.

Under every topic, name the official document and where it lives. That line does two jobs. It tells people where the full rule is, and it tells you which document to update when a rule changes.

The topic list in this article is an editorial suggestion, not a legal checklist. What a handbook must contain depends on your country, region and industry. Ask whoever is responsible for that before you rely on a summary.

Make it with AI

Paste this prompt into ChatGPT, Claude or Gemini. Put your own policies at the bottom, in plain sentences.

Write ONE self-contained HTML file: a team handbook summary page, read mostly on phones.
Rules:
- Plain HTML, CSS and JavaScript in one file. No images, no external files, no form that sends data.
- One column. Add a viewport meta tag. Text at least 16px.
- At the top: the team name, a "Reviewed" date and a contact person.
- Under that, a notice: "This page is a short summary. If it differs from the official document named under a topic, the official document wins."
- A search box that hides topics that do not match, and an "Open all" button.
- Each topic is a collapsible block: a title, 2 to 4 lines of answer, and a line "Official: <document title> (<where it is kept>)".
- Put all the text in one block at the top of the script, with the comment "Change the text here".
- If I did not give you a fact, write TODO. Do not invent limits, days, amounts or rules.
My policies:
Hours: ...
Time off: ...
Sick days: ...
Expenses: ...
Equipment: ...
Who to ask: ...
Official documents and where they are kept: ...
From AI chat to a link, in four steps.
From AI chat to a link, in four steps.

An AI is good at the layout and loose with facts. Read the page as a new hire would.

  • Every number. Limits, notice periods and deadlines against the official document.
  • Every TODO. Fill it in or delete the topic.
  • Invented rules. Anything you did not tell it, such as probation, bonuses or overtime.
  • The official lines. Each must name a real document in a real place.
  • The phone. Open it on your own phone before the team does.

If the page looks wrong, fixing AI-generated HTML covers the usual causes.

Paste the HTML into a NOS document and choose Create share link. HTML to link walks through it.

The result is a page anyone with the link can open in a browser, on a phone too, with no account. They can read it but not edit it. Scripts run, so the search box and the open-and-close blocks work for everyone who opens it.

Put the link wherever the team already looks: the welcome email for a new hire, the pinned line in your team chat, the top of the onboarding list. A link is just text, so it goes anywhere text goes.

To update it: change the official document first. Then open the page in NOS, edit the summary and the "Reviewed" date, and save. The same link shows the new version.

Anyone who has the link can read the page, and NOS has no password option. Put nothing on it you would not want a stranger to read. Salaries, personal data and anything confidential belong in your official system.

A page compared with the usual ways

A long PDF on a phone against a handbook page: topics that fit the screen.
A long PDF on a phone against a handbook page: topics that fit the screen.
Long PDF by email Document in a shared folder Link to a page
Opens on a phone After a download Depends on the folder tool Yes, in the browser
Finding one rule Scroll or search the file Scroll or search the file Search box and topics
After a change Send a new file Edit the file Edit the page, same link
Old copies in circulation Yes, every sent file Only if people saved one No, one address
Names the official source Only if you add it Only if you add it One line per topic
Reader needs an account No Depends on sharing settings No

The folder column varies with the tool and the sharing settings you choose, so check yours. An attachment has to be downloaded to be read, and a change means sending a new file. That is a property of files, not of any product.

For more on when a link beats an attachment, see email vs link for documents and HTML vs PDF.

Answer the question people actually ask

People rarely look up "Section 4". They think "I am ill today" or "I paid for something for work". The second example is organised that way: pick a situation, get the steps, the person to tell and the official document.

Live exampletry it here, then copy the code
Share it as a link
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Larkspur Studio: what do I do if...</title>
<style>
  * { box-sizing: border-box; }
  body { margin: 0; font-family: system-ui, sans-serif; background: #f4f5f7; color: #1f2937; line-height: 1.5; }
  .wrap { max-width: 720px; margin: 0 auto; padding: 20px 16px 28px; }
  h1 { font-size: 24px; margin: 0 0 4px; }
  .sub { font-size: 14px; color: #4b5563; margin: 0 0 14px; }
  .picks { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 8px; margin-bottom: 14px; }
  .picks button { font: inherit; font-size: 15px; text-align: left; padding: 12px; border: 1px solid #cbd2dc; border-radius: 12px; background: #fff; cursor: pointer; }
  .picks button[aria-pressed="true"] { border-color: #2563eb; background: #eff5ff; font-weight: 600; }
  .card { background: #fff; border: 1px solid #e1e4ea; border-radius: 12px; padding: 14px 16px; }
  .card h2 { font-size: 18px; margin: 0 0 8px; }
  .card ol { margin: 0 0 10px; padding-left: 22px; }
  .card li { margin-bottom: 4px; }
  .who { font-size: 14px; margin: 0 0 8px; }
  .src { font-size: 13px; background: #eef2f7; border-radius: 8px; padding: 8px 10px; margin: 0; }
  .hint { color: #4b5563; margin: 0; }
</style>
</head>
<body>
<div class="wrap">
  <h1>What do I do if...?</h1>
  <p class="sub">Pick your situation. A short summary only: the official document wins.</p>
  <div class="picks" id="picks"></div>
  <div class="card" id="card" aria-live="polite"></div>
</div>

<script>
  // Change the answers here. Keep each one to a few short steps.
  const SITUATIONS = [
    { label: 'I am ill today', steps: ['Message your lead before 10:00.', 'You do not need to explain the illness.', 'Update the team calendar when you can.'], who: 'Your lead, then Mara Okafor if it lasts several days', doc: 'Sick Leave Policy v2 (HR system, Policies)' },
    { label: 'I want a week off', steps: ['Ask at least a month ahead.', 'Put the request in the team calendar.', 'Wait for your lead to confirm before you book.'], who: 'Your lead', doc: 'Time Off Policy v3 (HR system, Policies)' },
    { label: 'I paid for something for work', steps: ['Photograph the receipt the same day.', 'Submit it within 30 days, with the project name.', 'Over the limit? Ask your lead first.'], who: 'Tomas Reyes, finance', doc: 'Expenses Policy v4 (finance folder, Policies)' },
    { label: 'I broke or lost my laptop', steps: ['Tell Mara the same day.', 'Do not try to repair it yourself.', 'IT will lend you a spare.'], who: 'Mara Okafor and Priya Nair, IT', doc: 'Equipment Loan Form you signed (HR system, My documents)' }
  ];

  const picks = document.getElementById('picks');
  const card = document.getElementById('card');

  function show(i) {
    const s = SITUATIONS[i];
    [...picks.children].forEach((b, j) => b.setAttribute('aria-pressed', j === i ? 'true' : 'false'));
    card.innerHTML = '';
    const h = document.createElement('h2'); h.textContent = s.label;
    const ol = document.createElement('ol');
    s.steps.forEach((t) => { const li = document.createElement('li'); li.textContent = t; ol.appendChild(li); });
    const who = document.createElement('p'); who.className = 'who'; who.textContent = 'Who to tell: ' + s.who;
    const src = document.createElement('p'); src.className = 'src'; src.textContent = 'Official document: ' + s.doc;
    card.append(h, ol, who, src);
  }

  SITUATIONS.forEach((s, i) => {
    const b = document.createElement('button');
    b.type = 'button';
    b.textContent = s.label;
    b.setAttribute('aria-pressed', 'false');
    b.addEventListener('click', () => show(i));
    picks.appendChild(b);
  });

  card.innerHTML = '<p class="hint">Pick a situation above.</p>';
</script>
</body>
</html>
Pick a situation. The card shows the steps, who to tell and the official document. Edit the list at the top of the script.

Four situations are enough to start. Add one each time someone asks you the same thing twice. For new hires, the same page can sit inside an onboarding page that stays current.

Keeping it honest

A summary that drifts from the official document is worse than none. Three habits keep the two together.

  1. Change the official document first, then the page.
  2. Update the "Reviewed" date every time you edit, even for a comma.
  3. Keep the notice that the official document wins. It is the line that protects you when the summary is out of date.

The page does not record who has read it. If you need proof that someone received or agreed to a policy, use the signed form in your official system and name it on the page.

When it does not work

What you see Cause Fix
The page shows raw code in the chat You copied the chat text, not the code block Copy only the code, from the first doctype line to the last html tag
A policy on the page is wrong The AI guessed a number or a rule Ask for TODO on anything you did not state, then check each line
The search finds nothing The word is not in the topic text Add the word people use, such as "holiday" next to "time off"
A logo or photo is missing Images from other sites are blocked Ask for no images, or a logo drawn in SVG
A staff confirmation button does nothing Forms cannot send to a server from the link Keep acknowledgements in your official system
People see an old version They have the page open, or the edit was not saved Save in NOS, then ask them to reload
The text is tiny on a phone No viewport meta tag Ask the AI to add one, and a 16px base size

Questions people ask

Does this page replace our employee handbook?

No. It is a short summary that sits in front of the official documents. Each topic names the document it comes from, and the page says that the official document wins if the two differ. Contracts, full policies and signed forms stay in your HR system or shared drive.

Which policies should go on the page?

Start with what people already ask you in chat: working hours, time off, sick days, expenses, working from home, equipment and who to ask. That list is an editorial suggestion, not a legal checklist. What a handbook must contain depends on your country, region and industry, so ask whoever is responsible for that.

Can I use AI to write the policies themselves?

Use it for layout and wording, not for rules. Give it your own facts and tell it to write TODO where it has none. It does not know your contracts or local law, and it can sound sure about things that are wrong. Check every number and date against the official document.

Can staff confirm they have read it?

Not on this page. A visitor's ticks are not saved and you do not see who opened it, and forms that send data to a server are blocked. If you need a record of acknowledgement, keep using the signed form in your official system and link to it by name.

How do I change a policy after sending the link?

Update the official document first. Then open the page in your NOS document, edit the summary and the review date in the code, and save. The same link shows the new version. Tell people in your usual channel that something changed.

Keep reading