A semantic search engine and AI assistant for CV skills built on Cloudflare's edge platform. The assistant provides outcome-driven, recruiter-ready answers that focus on measurable business impact rather than generic claims.
- Outcome-Driven Responses: Every answer follows the template: Skill → Context → Action → Effect → Outcome → Project
- Semantic Search: Vector-based similarity search using D1 + Workers AI embeddings
- Edge-Native: Runs on Cloudflare Workers with D1 database and Vectorize
- AI-Powered Replies: LLM-generated responses via Workers AI (@cf/meta/llama-3.2-3b-instruct)
- No Fluff: Avoids recruiter buzzwords, focuses on measurable results
- Fully Automated: One-command deployment with PowerShell automation
- Turnstile Protected: Cloudflare Turnstile prevents bot abuse
# Full automated deployment (recommended)
npm run deploy:fullThis single command:
- ✅ Builds TypeScript
- ✅ Deploys to Cloudflare Workers
- ✅ Checks/applies database migrations
- ✅ Seeds data if needed
- ✅ Generates embeddings (64 records)
- ✅ Runs health checks
- ✅ Takes ~2-3 minutes total
# Install dependencies
npm install
# Build TypeScript
npm run build
# Deploy worker
npm run deploy
# Apply schema migration
wrangler d1 execute cv_assistant_db --remote --file=migrations/003_add_outcome_fields.sql
# Seed database
wrangler d1 execute cv_assistant_db --remote --file=migrations/002_seed_data_tech_only.sql
# Index vectors
npm run index:remote
wrangler d1 execute cv-assistant-db --file=migrations/001_initial_schema.sql
# Seed data
wrangler d1 execute cv-assistant-db --file=migrations/002_seed_data.sql
# Deploy
npm run deploycurl "https://your-worker.workers.dev/query?q=Tell me about your microservices experience"Response:
{
"query": "Tell me about your microservices experience",
"results": [...],
"assistantReply": "With 5+ years of advanced experience in Full‑Stack Service Decomposition at CCHQ, I broke down monolithic applications into modular services. This enabled teams to deploy independently, cutting release cycles from weeks to days.",
"source": "d1-vectors",
"timestamp": "2025-01-15T10:30:00Z"
}"I'm an exceptional engineer with a proven track record in microservices."
"With 5+ years of advanced experience in Full-Stack Service Decomposition at CCHQ, I broke down monolithic applications into modular services, cutting release cycles from weeks to days."
The technology table includes outcome-driven fields:
CREATE TABLE technology (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
experience_years INTEGER,
level TEXT,
summary TEXT,
action TEXT, -- What was done
effect TEXT, -- Technical effect
outcome TEXT, -- Business result
related_project TEXT, -- Project context
-- ... other fields
);Set environment variables in wrangler.toml:
[vars]
AI_REPLY_ENABLED = "true"GET /orGET /health- Health checkPOST /queryorGET /query?q=<query>- Semantic search with AI replyPOST /index- Index all skills into vectors
- Cloudflare Workers - Edge compute
- D1 - SQLite-based database
- Workers AI - Embedding generation and LLM responses
- Vectorize - Vector similarity search (optional)
- TypeScript - Type-safe development
- Vitest - Unit testing framework
Run the test suite:
# Run all tests
npm test
# Run tests in watch mode
npm run test:watch
# Run with coverage
npm run test:coverageTest Coverage:
- Service layer tests (QuestionValidator, ResponseValidator, ProjectDetector)
- Error handling and type utilities
- 156 test cases with comprehensive edge case coverage
- Re-seeding Guide - How to update AI data
- Schema Migration Guide -
⚠️ Read this before adding new fields - Re-seed Solution Summary - Quick reference
Built with ❤️ on Cloudflare's edge platform