keep this day

Works with Claude and ChatGPT

Set up your wedding website by chatting with your AI

Connect Keep This Day to Claude or ChatGPT once. Then tell it about your wedding in your own words. It builds the website, adds your cover photo and your guests, shows you a preview and publishes it when you say so. You never copy anything back.

Connect Claude or ChatGPT

It takes about a minute, and you only do it once. Use this address:

Connector address
https://keepthisday.com/mcp
  1. ClaudeOpen Settings, then Connectors, choose “Add custom connector” and paste the address. In Claude Code run claude mcp add --transport http keepthisday https://keepthisday.com/mcp.
  2. ChatGPTOpen the Plugins page, add a custom MCP server with the address above, and choose OAuth sign-in.
  3. Sign in and allowSign in to Keep This Day. You see exactly what the assistant can and cannot do, choose Allow, and you are back in the chat.

Then just tell it

Write the way you would to a friend who is helping. Do it all in one message, or a bit at a time. For example:

  • Make our wedding website. We’re Maya and Daniel, 12 June 2027, 4pm at The Garden Pavilion in Singapore. Soft and blue. Use this photo as the cover: https://…
  • Add these guests and put the Lim family at table 3. [paste your list or attach the spreadsheet]
  • Add a travel page and an FAQ with parking and dress code, then show me the preview.
  • Looks good. Publish it.
  • How many people are coming, and how many chose the fish?
  • It can create and change your website, set the cover photo, add guests, fill in trivia, favours and the guestbook note, show a preview and read RSVP totals.
  • It publishes only when you tell it to.
  • Guests see the day-of features (photo album, love notes, trivia and the rest) once you unlock them on keepthisday.com. The assistant never takes payment.
  • It cannot delete a wedding, remove guests, message your guests, take payments or see payment details.
  • It never shows guest names or contact details back in the chat. Read how guest details are handled in the privacy policy.

No connector? Copy and paste instead

This works with any assistant, including the free versions of ChatGPT, Claude and Gemini. Your AI asks you a few questions and writes your setup in one block of text. You paste it into Keep This Day, and your website fills in while you watch.

  1. Ask your AIGive it the prompt below. It asks about your names, date, venue, the feel you want and your story.
  2. Copy what it writesYou get one block of text (the wedding draft) and, if you shared a guest list, a spreadsheet block.
  3. Paste it at keepthisday.com/hostChoose “Paste from your AI”. Your website fills in live. Sign in, review and publish free.

The prompt to give your AI

Copy this into any assistant. It works even if the assistant cannot open links, because the format is included.

Prompt
I want to set up a free wedding website on Keep This Day (keepthisday.com) and I'd like your help writing the setup.

1. If you can open links, read the format first: https://keepthisday.com/ai (plain text: https://keepthisday.com/ai/wedding-draft.md, JSON Schema: https://keepthisday.com/ai/wedding-draft.schema.json). If you can't, use the summary below.
2. Interview me in a friendly way, a few questions at a time: our names, the date and time, the venue and its address, the feel we want (then pick the closest theme), how we met, the day's schedule, travel and stay tips, wedding party, FAQs, and what we want to ask guests when they RSVP (meal choices, dietary needs, song requests).
3. Don't invent anything. Leave out what I haven't told you. Write in our voice, plain and warm, with no slogans and no em dashes. Only set up the free website, RSVP and seating. Don't add photo albums, trivia or other day-of features.
4. When I say I'm ready, give me ONE JSON code block in this format. If I share a guest list, also give a second code block in CSV with the header name,side,group,table,seat,email,phone (side is bride, groom, both or neither).
5. Then tell me to paste it at keepthisday.com/host by choosing "Paste from your AI".

Format summary:
{
  "format": "keepthisday.wedding-draft", "version": 1,
  "couple": { "partner1": "", "partner2": "" },
  "date": "YYYY-MM-DD", "time": "HH:MM",
  "venue": { "name": "", "address": "", "map_url": "https://..." },
  "theme": "editorial | botanical | rose | midnight | azure | coral",
  "headline": "short welcome in the couple's words",
  "dress_code": "", "hashtag": "",
  "schedule": [ { "time": "4:30 PM", "title": "Ceremony", "note": "" } ],
  "pages": {
    "story": { "title": "", "body": "paragraphs separated by a blank line" },
    "travel": { "intro": "", "items": [ { "name": "", "detail": "", "url": "" } ] },
    "party": { "intro": "", "people": [ { "name": "", "role": "", "note": "" } ] },
    "todo": { "intro": "", "items": [ { "name": "", "detail": "", "url": "" } ] },
    "gifts": { "intro": "", "items": [ { "name": "", "detail": "", "url": "" } ] },
    "faq": { "items": [ { "q": "", "a": "" } ] }
  },
  "rsvp": { "deadline": "YYYY-MM-DD", "meals": [""], "dietary": true, "song": false,
            "questions": [ { "question": "", "kind": "text | choice", "options": [""], "required": false } ] },
  "seating": { "enabled": true, "note": "" },
  "guests": [ { "name": "", "side": "bride | groom | both | neither", "group": "", "table": "", "seat": "", "email": "", "phone": "" } ]
}

The rules

  • The draft covers the free website: its info pages, the RSVP form, find-your-seat and the guest list. The day-of features (guest photo album, love notes, voice messages, drawn portraits, trivia and favours, venue screen, check-in, gallery) have no fields in the draft and are never switched on by it. A connected assistant fills in trivia, favours and the guestbook note with its own day-of tool, and guests see them once the couple has unlocked the day-of features.
  • A draft never goes live by itself. After pasting, the couple reviews the preview, signs in and publishes. A connected assistant publishes only when the couple tells it to.
  • Leave out anything unknown instead of guessing. Unknown keys are ignored. Invalid values are skipped with a message, and the rest still loads.
  • Photos are not part of the draft. The couple adds a cover photo in the editor, or a connected assistant sets one from a photo link (a sample photo is used until then).
  • Guest details are personal information. They are never put in a link or sent anywhere until the couple has signed in, and are then saved through the normal guest list importer.
  • Dates are YYYY-MM-DD and times are 24-hour HH:MM. Links must be https. Colours are hex like #b85c7a.
  • Copy rules for everything guests read: plain and specific, in the couple's own words. No slogans, no em dashes.

The format

One JSON object, called a wedding draft. Only the couple’s names are required. Leave out anything that is not decided. Unknown keys are ignored. The machine-readable version is the JSON Schema, and the same page as plain text.

FieldTypeWhat it is
coupleobjectThe two people getting married.
couple.partner1text, up to 60Required. First partner's name as it should appear, e.g. "Maya".
couple.partner2text, up to 60Required. Second partner's name, e.g. "Daniel".
dateYYYY-MM-DDWedding date as YYYY-MM-DD. Leave out if it is not decided.
timeHH:MMStart time, 24-hour HH:MM, e.g. "16:30". Leave out if unknown.
venueobjectWhere it happens.
venue.nametext, up to 120Venue name.
venue.addresstext, up to 240Street address.
venue.map_urlhttps linkGoogle Maps or Apple Maps link (https).
themeeditorial | botanical | rose | midnight | azure | coralLook of the website. One of: editorial (Cloud), botanical (Something blue), rose (Blush), midnight (Afterglow), azure (Coast), coral (Terracotta).
appearanceobjectOptional fine-tuning on top of the theme. Leave out to keep the theme's own look.
appearance.fontserif | sans | scriptHeading font: serif (editorial), sans (modern), script (romantic).
appearance.layoutimmersive | framed | splitCover layout: immersive (full photo), framed, or split.
appearance.colorsobjectOnly set colours the couple actually asked for.
appearance.colors.background#rrggbbPage background, hex like #fff9f8.
appearance.colors.text#rrggbbText colour, hex.
appearance.colors.accent#rrggbbButtons and highlights, hex.
headlinetext, up to 300A short welcome shown on the cover, in the couple's own words. Plain, no slogans.
dress_codetext, up to 600Dress code, e.g. "Garden party, light colours".
hashtagtext, up to 60Wedding hashtag, if they have one.
schedule[]list of objectsThe day's schedule, in order. Up to 40.
schedule[].timetext, up to 20Display time, e.g. "4:00 PM".
schedule[].titletext, up to 120What happens, e.g. "Ceremony".
schedule[].notetext, up to 240Optional detail, e.g. "Doors open at 3:30 PM".
pagesobjectThe website's info pages. A page with content is switched on automatically.
pages.storyobjectOur story.
pages.story.ontrue | falseShow this page. Defaults to true when the page has content.
pages.story.titletext, up to 80Page title, e.g. "How we met".
pages.story.bodytext, up to 6000The story. Separate paragraphs with a blank line.
pages.travelobjectTravel and stay.
pages.travel.ontrue | falseShow this page. Defaults to true when the page has content.
pages.travel.introtext, up to 2000Intro text.
pages.travel.items[]list of objectsPlaces to stay or ways to get there. Up to 20.
pages.travel.items[].nametext, up to 120Name.
pages.travel.items[].detailtext, up to 1200A line or two of detail.
pages.travel.items[].urlhttps linkLink (https).
pages.partyobjectThe wedding party.
pages.party.ontrue | falseShow this page. Defaults to true when the page has content.
pages.party.introtext, up to 1000Intro text.
pages.party.people[]list of objectsThe people in the wedding party. Up to 40.
pages.party.people[].nametext, up to 80Name.
pages.party.people[].roletext, up to 60Role, e.g. "Best man".
pages.party.people[].notetext, up to 400A line about them.
pages.todoobjectThings to do nearby.
pages.todo.ontrue | falseShow this page. Defaults to true when the page has content.
pages.todo.introtext, up to 2000Intro text.
pages.todo.items[]list of objectsThings to see and do. Up to 30.
pages.todo.items[].nametext, up to 120Name.
pages.todo.items[].detailtext, up to 1200A line or two of detail.
pages.todo.items[].urlhttps linkLink (https).
pages.giftsobjectA note about gifts.
pages.gifts.ontrue | falseShow this page. Defaults to true when the page has content.
pages.gifts.introtext, up to 2000What the couple would like to say about gifts.
pages.gifts.items[]list of objectsRegistry or gift links. Up to 12.
pages.gifts.items[].nametext, up to 120Name.
pages.gifts.items[].detailtext, up to 1200A line or two of detail.
pages.gifts.items[].urlhttps linkLink (https).
pages.faqobjectQuestions and answers.
pages.faq.ontrue | falseShow this page. Defaults to true when the page has content.
pages.faq.items[]list of objectsQuestions guests ask. Up to 40.
pages.faq.items[].qtext, up to 200Question.
pages.faq.items[].atext, up to 2000Answer.
rsvpobjectWhat the RSVP form asks.
rsvp.enabledtrue | falseTurn online RSVP on. Defaults to true.
rsvp.deadlineYYYY-MM-DDReply-by date, YYYY-MM-DD.
rsvp.meals[]list of textMeal choices, if guests pick one. Up to 8.
rsvp.dietarytrue | falseAsk about dietary needs. Defaults to true.
rsvp.songtrue | falseAsk for a song request. Defaults to false.
rsvp.questions[]list of objectsYour own extra questions. Up to 10.
rsvp.questions[].questiontext, up to 200The question text.
rsvp.questions[].kindtext | choicetext for a free answer, choice for a list of options.
rsvp.questions[].options[]list of textOptions. Needed (2 or more) when kind is choice. Up to 8.
rsvp.questions[].requiredtrue | falseGuests must answer.
seatingobjectFind-your-seat. Guests search their name and see their table. Table numbers come from the guest list.
seating.enabledtrue | falseTurn find-your-seat on.
seating.notetext, up to 300A note shown above the seating search.
guests[]list of objectsOptional. Guests contain personal details: they are only saved after the couple signs in, through the guest list importer. Up to 1000.
guests[].nametext, up to 120Full name.
guests[].sidebride | groom | both | neitherWhose side. Leave out if unsure.
guests[].grouptext, up to 80Group, e.g. "College friends".
guests[].tabletext, up to 60Table name or number.
guests[].seattext, up to 30Seat.
guests[].emailtext, up to 200Email.
guests[].phonetext, up to 40Phone.

A complete example

wedding-draft.json
{
  "format": "keepthisday.wedding-draft",
  "version": 1,
  "couple": {
    "partner1": "Maya",
    "partner2": "Daniel"
  },
  "date": "2027-06-12",
  "time": "16:30",
  "venue": {
    "name": "The Garden Pavilion",
    "address": "12 Orchard Lane, Singapore 238801",
    "map_url": "https://maps.google.com/?q=The+Garden+Pavilion"
  },
  "theme": "botanical",
  "headline": "We are getting married and we would love you there. Find everything below.",
  "dress_code": "Garden party. Light colours please.",
  "schedule": [
    {
      "time": "3:30 PM",
      "title": "Guests arrive",
      "note": "Welcome drinks on the lawn"
    },
    {
      "time": "4:30 PM",
      "title": "Ceremony"
    },
    {
      "time": "6:30 PM",
      "title": "Dinner",
      "note": "Seated by table"
    }
  ],
  "pages": {
    "story": {
      "title": "How we met",
      "body": "We met in 2019 at a friend's housewarming.\n\nDaniel proposed on the same balcony five years later."
    },
    "travel": {
      "intro": "The venue has free parking.",
      "items": [
        {
          "name": "Hotel Orchard",
          "detail": "10 minutes away. Mention the wedding for a rate.",
          "url": "https://example.com/hotel"
        }
      ]
    },
    "faq": {
      "items": [
        {
          "q": "Can I bring a plus one?",
          "a": "Your invitation says who is invited."
        },
        {
          "q": "Is there parking?",
          "a": "Yes, free parking on site."
        }
      ]
    }
  },
  "rsvp": {
    "deadline": "2027-05-01",
    "meals": [
      "Beef",
      "Fish",
      "Vegetarian"
    ],
    "dietary": true,
    "song": true,
    "questions": [
      {
        "question": "Will you need a ride from the hotel?",
        "kind": "choice",
        "options": [
          "Yes",
          "No"
        ]
      }
    ]
  },
  "seating": {
    "enabled": true,
    "note": "Find your table before dinner."
  },
  "guests": [
    {
      "name": "Grace Tan",
      "side": "bride",
      "group": "College friends",
      "table": "6",
      "seat": "1",
      "email": "grace@example.com"
    },
    {
      "name": "Priya Nair",
      "side": "groom",
      "group": "Work",
      "table": "12"
    }
  ]
}

Themes

Set theme to one of these ids. Pick the closest to the feel the couple describes.

  • CloudeditorialWhite and deep navy, with periwinkle details.
  • Something bluebotanicalSoft blue with watercolour flowers.
  • BlushrosePale pink and raspberry.
  • AfterglowmidnightNear black and amber, for an evening wedding.
  • CoastazureSea glass and bright blue.
  • TerracottacoralWarm clay and dark cocoa.

The guest list

Guests can go inside the draft under guests, or in a separate spreadsheet block with these columns: name,side,group,table,seat,email,phone. It is the same list the guest list importer already reads, so you can also import it later from Guests in your dashboard.

  • The first row is the header. Only `name` is required.
  • `side` is bride, groom, both or neither (blank means both).
  • `group` is how the couple groups guests, for example Family or Work. It drives grouped check-in.
  • `table` and `seat` feed find-your-seat. Table labels are shown as written.
  • `email` and `phone` are used for invitations. Both are optional.
  • Up to 1,000 guests per wedding.
guests-template.csv
name,side,group,table,seat,email,phone
Grace Tan,bride,College friends,6,1,grace@example.com,+65 9123 4567
Daniel Lee,groom,Family,1,3,,
Priya Nair,both,Work,12,,priya@example.com,

Guest details are personal information. They are saved only after you sign in, and are never put in a link.

Questions

Do I need a paid plan or a plugin?

Keep This Day is free to set up and publish. Connecting needs an assistant that lets you add a custom connector, such as Claude or ChatGPT; whether your plan with them allows it is up to them. Copy and paste works with any assistant that can chat, including the free versions of ChatGPT, Claude and Gemini.

What can a connected assistant do?

List your weddings, create a website, change it, set the cover photo, add guests, fill in trivia, favours and the guestbook note, show you a preview, publish when you say so, and read RSVP totals. It works only on weddings on your own account.

Will it publish without asking?

No. It publishes only when you tell it to, and checks with you first. A pasted draft never goes live by itself either. Publishing the website and RSVPs is free.

How does it add my cover photo?

Give it a link to a JPEG, PNG or WebP photo, or attach the photo in ChatGPT. We download that one image and save it as your cover. You can change it any time in the editor.

Can it set up the photo album, trivia and other day-of features?

It can write your trivia questions, favours list and guestbook note, and turn the wedding-day sections on or off. Guests see the day-of features once you unlock them on keepthisday.com, which is a one-time upgrade. The assistant never takes payment. A pasted draft sets up the free website only.

What can it not do?

It cannot delete a wedding, remove guests, message your guests, take payments or see payment details. It never shows guest names, emails or phone numbers back in the chat.

What happens to my guest list?

With the connector, guests go straight into your own wedding’s guest list and are not repeated back. With copy and paste, the guests stay on your device until you have signed in, then go through the normal guest list importer. You can always skip the AI and import the CSV yourself.

What if my AI gets something wrong?

Each field is checked when it arrives. A wrong value is skipped with a clear message and everything else still loads. Every field can be edited afterwards in the editor, or ask your assistant to fix it.

Works with Claude and ChatGPT

Set it up with your AI

Connect Claude or ChatGPT to Keep This Day once, then tell it about your day. It builds the website, adds your cover photo and guest list, shows you a preview and publishes when you say so.

No connector? Open in ChatGPT, open in Claude or and paste the answer back here.