← Portfolio
Current Era // Jan 2026

VetRD

Veteran Resource Directory — AI-powered resource discovery connecting Veterans with 21,000+ resources across employment, housing, healthcare, legal aid, and more.

TypeScript, Python, Go 19 MB Live at VetRD.org

Project Overview

A full-stack Veteran resource directory: FastAPI backend on Railway, Next.js 15 frontend on Vercel, and PostgreSQL for persistence. Aggregates resources from VA.gov, Department of Labor, HUD, nonprofits, and community organizations. Veterans describe their situation in natural language and get matched with relevant resources through AI-powered semantic search. Built with radical transparency about its use of web scraping and AI.

21,000+
Resources
5,600+
Organizations
58
Data sources
18
Connectors
12
Categories
AI
Semantic search

Tech Stack

Python 3.12 + FastAPI backend with SQLModel ORM and Alembic migrations. Next.js 15 frontend with TypeScript, Tailwind, and shadcn/ui. PostgreSQL on Railway for production, Docker for local development. Claude API powers extraction, search enhancement, match explanations, and a chat assistant. Custom ETL pipeline: connector → normalize → dedupe → enrich → load.

Python ~45% TypeScript ~45% CSS ~10%
FastAPI Next.js 15 PostgreSQL Claude API SQLModel Tailwind shadcn/ui Railway Vercel Alembic Postgres FTS Haversine

Architecture

Two-service architecture: Next.js frontend on Vercel talks to FastAPI backend on Railway. The backend orchestrates 18 data connectors, a full ETL pipeline, trust scoring, and an AI layer powered by Claude for extraction and semantic search.

Next.js Frontend (Vercel / vetrd.org)
    |
    REST API + Search + Chat
    |
FastAPI Backend (Railway)
    |--- 18 Connectors ---- VA APIs, DOL, HUD, nonprofits
    |--- ETL Pipeline ----- Normalize → Dedupe → Enrich → Load
    |--- Trust Scoring ---- Reliability × Freshness
    |--- AI Layer --------- Claude extraction + semantic search
    |
PostgreSQL (Railway)
    21,000 resources | 5,600 orgs | 58 sources
💼
Employment
🎓
Training
🏠
Housing
Legal
🍲
Food
Benefits
🧠
Mental Health
🤝
Support Services
Healthcare
🏫
Education
💰
Financial
👪
Family

Key Features

🤖
AI-Powered Search
Semantic search understands intent. "I need help paying rent" matches housing assistance even without exact keywords.
🛡
Trust Scoring
Every resource scored: Reliability (source tier 1-4) × Freshness (time since verification). Tier 1 = VA.gov/DOL, Tier 4 = community directories.
🔌
18 Data Connectors
VA Lighthouse, CareerOneStop, USAJobs, SSVF, HUD-VASH, GPD, SkillBridge, Legal Aid, Veterans Courts, State VA offices, and more. Each runs on schedule.
ETL Pipeline
Connector → Normalize → Deduplicate (85% title similarity) → Enrich (geocode, trust score) → Load with audit trail.
💡
Match Explanations
Results explain WHY they matched: "Matches your location (Texas)", "Covers employment resources", "Last verified: 3 days ago".
🔒
No PII Policy
No accounts required. No Veteran personal data stored. No search tracking. Anonymous aggregated analytics only.
🧬
AI Agent Swarms
Up to 17 Claude agents (Opus + Haiku) working in parallel — building connectors, researching data sources, implementing features simultaneously.
🚀
Partner API
API key-based partner submission for organizations to contribute resources directly to the directory.

Stats

Jan 13
Created, 2026
21,000+
Resources
5,600+
Organizations
58
Data sources
18
Connectors
12
Categories
Live at

Lessons Learned

01

Trust is Everything

A resource directory is useless if data is stale. The trust scoring pipeline (reliability × freshness decay) was the most important architectural decision.

02

Connectors Scale, Manual Entry Doesn't

Started with manual entry, hit a wall fast. The connector pattern (each source gets its own adapter) let us go from dozens to 21,000 resources.

03

AI Agent Swarms for Data Collection

Running 10-17 Claude agents in parallel (Opus for complex tasks, Haiku for research) was the breakthrough. One person + AI swarm = thousands of verified resources.

04

Veterans Don't Search Like Engineers

"I need help" is a valid search query. Semantic search + match explanations bridge the gap between how Veterans describe their needs and how resources are categorized.