TaskFlow
Lead Developer
An offline-first task-dispatch PWA for hospitality teams. Realtime updates via Socket.IO, BullMQ scheduler for recurring tasks, IndexedDB mutation queue so the app keeps working when the Wi-Fi drops. Multi-tenant SaaS, live and free at tasks.jimrarras.space.
The system
TaskFlow is an offline-first task-dispatch PWA designed for hospitality teams (hotel housekeeping, restaurant prep, event venues) where staff move between zones with patchy Wi-Fi and stale connections. The app keeps working when the network drops: tasks created offline get queued in IndexedDB on the device and reconcile against the server when the connection returns. Realtime updates via Socket.IO keep everyone in sync once they’re online. Multi-tenant so multiple teams share the same deployment with isolated data. Live and free at tasks.jimrarras.space.
Architecture
- API: Fastify (Node 22) + PostgreSQL + Drizzle ORM + Redis
- Worker: BullMQ for scheduled task generation and notification jobs
- Realtime: Socket.IO with room-based broadcasting per tenant
- Frontend: React 19 + Vite + TanStack Query as a PWA with service worker
- Offline: IndexedDB mutation queue with last-write-wins reconciliation
- Multi-tenancy: row-level with
tenant_idon all data tables - Deployment: Coolify, single instance, vanilla container
My contribution
I built the system as the sole developer. The architectural decision that mattered most was the IndexedDB mutation queue with last-write-wins reconciliation. When a user creates or updates a task offline, the mutation is queued locally with a client-generated ID; when the network returns, the queue plays back against the server, and if there is a conflict the server picks the latest timestamp. Last-write-wins is the right semantic for single-user task editing on hospitality shifts — predictable, no UI for conflict resolution. The PWA service worker caches the app shell so it boots in under a second even on a cold mobile cache, which is the difference between staff using it and abandoning it on a poor signal.
Outcomes
- Live multi-tenant SaaS at tasks.jimrarras.space, free for teams that want it
- Offline-first so it keeps working on patchy hospitality Wi-Fi
- Realtime updates across teammates via Socket.IO once online
- BullMQ-scheduled recurring tasks (daily room turnover, shift handover checklists)
Links
- Live: tasks.jimrarras.space
Related work
- Multi-tenant Calendar SaaS: another multi-tenant SaaS, but for appointment booking rather than task dispatch
- Zosimades collection-app: another offline-first mobile workflow, but a native Android scanner instead of a PWA