Hirenix
Full-Stack AI Career Intelligence Platform & Semantic Resume Matching Engine
// 01. THE PROBLEM
ATS keyword matching misses contextual candidate experience and codebase quality, while job seekers lack objective feedback on application alignment. Existing screening tools rely on static keyword matching rather than semantic similarity.
// 02. SYSTEM ARCHITECTURE & PIPELINE FLOW
Candidate Document & Repo Parser
Async FastAPI ingests Resume PDF, GitHub repository commit history, and LinkedIn profile into normalized candidate JSON.
OpenAI Text Embedding & pgvector Indexing
Generates 1536-dimensional embeddings co-located with relational candidate data in Supabase pgvector (<200ms search).
GPI Code Quality & ATS Match Scoring
GitHub Production Index (GPI) algorithm scores code complexity, commit consistency, and stack diversity alongside ATS match precision.
Groq Real-Time Voice Interview Evaluator
Decouples speech analysis to Groq LPU hardware for sub-2-second voice interaction and real-time interview evaluations.
// 03. TECHNICAL APPROACH & DECISION MATRIX
01Hybrid Semantic Embedding & Vector Search
FastAPI + Supabase pgvector co-located with relational DB
Co-locating relational candidate profiles and vector embeddings inside PostgreSQL eliminated cross-service network hops and guaranteed atomic transaction updates.
External Vector SaaS (Pinecone / Qdrant)
External services introduced duplicate data syncing pipelines, extra network latency, and severed relational joins.
02Multi-Provider LLM Orchestration
Groq LPU (LLaMA 3) for real-time speech + NVIDIA NIM for analytical scoring
Decoupling real-time speech evaluation to Groq hardware achieved sub-2-second voice response latencies needed for realistic interview simulation.
Single API Provider Fallback Loop
Standard cloud providers suffered from 4-8 second TTFT spikes, breaking natural conversational flow.
// 04. CORE ARCHITECTURAL LOGIC
Co-located PostgreSQL pgvector cosine similarity search combined with ATS metadata filtering in an async FastAPI endpoint.
1234567891011121314151617181920@app.post("/api/v1/candidates/search", response_model=List[CandidateMatch]) async def search_candidates( request: JobSearchRequest, db: AsyncSession = Depends(get_db_session) ): # Generate vector embedding for input job description query_vector = await embedding_service.get_vector(request.job_description) # Execute pgvector cosine similarity match co-located inside PostgreSQL stmt = ( select(Candidate, Candidate.embedding.cosine_distance(query_vector).label("distance")) .where(Candidate.is_active == True) .order_by(text("distance ASC")) .limit(request.top_k) ) results = await db.execute(stmt) return [ CandidateMatch(candidate=row.Candidate, match_score=round(1.0 - row.distance, 4)) for row in results ]
// 05. TRADE-OFFS & HONEST REFLECTION
Truncated resume PDF text extractions to 4,000 tokens before embedding to maintain sub-200ms API response times. Reduced vector storage overhead by 60% with negligible loss in semantic matching precision.