Skip to content
← Back to CareerStar
CareerStar · System Architecture

Rate careers like stocks — one app, defensible by design

A single full-stack Next.js app with a deterministic scoring engine at its core. An LLM explains the score; it never computes it. Free-text is treated as data, not instructions. Stateless, no database, deployed on AWS.

What is this page & how do I use it?

This page is the engineering view: how the software is put together — the offline data pipeline, the deterministic scorer, where the LLM is (and isn’t) allowed to act, and the design rules that keep it defensible.

How to use it: follow the diagram left to right to trace how data becomes a score, then skim the numbered design decisions below it — each one names the failure it prevents.

Offline data pipeline · runs once on the author's machine
BLS
growth + pay · public domain
O*NET-SOC
occupation codes
Eloundou
AI exposure · MIT
join
Crosswalk + join
on SOC-2018 codes
data.json
committed dataset
Runtime · Next.js 16 app on AWS Amplify
Browser UI
single screen · free-text
POST
Security gate
validate · cap · rate-limit
Scorer
pure · deterministic · 0–100
score
Claude Haiku
explanation only · optional
Score cards
+ why + redirect
Deployment
AWS Amplify
SSR · CI/CD
Route 53
custom domain — ashleylibasci.com
Auto HTTPS
managed TLS
Env secrets
server-side only

Architecture decisions7 invariants

AD-1
One Next.js app, TypeScript end to end
Prevents a needless second service.
AD-2
Scorer is pure; the UI only renders
Prevents two sources of truth drifting.
AD-3
Join offline, read at runtime
Prevents fragile in-request data joins.
AD-4
The LLM explains, never decides
Prevents the thin-wrapper failure.
AD-5
Free-text is data, not instructions
Prevents prompt injection + cost abuse.
AD-6
Stateless — no accounts, no DB
Prevents unneeded data-governance surface.
AD-7
AWS Amplify hosting, auto HTTPS
Prevents ops sprawl + insecure config.
Next.js 16 · TypeScriptClaude · claude-haiku-4-5Data: BLS · O*NET · Eloundou 2023Deploy: AWS Amplify