An engagement party website that is just one link

An engagement party needs a date, an address, a dress note and a way to reply. Put them on one page and send one link instead of five messages.

An engagement party website can be a single page: the date with the weekday, the address, a line about what to wear, and a name and number to reply to.

If you were about to search for a free online invitation maker, this is the smaller alternative. You describe the party to an AI chat, get one file, and send one link.

Here is a page of that kind. Open the "Good to know" sections, and look at it at phone width too.

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>Engagement party: Maren and Theo, Saturday 14 November</title>
<style>
  * { box-sizing: border-box; }
  body {
    margin: 0; background: #f3efe6; color: #2b2f2a;
    font-family: system-ui, -apple-system, "Segoe UI", sans-serif; line-height: 1.5;
  }
  .page { max-width: 560px; margin: 0 auto; padding: 20px 16px 36px; }
  header {
    text-align: center; padding: 28px 18px 24px; border-radius: 18px;
    background: linear-gradient(160deg, #dfe8d6, #f7efdc);
  }
  header svg { width: 74px; height: 44px; }
  .kicker { margin: 6px 0 0; font-size: 13px; letter-spacing: .12em; text-transform: uppercase; color: #5b6b52; }
  h1 { margin: 6px 0 4px; font: 700 30px/1.15 Georgia, "Times New Roman", serif; }
  .when { margin: 0; font-size: 18px; font-weight: 600; }
  .count { display: inline-block; margin-top: 12px; padding: 4px 12px; border-radius: 999px; background: #fff; font-size: 14px; color: #3f5136; }
  section { margin-top: 14px; padding: 16px 18px; background: #fff; border-radius: 14px; }
  h2 { margin: 0 0 8px; font-size: 13px; letter-spacing: .1em; text-transform: uppercase; color: #5b6b52; }
  p { margin: 0 0 8px; }
  p:last-child { margin-bottom: 0; }
  .big { font-size: 17px; font-weight: 600; }
  a { color: #2f5d8a; }
  .tags { display: flex; flex-wrap: wrap; gap: 8px; margin: 10px 0 0; padding: 0; list-style: none; }
  .tags li { padding: 4px 11px; border-radius: 999px; background: #eef3e8; font-size: 14px; }
  .tags li.skip { background: #fbeee4; }
  details { border-top: 1px solid #ece7da; padding: 10px 0; }
  details:first-of-type { border-top: 0; padding-top: 0; }
  summary { cursor: pointer; font-weight: 600; }
  details p { margin-top: 6px; }
  .reply { background: #2b3a2a; color: #f3efe6; }
  .reply h2 { color: #b9cdb0; }
  .reply a { color: #fff; }
</style>
</head>
<body>
<div class="page">

  <header>
    <svg viewBox="0 0 74 44" aria-hidden="true">
      <circle cx="26" cy="26" r="15" fill="none" stroke="#b08a3e" stroke-width="3.5"/>
      <circle cx="48" cy="26" r="15" fill="none" stroke="#b08a3e" stroke-width="3.5"/>
      <path d="M37 6 l4 5 -4 5 -4 -5z" fill="#d9b45a"/>
    </svg>
    <p class="kicker">You are invited to celebrate</p>
    <h1>Maren &amp; Theo are engaged</h1>
    <p class="when">Saturday 14 November 2026, 5:00 pm</p>
    <span class="count" id="count"></span>
  </header>

  <section>
    <h2>Where</h2>
    <p class="big">The Greenhouse Room<br>12 Alder Lane, Fairhollow</p>
    <p><a href="https://www.google.com/maps/search/?api=1&amp;query=12+Alder+Lane+Fairhollow">Open in maps</a></p>
    <p>Free parking behind the building. Doors open at 4:45 pm. We finish around 9:00 pm.</p>
  </section>

  <section>
    <h2>What to wear</h2>
    <p class="big">Smart casual. Come as you are, a little dressed up.</p>
    <p>The room is warm, but we step into the garden for the toast, so bring a light layer.</p>
    <ul class="tags">
      <li>Dresses and shirts</li>
      <li>Flat or block heels</li>
      <li>Any colour you like</li>
      <li class="skip">No white, please</li>
    </ul>
  </section>

  <section>
    <h2>Good to know</h2>
    <details>
      <summary>Food and drink</summary>
      <p>Dinner is served at 6:00 pm. Tell us about allergies when you reply and we will pass it on.</p>
    </details>
    <details>
      <summary>Gifts</summary>
      <p>Your company is the gift. There is no registry.</p>
    </details>
    <details>
      <summary>Bringing a guest or children</summary>
      <p>Your invitation names who is invited. If you are unsure, just ask us.</p>
    </details>
  </section>

  <section class="reply">
    <h2>Please reply by Sunday 1 November</h2>
    <p>Text or call Maren on <a href="tel:+15550142">555-0142</a> and say how many are coming.</p>
    <p>Or email <a href="mailto:maren.example@example.com">maren.example@example.com</a>.</p>
  </section>

</div>

<script>
  // Days left until the party, counted in whole calendar days.
  const party = new Date(2026, 10, 14);   // month 10 = November
  const today = new Date();
  today.setHours(0, 0, 0, 0);
  const days = Math.round((party - today) / 86400000);
  const el = document.getElementById('count');
  if (days > 1) el.textContent = days + ' days to go';
  else if (days === 1) el.textContent = 'Tomorrow!';
  else if (days === 0) el.textContent = 'Today!';
  else el.textContent = 'Thank you for celebrating with us';
</script>
</body>
</html>
A one-page engagement party site. The names, place and number are made up. Edit the code and the page reruns.

Everything a guest asks about is on the first screen or one scroll away. That is the whole idea: the page answers the questions you would otherwise answer one message at a time.

Make it with AI

You do not need to write the code. Give ChatGPT, Claude or Gemini your details and ask for a single file. Replace everything in square brackets, and keep the last lines, which stop the AI from inventing facts.

Write one self-contained HTML file for an engagement party page.
It must work on a phone and use no external images or fonts.

Details:
- Couple: [names]
- Date and time: [weekday, date, start and end time]
- Place: [venue name and full address, with the town]
- Parking or how to get there: [one line]
- Dress note: [what to wear, and one practical tip]
- Food and gifts: [one line each]
- Reply to: [name and phone number], by [date]

Sections in this order: date, where, what to wear, good to know, reply.
Use a calm colour palette and a serif heading.
Make the address a link to a map, and also write it out as text.
Write the phone number as a tel: link and also as text.
Do not add a form. Do not invent any detail I did not give you.
Where something is missing, write TODO.

Then check the result before you send it. The AI can get a weekday wrong or fill a gap with a plausible guess.

  • Does the weekday match your calendar?
  • Are the times and the address exactly yours?
  • Is the phone number right, digit by digit?
  • Is any line about parking, food or gifts something you never said?

Also open it on a phone. If something is off, tell the chat what to change in plain words and ask for the whole file again. Invitation to link covers the same checks for any event invitation.

Copy the HTML the AI gave you, paste it into a NOS document and choose Create share link. HTML to link walks through it. The page renders as written, with its scripts running, such as the days-to-go counter above.

From your details to a link you can send: ask, check, paste, send.
From your details to a link you can send: ask, check, paste, send.

Anyone with the link opens it in a browser, on a phone too. They need no account and cannot edit the page. If you change the code later, the same link shows the new version, so you never resend a corrected invitation.

The link is plain text, so it fits where your guests already are: a text message, an email, a group chat. Keep the invitation message short and let the page carry the details.

An attached file against a link, from the guest's side.
An attached file against a link, from the guest's side.

Dress notes people can use

A label such as "cocktail" or "smart casual" means different things to different people. Add what you actually hope to see, and one practical reason: grass swallows thin heels, evenings cool down, a toast moves outside.

This page splits the notes by time of day and adds a rain plan. Tap the three tabs.

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>Garden engagement party: dress notes</title>
<style>
  * { box-sizing: border-box; }
  body {
    margin: 0; background: #eef3f7; color: #1f2933;
    font-family: system-ui, -apple-system, "Segoe UI", sans-serif; line-height: 1.5;
  }
  .page { max-width: 560px; margin: 0 auto; padding: 20px 16px 32px; }
  header { padding: 22px 20px; border-radius: 18px; color: #fff;
    background: linear-gradient(150deg, #3d6b8f, #6b9a7d); }
  header p { margin: 0; }
  .kicker { font-size: 13px; letter-spacing: .12em; text-transform: uppercase; opacity: .85; }
  h1 { margin: 4px 0 6px; font-size: 28px; line-height: 1.15; }
  .meta { font-size: 16px; }
  section { margin-top: 14px; padding: 16px 18px; background: #fff; border-radius: 14px; }
  h2 { margin: 0 0 10px; font-size: 13px; letter-spacing: .1em; text-transform: uppercase; color: #3d6b8f; }
  .tabs { display: flex; gap: 6px; margin-bottom: 12px; }
  .tabs button {
    flex: 1; padding: 9px 4px; border: 1px solid #c9d6e0; border-radius: 10px;
    background: #f6f9fb; font: inherit; font-size: 14px; color: #1f2933; cursor: pointer;
  }
  .tabs button[aria-selected="true"] { background: #3d6b8f; border-color: #3d6b8f; color: #fff; font-weight: 600; }
  .panel p { margin: 0 0 8px; }
  .panel ul { margin: 0; padding-left: 20px; }
  .panel li { margin-bottom: 4px; }
  .timeline { margin: 0; padding: 0; list-style: none; }
  .timeline li { display: flex; gap: 12px; padding: 6px 0; border-top: 1px solid #edf1f4; }
  .timeline li:first-child { border-top: 0; }
  .timeline b { min-width: 64px; }
  .note { margin: 0; font-size: 14px; color: #52606d; }
</style>
</head>
<body>
<div class="page">

  <header>
    <p class="kicker">Garden party for Ines &amp; Jonas</p>
    <h1>Sunday 6 June, 2:00 pm</h1>
    <p class="meta">The Marlowe garden, 8 Orchard Row. Park on the street.</p>
  </header>

  <section>
    <h2>What to wear</h2>
    <div class="tabs" role="tablist">
      <button type="button" role="tab" aria-selected="true" data-tab="day">Afternoon</button>
      <button type="button" role="tab" aria-selected="false" data-tab="eve">After 6 pm</button>
      <button type="button" role="tab" aria-selected="false" data-tab="rain">If it rains</button>
    </div>

    <div class="panel" id="day">
      <p><b>Light and relaxed.</b> Sundresses, linen shirts, anything you can sit on a lawn in.</p>
      <ul>
        <li>Flat shoes or wedges. Thin heels sink into grass.</li>
        <li>Sunglasses and a hat are welcome.</li>
      </ul>
    </div>
    <div class="panel" id="eve" hidden>
      <p><b>Bring a layer.</b> The garden cools down once the sun drops behind the wall.</p>
      <ul>
        <li>A jacket, shawl or jumper.</li>
        <li>The string lights go on at 6:30 pm.</li>
      </ul>
    </div>
    <div class="panel" id="rain" hidden>
      <p><b>We move indoors.</b> Same time, same address, through the side gate into the hall.</p>
      <ul>
        <li>Dress as you planned. The hall is dry and warm.</li>
        <li>We will update this page by 10:00 am on the day.</li>
      </ul>
    </div>
  </section>

  <section>
    <h2>The afternoon</h2>
    <ul class="timeline">
      <li><b>2:00 pm</b><span>Welcome drinks</span></li>
      <li><b>3:30 pm</b><span>Lunch is served</span></li>
      <li><b>5:00 pm</b><span>Toast and cake</span></li>
      <li><b>8:00 pm</b><span>Wrap up</span></li>
    </ul>
  </section>

  <section>
    <h2>Reply</h2>
    <p>Tell Ines how many of you are coming by Sunday 23 May.</p>
    <p class="note">Message her in the chat where you got this link.</p>
  </section>

</div>

<script>
  // Show one panel at a time and mark the chosen tab.
  const tabs = document.querySelectorAll('.tabs button');
  const panels = document.querySelectorAll('.panel');
  tabs.forEach((tab) => {
    tab.addEventListener('click', () => {
      tabs.forEach((t) => t.setAttribute('aria-selected', String(t === tab)));
      panels.forEach((p) => { p.hidden = p.id !== tab.dataset.tab; });
    });
  });
</script>
</body>
</html>
Dress notes as tabs: afternoon, after 6 pm, and if it rains. A second page you can ask the AI for.

To get this version, add one sentence to the prompt: "Show the dress notes as three tabs: afternoon, evening and if it rains." Keep each tab to a sentence and two bullets so it reads at a glance.

A map link, a phone link and an email link are ordinary links, and a guest taps them on a phone. Google documents a search link for Maps, as of October 2026:

<a href="https://www.google.com/maps/search/?api=1&query=12+Alder+Lane+Fairhollow">Open in maps</a>

Spaces become plus signs or %20, and commas become %2C. HTML link to a map location shows the other forms. For calls and email, MDN lists the tel: and mailto: link types, and says cellular devices dial a tel: number.

Whether a tap does something depends on the guest's device, so write the address and number out as text as well. Nothing then depends on a tap.

Replies work the same way. The page cannot send a reply back to you, so name one person, one number and one date, and let guests text or email you. Calendar invite link covers putting the date into guests' calendars.

Ways to send the details compared

Way to send What the guest does When the time changes
Typed in a message Scrolls back to find it later You send another message
Screenshot or image Pinches to read it; the address cannot be tapped You make and send a new image
Attached file Downloads and opens it, see opening HTML on a phone You send a new file
Share link Taps it; the page opens in the browser You edit the page; the same link shows it
The invitation as guests see it on a phone: date, place, dress code and how to reply.
The invitation as guests see it on a phone: date, place, dress code and how to reply.

When it does not work

What you see Cause Fix
The weekday does not match the date The AI guessed it Check your calendar and ask for a corrected file
The map opens the wrong place The address was short or had a typo Use the full address with the town, and test the link on your phone
The phone number does not dial The device has no calling app, or the number has no country code Write the number out as text next to the link
A picture is missing Images loaded from other sites are blocked Ask for shapes in CSS or inline SVG instead
Guests cannot reply on the page The page cannot send a form to you Ask guests to text or email the person named on the page
A guest sees the old time They kept a screenshot or a file copy Send the link again and edit the page, not the message
The AI added a detail you never gave It filled a gap Ask for TODO in every gap, then fill it yourself

To be sized correctly on a phone, a page also needs the viewport meta tag. Want a QR code on the printed card? See QR code link.

Questions people ask

Do my guests need an account to open the page?

No. A NOS share link opens in a normal browser, on a phone too, and the guest does not sign up for anything. They can read the page but cannot edit it.

Can guests reply on the page itself?

Not in a way that reaches you. A page in NOS cannot send a form to a server. Put a name, a phone number and a reply-by date on the page, and ask guests to text or email you.

Can anyone who finds the link open the page?

Yes. Anyone who has the link can open it. Write the page as you would write a printed invitation, and leave out anything you would not hand to a stranger, such as a home address you want kept private.

What if the time or the venue changes?

Edit the code in your NOS document. The share link stays the same, so everyone who opens it again sees the new version. Tell guests once that the page was updated.

Can I put the link on a printed invitation?

Yes. Turn the link into a QR code and print it on the card. The guide on QR codes for links explains how.

Keep reading