← All projects

Pairwise

AI / WebIn production

Relationship psychology as a product: seven validated frameworks, AI analysis and an SEO content factory that brings in real users.

pairwise.ru
Role
Product, design, architecture and code — one person
Frameworks
7 validated: IPIP-NEO, ECR-R, LAS, CSI, Hurlbert Index, PVQ-Schwartz
Stack
Next.js 16 · React 19 · TypeScript · Prisma + PostgreSQL · Redis · BullMQ · Three.js
AI
Gemini + OpenRouter: key rotation, fallback, Redis/Lua quotas
Audience
3,181 users, 2,877 active · ~16.7k visits/mo
Timeline
Started Nov 2025 · in production since Jan 2026 · ~290 commits

Why it exists

“Compatibility” online usually means horoscopes and magazine quizzes. I wanted the opposite: take validated psychological frameworks, digitise them carefully and give people a clear, honest breakdown — no esoterics, no promises.

Pairwise grew from that idea into a real product: seven scientific tests, an AI that explains the result in plain language, a couples mode and — separately — a whole SEO-content factory that brings real users to the site. I designed, styled and wrote all of it myself.

Seven frameworks, not fortune-telling

It's built on validated instruments from academic psychology: personality via IPIP-NEO (Big Five), attachment via ECR-R, love styles via LAS, relationship satisfaction via CSI, sexual compatibility via the Hurlbert Index, values via PVQ-Schwartz. Each test is a carefully ported scale with honest scoring, and results are shown visually — here, for instance, a love-styles profile on an interactive 3D diagram.

Love Attitudes Scale result: dominant style and an interactive 3D diagram built with Three.js.

AI that explains in plain language

Raw scores mean little to most people, so an AI layer sits on top of every test: it weaves all the scales into a coherent, warm write-up in the voice of the “Pairwise psychologist” — strengths, growth areas, concrete weekly steps and self-reflection questions.

Behind it is a resilient AI layer: Google Gemini as the primary provider with OpenRouter as a fallback, rotation across several keys, quota accounting via Redis/Lua, and graceful degradation when a provider is down. Heavy jobs — like generating a PDF report — go to a BullMQ background worker.

AI breakdown of a result: a personal profile written in plain language.

The full picture — for couples

The tests truly come alive in pairs. Partners link accounts with an invite code, and Pairwise builds a shared map of the relationship: a compatibility score, a five-domain balance on a single chart, behaviour forecasts for different situations, and personal growth areas with concrete recommendations.

Couple's dashboard: compatibility by domain, scenario forecasts and growth areas.

Built to bring people back

A single test is a one-off visit. To make people return I added an engagement layer: a personal cabinet with progress across the seven tests, levels and achievements, a journal, and a “Wish Deck” — a private Tinder-style swipe mechanic for couples: both partners swipe desire cards, and when their likes line up it becomes a match. Plus inviting a partner as a natural next step. Gamification and XP live in their own service.

Personal cabinet: test progress, levels, achievements and the next step.

Content engine: traffic as a system

The least trivial part is a separate subsystem that brings users to the site. It's a full-cycle pipeline: an AI strategist researches topics and keywords (with SERP analysis via Tavily and clustering), drops a content plan into Google Sheets, and the content engine generates articles in multiple steps (brief → research → text) with uniqueness checks, internal linking, image selection and scheduled publication to the blog.

It's all orchestrated by a BullMQ queue on Redis, with limits, breakers and monitoring right in the admin panel. As of this screenshot — 551 topics planned, 315 articles generated, 177 published.

Content engine: an AI article-generation pipeline with a BullMQ queue and Google Sheets integration.

Results in numbers

Pairwise isn't a demo — it's a live product with a real audience. The content machine works: traffic grows month over month in both search engines — and it's 100% organic search, with zero spent on paid ads.

  • 3,181 registered users, 2,877 active
  • ~16.7k visits and ~13.3k visitors per month (Yandex Metrica)
  • 2.93k clicks and 51k impressions from Google, average position 8.1 (Search Console)
  • ~5–6 minutes average time on site, ~26% bounce rate
Google Search Console: organic traffic growth from December to June.
Yandex Metrica: 16.7k visits/mo, mostly from organic search.

Under the hood

A single Next.js monolith on the App Router serves the site, the API and the admin panel, plus a separate background worker. Designed to stay easy to maintain.

  • Next.js 16 (App Router) · React 19 · TypeScript · Tailwind
  • Prisma + PostgreSQL; NextAuth v5 for auth
  • Redis: rate limiting, AI quotas via Lua scripts, caching
  • BullMQ worker: content generation and PDF reports (@react-pdf)
  • Three.js / react-three-fiber for 3D diagrams, Recharts for analytics, Framer Motion
  • Integrations: Google Gemini, OpenRouter, Tavily, Google Sheets, Unsplash, Telegram
  • Automated tests on Vitest, Docker build for production
Contact

Let's
talk.

Looking for a role in product / AI / operations — remote or relocation.

Open to new opportunities. Happy to walk you through my experience in detail, show you the projects, and share access to the code.

Open to remote / relocation / business trips