FIRSTKNOCK
Cold-outreach job search, built on a candidate graph
A resume-to-outreach platform that replaces "spray and pray" job applications with a knowledge-graph-powered, personalized cold-email pipeline targeting recently-funded startups.
Problem
Job seekers applying through traditional job boards compete with hundreds of other candidates per posting and rarely get a response. Startups that just raised funding are actively hiring but hard to reach through standard channels.
Solution
Users upload a resume, which is parsed and enriched into a knowledge graph capturing explicit and inferred skills, work history, projects, and education. This graph is cross-referenced against a continuously scraped database of actively-hiring, recently-funded startups (Y Combinator's Work at a Startup) to surface high-fit opportunities and generate personalized outreach to the actual hiring decision-makers, rather than an ATS.
Tech stack
- Frontend — Next.js 16 (App Router), TypeScript, Tailwind CSS v4, shadcn/ui, TanStack Query, Framer Motion.
- Backend — FastAPI (Python), async ingestion pipeline.
- Data layer — Memgraph (graph database) for the skills/entity graph, PostgreSQL (via Alembic migrations) for relational data, and OpenAI vector embeddings for semantic matching.
- Async processing — Celery with dedicated queues (ingestion, enrichment, embedding) plus Redis.
- Data acquisition — a custom Python scraper against Algolia search infrastructure, scheduled via GitHub Actions, writing to Neon Postgres.
- Graph visualization — @memgraph/orb, canvas-based interactive graph rendering.
Key features
- Multi-stage async ingestion pipeline — resumes move through parsing, LLM-based extraction, entity resolution, graph construction, skill inference, and enrichment (GitHub/LinkedIn), with real-time status polling on the frontend.
- Skill inference engine — surfaces skills a candidate didn't explicitly list, using graph relationships (e.g. inferring framework proficiency from project/company context) with confidence scoring and explainable reasoning chains.
- Interactive graph dashboard — a live, explorable visualization of a candidate's professional network (skills, companies, projects) with hover/filter/drill-down interactions.
- Automated startup job intelligence — a scheduled scraper that indexes actively-hiring YC-backed companies daily, filtering out stale/closed listings.
- Designed for extensibility — enrichment sources (GitHub today; LeetCode, Kaggle, Google Scholar, Stack Overflow planned) are built as a pluggable enricher registry keyed by domain.
Architecture highlights
- Decoupled ingestion via job queues — 202 Accepted in under 200ms, with async processing tracked through a defined state machine: queued → parsing → extracting → resolving → persisting → graph_building → inferring → enriching → enriched.
- Polyglot persistence — a graph DB for relationship-heavy queries, a relational DB for structured records, and a vector store for semantic similarity search.
- Clear separation of concerns in the pipeline — parsers, extraction, resolution, normalization, persistence, graph, inference, enrichment, and embedding as independent stages.
Status
Actively in development — the ingestion pipeline, graph enrichment, and dashboard are functional; the job-matching and automated cold-email generation layer is the current build focus.