Skip to main content
Photo of Anton ShubinAnton ShubinContact

For Rustam Zaripov · 2022Tech Lead & ArchitectLive

Truth or Dare (DareChat): Real-time multiplayer game for Russian-speaking audiences

~40K monthly active users — live at darechat.me with a Swagger-documented public REST API at darechat.me/api.

darechat.me (opens in a new tab)
Home
Home

One backend for every app

Pick a flow

App requests: The marketing site (SvelteKit) and an Angular web app consume the same public REST API that mobile clients do.

Chat message: Socket.IO chat scaled across nodes via the Redis pub/sub adapter.

  1. Apps

    • Marketing siteSvelteKitIn this flow
    • Angular web appIn this flow
    • iOS and Android appsin the founder's separate reposIn this flow

    Apps consume the same public REST API

  2. Backend in one Nx monorepo

    Two NestJS APIs on Express (public REST + admin) using CQRS handlers

    • Public REST APISwagger-documented at darechat.me/apiIn this flow
    • AdminJWT-bearer auth across both APIs
    • Socket.IO chatIn this flow

    Socket.IO chat scaled across nodes via the Redis pub/sub adapter

  3. Data and services

    • Redis pub/sub adapterscaled across nodesIn this flow
    • Prisma on PostgreSQL
    • Firebaseauth + storage + FCM push notifications
    • Google Cloud Visionuser-uploaded image moderation
    • MinIO-compatible media storage
Open the public API docs (opens in a new tab)

Screenshots

  • Swagger overview
  • Game modes
  • Truth or dare
  • Players list

1 / 4

What I built

Real-time multiplayer Truth or Dare game for Russian-speaking audiences, live at darechat.me. Built for founder Rustam Zaripov in 2022 with a backend-first architecture in one Nx monorepo: two NestJS APIs on Express (public REST + admin) using CQRS handlers, Swagger-documented at darechat.me/api, Socket.IO chat scaled across nodes via the Redis pub/sub adapter, Firebase auth + storage + FCM push notifications, Google Cloud Vision for user-uploaded image moderation, and Prisma on PostgreSQL. JWT-bearer auth across both APIs, custom Nx libraries for shared command/query handlers, and MinIO-compatible media storage. The marketing site (SvelteKit) and an Angular web app consume the same public REST API that mobile clients do — iOS and Android apps live in the founder's separate repos.

How it is built

  • Nest.js
  • Express.js
  • Nx monorepo
  • CQRS
  • Microservices
  • PostgreSQL
  • Prisma
  • Redis
  • Socket.IO
  • WebSockets
  • Swagger
  • JWT
  • TypeScript
  • Firebase
  • FCM
  • Google Cloud Vision
  • Docker

More client work

All client work

Building something like Truth or Dare?

  • Five-day refund

    If in the first five days you feel this is not working, tell me and I refund what you paid.