AI / Reputation management

RepuTrust — turning what the internet says about you into a number

Full-stack Lead · Ealixir · 2026 — present

RepuTrust is an AI-powered reputation-management platform built for Ealixir. It scans the web for articles and links about a person or company, classifies each finding into risk categories using Claude, and produces a 0–100 reputation score. Four services, two audiences, one shared backend — and I lead it.

Role
Full-stack Lead — architecture, implementation, review, direction across services
Client
Ealixir — reputation-management company
Backend
FastAPI · SQLAlchemy 2 · PostgreSQL 16 · Alembic · Docker
Web
Next.js 16 · React 19 · TypeScript
Mobile
React Native on Expo, with Apple authentication
AI
Claude — classification and analysis
Timeline
May 2026 — present

The problem: reputation is diffuse, decisions are not

What the internet says about a person or a company is scattered across news articles, directories, forums and search results, in wildly varying tone and credibility. A reputation-management firm has to turn that sprawl into something a client can act on — and into something the firm's own staff can work through systematically rather than case by case.

That's really two products. Clients want to understand where they stand. Operators want a queue, a workflow and a way to see progress. The platform serves both from the same data.

The score is the product's whole proposition. Everything upstream exists to make a single number defensible.

Four services, one system

RepuTrust is deliberately split rather than monolithic, and the boundaries follow the audiences:

  • The customer portal — Next.js 16 and React 19, where clients see their standing
  • The operator dashboard — the internal tool agency staff work in, with charting and geographic visualisation
  • The API — FastAPI over PostgreSQL 16, the shared backend both frontends read from, containerised with Docker
  • The mobile app — React Native on Expo, with Apple authentication

Keeping one API behind several clients is what stops the two audiences drifting into two truths. A score shown to a client and a score shown to the operator working their case have to be the same score, computed once.

Classification: where the AI actually sits

Findings are classified with Claude into four risk bands — good, mediocre, poor and negative — and that classification feeds the 0–100 score.

The engineering judgement here is about where to put the model. Classification is a genuinely good fit for an LLM: it's nuanced, contextual, and the alternative is keyword rules that break on sarcasm and context. Scoring, by contrast, is arithmetic that has to be reproducible — a client asking "why did my score drop" deserves an answer that doesn't depend on a sampling temperature. Drawing that line in the right place is most of the design.

Link classification is its own concern, with its own logic for deciding what a given result actually is before it gets weighed.

Leading it

As Full-stack Lead my responsibility spans the services rather than sitting in one of them — the architecture across the split, the shape of the API both frontends depend on, and review as the team builds into it.

The measurable evidence of that discipline is in the repository rather than anything I can assert: 48 data models across 18 modules, 98 database migrations and 75 test files. Ninety-eight migrations is a schema that has been evolved deliberately under real usage, not rewritten whenever it got inconvenient.

Building in a domain where the data is people

Reputation data is personal data. The system holds findings about identifiable individuals, which changes how you treat everything: what gets logged, who can see which record, what leaves the system, and how much lands in a screenshot.

It also sets the bar for correctness differently from most CRUD work. A misclassified article isn't a rendering bug — it's a claim about a person. That is the right pressure to feel when you're the one deciding how the pipeline behaves.

FastAPI · SQLAlchemy 2 · PostgreSQL 16 · Alembic · Docker · Next.js 16 · React 19 · TypeScript · React Native · Expo · Claude

Hiring a full-stack engineer who ships?

Jakarta (GMT+7), fluent in remote-first work across timezones. Usually replies within a day.