Full Stack Developer

TaskFlow

Real-time task management without the Jira bloat — collaborative, fast, and built for small teams who ship.

About

A real-time task management platform built to replace over-engineered tools like Jira for small teams. Supports drag-and-drop task boards, team collaboration, workflow automation, and role-based access control.

Core Features

🖱️

Drag-and-Drop Boards

Kanban boards with smooth drag-and-drop across columns. Optimistic UI updates give instant feedback — the server confirms asynchronously without blocking the interaction.

⚡

Real-Time Collaboration

WebSocket-powered live updates. When a teammate moves a card, every board in every open tab reflects it in under 50ms — no polling, no refresh.

🔐

Role-Based Access Control

Admin, member, and viewer roles with granular permissions. Each role sees exactly what it should — scoped at both the API and the frontend layer.

🤖

Workflow Automation

Rule-based triggers: when a task moves to Done, auto-assign the next one. Reduces manual status updates and keeps the board accurate without team overhead.

📊

Team Analytics

Velocity tracking, completion rates, and workload distribution across team members — surfaced directly from the live task graph.

🌙

Dark Mode + Responsive

Fully responsive from mobile to desktop. Dark mode with system preference detection and manual toggle — every pixel adapts.

What I Built

  1. Built real-time collaboration using WebSockets — learned how to handle conflict resolution when multiple users edit simultaneously

  2. Designed a multi-role permission system (admin, member, viewer) with granular access control

  3. Implemented drag-and-drop with optimistic UI updates for instant feedback without waiting for server confirmation

Tech Stack

Frontend

ReactTailwind CSS

Backend

Node.jsExpressSocket.io

Database

MongoDB

Auth & Access

JWTRBAC

From Prototype to Platform

How to Scale This to a Product

TaskFlow proves the real-time collaboration thesis. Here's how you'd evolve it from a team tool into a multi-tenant SaaS platform handling thousands of concurrent workspace users — with the fault tolerance and observability to match Linear or Notion at scale.

📜

Event Sourcing for Board State

Immutable Event Log

All board mutations persisted as immutable events — TaskCreated, TaskMoved, StatusChanged, AssigneeUpdated. Current board state is a projection derived from the event log on read, never stored directly. Enables time-travel debugging, full audit trails, and event replay for conflict resolution without distributed locks.

⚡

CQRS for Real-Time Board Rendering

Read/Write Separation

Write path: drag-drop commands hit MongoDB primary via command handlers. Read path: board state pre-computed as materialized snapshots in Redis — sub-10ms board loads at any scale. Cache invalidated on every mutation via write-through strategy. Stale-while-revalidate for offline-tolerant clients.

🔀

CRDTs for Concurrent Operations

Conflict-Free Replication

Task position modeled as a Last-Write-Wins register with Lamport timestamps — concurrent drag operations from two users converge deterministically without server arbitration or OT algorithms. No pessimistic row locking, no "last save wins" glitches, no extra round-trips to resolve conflicts.

📡

Horizontally Scaled WebSocket Layer

Redis Pub/Sub Cluster

Socket.io scaled across N Node.js pods using the Redis adapter. Any pod can serve any client after the pub/sub broadcast — no sticky session requirement. Workspace-scoped rooms enforce tenant isolation at the fanout layer. Redis Streams buffer events during pod restarts for zero message loss.

🏢

Multi-Tenant SaaS with Zero-Trust RLS

Row-Level Security

Shared PostgreSQL schema with Row-Level Security policies enforcing workspace boundaries at the DB layer. workspace_id embedded in signed JWTs, verified at both API gateway and DB level — no application-layer misconfiguration can expose cross-tenant data. One cluster serves thousands of isolated workspaces.

📮

Async Job Queue with Dead-Letter Handling

BullMQ + Redis

Non-blocking work — email notifications, webhook deliveries, digest emails, integration syncs — processed via BullMQ priority queues. Failed jobs land in dead-letter queues with exponential backoff and configurable retry limits. Idempotency keys on all job payloads prevent duplicate side effects during network partitions.

🔌

Webhook Infrastructure at Scale

At-Least-Once Delivery

Outbound webhooks to Slack, GitHub, and Zapier delivered with at-least-once guarantees. Delivery receipts tracked in the event log for SLA auditing. Outbound circuit breakers prevent a slow downstream (e.g. Slack outage) from clogging the delivery queue. Payload signing via HMAC-SHA256 for endpoint authentication.

🔭

Observability + SLO Enforcement

OpenTelemetry + Grafana

Distributed traces across all Node.js services via W3C TraceContext. SLOs: WebSocket message delivery p99 < 50ms, board render p95 < 150ms, task mutation durability 99.99%. Grafana dashboards track active WebSocket connections, Redis memory pressure, MongoDB replication lag, and BullMQ queue depth.

VA
Vishal
Aggarwal

Full Stack Developer

Ask about Vishal ✦