Changelog

What's shipping.

Honest log of what we've added, improved, fixed, and changed. No marketing flourishes — if it landed in production, it's here.

  1. added

    Schedule people before they have an account

    Add someone by name and schedule them straight away — no email or account needed. The first session asks when you are open, who works for you and who does what, then drafts the week. Sending a join link lets the person claim the seat that already has their shifts in it.

  2. added

    Publishing and changes now tell people

    Publishing a week sends each person their own shifts, and publishing again only reaches people with newly added shifts. Moving or deleting a shift someone can already see sends them one notice; edits to a draft notify nobody. A new team member lands on their own shifts after joining.

  3. changed

    One Sunday draft replaces auto-draft and recurring templates

    One setting per schedule has next week ready by the day and hour you pick, in the location's own time zone, starting from last week, a template, or a fresh draft of your usual week. It never publishes and never touches a week that already has shifts; approved time off becomes open shifts. You get one message when it is ready.

  4. improved

    Sign-up confirmation links work on any device

    Confirming your email or resetting your password now works when you open the link on a different device or browser from the one you signed up on. A refused password says why, including when it has appeared in a known data breach.

  5. changed

    Pricing is now per location, not per seat

    Headcount is no longer a billing input — hiring never changes your bill. Starter is free for one location up to 20 employees; Core is $39 per location per month, Pro $79, Business $99 plus a flat platform fee. The AI drafting agent is on every paid plan rather than the top tier only. We wrote up why we changed our minds, including where the old argument broke.

  6. added

    Stripe billing integration

    Per-seat pricing live with 4 plans (Starter, Pro, AI, Business). Stripe Checkout for upgrades, Customer Portal for plan / seat / payment-method changes, idempotent webhook handler with Firestore-backed event dedup. AI tools gate behind the AI plan; FREE caps at 10 active employees.

  7. fixed

    Bounded concurrency fixed proposal-apply timeouts

    Applying a 14-shift AI proposal could exhaust the Cloud SQL connection pool with 'Too many connections' errors. Replaced unbounded Promise.all with a worker pool capped at 4 concurrent ops in apply-schedule-proposal, restore-bulk-delete, apply-template-to-week, and set-member-skills. 40-shift applies now succeed reliably.

  8. fixed

    Overnight shifts work end-to-end

    A shift from 8pm Friday to 4am Saturday used to fail validation (end before start). The data model now treats endTime ≤ startTime as a midnight wrap; duration computes correctly; conflict detection, compliance rules, and weekly hour totals all consume the same UTC range. Templates and AI proposals respect overnight semantics.

  9. improved

    AI chat is page-aware

    The chat panel now reads the route you're on (which org, which schedule, which week, which member) and feeds it as view-context to the agent. Saying 'cover the weekend' on Monday's calendar proposes shifts on this week's Saturday and Sunday — not last week's, not generic ones.

  10. added

    Test roster seeding via chat

    Managers can now ask the AI to seed a sample team for evaluation: 'add a complete restaurant team of 12'. The seed_test_roster tool handles the full flow — generates members, positions, availability — gated by seat cap so it doesn't accidentally over-fill on FREE.

  11. added

    Drag-to-reassign with ghost preview

    Drag a shift to a different member; a ghost copy follows the cursor. Drop to commit, or release outside the calendar to cancel. Conflict warnings (overlap, time-off, skill mismatch) surface in real-time during the drag — not after the drop.

  12. improved

    Schedule proposal Apply / Discard persistence

    Proposal cards in the chat used to lose their Apply / Discard state on page refresh. State now persists in Firestore against the conversation; refreshing the dashboard keeps the proposal interactive until the manager decides.

  13. added

    Realtime multi-tab sync

    Two managers editing the same week now see each other's changes live. Mutations broadcast via a single Firestore doc per org; the dashboard's listener invalidates affected TanStack Query caches on remote changes. Coarse but effective.

  14. added

    Compliance rules engine

    Per-org rules with WARNING / BLOCKING severities — MAX_HOURS_PER_WEEK, MAX_HOURS_PER_DAY, MAX_CONSECUTIVE_DAYS, MIN_REST_HOURS_BETWEEN_SHIFTS, MAX_SHIFTS_PER_DAY. Industry presets seed defaults (healthcare gets EU Working Time Directive defaults BLOCKING; hospitality gets WARNING). Enforced at every shift create / move / proposal.

  15. added

    Skills + per-position required skills

    Define org-wide skills (RN cert, forklift, language, anything). Tag positions with required skills. Assign skills to members with optional expiry dates. The conflict detector blocks shifts where the assigned member is missing a required skill or has an expired credential.

  16. added

    Open shifts + employee claim flow

    Managers post unfilled coverage as open shifts. Eligible employees (right skills, no overlap, no time-off) see and claim from their phone. Optional manager approval before the claim lands; auto-confirm for trusted seniors.

  17. added

    Shift swaps with optional manager approval

    Employees post a cover request on a shift; eligible coworkers see it and accept. Manager-approval mode gates landing on the calendar; auto-accept mode trusts the worker side. Audit trail captures the full thread.

Want to follow what's shipping?

Subscribe to the RSS feed, or just check back. We don't email about every release.