Simple, free & open source group scheduling — without the noise.
When helps you find the best date for a group — fast.
Create a schedule, mark the days you’re available, and instantly see what works best for everyone.
No time slots. No premium plans. No hidden costs.
Scheduling shouldn’t feel like project management.
When takes a deliberately minimal approach:
- 🗓️ Select days only — no specific time slots
- 🚀 Create unlimited schedules
- 👥 Invite unlimited participants
- 💸 100% free & Open Source
- ⚡ Clean, focused and distraction-free
Instead of micromanaging hours and minutes, you simply mark the days you're available. That’s it.
Most scheduling tools ask you to define exact time slots.
When does the opposite.
You only select the days you’re available.
No hours. No complexity. Just clarity.
This keeps planning:
- Faster
- Easier
- More flexible
- Perfect for casual meetups, team events, or group planning
An account ensures:
- You can edit your availability anytime
- Nobody can vote in your name
Authentication currently supports:
- Google OAuth
- GitHub OAuth
Yes.
There are no limits on:
- Participants
- Selectable days
- Number of schedules
Whether you're planning with 5 or 50 people — it works the same.
The project is currently hosted on Vercel and uses Neon as its database.
Check it out at https://when-sepia.vercel.app/
You can easily run your own instance of When.
There are two ways to do this:
- Build from source (recommended for development)
- Docker (recommended for production)
Please make sure to set the environment variables:
| Variable | Description | Example value |
|---|---|---|
| NUXT_SESSION_PASSWORD | Secret used to encrypt user sessions. | 3c9c6c7a7c0f8f5d9e4f8a7c6d5b4a3e |
| NUXT_OAUTH_GOOGLE_CLIENT_ID | Google OAuth client ID. | 123456789012-abc123def456.apps.googleusercontent.com |
| NUXT_OAUTH_GOOGLE_CLIENT_SECRET | Google OAuth client secret. | GOCSPX-abc123def456ghi789 |
| NUXT_OAUTH_GOOGLE_REDIRECT_URL | Redirect URL for Google OAuth login. | https://example.com/auth/google |
| NUXT_OAUTH_GITHUB_CLIENT_ID | GitHub OAuth client ID. | Iv1.1a2b3c4d5e6f7g8h |
| NUXT_OAUTH_GITHUB_CLIENT_SECRET | GitHub OAuth client secret. | gho_1234567890abcdef1234567890abcdef |
| NUXT_OAUTH_GITHUB_REDIRECT_URL | Redirect URL for GitHub OAuth login. | https://example.com/auth/github |
| DATABASE_URL | PostgreSQL database connection string. | postgresql://postgres:password@localhost:5432/mydb |
Example .env file
NUXT_SESSION_PASSWORD=3c9c6c7a7c0f8f5d9e4f8a7c6d5b4a3e
NUXT_OAUTH_GOOGLE_CLIENT_ID=123456789012-abc123def456.apps.googleusercontent.com
NUXT_OAUTH_GOOGLE_CLIENT_SECRET=GOCSPX-abc123def456ghi789
NUXT_OAUTH_GOOGLE_REDIRECT_URL=https://example.com/auth/google
NUXT_OAUTH_GITHUB_CLIENT_ID=Iv1.1a2b3c4d5e6f7g8h
NUXT_OAUTH_GITHUB_CLIENT_SECRET=gho_1234567890abcdef1234567890abcdef
NUXT_OAUTH_GITHUB_REDIRECT_URL=https://example.com/auth/github
DATABASE_URL=postgresql://postgres:password@localhost:5432/mydbgit clone https://github.com/matthiashermsen/when.git
cd whennpm installnpm run buildBefore starting the application, make sure you have configured the required environment variables as described above.
node .output/server/index.mjsmkdir -p ./data/db- Ensures PGlite and session storage can create their files
- Data will persist even if the container is removed
docker pull ghcr.io/matthiashermsen/when:latestStart the container and provide the required environment variables as described above
docker run -p 8080:3000 \
-v $(pwd)/data:/app/.data \
-e NUXT_SESSION_PASSWORD=your-secret \
-e ... \
ghcr.io/matthiashermsen/when:latest- The volume mount ensures
.datapersists between container restarts. - The
./data/dbfolder prevents the ENOENT error for PGlite.
When is currently feature complete.
That means:
- The core idea is fully implemented
- It works as intended
- It is usable in production
However:
This is still an MVP.
The architecture, UI, or implementation details may evolve in the future. Additional features are possible.
Pull Requests are very welcome.
If you have:
- Feature ideas
- UX improvements
- Bug reports
- Performance suggestions
Please open an issue or PR on GitHub.
Since this is a hobby project, immediate implementation cannot be guaranteed — but every idea is appreciated.
when started as a personal project. It’s intentionally simple.
No growth hacking. No paywalls. No feature overload.
Just a small, focused tool that solves one problem well:
Finding a date that works for everyone.
MIT - Feel free to use, modify, and improve.
Happy scheduling.