Skip to main content

Overview

Sensemaker is built as a monorepo with three main components.

Architecture

ComponentTechnologyPurpose
Web AppReact + Vite + TailwindUser-facing frontend
APINestJS + GraphQL + PostgreSQLBackend services
DocsDocusaurusDocumentation site

Tech Stack

Frontend

  • React 18 with TypeScript
  • Vite for builds
  • React Router for navigation
  • Zustand for state management
  • TanStack Query for data fetching
  • Radix UI + Tailwind CSS for components

Backend

  • NestJS framework with GraphQL (code-first schema)
  • TypeORM with PostgreSQL (+ pgvector)
  • BullMQ for background jobs (content processing, email, media)
  • Redis for caching and job queues
  • Passport JWT for authentication
  • Claude AI (Anthropic) for summaries, tagging, and suggested highlights
  • Stripe for subscription billing

Infrastructure

  • API + Database + Redis: Hetzner VPS (Docker Compose, nginx-proxy + Let's Encrypt auto-SSL)
  • Frontend: Render Static Site
  • Docs: Render Static Site (Docusaurus)
  • Email: Postmark (transactional + newsletter inbound) + Cloudflare Email Routing
  • File Storage: Cloudflare R2 (PDF/EPUB documents, media cache)
  • Analytics: PostHog
  • DNS: Cloudflare

Monitoring

  • Structured JSON logging via nestjs-pino
  • Health check endpoints (/api/health, /api/health/deep) with DB + Redis checks
  • Request ID tracking via X-Request-Id header
  • Docker health checks with automatic container restart