CVision is an AI-powered CV and career analysis platform. Users upload a resume, paste a job description, or ask career questions through a chat interface — and receive real-time streaming feedback. No sign-up required.
- Landing page: https://cvision-llpy.onrender.com
- Chat interface: https://cvision-llpy.onrender.com/chat.html
- AI-Powered CV Analysis — Upload your resume and a job description to get a detailed match score, skill gap analysis, and actionable recommendations
- Real-Time Chat — Stream responses token by token over WebSocket for a fluid conversational experience
- Document Parsing — Supports PDF and DOCX uploads with automatic text extraction
- No Sign-Up Required — Start analyzing immediately with zero friction
- Privacy-First — All documents processed securely; no account or data retention required
- ATS Keyword Detection — Identifies missing keywords that could hurt your application in applicant tracking systems
The system routes messages through an agent pipeline coordinated by server/routes/chat_router.py:
- Text messages →
agent_handler.py→CVisionAgent→ Flowise AI (SSE streaming) - File uploads → Celery
cv_analyzertask → n8n Parser API (PDF/DOCX parsing) →CVisionAgent→ Flowise AI
The CVisionAgent (server/agent/cvision_agent.py) wraps external AI services — Flowise for LLM-powered analysis and n8n for document parsing — streaming results back chunk by chunk.
Redis Streams decouple the producer (agent/Celery) from the consumer (WebSocket):
- Producers —
agent_handler.pywrites each SSE chunk from Flowise totask_{task_id}viaXADD; the Celery task writes status updates and parsed results - Consumer — the WebSocket handler blocks on
XREADpolling, forwarding each event to the frontend - Stream pattern —
task_{task_id}per session; event fields:{event, data}
Uses Upstash (serverless Redis) with sync Redis for writing and async Redis for the polling loop.
- Endpoint:
ws://host:port/ws/v1/chat/ - Protocol: Bidirectional JSON messages
- Flow: Client sends text/binary → server writes events to Redis Stream → server polls and forwards to client → client renders tokens incrementally
- Frontend —
ChatClientclass infrontend/chat-core.jsmanages auto-reconnect, stream bubble accumulation, and file-to-base64 conversion
- Frontend: HTML, CSS, JavaScript (vanilla)
- Backend: FastAPI (Python)
- WebSocket: Real-time bidirectional streaming
- Message broker: Redis Streams (Upstash)
- Background workers: Celery (Redis broker)
- External AI: Flowise (LLM), n8n (document parsing)