AffinityEcho
Anonymous professional networking — web and mobile, one backend.
- NestJS
- TypeScript
- React 18
- React Native (Expo)
- PostgreSQL
- Prisma
- Redis
- BullMQ
The problem
A professional network where people can speak candidly needs two things that pull against each other: real identity behind the account, and no identity in front of it. Every feature — feeds, forums, mentorship, referrals — has to work without leaking who is talking, and the moderation has to work without a human reading everything.
What I built
- A NestJS backend of 15+ service modules spanning feeds, forums, ephemeral chat rooms, mentorship, referrals and real-time WebSocket messaging.
- AI content moderation as a queue, not a request. BullMQ and Redis evaluate content against the full conversation context chain asynchronously, so a slow judgement never blocks a post.
- Field-level PII encryption, identity-reveal controls and role-based guards for admin and moderator workflows, on Azure PostgreSQL.
- Sub-second aggregated feeds via Redis caching and job workers, with cron sweeps for room expiry and moderation backlog.
- Full feature parity on mobile. The React Native app (Expo Router) carries real-time messaging, mentorship flows, deep links and OAuth/email verification — not a cut-down version.
- The React/Vite web app end to end, including App Store compliance flows (age gate, EULA), content flagging, analytics dashboards and an admin review portal.
Testing
- 70% coverage across 1,244 tests in 72 Jest suites, written by direct class instantiation and mocked query chains so each service is tested in isolation rather than through the framework.