A newer take on how we connect.
Pars is a social platform (posts, follows, threads, topics) built as a monorepo. The active, default stack is Express + PostgreSQL/pgvector.
| Layer | Technology |
|---|---|
| Backend | Express · Bun · TypeScript |
| Database | PostgreSQL + pgvector |
| Cache / Sessions | Redis |
| Real-time | Socket.IO + Redis adapter |
| Auth | better-auth · Argon2 |
| Search | Typesense + LangChain (semantic search) |
| Messaging (infra-only, not wired into the app) | Kafka + RabbitMQ + BullMQ or NATS + JetStream |
| Frontend | React 19 · Vite · TanStack Router/Query · Tailwind v4 · Biome |
| Testing | Vitest · Supertest · Testcontainers (real ephemeral Postgres/Redis, not mocks) |
Pars started as a side-by-side comparison of two backend frameworks (NestJS, Express) over two
databases (PostgreSQL/pgvector, MongoDB), built against the same shared business logic in
packages/db-adapters/. That comparison is currently paused in favor of one actively developed
path — but nothing was deleted: backend-nestjs/ and MongoDB support both still exist and work,
just excluded from CI/deploy/pre-push. See CLAUDE.md's "NestJS + MongoDB (paused)" section for
exactly what still works and how to reactivate it.
Pars/
├── backend-express/ Express + Drizzle → PostgreSQL/pgvector, better-auth sessions —
│ the active backend
├── backend-nestjs/ NestJS — same shared services, thin Nest-native routing layer.
│ Paused: not part of CI/deploy/pre-push, but still functional.
├── frontend/ React 19 + Vite + TanStack Router, Tailwind CSS, Biome
├── packages/
│ ├── ui/ @pars/ui — shared behavioral utilities (cn, hooks)
│ └── db-adapters/ @pars/db-adapters — shared Drizzle schema, repository
│ interfaces/Postgres+Mongo adapters, and the framework-agnostic
│ services both backends route requests to
├── database-postgres-pgvector/ Postgres+pgvector infra (docker-compose only) — the active DB
├── database-mongodb/ MongoDB infra (single-node replica set). Paused with backend-nestjs.
├── messaging-kafka/ Kafka (KRaft) + RabbitMQ + Redis/BullMQ — infra + demo scripts
├── messaging-nats/ NATS + JetStream — infra + demo scripts
├── search-typesense/ Typesense + LangChain semantic-search demo
├── .github/ Workflows, issue templates
├── .husky/ Git hooks
├── LICENSE
├── CONTRIBUTING.md
├── CODE_OF_CONDUCT.md
└── SECURITY.md
git clone https://github.com/MarkAronov/Pars.git
cd Pars
bun installcd database-postgres-pgvector && docker compose up -d && cd ..
cp backend-express/.env.example backend-express/.env # set DATABASE_URL, SESSION_SECRET, etc.
bun run dev:backend-express # Express on :3001bun run dev:frontend # points at backend-express (:3001)Still fully functional, just not part of CI/deploy/pre-push — see CLAUDE.md's "NestJS + MongoDB (paused)" section for details:
cd database-mongodb && docker compose up -d && cd .. # if using Mongo
cp backend-nestjs/.env.example backend-nestjs/.env
bun run dev:backend-nestjs # NestJS on :3000
bun run dev:frontend-nestjs # frontend pointed at :3000See CLAUDE.md for the full command reference, environment variables (including the optional
OPENAI_API_KEY for real semantic search), and coding standards.
See CONTRIBUTING.md.
See CODE_OF_CONDUCT.md.
See SECURITY.md.
MIT © Mark Aronov