Skip to content

is2b007/daybreak

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Daybreak

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.

What Daybreak does

  • 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.

Self-host it

Daybreak is single-user and made to run on your own machine or small server. The easiest path is Docker Compose.

Quick start

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:3000

Deploy to Railway (1-click)

Deploy on Railway

Before you click: Daybreak needs its own Basecamp OAuth app. There's no shared public client, each self-hoster creates their own.

  1. 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.
  2. Click the Deploy on Railway button above. Railway builds the Dockerfile and prompts for the three required env vars:
    • RAILS_MASTER_KEY (generate locally with bin/rails credentials:edit, copy config/master.key)
    • BASECAMP_CLIENT_ID
    • BASECAMP_CLIENT_SECRET
  3. 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 to https://<your-railway-domain>/auth/basecamp/callback.
  4. Add a persistent volume so your data survives restarts: service → Settings → VolumesNew Volume, mount path /rails/storage. Restart the service.

Expect roughly $5/mo on Railway's Hobby plan for a single-user deploy.

Get Basecamp credentials

  1. Go to launchpad.37signals.com/integrations and create a new integration.
  2. Set the redirect URL to http://localhost:3000/auth/basecamp/callback (or your real host when deploying).
  3. Copy the Client ID and Client Secret into your .env file as BASECAMP_CLIENT_ID and BASECAMP_CLIENT_SECRET.

Generate a Rails master key

If you're starting fresh and don't have a config/master.key:

bin/rails credentials:edit

That creates config/master.key. Copy the contents into .env as RAILS_MASTER_KEY.

Data persistence

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.

Develop it

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/dev

See CONTRIBUTING.md for conventions, stack constraints, and how to submit changes.

Stack

  • 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.

Tests

bin/rails test            # unit + integration
bin/rails test:system     # headless browser

Deploying to a real server

A 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 deploy

Kamal expects Docker on the target host and uses the same Dockerfile as the local compose setup.

Project layout

  • app/ : Rails MVC code, jobs, services
  • site/ : static marketing site served at daybreakplanner.com
  • specs/ : implementation specs and product docs
  • CHANGELOG.md : release history

License

MIT. Do what you want; attribution appreciated.

Support the work

If Daybreak is useful to you, sponsor the project on GitHub. Sponsorships keep the site online and pay for the time to maintain it.

About

A calm, single-user planner that bridges Basecamp and HEY. Self-host with docker compose. Rails 8 · Hotwire · SQLite · MIT.

Topics

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors