Skip to content

Next Session: scheduling that runs itself.

Our own product, designed and built end to end. A cross-platform app, a serverless backend, and an automatic scheduler that proposes the next game night the moment the last one wraps. Shipped and live on Google Play and the web.

Role Product design, app, backend, infrastructure
Platforms Android and web, iOS-ready

The problem

Everyone wants to play. Nobody can pick a date.

Recurring tabletop groups lose more evenings to scheduling than to anything else. The date lives in a group chat, the poll goes stale, one person ends up chasing five others, and the campaign quietly stops.

What we did about it

We made the app do the chasing.

A session is proposed, everyone votes their availability, and it locks itself in the moment enough players are in. Then the scheduler proposes the next one on its own. The organizer stops being the bottleneck, and the group keeps its slot.

What we built

Three systems doing the work.

The product is small on the surface and event-driven underneath. Every screen below is the shipped app.

01

Propose, vote, confirm.

A member proposes a session with candidate dates. Everyone votes accept or decline. When accepts hit the group's threshold, the session auto-confirms on the winning date. When the threshold becomes mathematically unreachable, it auto-denies instead of sitting stuck, which is the same signal that kicks off the next proposal.

Eight session states, each with its own colour and label, keep the whole table clear on what needs their attention.

A confirmed session in Next Session
02

An auto-scheduler that never sweeps.

Turn it on, pick a time of day, and the next session proposes itself the instant the current one resolves. No cron sweep and no queue of future sessions: exactly one session is ever in flight, and the resolution of that session is the event that generates the next.

If proposals keep getting turned down, it pauses itself and tells an admin rather than spamming the group. Paid recurring rules sit on the same engine with frequency, end conditions, and a conflict policy.

The auto-scheduler settings in Next Session
03

Availability the scheduler can read.

Each player keeps a personal calendar: recurring weekly patterns plus one-off overrides. The app aggregates the table into a per-day group status, so a proposer picks a date that already works instead of guessing.

That same data is what the auto-scheduler searches forward through to find the next workable night.

The availability calendar in Next Session

Push and in-app notifications

Seven notification types with independent push and in-app toggles, RSVP action buttons on the push itself, and a per-user lead time before a session starts.

Groups, roles, invite links

Admin, organizer, and member permissions, plus rotating invite tokens so a shared link can be invalidated without touching the group.

Subscriptions and ads

A free ad-supported tier and a Next Session+ premium entitlement, gated at the tap rather than hidden.

In-person and online sessions

Address autocomplete for tables that meet in person, platform and join link for tables that meet online, both tappable from the session.

Eight languages, three themes

English, Dutch, German, French, Spanish, Italian, Polish, and Portuguese throughout, including server-sent notifications, with light, dark, and system appearance.

Motion as product polish

A custom launch animation, circular reveal transitions, skeleton loading, and confetti on confirmation, all respecting reduced-motion settings.

How we work

How this project went.

01

Scope and plan

We wrote the product down before we wrote code: roles, session lifecycle, notification matrix, and the rule that only one session is ever in flight. That decision removed a whole category of edge cases later.

02

Build and iterate

One Flutter codebase for Android and web, real-time data from day one, and cloud functions written alongside the screens that trigger them. Localization and dark mode went in early rather than as a retrofit.

03

Launch and support

Store listing, privacy and terms, consent, analytics, and a marketing site on the same hosting. The app is live and the infrastructure is ours to keep healthy.

Under the hood

The stack we ran it on.

Chosen so one team could own the app, the backend, and the deployment without handing anything off.

App
  • Flutter, Material 3
  • Riverpod state
  • go_router navigation
  • Android, web, iOS-ready
Backend
  • Firebase Auth
  • Cloud Firestore
  • Cloud Functions
  • Cloud Storage, App Check
Services
  • Cloud Messaging push
  • RevenueCat subscriptions
  • Google AdMob
  • Google Places autocomplete
Web and delivery
  • Astro static site
  • Firebase Hosting
  • Google Play release
  • Service worker push

Have a software project in mind?

Tell us what you're building and we'll tell you honestly how we can help.

Discuss your software project