Shipping an AI moderation platform

2025Staff Software EngineerReact, TypeScript, gRPC

01 — Overview

An early stage startup needed help to launch an AI-powered content moderation product under a tight deadline.

I joined alongside another engineer to turn an existing design direction into a fast, production ready frontend, while the backend and core policy logic were being developed in parallel.

Client, product and repository confidential under NDA. The interfaces below are abstractions, not screenshots.

02 — The problem

Content moderation at scale can expose human reviewers to enormous volumes of disturbing material.

AI can help reduce that burden, but the underlying technology is only useful if customers can actually define policies, manage content and datasets, administer access, and understand what the system is doing.

Under a demanding timeline, I needed to understand the architecture, requirements, design system, backend interfaces, and product expectations to start contributing immediately.

03 — My Approach

I looked for the underlying structures shared across the product rather than treating every screen as a one off. From those patterns, I built a reusable component system that followed the existing design system, worked across devices, and kept accessibility and performance in mind.

I built and iterated on core frontend workflows for policy creation, account and team administration, and content and dataset management. That included policy templates and previews, team access and role management, validated forms, sortable and selectable tables, batch actions, file uploads, dataset selection, and backend integrated content deletion.

For data heavy interfaces, performance mattered. Some needed to handle tens of thousands of items, so I designed them to load and render only what was needed as people moved through the data.

Write it

Start from blank, or start from something

Templates give people a useful starting point without locking them into a predefined policy. The full text opens in the editor, ready to review and change.

New policyTemplate
hate_speechharassmentmisinformationself_harmcsam_referral
Preview1234567
CreateStart blank

Decide who may change it

Who can change a live policy

A sortable table of identities, roles and invitation status makes access visible at a glance. Changing a role or removing someone happens inline, without leaving the page.

MemberRoleStatus
OwnerActive
AdminActive
EditorInvited
EditorActive
ViewerInvited
Confirm role changeChange roleCancel

Gather the evidence

Select many, then act once

Selecting items once makes actions available across the whole selection. Upload templates and batch actions keep repetitive work manageable as datasets grow.

3 selectedLabelDatasetDelete
1.2 mb840 kb3.4 mb512 kb27 mb
Drop files1 file skipped, over 25 mb

Label what the model got wrong

Tell the model where it was wrong

Every row records the model’s decision. A reviewer can correct the label and add the signal that explains why it was wrong, without leaving the dataset.

TypeItemLabel
allowed
review
harassment
escalatede
self_harm
clinicalkeep
unlabeled
allowed
sampled
Label
allowedharassmenthate_speechself_harm

Make it fast

Render what is on screen, fetch what is next

Large tables can contain tens of thousands of items. Virtualization renders only what is visible, while the next page is fetched before the person reaches it.

48,212 items26 rendered
18,40418,40518,40618,40718,40818,40918,41018,411loading18,412loading
Rows in view onlyNext page prefetched

04 — In hindsight

What stays with me isn’t a specific component. It’s the practice of entering an unfamiliar system, finding its shape quickly, identifying what matters, and making grounded decisions that move the product forward.

AI can now generate a lot of implementation code. That makes judgment, systems thinking, communication, and the ability to see the whole problem more valuable, not less.

I love creating systems to solve problems efficiently.

Next projectExploring AI for organizational knowledge