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
| Checkout | Guest 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
| Checkout | Guest 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
| Checkout | Guest 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.