A calm daily and weekly planner that bridges Basecamp and HEY into one opinionated workspace.
Website: daybreakplanner.com
Daybreak pulls your Basecamp assignments and schedules, optionally layers HEY calendar events and email triage on top, and gives you a week view, a day view, and a focus mode for working on a single task. That's it. No team features, no AI, no notifications, no analytics.
Built on the 37signals stack (Rails 8, Hotwire, SQLite). Designed for self-hosting.
- Week view: kanban of days across the week, plus a "sometime" bucket. Drag tasks between days.
- Day view: today's tasks with timeboxing, calendar events pinned from HEY, and a daily log.
- Focus mode: single-task view with a lightweight timer for deep work.
- Morning ritual: review yesterday, plan today, add events to the week.
- Evening ritual: close out open items, reflect, log the day.
- Basecamp sync: OAuth sign-in; auto-syncs your assignments and schedules; triage your Basecamp inbox into day or week.
- HEY integration (optional): calendar events, email triage (Imbox / Reply Later / Set Aside), journal digest, email-to-task.
Daybreak is single-user and made to run on your own machine or small server. The easiest path is Docker Compose.
git clone https://github.com/is2b007/daybreak.git
cd daybreak
cp .env.example .env # fill in BASECAMP_CLIENT_ID / SECRET / RAILS_MASTER_KEY
docker compose up -d
open http://localhost:3000Before you click: Daybreak needs its own Basecamp OAuth app. There's no shared public client, each self-hoster creates their own.
- Create a Basecamp integration at
launchpad.37signals.com/integrations.
Use a placeholder redirect URL for now (e.g.
https://example.com/auth/basecamp/callback). Copy the Client ID and Client Secret. - Click the Deploy on Railway button above. Railway builds the Dockerfile and
prompts for the three required env vars:
RAILS_MASTER_KEY(generate locally withbin/rails credentials:edit, copyconfig/master.key)BASECAMP_CLIENT_IDBASECAMP_CLIENT_SECRET
- After the build finishes, Railway assigns a domain
(e.g.
daybreak-production.up.railway.app). Go back to your Basecamp integration and update the redirect URL tohttps://<your-railway-domain>/auth/basecamp/callback. - Add a persistent volume so your data survives restarts:
service → Settings → Volumes → New Volume, mount path
/rails/storage. Restart the service.
Expect roughly $5/mo on Railway's Hobby plan for a single-user deploy.
- Go to launchpad.37signals.com/integrations and create a new integration.
- Set the redirect URL to
http://localhost:3000/auth/basecamp/callback(or your real host when deploying). - Copy the Client ID and Client Secret into your
.envfile asBASECAMP_CLIENT_IDandBASECAMP_CLIENT_SECRET.
If you're starting fresh and don't have a config/master.key:
bin/rails credentials:editThat creates config/master.key. Copy the contents into .env as RAILS_MASTER_KEY.
The docker-compose.yml mounts ./storage from the host into the container, so your SQLite databases and Active Storage blobs survive restarts. Back up this folder and you've backed up everything.
If you want to hack on Daybreak instead of just run it:
git clone https://github.com/is2b007/daybreak.git
cd daybreak
bin/setup
bin/devSee CONTRIBUTING.md for conventions, stack constraints, and how to submit changes.
- Ruby on Rails 8.1
- SQLite (Solid Queue / Solid Cache / Solid Cable all on SQLite too)
- Hotwire (Turbo + Stimulus)
- Propshaft + Import Maps, no bundler
- Minitest + Capybara
- Kamal for deployment (optional)
No React, Tailwind, TypeScript, or CSS framework. By design.
bin/rails test # unit + integration
bin/rails test:system # headless browserA Kamal config lives in config/deploy.yml with placeholder IP and domain values. Fill those in with your own server and domain, then:
bin/kamal setup
bin/kamal deployKamal expects Docker on the target host and uses the same Dockerfile as the local compose setup.
app/: Rails MVC code, jobs, servicessite/: static marketing site served at daybreakplanner.comspecs/: implementation specs and product docsCHANGELOG.md: release history
MIT. Do what you want; attribution appreciated.
If Daybreak is useful to you, sponsor the project on GitHub. Sponsorships keep the site online and pay for the time to maintain it.