← Selected work
02
2024 —

CRM 2.0

Real-Time Team Collaboration Platform

Full-stack engineer · Realtime + RBAC

Custom Firebase chat + workspace with typing indicators, @mentions, reactions, read receipts — plus a project-scoped Vault for team secrets.

20+
real-time pages
18+
Firestore collections
3-tier
RBAC via security rules
PWA
installable · offline · push
Stack
React 18FirebaseFirestoreLexicalTailwindVite PWAFCM

Why not Slack + Notion?

Because context lives in three places — chat, tasks, and shared secrets — and every hand-off across those tools loses history. We collapsed them into one workspace scoped by project, with a Vault for credentials the team actually needs to share.

Realtime, done right

20+ pages subscribe to Firestore. The tricky part isn't onSnapshot — it's cleanup, offline persistence, and preventing zombie listeners after route changes. Every subscription is registered against the route lifecycle so nothing leaks.

RBAC without middleware theatre

Roles live in Firestore custom claims, enforced by security rules — no server round-trip to check permissions on every read. The client just asks; the database refuses illegal reads at the source.

Highlights
  • 20+ real-time pages on Firestore onSnapshot with proper cleanup + offline persistence
  • Granular RBAC (admin / manager / employee) enforced by Firestore security rules
  • PWA with Vite PWA plugin — installable, service worker cache, FCM push
  • Sidebar 'new content' indicators via lastViewed timestamp diff