A job search.
With direction.
From scattered Telegram posts to a clear next step.
JobFlow AI connects discovery, explainable matching and factual application preparation in a private local workspace.
Public demo: fictional vacancies, profiles and outcomes.
- Discover
- Match
- Prepare
- Review
- Apply
- Track
One workspace. Every next step visible.

Explain the match.
Keep evidence, gaps and unknowns visible.
Review before applying.
Drafting and submission stay separate.
Keep the real search local.
Only fictional data reaches the public demo.
From a personal need to a reviewable system.
A fragmented search has a hidden coordination cost.
A candidate checks Telegram communities, compares unstructured posts with a CV, prepares application materials and tracks responses across separate tools. Useful opportunities can disappear into duplicated posts, vague requirements and forgotten follow-ups.
The product brief comes from Albina's own intended job-search workflow. No formal discovery interviews or measured productivity improvement are claimed.
Make the next decision easier to inspect.
Target users are early- and mid-career product, business-analysis, analytics and UX professionals searching across UAE, Russian and international remote markets. The MVP prioritizes repeatable intake, understandable ranking, factual preparation and a reliable application record.
A preference score is an aid to review, never a probability of hiring. Missing salary or visa information remains a question, not a guessed benefit.
Discover → Match → Prepare → Review → Apply → Track
The candidate enables accessible sources, reviews extracted requirements and matching evidence, saves a vacancy, selects a CV version, prepares a grounded draft, submits through the original platform and manually confirms the application.
Preparing a cover letter never changes the application to Applied. Recorded status changes form an immutable timeline, with separate follow-up and interview dates.
One local application. Two explicit privacy boundaries.
FastAPI serves a buildless accessible interface and same-origin API. SQLite stores source/message identity, ingestion cursors, structured vacancies, CV versions, factual evidence, letters, applications, status events, feedback and a notification outbox. A supervised asyncio scheduler handles periodic work.
The public Pages build contains only allowlisted static assets and a newly generated fictional dataset. Its browser adapter persists sandbox changes locally and has no connection to private API routes or Telegram sessions.
Resume from a committed position.
Telethon uses the official user-client authorization flow. Initial history is bounded; subsequent polls proceed oldest-first above a durable per-source cursor. A message and cursor are committed in one transaction. Live events do not advance the catch-up cursor, avoiding gaps when an event arrives before a missing earlier post.
Edits reparse the original text while preserving manual corrections; deleted messages are soft-deleted and application history remains. Event coverage is limited by Telegram. A bounded recent-message reconciliation also catches some changes missed while offline. Flood waits are respected and unavailable sources are visible.
Separate evidence, gaps and unknowns.
The rule-based bilingual parser extracts explicit requirements and leaves absent fields null. Matching uses adjustable design weights for role, skills, experience, location, seniority and other preferences. Confirmed restrictions can block an application; missing work authorization is an unknown.
Verified skills quote a CV. Self-reported statements require approval. Inferred proposals do not earn confirmed skill credit or enter application letters. Each vacancy keeps its original text and publication link. Manual relevance labels enable bounded quality checks without treating unlabelled examples as negatives.
Draft with evidence. Submit with intent.
Basic Mode composes English or Russian letter scaffolding around approved factual statements, preserved verbatim. Optional local Ollama selects evidence IDs from a constrained schema; unsupported output triggers a deterministic fallback. Free-form model claims never become candidate facts.
CV tailoring reorders approved evidence into a new extract, retaining the original version. Private mode exports DOCX and PDF. Edited letters explicitly lose automatic factual certification and require manual review. There is no mass-application mechanism or recruiter messaging automation.
History is the metric contract.
Funnels use recorded stage membership rather than today's status snapshot. Skipped stages are not inferred. Response time uses the first recorded response after a confirmed application. Salary observations retain their currency and period.
Precision@10 requires labels for every current top result. Recall requires a fully labelled bounded collection. Small samples and self-selection prevent causal conclusions about CV versions, channels or hiring outcomes.
Reliability and trust before reach.
Local-first storage avoids moving personal CVs and Telegram sessions to a portfolio host. A single-user loopback app minimizes infrastructure. Explicit evidence and Basic Mode keep the workflow useful without a paid API or an installed model.
Promotional posts, roundups and exact duplicate content are classified separately. Semantic deduplication and arbitrary vacancy layouts remain difficult; a correction interface is part of the product rather than a claim of perfect extraction.
Report what was actually checked.
56 local automated checks passed, including public/private scorer parity. Actual browser checks exercised discovery, CRM, factual letter edits, bilingual DOCX import and responsive navigation. Runtime dependency audit reported no known advisories on 11 October 2026. Live owner-authorized Telegram ingestion is not yet verified.
A local Windows probe ran an installed qwen3:8b model on fictional evidence. Constrained output selected a supported SQL evidence ID; unconstrained output initially returned an invalid ID. This tests the guard and fallback, not general model quality or hiring effectiveness.
Validate the personal workflow before scaling it.
Authorize Telegram, review enabled channels, add the real CV privately, correct parser errors and label a bounded sample. Measure weekly search time, relevant discoveries, discovery-to-application delay and recruiter outcomes before claiming a product effect.
Later priorities include broader parser evaluation, semantic matching, better multilingual evidence management and time-aware outcome cohorts. Multi-user hosting and direct submissions require a separate privacy and platform-access design.
A product question translated into a working decision system.
Albina defined the target workflow and requirements. The implementation connects product discovery assumptions, a scoped local-first architecture, external-service ingestion, data modeling, interpretable matching, factual generation, application state management and an explicit metric contract.
Development used AI engineering assistance. Portfolio materials distinguish implemented functions, observed verification, authorization dependencies and future work. They claim no unmeasured time savings, user adoption or hiring improvement.