A free back to school newsletter template, sent as a link

The first week brings the same questions: what to bring, when to arrive, who to ask. Put the answers on one web page, fill it in with AI, and send families a link.

A good back to school newsletter is one page that answers three questions: what to bring, how the day runs, and who to contact. Start from the free template below, ask an AI chat to fill it in, and send families a link, not a file.

Try the template first. Tick the supplies, then scroll to see the rest. This is the whole page, and you can edit its code and copy 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>Welcome to Room 14</title>
<style>
  * { box-sizing: border-box; }
  body { margin: 0; font-family: system-ui, sans-serif; background: #f3f6fb; color: #1d2330; line-height: 1.5; }
  .wrap { max-width: 640px; margin: 0 auto; padding: 14px; }
  .hero { background: linear-gradient(135deg, #2563eb, #1e40af); color: #fff; border-radius: 16px; padding: 22px 20px; position: relative; overflow: hidden; }
  .hero svg { position: absolute; right: 12px; top: 10px; width: 64px; opacity: .9; }
  .hero h1 { margin: 0 0 4px; font-size: 26px; line-height: 1.2; padding-right: 70px; }
  .hero p { margin: 0; font-size: 15px; opacity: .95; }
  .card { background: #fff; border-radius: 14px; padding: 16px 18px; margin-top: 12px; box-shadow: 0 1px 3px rgba(0,0,0,.08); }
  h2 { margin: 0 0 8px; font-size: 18px; }
  .day { display: flex; gap: 12px; align-items: center; }
  .day b { font-size: 22px; color: #1e40af; }
  ul.check { list-style: none; margin: 0; padding: 0; }
  ul.check li { padding: 9px 0; border-bottom: 1px solid #eef0f4; }
  ul.check li:last-child { border-bottom: 0; }
  label { display: flex; gap: 12px; align-items: center; cursor: pointer; font-size: 16px; }
  input[type=checkbox] { width: 22px; height: 22px; accent-color: #16a34a; flex: none; }
  input:checked + span { text-decoration: line-through; color: #6b7280; }
  .count { font-size: 14px; color: #475569; margin: 0 0 6px; }
  .bar { height: 8px; background: #e5e7eb; border-radius: 4px; overflow: hidden; margin-bottom: 8px; }
  .bar i { display: block; height: 100%; width: 0; background: #16a34a; transition: width .2s; }
  table { width: 100%; border-collapse: collapse; font-size: 15px; }
  td { padding: 7px 0; border-bottom: 1px solid #eef0f4; vertical-align: top; }
  td:first-child { width: 92px; color: #1e40af; font-weight: 600; }
  tr:last-child td { border-bottom: 0; }
  .contact p { margin: 4px 0; font-size: 15px; }
  .note { background: #fff7e6; border-left: 4px solid #f59e0b; border-radius: 8px; padding: 10px 12px; font-size: 14px; margin-top: 10px; }
</style>
</head>
<body>
<div class="wrap">

  <div class="hero">
    <svg viewBox="0 0 64 64" aria-hidden="true"><rect x="8" y="22" width="48" height="34" rx="4" fill="#fbbf24"/><rect x="14" y="30" width="36" height="6" fill="#fff" opacity=".8"/><path d="M8 22 L32 6 L56 22 Z" fill="#f59e0b"/></svg>
    <h1>Welcome to Room 14</h1>
    <p>Ms. Alder's class, Maple Grove School. Everything for the first week is on this page.</p>
  </div>

  <div class="card">
    <div class="day"><b>Wed</b><div><strong>First day: doors open at 8:15</strong><br>Bring your child to the side entrance. Lessons start at 8:30.</div></div>
  </div>

  <div class="card">
    <h2>Supplies to bring</h2>
    <p class="count" id="count">0 of 6 packed</p>
    <div class="bar"><i id="bar"></i></div>
    <ul class="check">
      <li><label><input type="checkbox"><span>Backpack with a name tag</span></label></li>
      <li><label><input type="checkbox"><span>2 pencils and an eraser</span></label></li>
      <li><label><input type="checkbox"><span>Glue stick and safety scissors</span></label></li>
      <li><label><input type="checkbox"><span>Water bottle</span></label></li>
      <li><label><input type="checkbox"><span>Folder for papers going home</span></label></li>
      <li><label><input type="checkbox"><span>Indoor shoes for the gym</span></label></li>
    </ul>
    <div class="note">Notebooks and art supplies are provided by the classroom.</div>
  </div>

  <div class="card">
    <h2>A normal day</h2>
    <table>
      <tr><td>8:15</td><td>Doors open, unpack, read quietly</td></tr>
      <tr><td>8:30</td><td>Morning circle and maths</td></tr>
      <tr><td>10:15</td><td>Snack and outdoor break</td></tr>
      <tr><td>12:00</td><td>Lunch</td></tr>
      <tr><td>1:00</td><td>Reading, writing, project time</td></tr>
      <tr><td>3:00</td><td>Pick-up at the side entrance</td></tr>
    </table>
  </div>

  <div class="card contact">
    <h2>Who to contact</h2>
    <p><strong>Ms. Alder (teacher):</strong> alder@maplegrove.example</p>
    <p><strong>School office:</strong> 555-0142, open 8:00 to 4:00</p>
    <p><strong>Absence?</strong> Tell the office by 8:30.</p>
  </div>

</div>

<script>
  // Count the ticked boxes and fill the progress bar
  const boxes = document.querySelectorAll('input[type=checkbox]');
  const count = document.getElementById('count');
  const bar = document.getElementById('bar');

  function update() {
    const done = [...boxes].filter((b) => b.checked).length;
    count.textContent = done + ' of ' + boxes.length + ' packed';
    bar.style.width = (done / boxes.length * 100) + '%';
  }
  boxes.forEach((b) => b.addEventListener('change', update));
</script>
</body>
</html>
A welcome page with the first day, a supplies checklist, the daily routine and contacts. Tick a box to try it.

Nothing in it needs an app or an account. It is one HTML page, and the names, times and email address are made up. Replace them with yours.

What goes on the page

Families read this on a phone, often once, in a hurry. Keep to what they will act on in the first week.

  • First day: the date, the door they use and the time it opens.
  • Supplies: a short list with tick boxes. Say what the classroom already provides.
  • A normal day: times and one line each.
  • Contacts: who to email, the office phone number and what to do about an absence.

Leave out the full year plan. A second page for later in the term is easier to read than one long page now.

What a family sees on a phone: one column, big tick boxes, no app to install.
What a family sees on a phone: one column, big tick boxes, no app to install.

Make it with AI

Paste this into ChatGPT, Claude or Gemini and replace the square brackets. Use the same details you would put in a printed letter.

Write ONE complete HTML file: a back-to-school welcome page
for families of my class.

Page rules:
- Works on a phone: include the viewport meta tag, one column.
- No external files, images, fonts or scripts. All CSS and
  JavaScript inside the file. Use inline SVG for any picture.
- Large readable text, blue and white colours.
- No forms and no login.

Sections, in this order:
1. Title banner: "Welcome to [room name]", teacher name, school.
2. First day card: [day], doors open [time], entrance [where].
3. Supplies: a checklist with tick boxes and a counter
   "X of N packed". Items: [list]. Note: [what the class
   provides].
4. A normal day: a two-column table of times and activities:
   [times and activities].
5. Who to contact: [teacher email], [office phone and hours],
   [absence rule].

Return only the HTML.

When the page comes back, check it before anyone else sees it:

  1. Read every time, date and email address. AI can change a detail you did not ask it to change.
  2. Tick the boxes. The counter should move.
  3. Resize the preview to a narrow width. Nothing should run off the side.
  4. Look for links or images that point to other sites. They may not load in a shared page, so ask the chat to remove them.

If something is wrong, tell the chat exactly what to change. Ask for the whole file again each time. Fixing AI-generated HTML covers the usual faults.

From AI chat to a link: ask, check, paste into NOS, send.
From AI chat to a link: ask, check, paste into NOS, send.

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

The page renders as written, and its scripts run, so the tick boxes work. Anyone with the link can open it in a browser, on a phone too, with no account. They can read it but not edit it.

If a time changes, edit the code in NOS. The same link then shows the new version, so you never send a correction. A link also avoids the file problems in why links beat attachments.

A file leaves two versions in circulation. A link keeps one.
A file leaves two versions in circulation. A link keeps one.

Open the link yourself first, then pick the route that matches how your families already hear from you.

  • Email. In Gmail, select the words you want to link, press Insert link (or Ctrl + K) and paste the address. Other mail apps have a similar command.
  • Google Classroom. An announcement on the Stream and a material post on the Classwork page can both carry a Link attachment. Plans and school settings differ, so check what your school account shows.
  • Paper. Put a QR code of the link on the printed first-day sheet. See QR code link.

Ways to send the newsletter compared

Paper letter File attachment Link to a page
Family needs Nothing A way to open the file A browser
Fixing a mistake Print and send again Send a second file Edit; same link
Tick boxes that work No Only if the file opens as a page Yes
Easy to find later Lives in a bag Buried in email Tap the same link

You can use two routes at once: the link by email, and the same link as a QR code on paper for families who do not check email.

For newsletters in general, see digital newsletter. For a whole term of handouts, see send course materials.

A second layout is below. It puts each day of the first week behind a tab, with a short question list. Use it if families ask more about specific days.

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>First week at a glance</title>
<style>
  * { box-sizing: border-box; }
  body { margin: 0; font-family: system-ui, sans-serif; background: #f6f4fb; color: #1f1b2e; line-height: 1.5; }
  .wrap { max-width: 640px; margin: 0 auto; padding: 14px; }
  h1 { margin: 4px 0 2px; font-size: 24px; }
  .sub { margin: 0 0 12px; color: #5b5675; font-size: 15px; }
  .tabs { display: grid; grid-template-columns: repeat(5, 1fr); gap: 6px; }
  .tabs button { padding: 10px 0; border: 0; border-radius: 10px; background: #e6e1f5; color: #3b2f7a; font: 600 15px system-ui, sans-serif; cursor: pointer; }
  .tabs button[aria-selected=true] { background: #5b3fd0; color: #fff; }
  .panel { background: #fff; border-radius: 14px; padding: 16px 18px; margin-top: 10px; box-shadow: 0 1px 3px rgba(0,0,0,.08); min-height: 150px; }
  .panel h2 { margin: 0 0 6px; font-size: 18px; }
  .panel ul { margin: 6px 0 0; padding-left: 20px; }
  .panel li { margin: 3px 0; }
  .qa { margin-top: 12px; }
  details { background: #fff; border-radius: 12px; padding: 12px 16px; margin-top: 8px; box-shadow: 0 1px 3px rgba(0,0,0,.08); }
  summary { font-weight: 600; cursor: pointer; }
  details p { margin: 8px 0 0; font-size: 15px; color: #413b5c; }
</style>
</head>
<body>
<div class="wrap">
  <h1>First week at a glance</h1>
  <p class="sub">Year 3, Room 9. Tap a day to see what to bring.</p>

  <div class="tabs" role="tablist">
    <button role="tab" aria-selected="true" data-day="0">Mon</button>
    <button role="tab" aria-selected="false" data-day="1">Tue</button>
    <button role="tab" aria-selected="false" data-day="2">Wed</button>
    <button role="tab" aria-selected="false" data-day="3">Thu</button>
    <button role="tab" aria-selected="false" data-day="4">Fri</button>
  </div>
  <div class="panel" id="panel"></div>

  <div class="qa">
    <details><summary>What if my child is late?</summary><p>Come to the front office first. They will write a late slip and walk your child to class.</p></details>
    <details><summary>Where do I drop off?</summary><p>Use the east gate. The gate opens at 8:10 and closes at 8:35.</p></details>
    <details><summary>Who do I contact with a question?</summary><p>Mr. Okafor, class teacher: okafor@riverside.example. Replies come within two school days.</p></details>
  </div>
</div>

<script>
  // One entry per day: a heading and a list of things to bring or know
  const days = [
    { title: 'Monday: meet your class', items: ['Backpack and water bottle', 'Name tag, already written', 'Signed contact form'] },
    { title: 'Tuesday: library day', items: ['Library bag', 'Reading book from home, if you have one'] },
    { title: 'Wednesday: art and music', items: ['Old T-shirt to paint in', 'Indoor shoes'] },
    { title: 'Thursday: sports kit', items: ['Sports shoes', 'Hat and sunscreen', 'Spare socks'] },
    { title: 'Friday: sharing circle', items: ['One small thing to show the class', 'Folder with signed forms'] },
  ];
  const panel = document.getElementById('panel');
  const tabs = document.querySelectorAll('.tabs button');

  function show(i) {
    const d = days[i];
    panel.innerHTML = '<h2>' + d.title + '</h2><ul>' + d.items.map((t) => '<li>' + t + '</li>').join('') + '</ul>';
    tabs.forEach((t, n) => t.setAttribute('aria-selected', n === i ? 'true' : 'false'));
  }
  tabs.forEach((t, i) => t.addEventListener('click', () => show(i)));
  show(0);
</script>
</body>
</html>
Day tabs for the first week and three common questions. Tap a day.

When it does not work

What you see Cause Fix
The page is tiny on a phone The viewport tag is missing Ask the chat to add the viewport meta tag
A picture shows a broken icon It points to another website Replace it with an inline SVG or remove it
The tick boxes do nothing The script is missing or broken Ask the chat to include a script that counts the ticks
The AI added a form or an email button The prompt did not rule it out Ask for a page with no forms
The link opens but shows old times You edited a copy, not the page you shared Open the NOS document that made the link and edit there
An attachment will not open on a phone The phone has no app for that file Send the link instead

If the page shows as plain code, see opening an HTML file on a phone.

Questions people ask

Is this back to school newsletter template really free?

The page above is yours to copy and change. Copy its code, or ask an AI chat to write one from the prompt in this article. Check the plan of whichever chat tool you use for any limits on your account.

Should I put student names in the AI prompt?

No. A welcome page is the same for the whole class, so it does not need them. Leave out student names, family phone numbers and medical details. Use your school's own rules for anything that identifies a child.

Can families open the link on a phone?

Yes. A shared link opens in the phone's browser with no account, and a page built with a viewport tag fits the screen width. Open it on your own phone before you send it.

What if the start time changes after I send it?

Change the text in your NOS document. The share link stays the same and shows the new version, so you do not send a second file.

Can I still print it?

Yes. Open the link in a browser and use the print command. A one-column page with big text prints without much fuss. Check the preview before printing a full class set.

Keep reading