Project

Axiomatiq Ratings Platform

Generalizable AI ratings platform using agentic LLM workflows. Two live consumer deployments.

What it is

A generalized platform that uses agentic LLM workflows to extract structured product data from unstructured sources, generate embeddings, and sync the results to consumer-facing sites. Currently deployed across two verticals: artisanal foods (tastemongers.com) and chef's knives (edgemongers.com).

Why I built it

Product reviews live in scattered, unstructured text: blog posts, forums, retailer descriptions. Most ratings sites either rely on hand-curated data or shallow aggregations of star averages. I wanted to see whether agentic LLM extraction could produce ratings that were rigorous and domain-aware, then test whether the same pipeline could generalize across verticals without rewriting the model layer.

How it works

Axiomatiq architecture: research request flows through NextAuth, an orchestrator fetching rubrics from Neon, parallel calls to Tavily search and Claude Sonnet for analysis, then structured JSON stored to PostgreSQL and served to consumer sites
End-to-end pipeline: a single research request triggers web search, LLM rating analysis, and product data lookup in parallel, with results persisted to PostgreSQL and served to both consumer sites.

The pipeline runs in stages:

  1. Source ingestion: product references and unstructured text (descriptions, reviews) are collected per niche.
  2. Agentic extraction: a hand-rolled orchestration layer (no framework) drives Claude Sonnet via the Anthropic SDK to extract domain-specific fields (e.g., "edge sharpness" for knives, "flavor complexity" for cheese). The prompt includes the niche-specific rubric and asks the model to return structured JSON with both ratings and the supporting evidence. The response gets parsed and validated against a TypeScript interface before persistence.
  3. Embedding + persistence: extracted fields and source text are embedded and persisted to a Neon Postgres database alongside the structured rating record.
  4. Sync to consumer sites: the public Next.js sites read directly from the same Postgres instance via a serverless connection.

The platform's generalizability comes from treating the rating rubric as data, not code. Adding a new vertical means inserting a niche row + rubric definitions; the extraction prompts assemble themselves around the rubric.

What I learned

Links