Timeful is a scheduling platform helps you find the best time for a group to meet. It is a free availability poll that is easy to use and integrates with your calendar.
Hosted version of the site: https://timeful.app
Built with Vue 2, MongoDB, Go, and TailwindCSS
- See when everybody's availability overlaps
- Easily specify date + time ranges to meet between
- Google calendar, Outlook, Apple calendar integration
- "Available" vs. "If needed" times
- Determine when a subset of people are available
- Schedule across different time zones
- Email notifications + reminders
- Duplicating polls
- Availability groups - stay up to date with people's real-time calendar availability
- Export availability as CSV
- Only show responses to event creator
- Prereqs: Node 18+, Go 1.20+, MongoDB on
localhost:27017, GCP service account key JSON. - Backend: create
server/.env(includesSERVICE_ACCOUNT_KEY_PATHand any Stripe/OAuth/email keys), start Mongo, thencd server && air(orgo run main.go) to runhttp://localhost:3002/api. Cloud Tasks is skipped ifSERVICE_ACCOUNT_KEY_PATHis unset or the file is missing. - Frontend:
cd frontend && npm install && npm run serveto runhttp://localhost:8080against the local API;npm run buildto serve from Go. - Detailed steps and env samples:
docs/local-dev.md. - Docker options:
- Hybrid (Mongo only):
docker compose up -d mongo, then run Go/Vue locally after installing deps. - Full stack:
docker compose up --buildspins up Mongo, the Go API, and the Vue dev server (seedocs/local-dev.mdfor env/secrets prep).
- Hybrid (Mongo only):
- Tool versions:
.tool-versionspinsgolang 1.20.14andnodejs 18.20.2(works with asdf or as a reference) to avoid mismatched runtimes with the Go module and Vue CLI 5 stack. - asdf + zsh:
asdf plugin add golang nodejs(if not present),asdf install, ensuresource "$HOME/.asdf/asdf.sh"is in~/.zshrc, and addexport PATH="$PATH:$(go env GOPATH)/bin"so Go-installed tools (e.g.,air) are found. - Seed demo data (optional):
cd server/scripts/seed_demo && MONGODB_URI=mongodb://localhost:27017 go run main.gocreates a demo user/event for local testing. Avoid running other scripts inserver/scripts/*unless you know the migration you need.
Coming soon...