The project's README from github.com/nateherkai/snagtime. As one markdown file: README.md.
Snag a time. Get booked.
A free, self-hostable scheduling app for availability, booking links, calendar sync, email notifications, and test payments.
SnagTime gives you the source code for your own scheduling system. You can run it locally for free, customize it, and host it on infrastructure you control.
You can give an AI coding assistant this repository URL and have it handle the local installation while it pauses for the account steps only you can complete.
Open AI-assisted setup, copy the student prompt, and paste it into Codex or Claude Code with this repository link:
https://github.com/nateherkai/snagtime
The guide separates the credential-free local demo, optional integrations, and advanced public deployment so the assistant does not pull you into infrastructure work before the app runs locally.
git clone https://github.com/nateherkai/snagtime.git
cd snagtime
npm run setup
The setup command creates an ignored .env.local, generates independent cryptographic secrets, and prints the local demo login once. You can provide your own organizer login instead:
npm run setup -- --email [email protected] --password "YourStrong!Password7"
npm run demo:free
Open http://localhost:3000 and use the login printed by the setup command.
The credential-free local mode uses SQLite, a local calendar adapter, a local email inbox, and stub payments. It does not call Google or Stripe.
Copying the repository gives you all of the software. External integrations still belong to you and must be configured with your own accounts.
| Capability | What you provide | Required for local demo? |
|---|---|---|
| Database | Nothing for SQLite, PostgreSQL for production | No |
| Public hosting | HTTPS domain plus a long-running Node web service and worker | No |
| Google Calendar | OAuth client ID and client secret | No |
| Transactional email | SMTP host, user, password, and verified sender domain | No |
| Stripe payments | Stripe test secret, publishable key, and webhook secret | No |
See Integration setup for exact callback URLs, environment variables, and verification steps.
SnagTime is a dynamic application, not a static website. It needs server-side Node.js execution, a persistent database, webhook endpoints, and a continuously running background worker.
The full production architecture is intentionally strict. It uses PostgreSQL 18, forced row-level security, separate app and worker credentials, verified database TLS, and authenticated proxy ingress. Read Deployment guide before choosing a host.
The SnagTime source code is free under the MIT License. Running it locally can also cost nothing.
A public deployment can still create third-party costs:
Google OAuth credentials can be created without paying SnagTime. Stripe test mode is free for testing. This release deliberately rejects Stripe live-mode keys, so do not advertise it as a live payment processor without implementing and auditing live-mode support.
npm run setup # Create .env.local and local credentials
npm run setup:check # Validate the credential-free local configuration
npm run demo:free # Install, migrate, seed, and run the free local demo
npm run dev # Run the configured local development server
npm run test # Run the unit and contract test suite
npm run typecheck # Check TypeScript
npm run lint # Run ESLint
npm run build # Create the Next.js production build
npm run ci:secret-scan # Scan public source files for credential patterns
Database commands:
npm run db:generate
npm run db:migrate
npm run db:seed
npm run db:reset destroys the local SQLite database. Use it only when you intentionally want a clean demo.
apps/web/ Next.js application and API routes
apps/web/public/ SnagTime logo and icon
prisma/ SQLite schema, PostgreSQL schema, and migrations
scripts/ Setup, database, worker, security, and verification tools
infrastructure/ PostgreSQL container hardening
tests/ Browser and end-to-end tests
docs/ Setup, deployment, and brand documentation
The local SQLite experience and integration test paths are designed for demos, development, and personal experimentation. The production architecture is an advanced self-hosting path, not a one-click managed service. You are responsible for infrastructure security, backups, provider configuration, deliverability, compliance, and ongoing operations.
Please read Security before exposing a deployment publicly.
Issues and pull requests are welcome. See CONTRIBUTING.md.
SnagTime is available under the MIT License.