Turnsweep test calendars

Booking feeds that move with the calendar. Every date below is relative to today (2026-10-14), so the schedule always has a clean today, a same-day changeover and a quiet week in it.

Lakeside Cabin

A busy property. Somebody checks out today, and there are two same-day changeovers in the first week.

https://turnsweep-test-feed.pages.dev/feeds/lakeside.ics
CheckoutGuest leaving
2026-10-14 Mara Weiss same-day
2026-10-16 Tomas Lind same-day
2026-10-20 Priya Raman clear
2026-10-26 Jonah Feld same-day
2026-11-02 Ines Almeida clear

Harbour Flat

A quiet one. A week-long stay and then nothing for a fortnight, so the schedule has somewhere to be empty.

https://turnsweep-test-feed.pages.dev/feeds/harbour.ics
CheckoutGuest leaving
2026-10-22 Ruth Okonkwo clear
2026-10-30 Karl Andersen clear

Attic Studio

The shapes that break parsers. Read the notes before wondering why the turnover count does not match the event count.

https://turnsweep-test-feed.pages.dev/feeds/edge.ics
CheckoutGuest leaving
2026-10-16 Sam Ito clear
2026-10-21 Overlap One clear
2026-10-23 Overlap Two clear
2026-10-27 Wen Zhao clear
2026-11-01 No Identity clear

Sandbox

The one you can edit while the app is watching. Its URL never changes and its contents do, which is the only way to test a poll rather than test adding a calendar. It can also be made to fail: 500, 404, a body that is not a calendar, an empty one, or a request that never comes back.

https://turnsweep-test-feed.pages.dev/feeds/sandbox.ics

Open the panel. Changes there reach the feed within a minute; the state is in Workers KV, which is eventually consistent.

Changing what the feed says

Add these to one of the three preset feeds above. They change the URL, which means the app treats the result as a different calendar: fine for looking at a shape, no use for watching one change. That is what the sandbox and its panel are for.

?drop=c
Cancels that booking. The next poll prunes the reservation and the turnover behind it. Comma-separate for several.
?extend=d:2
The guest moves their checkout two days later. The reservation keeps its id, so the turnover should move rather than being cancelled and recreated, taking its assignment and checklist with it. A negative number brings the checkout forward.
?platform=booking
Emits that platform's dialect: airbnb, booking, vrbo. Booking.com is the one that differs most, with a bare UID and the summary "CLOSED". Note the app reads the platform off the URL's host, so a feed served from here is always labelled "Other".
?today=2026-09-01
Pins the anchor, which makes a run reproducible.
?as=json
What the feed says, without reading raw iCalendar.

Two things worth knowing

The Attic Studio feed carries one event with no UID. The server's parser skips it, because a reservation with no stable identity cannot be matched on the next poll; the phone's library invents one instead. So that feed produces one more turnover when a device syncs it than when the backend does. That divergence is real and this is where to see it.

The tight-window warning is a property setting, not a feed one. It fires when the cleaning time is longer than the gap between checkout and the next check-in, so with the default 11:00 and 15:00 you need cleaning set above four hours to see it.