This calendar is for above-the-day planning: seeing which weeks are free, how holidays and trips overlap, and how to connect public holidays into longer breaks. It reads your existing calendars so you don’t have to maintain anything separately.
- Settings
- Click ⚙ in the header bar to open the settings panel. All configuration — holidays, calendars, filters, and sharing — lives here. Close it by clicking ×, pressing Escape, or clicking outside the panel.
- Year navigation
- Use the < and > buttons in the header bar to move between years. When you have URL-based calendars loaded, a ↻ refresh button appears — click it to re-fetch all calendar URLs.
- Holidays
- In settings, choose your country from the Holidays dropdown. The selection is saved and holiday data is cached locally for 30 days. Hover over any red-numbered day in the grid to see the holiday name.
- Calendars
- You can configure up to 6 calendars. Each calendar has:
a name you can edit,
a status (Committed or Possible),
and a source dropdown:
URL — enter a webcal:// or https:// link and click Fetch;
File — upload a .ics file from your computer;
Demo — load sample data (first two calendars only);
Clear — remove loaded events.
Click + Add Calendar to add more (up to 6 total). Each calendar is assigned a unique color automatically. URLs are saved and automatically reloaded on your next visit.
- Event filtering
- The calendar is designed for multi-day all-day events (trips, conferences, vacations). If you load a shared calendar that also contains appointments and single-day events, those are filtered out by default. Two checkboxes in settings control what appears:
Include single-day all-day events — shows events like birthdays and holidays that span exactly one day;
Include recurring all-day events — expands recurring events (e.g., weekly team days) to show all occurrences. The first occurrence of any recurring event always appears regardless of this setting.
- Reading the grid
- Each row is one ISO week (Mon–Sun). The legend bar above the grid explains all visual conventions:
Red text = public holiday (hover for name).
Blue background = first of the month.
Green = committed event day.
Yellow = possible event day.
Green + yellow border = both committed and possible events overlap on that day.
Enable High contrast grid in settings for a color-blind friendly palette with added border cues.
- Reading the event columns
- Two columns beside the grid list events active each week: Committed and Possible.
Each event shows a colored shape matching its calendar — ■ square for committed calendars, ● circle for possible calendars — followed by the event name, start date, and end date.
Events that continue from a previous week appear dimmed.
When a week has multiple events in one column, a ▸ toggle appears in the spacer — click it to expand and see all events.
- Font size
- Use A− / A+ in the header bar to adjust the font size across the entire page. Range: 10–24px.
- Printing
- All controls and this help section are hidden when you print. Colors are preserved.
- Accessibility
- Calendar colors use a CVD-safe (color-blind friendly) palette. Event types are distinguished by shape: ■ square for committed, ● circle for possible. The High contrast grid option in settings replaces the default green/yellow/red grid colors with higher-contrast alternatives and adds border cues. All interactive elements are keyboard-accessible.
- Sharing
- When you have URL-based calendars loaded, a Share button appears in settings. Click it to copy a link that pre-configures the app with your calendar URLs, names, colors, and country. The link encodes your settings in the URL fragment (
#), which never leaves your browser — it is not sent to any server. If you also have a file-based calendar loaded, you’ll need to share that file separately.
Privacy & data
- Your data stays in your browser
- This app stores your preferences (country, calendar configurations) and cached holiday data in your browser's local storage. This data is purely functional — it exists so the app works between visits. It is not used for tracking, analytics, or advertising, and is never sent to third parties.
- Calendar URL proxy
- When you fetch a calendar by URL, the request is routed through this site's server to work around browser security restrictions (CORS). The server forwards the request to your calendar provider and returns the data to your browser. The server does not store, log, or retain your calendar URLs or event data. If your URL contains authentication tokens (as iCloud URLs do), be aware the server briefly sees them in transit.
- Holiday API
- Holiday data is fetched from Nager.Date, a free public API. Requests go directly from your browser to their servers. Results are cached in your browser for 30 days to minimize API calls.