Plan smarter, rest longer!
A calendar tool that helps families in Switzerland, Germany, and France optimize their vacation planning when family members work or attend school in different regions. Parents and children each have different holiday schedules (public holidays, school holidays, university holidays) depending on their region and municipality — HCP visualizes all of them on one calendar so you can find the best overlapping days off.
Browser-based, offline-first, all data stored locally in IndexedDB.
Live Demo with sample family — click to see a pre-filled calendar with a Swiss family across multiple cantons.
Just open hcp.sysop.cat in your browser — no installation, no account, no setup needed.
All your data is stored locally in your browser's cache (IndexedDB). Nothing is sent to any server — everything stays on your computer. If you clear your browser data or switch to a different device, your calendar will be empty again.
Remember to make backups! Use the Backup button to download a JSON file with all your data. You can restore it anytime with the same button. This is the only way to transfer your calendar between devices or protect it from being lost.
Add each family member — parents, children, grandparents — and assign their municipality (Gemeinde). The app automatically knows which public holidays, school holidays, or university holidays apply to each person based on their canton.
There are three types of people you can add:
- Workers — sees the official public holidays for their canton
- School pupils — sees school holidays and public holidays combined
- Students — sees university holidays and public holidays combined
Each person gets their own color on the calendar, so you can tell at a glance who has time off and who doesn't.
The full year is displayed on a single page. Holidays from the database are shown as solid colored blocks; holidays you add manually appear with a striped pattern so you can tell them apart. You can switch between different layouts (3x4, 2x6, 4x3, 6x2, 1x12, 12x1) to find the view that works best for your screen.
Add leave periods and assign them to one or more family members. The calendar shows vacation bars so you can immediately see where everyone's time off overlaps — that's where you want to plan your family trips.
The app calculates the net number of working days for each person, excluding weekends and all applicable holidays. Useful when you need to plan how many vacation days to request from your employer.
German, French, Italian, and English — the app auto-detects your browser language.
Share your entire calendar setup with family members via a compressed URL link. They can open it in their browser and see the same view. You can also export a PDF with a QR code for easy sharing on paper.
Previously, you could share your calendar via a simple link. Now you can go a step further with Family Sync — optional end-to-end encrypted synchronization that combines the convenience of live sync with absolute privacy.
What changed? Before, you shared a one-time snapshot of your calendar. The new E2EE Family Sync creates a secure, persistent connection:
- Your data, your ownership. In E2EE mode, data is encrypted before it ever leaves your browser. The encryption key is generated locally on your device — only you decide who receives it.
- Secure sync across apps. Because the key travels inside the family code, you can add your calendar to Outlook, Gmail, or other apps. They display your events, but nobody in between — not even us as developers — can read them.
- Powered by Cloudflare KV. We use Cloudflare's fast, globally distributed key-value store so your sync is near-instant on every device.
Why choose E2EE? A plain share link is convenient, but E2EE is like a door with your own lock. Even if someone intercepted the encrypted data on the server, without the key — which only you and the people you shared it with hold — they would see nothing but random noise.
Important notes:
- Guard your family code. If you lose it and have no backup, access cannot be recovered — the data is encrypted so thoroughly that we cannot see it either.
- Automatic clean-up. E2EE calendars that are unused (no sync activity) for 180 days are automatically deleted to keep things tidy and secure.
sequenceDiagram
participant A as Person A (Creator)
participant S as Server (sees only 🔒 blobs)
participant B as Person B (Joiner)
A->>A: Click "Family Sync" → Create
A->>A: App generates Key + Calendar ID
A->>A: Encrypts calendar data with Key
A->>S: Uploads encrypted blob 🔒
A->>B: Shares family code (hcp_xxxxx_xxxxx)
B->>B: Click "Family Sync" → Join
B->>B: Pastes family code
B->>S: Downloads encrypted blob 🔒
B->>B: Decrypts with Key from family code
B->>B: Merges with own data
B->>S: Uploads merged encrypted blob 🔒
Everything is stored locally in your browser (IndexedDB). No account needed, no server, works completely offline. Use the Backup/Restore feature to save or transfer your data as a JSON file.
When you switch to a new year, all your people and their holiday assignments carry over automatically — no need to set everything up again.
- Installation & Development
- Data Sources & Generation
- Sharing & Sync Guide
- Frequently Asked Questions (FAQ)
- Technical Architecture
Version is displayed in the header badge, taken from git describe --tags at build time.
git tag v0.2.0
npm run build # version appears as v0.2.0- Vanilla JS + Vite
- IndexedDB (via
idb) - CSS Grid / Flexbox
- Docker + nginx + GoAccess
GNU Affero General Public License v3.0 — free to use, modify, and distribute, but any modified version offered over a network must also be open-sourced under AGPL-3.0.
Copyright (c) 2026 dzaczek
