SwiftCal lets you forward emails to a special address and have them automatically added to your Google Calendar.
No forms, no UI, no clicking around — just forward an email and you're done.
- Takes any email you forward
- Pulls out the date, time, location, and people
- Adds it to your Google Calendar
Anyone who:
- Gets meeting requests or invites by email
- Forwards things to themselves to remember later
- Doesn’t want to manually create calendar events
- You send or forward an email to [email protected]
- SwiftCal checks the email content
- If it finds a date/time, it adds an event to your Google Calendar
That’s it.
- Go 1.24.2 or later
- PostgreSQL 15+
- OpenAI account (for text processing)
- Google Cloud project (for Calendar access)
- Mailgun account (to receive forwarded emails)
git clone https://github.com/wizenheimer/swiftcal.git
cd swiftcal
cp .env.example .env
# Edit .env with your secrets
make up
Open your browser to: http://localhost:8081
Create a .env file like this:
# Server
PORT=8080
ENVIRONMENT=development
# Database
DATABASE_URL=postgres://swiftcal:password@localhost:5432/swiftcal?sslmode=disable
# Google Calendar
GOOGLE_CLIENT_ID=your_client_id
GOOGLE_CLIENT_SECRET=your_client_secret
GOOGLE_REDIRECT_URL=http://localhost:8080/auth/callback
# OpenAI
OPENAI_API_KEY=your_openai_key
# Mailgun
MAILGUN_API_KEY=your_mailgun_key
MAILGUN_DOMAIN=your_domain.com
MAILGUN_WEBHOOK_SECRET=your_webhook_secret
# App Email
MAIN_EMAIL_ADDRESS=swiftcal@your_domain.com
# Auth
JWT_SECRET=your_jwt_secret
These are the main endpoints:
- GET /signup – Starts Google Calendar setup
- GET /auth/callback – Handles OAuth return
- POST /webhooks/mailgun/{secret} – Handles forwarded emails from Mailgun
You can also configure multiple email addresses and invite attendees via links.
make help # List all commands
make up # Start development environment
make down # Stop containers
make test # Run tests
make deps # Install Go dependencies
make lint # Run linter
make fmt # Format code
swiftcal/
├── cmd/server/ # Main entry point
├── internal/ # App logic
│ ├── config/ # Config loading
│ ├── handlers/ # HTTP routes
│ ├── services/ # Core functions
│ ├── database/ # DB access
│ └── models/ # Structs and data models
├── pkg/ # Shared utilities
├── templates/ # Email + calendar prompt templates
├── docs/ # Developer docs
└── docker-compose.yml # Local dev environment
To build and run in production:
docker build -t swiftcal .
docker run -d --env-file .env -p 8080:8080 swiftcal
Or use Docker Compose:
- Found a bug? Open an issue
- Want a feature? Fork the repo and send a pull request
- Contact: [email protected]
This project was originally built as an early MVP for Cruso Labs, an AI assistant you can email. We're open-sourcing this early version.
MIT – See LICENSE