v0.3.0 — Otter answers & acts · 2FA · embeddable booking · Android on Google Play · deploy anywhere
The biggest release yet — 58 changes since v0.2.0. Otter goes from drafting single actions to answering questions and acting across your calendar, the Android app is live on Google Play, and self-hosting gains a safe upgrade command plus one-click deploys on every major platform.
📱 The Android app (v0.3.0) is live on Google Play: https://play.google.com/store/apps/details?id=com.dayotter.app
🦦 Otter (AI)
- Ask real questions from the command bar, the mobile Ask bar, and inbound SMS/WhatsApp — "how busy am I this week?", "when's my next meeting?", "am I free Friday?" — instead of "I only help with scheduling". (#186)
- Edit existing bookings by voice/text — rename, change location, add/remove guests — not just reschedule or cancel. (#187)
- Focus holds become real focus blocks on your calendar, including recurring personal/focus holds. (#185, #188)
- Found bookings are actionable — bulk cancel/reschedule, an aggregate "analyze my schedule" tool, and Otter now sees your synced Google / Outlook / Apple events.
- Expanded tool set + a prompt & knowledge catalogue; timezone and config fixes.
📅 Booking & scheduling
- Multiple locations per event type with a booking-page picker (#103)
- Requires-confirmation / opt-in bookings — the slot is held while the host approves or declines (#100)
- Monthly & yearly booking limits (#104) and offset slot start times (#106)
- First-class out-of-office with delegate redirect (#102)
- Availability troubleshooter — see exactly why a slot isn't bookable (#131)
- Calendly importer — bring event types & schedules across (#115)
🔌 Platform & integrations
- Two-factor authentication (TOTP + recovery codes), web and mobile (#119, #147)
- Embeddable booking widget — a React SDK + embed route (#116)
- App registry / in-app app store for integrations (#107)
- Jitsi Meet as a video provider (#110)
- Booking-page analytics pixels — GA4 / GTM / Meta / Fathom / Plausible (#114)
- Localization — booking-page language picker, plus Italian & Dutch locales (#126)
📱 Mobile — Android live on Google Play (v0.3.0)
- Native 2FA sign-in + approve/decline pending requests
- Event-editor parity — locations, limits, recurring, group, access codes
- Out-of-office + availability troubleshooter screens
- Floating "Ask DayOtter" voice launcher; Focus & fragmentation insights
- Production crash fix (zod v4), redesigned sign-in, session reset on logout
🚀 Self-hosting & deploy
- Safe upgrade command —
deploy/upgrade.sh(back up → pull → migrate → restart → health-check → roll back on failure), plus aversionfield on/api/health - One-click / config-as-code deploys for Render, DigitalOcean, Heroku, Fly.io, and Railway — alongside the existing AWS one-click and Docker Compose
🔒 Hardening & docs
- Hardened Calendly import, CalDAV egress, and public booking input; error-logging hardening
- Performance: parallelized recurring finalize, deduped preference reads, batched imports
- Full documentation audit to match the shipped feature set
Full changelog: v0.2.0...v0.3.0