Two Windmill raw apps to run a private dinner: build the guest list, send the invitations, collect RSVPs, seat everyone, follow up.
diner_tracker — private tracker: guests, tasks, decisions, restaurants, map,
email templates, seating plan.public/dinner_invite — public invitation page. One link per guest, FR/EN,
RSVP, calendar invite, confirmation email.Optional: dinner_apollo_search and dinner_apollo_enrich find contacts through Apollo.
1. Tables. Both apps use the main datatable, schema diner. Apply the files in
schema/ in order.
2. Resources. Create them in Windmill, then put their paths in diner.settings:
| type | setting | used for |
|---|---|---|
resend | resend_resource | confirmations, reminders, thank-you |
discord_webhook | discord_resource | RSVP notifications |
apollo | apollo_resource | the two Apollo scripts |
3. Settings. Fill diner.settings with your event: event_title, event_start /
event_end (ICS format, e.g. 20260923T180000Z), the venue (venue_name,
venue_address, venue_lat / venue_lng…), the host (host_name, contact_email)
and the sender (mail_from, mail_cc, mail_reply_to).
4. Publish the invitation page. Deploy public/dinner_invite, then put its URL in
invite_url. Each guest's link is that URL plus ?t=<invite_token>.
Add guests in the tracker. From the Email tab, write your templates (FR and EN) and
draft each invitation: it opens Gmail pre-filled, no OAuth needed. When a guest says
yes, the team gets a Discord message and the guest a confirmation with a .ics.
seat_cap closes the list once that many guests have accepted.