A directory where money can't buy rank
My role
A Cognilium venture (manager and product/editorial lead: Ali Ahmed). My role is the engineering: the database design, the data pipeline, and the directory app, not the venture, the scoring brand, or the editorial.
The problem
The directory needed a structured, trustworthy data model for hundreds of legal-tech products and a fast site to serve it, with rankings that money could not distort.
What I did
- Designed a 16-table normalized schema around a 62-column products hub: vendors, categories, buyer-types, plans, integrations, plus the join tables. Postgres canonical, SQLite at runtime via better-sqlite3.
- Made the ranking unbuyable: the is_sponsored flag lives on a product but appears in zero ranking queries, so paid placement never touches sort order, and the published 0-100 score is the exact sum of its declared sub-scores (capability, transparency, validation, completeness, maturity).
- Put a provenance receipt on every field (source, method, verified_at, status) and shipped FTC-grade review rails (identity tier, disclosure, incentivization, salted fraud-IP hash) before the first review exists.
- Built the directory as a ~2,000-page Next.js app (43 page types, 22 components, SSG/ISR) reading the database directly, with build-time guardrails that fail the build if any published figure stops matching the data.
- Ingested 575 products and 508 vendors across 10 categories from the competitive scrape, normalized and deduped.
The result
A 575-product directory with a transparent, unbuyable scoring model and a provenance trail on every field. Pre-launch; the database structure is shown below.
The judgment call: what the AI couldn't do
The obvious schema lets money tilt the rankings: add a sponsored flag, let it weight the sort. I put is_sponsored on the product but kept it out of every ranking query, and made the published score the exact sum of its declared parts, so paid placement can't move a rank and the number can't be fudged. On an unlaunched directory, deciding money never touches sort order is a trust decision encoded in the schema, not a prompt.
By the numbers
0
products structured
0
tables, 62-col hub
0
sponsored in ranking
0
pages generated
See it
Proof
Status: Pre-launch (Cognilium venture), no public URL yet.
On request: The schema, the scoring model, and a walk-through of the app.
Take it with you