Skip to content

v0.4.0 — Teams · a smarter Otter · activation & lifecycle · deploy anywhere

Latest

Choose a tag to compare

@nometria nometria released this 04 Sep 01:54
daadd30

This is the biggest release since the first public one. You can now run a real team on DayOtter, Otter (the scheduling assistant) got a lot more capable, and there is a whole new layer of work to help people actually get set up and stick around. It also runs in more places, with more of the security and reliability work that a self-hosted product needs.

Thank you to everyone who filed issues, tested deploys, and sent patches this cycle. Two contributors in particular did work that shaped this release, credited below.

Teams

A huge thank you to Naude Opperman (@Naude555), who prototyped this whole set of team features on his own fork and shared it back. Most of what is below started as his work; we re-implemented it against the current codebase and shipped it.

  • Choose who you meet. On a team's collective booking page, the person booking can pick which members they want in the room, and the calendar instantly shows only the times when everyone chosen is free.
  • Book a team meeting internally. Any member can schedule a meeting across chosen teammates that lands on everyone's calendar, with a heads-up about who is busy and the option to book over commitments when the meeting simply has to happen.
  • See your whole schedule. The bookings calendar now shows your held focus blocks and synced calendar events alongside your meetings, color-coded, in month, week, and agenda views.
  • Shareable team availability calendar. Publish a read-only, link-only view of when the team is busy over the next week, and drop it on your own site with a copy-paste embed. It shows busy vs free only, never meeting titles or emails.
  • Booking eligibility per member. Keep someone on the team so their time still counts, while taking them off the public booking links with a single toggle.
  • Transfer team ownership, so an owner can step back or leave cleanly.
  • Co-hosts are now first-class on collective bookings, which is the groundwork for everything above.

Otter got smarter

  • Set up recurring and back-to-back meetings in one go ("every Monday standup", "three interviews at 2, 2:15, 2:30").
  • Carry an ad-hoc location ("a review on Zoom") and offer a menu of locations per booking type.
  • Answer questions and edit an existing booking (title, location, attendees) from the command bar, mobile, or SMS, not just create new ones.
  • Hold "focus" drafts as real focus blocks, not meetings, so they defend your time.
  • Remember facts you tell it, and a daily cost ceiling on the public booking assistant so a busy page can never run up the bill.

Getting set up and staying (new)

  • Lifecycle emails that help a new account reach its first booking: a nudge to share your link, a nudge to connect a calendar, a first-booking celebration, and an optional weekly digest. Off by default, plain-text founder voice, one-click unsubscribe, and hard safety limits so nobody is ever over-emailed.
  • A starter event type is created on first sign-in, so a brand-new account has something to share immediately instead of a blank page.
  • Pro features preview instead of hard-blocking. On the hosted plan, a locked feature now shows a real, blurred preview of itself with an invitation to upgrade, rather than a bare wall. Self-hosters are unaffected, everything stays unlocked.

Runs in more places

  • One-click and one-command deploys: Render template, plus first-class configs for DigitalOcean, Fly.io, Heroku, and Railway, and a deploy guide.
  • One-command self-host upgrade: backup, migrate, health-check, and automatic rollback if the new version does not come up.

Security and reliability

  • Security scanning in CI: static analysis, a dynamic scan, and secret and dependency scanning, plus a documented secure-development process.
  • Event access codes are hashed with a slow, salted KDF (scrypt) instead of stored in the clear.
  • Rate limits on the write-heavy booking routes, and a tightened header and link boundary in outbound email.
  • CI now gates every PR on lint, type-check, tests, and the full production build, so a build-only break can no longer reach a deploy.
  • Fixes: the contact form no longer loses messages on a mail hiccup, the availability troubleshooter understands team events, Microsoft connections show your real account email, Pro checkout self-heals a missing Stripe customer, and the noisy Redis errors during builds are gone.

Contributors

  • @Naude555 (Naude Opperman) prototyped the Teams feature set that anchors this release.
  • @originalmagneto fixed a Docker out-of-memory build failure and an undeliverable-URL crash, made a missing translation key degrade gracefully instead of blanking the booking page, and sharpened the booking grid's loading and alignment.

Thank you both.

Upgrading

This release adds database migrations (through 0062). After pulling, run pnpm --filter @dayotter/db migrate (or the usual deploy.sh, which now backs up and can roll back on its own). The new team features, the starter event type, and the lifecycle emails are safe defaults; lifecycle emails stay off until you set LIFECYCLE_EMAILS=1.

Full changelog: v0.3.0...v0.4.0