What is PodCal? An open-source, privacy-first alternative to Calendly. Your scheduling data is stored in two places: an encrypted EU-hosted database for fast access, and your personal Solid Pod as a permanent copy you fully own. You can wipe the cloud copy at any time. MIT licensed, self-hostable, and free forever.
FeatureDescription
Dual StorageEncrypted EU cloud for speed + your Solid Pod as a permanent copy you own
Built-in CalendarFull calendar view at calendar.podcal.eu — no external app needed
Email NotificationsVisitors and organizers receive confirmation emails with .ics
Conflict DetectionReal-time slot availability prevents double-booking
Recurring BookingsDaily, weekly, bi-weekly, or monthly recurrence with configurable count
Team SchedulingRound-robin, collective, or managed assignment — Pro (5 members), Business (10 members)
Custom BrandingLogo, colors, and themes on your booking page (Pro plan)
.ics Calendar FilesOne-click import to Google Calendar, Outlook, Apple Calendar, and more
Open SourceMIT 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.

  1. Visit solidproject.org/users/get-a-pod for the full list of providers
  2. Choose a provider — popular options include Inrupt PodSpaces (US/EU/APAC), solidcommunity.net (UK), solidweb.org (EU), trinpod.eu (EU), or use.id (EU)
  3. Create your account and Pod
  4. Note your WebID (e.g., https://id.inrupt.com/yourname)
💡 Already have a Pod? PodCal works with any Solid-compatible provider. The login page lists 12+ providers, or you can enter a custom IDP URL for self-hosted servers.

1.2 Log In

  1. Go to app.podcal.eu
  2. Select your Solid Identity Provider from the dropdown
  3. Click Login with Solid
  4. Authenticate with your provider and grant PodCal access
  5. 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:

2.1 Pod Status Indicator

A small dot in the top-left of the dashboard shows your Pod connection status:

💡 How sync works: Pod sync is invisible infrastructure — it happens automatically. When a visitor books a slot, the booking is saved to the encrypted EU cloud database for instant availability. On login, all unsynced bookings are automatically pushed to your Solid Pod as a permanent copy you own. If your Pod session expires (~15 min), the app continues seamlessly from the cloud database and re-syncs on next login. No manual action needed.

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

What happens after booking

4. Managing Your Availability

Your availability determines which time slots visitors can book.

On the Dashboard

In Settings

The Settings page offers more granular control:

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.

  1. Go to Settings → General Features → Security
  2. Click Register Passkey and optionally enter a device name (e.g., "MacBook Touch ID")
  3. Complete the biometric or security key verification in your browser
  4. Your passkey is now registered — on your next login, you'll see a "Passkey Verification" screen after authenticating with your Solid provider
💡 Passkeys are free for all users. You can register multiple passkeys (e.g., laptop + phone + YubiKey). Removing your last passkey disables MFA. Supported methods include Touch ID, Windows Hello, Face ID, and hardware security keys.

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

  1. Open the confirmation email or download the .ics from the confirmation page
  2. In Proton Calendar, click the + button → "Import events"
  3. Select the .ics file and choose your calendar
  4. The booking appears with all details (time, attendee, notes)

Google Calendar

  1. Open the .ics file from your email — Google Calendar may import it automatically
  2. 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.

WhatWhere it livesWho controls it
Calendar events & bookingsEncrypted EU cloud + your Solid PodYou (Pod copy is yours forever; cloud copy wipeable on request)
Availability settingsEncrypted EU cloud + your Solid PodYou (Pod is source of truth)
Account metadataEU cloud databaseUs (deletable on request)
PaymentsStripe (PCI-compliant)Stripe (independent controller)
EmailsSent via Scaleway TEMEU-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.

💡 Why two copies? The encrypted cloud database powers real-time availability, conflict detection, and the calendar view. Your Solid Pod is your personal archive — a copy you fully own and control, independent of PodCal. If you ever leave PodCal, your Pod keeps everything.

7. Pricing Plans

PodCal is free to self-host with full features. Our cloud service offers tiered plans:

PlanFeaturesBookingsPrice
Free (Self-hosted)Full featuresUnlimited
Free Cloud1 event type, PodCal branding25/month€0
ProUnlimited events, built-in calendar, custom branding, webhooks, team scheduling (5 members)Unlimited€8/mo
BusinessPro + API, analytics, 10 team members, custom domainUnlimited€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

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