| Feature | Description |
|---|---|
| Dual Storage | Encrypted EU cloud for speed + your Solid Pod as a permanent copy you own |
| Built-in Calendar | Full calendar view at calendar.podcal.eu — no external app needed |
| Email Notifications | Visitors and organizers receive confirmation emails with .ics |
| Conflict Detection | Real-time slot availability prevents double-booking |
| Recurring Bookings | Daily, weekly, bi-weekly, or monthly recurrence with configurable count |
| Team Scheduling | Round-robin, collective, or managed assignment — Pro (5 members), Business (10 members) |
| Custom Branding | Logo, colors, and themes on your booking page (Pro plan) |
| .ics Calendar Files | One-click import to Google Calendar, Outlook, Apple Calendar, and more |
| 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 for the full list of providers
- Choose a provider — popular options include Inrupt PodSpaces (US/EU/APAC), solidcommunity.net (UK), solidweb.org (EU), trinpod.eu (EU), or use.id (EU)
- 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 (e.g.,
jason.podcal.eu) - Calendar View — full calendar at calendar.podcal.eu showing all your bookings
- This Week / This Month — booking statistics
- 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 Indicator
A small dot in the top-left of the dashboard shows your Pod connection status:
- Green dot + "Pod synced" — your Solid Pod is connected and data is backed up
- Orange dot + "Pod offline" — Pod unreachable, but your data is safe in the encrypted cloud database and will sync automatically when reconnected
3. Sharing Your Booking Link
Your public booking page is at your-slug.podcal.eu (e.g., jason.podcal.eu). 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, avatar, and meeting details (e.g., "Jason Bourne • 30-min consultation • Video call")
- A calendar grid with available dates highlighted
- Time slots for the selected day (booked slots appear struck-through)
- A simple form: name, email, optional notes, and recurrence options
- Optional team member selection (Business plan)
- 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 encrypted EU cloud database and synced to your Solid Pod
- 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 enabled day shows its time windows (e.g., 9:00 AM → 12:00 PM)
- Click + Add window to create split schedules — for example, a morning block (9 AM–12 PM) and an afternoon block (2–5 PM) with a lunch break
- Remove extra windows with the trash icon (minimum one window per enabled day)
- 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 subdomain (e.g.,
damien.podcal.eu) - Booking Page Title — optional display name shown as the heading on your public booking page (e.g., "30-Minute Consultation")
- Default Duration — 15, 30, 45, 60, 90, or 120 minutes
- Minimum Notice — require advance time before someone can book (none, 1–48 hours)
- Maximum Advance — limit how far into the future bookings are allowed (7–90 days)
- Location — meeting location or video call link shown on booking page
- Timezone — defaults to your browser's timezone (e.g., Europe/Paris)
- Custom Branding — logo, primary/accent colors, and light/dark theme (Pro plan)
Click "Save Settings" and wait for the "✓ Saved!" confirmation.
Passkey MFA (Multi-Factor Authentication)
PodCal supports optional passkey-based MFA using WebAuthn. Once enabled, you'll be prompted for your passkey after every Solid OIDC login — adding a second layer of security.
- Go to Settings → General Features → Security
- Click Register Passkey and optionally enter a device name (e.g., "MacBook Touch ID")
- Complete the biometric or security key verification in your browser
- Your passkey is now registered — on your next login, you'll see a "Passkey Verification" screen after authenticating with your Solid provider
5. Calendar Integration
Built-in Calendar
PodCal includes a full calendar view at calendar.podcal.eu. Once logged in, you can see all your bookings in a day, week, or month view — no external calendar app needed. The calendar shows attendee names, durations, and meeting details at a glance.
External Calendar Apps
PodCal also 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 uses a dual-storage architecture: an encrypted EU cloud database for speed and real-time features, plus your Solid Pod as a permanent copy you fully own.
| What | Where it lives | Who controls it |
|---|---|---|
| Calendar events & bookings | Encrypted EU cloud + your Solid Pod | You (Pod copy is yours forever; cloud copy wipeable on request) |
| Availability settings | Encrypted EU cloud + your Solid Pod | You (Pod is source of truth) |
| Account metadata | EU cloud database | 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: Your permanent data copy 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, PodCal branding | 25/month | €0 |
| Pro | Unlimited events, built-in calendar, custom branding, webhooks, team scheduling (5 members) | Unlimited | €8/mo |
| Business | Pro + API, analytics, 10 team members, custom domain | 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/solid-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/solid-scheduler/issues
- Email: scheduler@zerolimit.es
- Website: podcal.eu