| Feature | Description |
|---|---|
| Solid Pod Storage | Your bookings live in your Pod, not on our server |
| End-to-End Privacy | Server acts as a broker, never as permanent storage |
| Email Notifications | Visitors and organizers receive confirmation emails with .ics |
| Conflict Detection | Real-time slot availability prevents double-booking |
| .ics Calendar Files | One-click import to Proton Calendar, Google Calendar, Outlook |
| Open Source | MIT licensed — self-host for free, forever |
1. Getting Started
1.1 Create a Solid Pod
Before using PodCal, you need a Solid Pod. This is where your data will be stored.
- Visit solidproject.org/users/get-a-pod
- Choose a provider (we recommend Inrupt PodSpaces)
- Create your account and Pod
- Note your WebID (e.g., https://id.inrupt.com/yourname)
1.2 Log In
- Go to app.podcal.eu
- Select your Solid Identity Provider from the dropdown
- Click Login with Solid
- Authenticate with your provider and grant PodCal access
- You'll be redirected to your dashboard
Once logged in, you'll see the Pod status bar at the top showing a green dot and "Pod Connected" with the last sync time.
2. Your Dashboard
The dashboard is your command center. It shows everything at a glance:
- Your Booking Link — the URL you share with others to schedule time with you
- This Week / This Month — booking statistics pulled from your database
- Pod Synced status — green checkmark when all bookings are synced to your Pod
- Weekly Availability — toggle days on/off and set your working hours
- Upcoming Meetings — your next 5 bookings with attendee names and times
2.1 Pod Status Bar
The status bar at the top tells you the health of your Pod connection:
- Green dot + "Pod Connected" — your session is active, bookings sync automatically
- Orange dot + "Pod Disconnected" — session expired, click "Reconnect Pod" to re-authenticate
- "Sync Now" button — manually trigger a sync of any pending bookings
- Sync count badge — shows how many bookings were synced in the last operation
3. Sharing Your Booking Link
Your public booking page is at app.podcal.eu/book/your-slug. Share this link via email, Slack, LinkedIn, or anywhere. Visitors don't need a Solid Pod or account — they just pick a time and fill in their details.
What visitors see
- Your name and meeting duration (e.g., "Jason Bourne • 30 min • Video Call")
- A calendar grid with available dates highlighted
- Time slots for the selected day (booked slots appear as unavailable)
- A simple form: name, email, and optional notes
- Confirmation screen with .ics download button
What happens after booking
- Visitor receives a confirmation email with meeting details and .ics attachment
- You receive an organizer notification email with attendee info and .ics
- The booking is saved to the database and synced to your Pod on next login
- The time slot becomes unavailable for other visitors (conflict detection)
4. Managing Your Availability
Your availability determines which time slots visitors can book.
On the Dashboard
- Toggle each day of the week on (available) or off (unavailable)
- Each day shows its time range (e.g., 09:00 → 17:00)
- Click "Save to Pod" to persist changes — you'll see "✓ Saved to Pod!" confirmation
In Settings
The Settings page offers more granular control:
- Your Name — displayed on the public booking page
- Email — used for organizer notifications
- Booking Slug — customizes your URL (e.g., /book/damien instead of /book/my-booking)
- Default Duration — 15, 30, 45, 60, or 90 minutes
- Timezone — defaults to your browser's timezone (e.g., Europe/Paris)
Click "Save Settings" and wait for the "✓ Saved!" confirmation.
5. Calendar Integration
PodCal generates standard .ics calendar files for every booking. These work with all major calendar apps.
Proton Calendar
- Open the confirmation email or download the .ics from the confirmation page
- In Proton Calendar, click the + button → "Import events"
- Select the .ics file and choose your calendar
- The booking appears with all details (time, attendee, notes)
Google Calendar
- Open the .ics file from your email — Google Calendar may import it automatically
- Or go to Settings → Import & export → select the .ics file
Apple Calendar / Outlook
Double-click the .ics file — it will open in your default calendar app and prompt you to add the event. The .ics includes timezone data (TZID=Europe/Paris) for correct display across regions.
6. Your Data & Privacy
PodCal is designed so you never have to trust us with your data.
| What | Where it lives | Who controls it |
|---|---|---|
| Calendar events & bookings | Your Solid Pod | You (full ownership) |
| Availability settings | Your Solid Pod + local cache | You (Pod is source of truth) |
| Account metadata | Our database (cloud only) | Us (deletable on request) |
| Payments | Stripe (PCI-compliant) | Stripe (independent controller) |
| Emails | Sent via Scaleway TEM | EU-hosted, GDPR-native, no logs retained |
Your Solid Pod URL: All your data is stored under https://storage.inrupt.com/[your-pod-id]/proton-scheduler/. This includes your availability settings (availability.ttl) and all bookings (bookings/*.ttl) as RDF Linked Data.
7. Pricing Plans
PodCal is free to self-host with full features. Our cloud service offers tiered plans:
| Plan | Features | Bookings | Price |
|---|---|---|---|
| Free (Self-hosted) | Full features | Unlimited | — |
| Free Cloud | 1 event type, branded | 25/month | €0 |
| Pro | Unlimited, CalDAV, webhooks | Unlimited | €8/mo |
| Business | Pro + API, analytics, teams | Unlimited | €16/mo |
All cloud plans include EU-hosted infrastructure (Scaleway, France), GDPR compliance, and Solid Pod integration.
8. Self-Hosting Guide
PodCal is open source (MIT license) and designed for easy self-hosting.
Requirements
- Docker and Docker Compose
- A domain name with DNS access
- A Solid Pod (free from Inrupt or any Solid provider)
- Optional: SMTP credentials for email notifications
Quick Start
git clone https://github.com/zerolimit-es/proton-scheduler cp .env.example .env # Edit .env with your domain, SMTP, and Stripe keys docker compose up -d # Set up SSL: certbot certonly --standalone -d yourdomain.com
Full deployment documentation is available in DEPLOYMENT.md in the repository.
9. Troubleshooting
Pod Disconnected
If you see an orange "Pod Disconnected" status, your Solid session has expired. Click "Reconnect Pod" or log out and log back in. Solid sessions typically last around 15 minutes.
Booking Failed
If a visitor sees "Booking failed", check that your server is running and the database is accessible. Logs are available via:
docker compose logs backend --tail 20
Email Not Received
Check your SMTP configuration in the .env file. Ensure your email provider's SMTP port (usually 587) is not blocked by your hosting provider's firewall.
Calendar Shows Wrong Time
PodCal includes timezone data (TZID=Europe/Paris) in .ics files. If times appear shifted, ensure your calendar app's timezone matches the timezone configured in Settings.
10. Getting Help
- GitHub Issues: github.com/zerolimit-es/proton-scheduler/issues
- Email: scheduler@zerolimit.es
- Website: podcal.eu