
Deploy Cal.com | (Just Updated) Calendly Alternative Nobody Else Can Claim First
Admin seeded before first boot, so no stranger can claim your instance.
postgres
Just deployed
/var/lib/postgresql
Just deployed
Deploy and Host Cal.com on Railway
Cal.com is the open-source Calendly alternative: booking pages, availability rules, buffers, round-robin and collective events, team scheduling, calendar sync (Google, Outlook, CalDAV), payments, workflows and a full REST API — running on your own domain, with your own database.
This template deploys Cal.com with the administrator account already created. On a stock
Cal.com deployment nobody is created at all, and POST /api/auth/setup — the route that makes
the first admin — has no authentication of its own; its only gate is prisma.user.count() !== 0.
Whoever reaches the public URL first becomes the instance owner, and everyone after them gets
400 "No setup needed." forever, with no password reset path that works without SMTP. Here the
admin is seeded from the deploy's own generated secret before the web server binds a port, so
the very first request the domain ever serves already meets a claimed instance.
About Hosting Cal.com
Cal.com is a Next.js application backed by PostgreSQL. It migrates its schema forward on every boot and seeds its app store, so the first deploy takes several minutes before it answers; after that it is a single long-lived web service. All state — users, bookings, availability, calendar credentials, avatars — lives in PostgreSQL, so the app itself needs no volume and the database is the only thing to back up.
This template runs two services: the Cal.com web app on a pinned upstream release
(v6.2.0), and PostgreSQL 17 on a persistent volume. The app image is a thin wrapper that seeds
the administrator, closes public sign-up, re-applies the admin password on every boot, refuses to
start with an empty admin password, and passes the platform's injected PORT through to Next.js
(Turborepo 2's strict env mode otherwise drops it and the app binds 3000 regardless).
Why Deploy Cal.com on Railway?
Railway is a singular platform to deploy your infrastructure stack. Railway will host your infrastructure so you don't have to deal with configuration, while allowing you to vertically and horizontally scale it.
By deploying Cal.com on Railway, you are one step closer to supporting a complete full-stack application with minimal burden. Host your servers, databases, AI agents, and more on Railway.
Cal.com in particular benefits: the private network wires the app to PostgreSQL with no exposed database port, the generated domain becomes the booking URL automatically, and a redeploy is how you rotate the admin password — this image re-applies it from the environment on every boot.
Common Use Cases
- Replace Calendly with a self-hosted booking page on your own domain, at no per-seat cost.
- Run team scheduling — round-robin sales calls, collective interviews, managed event types.
- Embed booking into a product or website, or drive it from Cal.com's REST API.
- Keep client scheduling data (names, emails, meeting notes) inside infrastructure you control.
Dependencies for Cal.com
- PostgreSQL 16 or newer, deployed by this template as a second service on a volume.
Deployment Dependencies
- Cal.com source and documentation: https://github.com/calcom/cal.diy
- Self-hosting guide: https://cal.com/docs/self-hosting/installation
- Wrapper image built for this template: https://github.com/bon5co/calcom-railway
After deploying
- Open the deployment's Variables tab and copy
CALCOM_ADMIN_EMAILandCALCOM_ADMIN_PASSWORD— that is your login, and it already exists. - Sign in at
/auth/loginand change the email address to your own under Settings → Profile. - To rotate the password later, edit
CALCOM_ADMIN_PASSWORDand redeploy; the new value is applied on boot. - Public sign-up is disabled (
NEXT_PUBLIC_DISABLE_SIGNUP=true). Invite the people you want from Settings → Teams, or set that variable tofalseif you deliberately want an open instance. - Optional: set
EMAIL_FROMand theEMAIL_SERVER_*variables to send booking confirmations, and add Google/Microsoft credentials for calendar sync.
Template Content
postgres
postgres:17-alpine