Loading works…
TEUM
A shared calendar for couples and small groups, synced across web, desktop, and Android from one codebase. Each group has its own room and calendar, and events can be shared into several groups at once. The newest piece: an admin-assigned shift roster with peer swaps, five days into an MVP with several features working.
Screenshots
Why I built it
Couples and small groups often want to see one schedule together, but everyone's calendar app is different, and handing a commercial service every personal event can feel like too much. TEUM sits in that gap (teum, "the space between") by giving each group its own room with its own shared calendar.
Structural rule
One web codebase runs the same bundle in the browser, as a PWA install on desktop, and inside the Capacitor Android shell. Screens are never split per platform; device differences are absorbed with responsive layout and feature detection. Storage is complete on-device via IndexedDB (Dexie), and syncing across devices sits behind a single Firebase adapter. The /teum build on this site has sync configured, so it opens to a login screen first; a build without sync runs entirely local with no login.
Groups and events
Each group has its own room and calendar, and a single event can be shared into every group its author checks. Personal events default to a "just me" group; only the author can edit or delete an event, and colors are auto-assigned per author within a group. Seven view modes are supported (month, week, day, list, by-person, D-day, year), and the layout switches between a phone bottom-tab bar and a desktop sidebar depending on screen width.
The newest piece: shift rosters
A roster is not an event; it belongs to the group room itself. One admin defines shift types (day, evening, night, off, and so on) and paints assignments onto dates, or fills a repeating pattern over a date range. Swaps between two workers happen through a request-and-accept flow with no admin approval needed, and shifts show up as badges on the shared calendar too.
Everything else that's working
As of F-26 the app also covers: scheduling polls with date or weekday candidates that collect responses in real time, importing a connected Google Calendar, comments and emoji reactions on events, room activity feed and push notifications for changes, joining a room via invite link plus a PIN, yearly lunar-calendar recurring events, a location field with a map link, HEIC photo attachments, and light, dark, and system theme switching.
Where it stands
Started 2026-09-25, with 97 commits by 2026-09-28's roster feature (F-26). About 24,300 lines across 120 source files, plus about 11,600 lines across 50 test files (1,104 passing across unit tests, server function tests, and Firestore rules/sync emulator tests). Android has a Capacitor build script ready but has not been published to any store yet.



