What shipped: a web app, a local CLI, a company-board scanner, an explainable scoring model, a Markdown career record, a 42-tool MCP server, an employer posting and payment flow, a documented npm package, a design system, and a product site.
- As of September 2026: 356 company boards on my own watchlist, and approximately 25,000 postings fetched, deduplicated and scored per full run. A new profile starts with a registry of 304 boards.
- No TekJobs account. The record is Markdown on the user's machine.
- A person between preparation and submission. TekJobs drafts; it never sends.
Every screen of the running app on this page shows the repository's sample profile: Jordan Example, fourteen postings at companies that do not exist.
The problem
Job seekers do not lack listings. They lack continuity.
What shapes a good search is scattered across job boards, browser tabs, resumes, email threads, application forms, spreadsheets, private notes and conversations with AI. Every tool sees one fragment, so the job seeker explains again and again who they are, what they want, what they have already tried, and why earlier roles were turned down.
Most job products add another feed to check. I wanted a system that remembers the search, built on five principles:
- The user owns the record.
- A recommendation explains itself.
- The system reduces decisions. It is not another infinite feed.
- AI can research, organize and prepare. The user decides and submits.
- Models and interfaces can change without erasing the history of the search.
The rest of this page is those five principles, one decision at a time.
The operating loop. Diagram described in text.
Stages:
- Public company boards. Greenhouse, Lever, Ashby, Workday, career APIs: public ATS sources; no keys required.
- Fetch and normalize. About 25,000 postings a run as of September 2026, deduplicated. Marked: Automated.
- Score and explain. Against criteria the user owns; every point has a reason. Marked: Automated.
- A local job record. One Markdown note per match. Marked: Automated.
- Today queue. A bounded set, best fit first. Marked: Automated.
- Review and decide. Shortlist or pass; the reason stays in the note. Marked: Human.
- Prepare the application. Resume variant, cover letter, answers, drawn from the resume of record. Marked: AI-assisted.
- Approve and submit. The person reads it and sends it. Marked: Human.
- Application history. Status log, mail, people, notes; read at the next decision.
Connections:
- Public company boards leads to Fetch and normalize
- Fetch and normalize leads to Score and explain
- Score and explain leads to A local job record, above the bar
- A local job record leads to Today queue
- Today queue leads to Review and decide
- Review and decide leads to Prepare the application, shortlisted
- Prepare the application leads to Approve and submit, a draft
- Approve and submit leads to Application history
- Application history leads to Review and decide, informs (optional or feedback path)
Product decisions
From an inventory to a daily decision
The first model was a large, filterable table of postings. It made the breadth of the data visible, and it did nothing for the hardest part of the workflow: deciding where to spend limited time.
The model changed from here are all the jobs, search and filter them to here are the strongest decisions to make today. That produced Today: a bounded queue of the highest-ranked roles, best fit first, with one decision per row, Shortlist or Pass. Applications already started and follow-ups stay in view, and the page shows what skipping costs: how many postings closed before anyone looked. Unreviewed roles wait in Jobs. Finding and deciding became two modes.

Scoring as evidence, not a verdict
A match score easily becomes an unexplained judgment. In TekJobs every point traces back to a line in criteria the user wrote: title terms, seniority words, description terms, remote and location rules, a pay floor with a stretch band beneath it, recency, and hard exclusions.
Score anatomy: evidence, not a verdict. Diagram described in text.
Stages:
- Criteria you own. Targets/Search Criteria.md, edited on the Criteria page.
- Title and seniority. A title match +40, staff +10; junior −30, no title match −40.
- Description terms. Design system, React, tokens, accessibility: +29, capped at 35.
- Remote and pay. Remote +15; a range that clears the floor +18.
- Recency and exclusions. Posted a day ago +25; a hard exclusion drops the posting.
- Weighted score. 137 of 153 possible; 45 points to become a note.
- Inspectable fit. 90 fit, with one line per signal in the job sheet and the note.
- Your decision. Shortlist or pass, with notes; the score only orders the queue. Marked: Human.
Connections:
- Criteria you own leads to Title and seniority
- Criteria you own leads to Description terms
- Criteria you own leads to Remote and pay
- Criteria you own leads to Recency and exclusions
- Title and seniority leads to Weighted score
- Description terms leads to Weighted score
- Remote and pay leads to Weighted score
- Recency and exclusions leads to Weighted score
- Weighted score leads to Inspectable fit
- Inspectable fit leads to Your decision
The job sheet at the top of this page is that score in the product: it opens beside the list, and the score is a sum you can read, one signal per line. The score answers is this worth my attention today? It does not try to answer should I take this job?
Files before platform
The durable record is not the interface. Profile, criteria, job records, decisions, application history, people and drafts are Markdown in a folder the user chooses. The web app is one view of it; Obsidian, Git, scripts, an agent and interfaces that do not exist yet read the same files.
Local-first: who owns the lasting record. Diagram described in text.
Stages:
- Public boards and feeds. Read-only fetches; no account, no key required.
- TekJobs posting feed. Employer posts, one more source in the scan.
- Your mailbox. Read through your own CLI's Gmail connector, read tools only.
- Scanner. Runs locally, daily at 07:30. Marked: Your machine.
- TekJobs app. A view over the folder, on localhost. Marked: Your machine.
- MCP server, 42 tools. Stdio; reads and writes the same notes. Marked: Your machine.
- Profile folder. Profile, criteria, one note per job, people, logs; plain Markdown. Marked: The record.
- Your agent. Claude Code, Codex, Cursor, Claude Desktop: the one you already use. Marked: Your provider.
- Obsidian, Git, scripts. Anything that reads Markdown.
Connections:
- Public boards and feeds leads to Scanner, postings
- TekJobs posting feed leads to Scanner
- Your mailbox leads to TekJobs app, on request (optional or feedback path)
- Scanner leads to Profile folder, writes notes
- TekJobs app leads to Profile folder, reads, edits
- MCP server, 42 tools leads to Profile folder
- Your agent leads to MCP server, 42 tools, calls tools
- Profile folder leads to Obsidian, Git, scripts, same files
This is the note behind the job sheet above, trimmed:
---
type: job
status: interviewing
company: "Meridian Pay"
title: "Staff Design Engineer"
score: 137
weights: 3e895160
salary: "$225k–$275k"
pay_band: floor
---
## Why it matched
- title +40: design engineer
- seniority +10 (staff)
- description +29: design system, react, typescript, storybook, accessibility, tokens
- remote +15
- pay range tops out at $275k, at or above floor (+10, +8 for 75k above)
- posted 1d ago (+25)
## Status log
- 2026-09-05 — new → **reviewing** (via app)
- 2026-09-07 — reviewing → **applying** (via app)
- 2026-09-12 — applying → **applied** (via app)
- 2026-09-19 — applied → **interviewing** (via app)
## Application
- **Resume variant:** Design Engineer (Staff)
- **Applied on:** 2026-09-12
- **Risks:** No payroll domain experience; say so, and point at fintech at Acme.
The scanner preserves user-authored content and updates only listing state and system-managed metadata. What a user builds up over weeks stays theirs, and does not end up locked inside another hosted service.
AI with a stopping point
TekJobs uses AI where context and synthesis help: the onboarding interview, structuring criteria, explaining matches, researching a company, preparing truthful resume variants, drafting cover letters and answers, and reading optional email signals. It stops before submission on purpose.
Where the AI stops. Diagram described in text.
Stages:
- Scan and organize. Find, dedupe, score, file. Marked: Automated.
- Explain and research. Why it matched; the company and the role. Marked: AI-assisted.
- Draft. Resume variant, cover letter, answers, from verified experience. Marked: AI-assisted.
- Check the draft. Flags any figure not on the resume, stock phrases, placeholders. Marked: Automated.
- Packet ready for approval. Saved into the note; nothing has been sent. Marked: The stopping point.
- Review and correct. Edit anything; the note keeps the result. Marked: Human.
- Approve and submit. The person opens the form and sends it. Marked: Human.
Connections:
- Scan and organize leads to Explain and research
- Explain and research leads to Draft, shortlisted
- Draft leads to Check the draft
- Check the draft leads to Packet ready for approval
- Packet ready for approval leads to Review and correct
- Review and correct leads to Approve and submit
I wanted the leverage without giving up authorship. Drafts are checked against the resume of record: a figure, date or bullet that is not on the real resume gets flagged, and so do stock phrases and placeholders. The packet counts the required fields that are filled, and says plainly that full boxes do not make a good application.

Design system
Density without noise
TekJobs holds tables, scores, filters, statuses, forms, timelines, notes and system feedback. The visual system had to carry dense operational information without turning into a generic enterprise dashboard: a dark working environment in forest greens, Bricolage Grotesque headings over Hanken Grotesk body, Azeret Mono for every number, one lime accent used as a signal, hairline rows instead of boxed tables, semantic color only for status and attention, and no shadows or gradients. The aim was a serious personal instrument, calm under a lot of information.

A score, a status, a decision and a warning should not look interchangeable. Scores are numbers, because they are weighted prioritization. Statuses are words, because they are workflow state. Decisions are explicit actions, Shortlist and Pass. Warnings use color only when the user has to act. Metadata is quieter, and system activity is monospace.
Part of the component set, the parts the product screens above use. Sample rows use fictional company names.
The same patterns carry the employer side. The app is built on Zengin, and its design-system check runs before every release.
From mockup to production
I treated the mockups as hypotheses about how the workflow should behave. Using TekJobs in my own active search showed where the interface asked for too much attention, where statuses were ambiguous, and where operational information competed with decisions. The mockups came from that search, so their company names are replaced with fictional ones.
The inventory became a decision queue. More information did not create more clarity; the product needed a smaller surface for deciding.

A number became a set of reasons. A number without an explanation asks for trust the system has not earned.

Tracking became distinct states. A status should say what the user can do next, not only what happened.


How it works
- Build the profile. The user's own agent runs an onboarding interview over MCP, starting from the resume, and writes the profile and the criteria as notes. The Criteria page edits them afterwards and previews what a change would do before it is saved.
- Scan. A morning task fetches the configured boards, normalizes and deduplicates the postings, and scores each one.
- Decide. Today, as above.
- Prepare. The job sheet holds the research, the fit and the packet, as above.
- Track. Pipeline holds committed work; Overview answers whether the search is working, from each note's packet.
Criteria: the scoring rules as fields, with the raw JSON one tab over.
Overview on the sample profile. The numbers are only as true as the record.
The employer side
An employer gives the role, the location model, the pay range, the application method, the description, and matching terms, with a panel beside the form that explains how TekJobs will read the post. One Stripe checkout, $49 for 30 days, and the posting becomes one more source in every user's morning scan, scored against their own criteria like any company board. The flow asks only for what affects the outcome, keeps structured signals apart from promotional copy, and never hands an employer a list of who saw the post.
Post a job. The form sits behind the sign-in on the right.
Built for agents, not for one model
TekJobs exposes 42 MCP tools. A compatible agent can check onboarding, read the criteria, run scans, find jobs, explain matches, update records and prepare drafts. TekJobs does not require a model API key. It works through the signed-in AI client the user already runs, whether that is Claude Code, Codex, Cursor or Claude Desktop, and because the record is the files, switching clients changes nothing about the search.
Agent access. One command or one JSON block, and the page lists what a session does, in order.
From personal tool to public product
Publishing the repository was the easy part. The system had to make sense to someone who did not build it: a first-run path tested the way a stranger meets it, a fictional sample profile written by the product's own code, install docs and MCP setup for each client, clear data and privacy boundaries, a product site with terms and a privacy policy, releases cut from commit messages and published through npm's Trusted Publishing, contribution and security docs, and recovery states for a signed-out CLI, a board that moved or a failed fetch.
The design question changed from can I operate this system? to can someone who did not build it understand it, trust it, and recover it?
tekjobs.timurtek.com, the public front door.
Evidence
I built and ran TekJobs during my own job search: evaluating roles, tracking applications, managing screens and interviews, preparing material, and keeping the decisions around each opportunity. It did not replace the work of looking for a job. It made that work coherent, inspectable and reusable.
What I learned
The value is not the job feed. Listings are everywhere. What sets a search apart is the context around them: what the user wants, what they rejected, what they applied to, and what deserves attention now.
Explainability is a product feature. A score is only useful when the user can understand it and argue with it. Showing the signals turned the recommendation into the start of a conversation.
Dogfooding changes the product model. Using TekJobs in a real search exposed problems static mockups did not. The most important redesign was not visual. It was the move from a searchable inventory to a bounded daily decision system.
What comes next
- Make first-time setup easier across the supported agents.
- Make source health, and the effect of a criteria change on the ranking, easier to see.
- Learn from external users, and document the workflows that repeat.
This is the product work I am drawn to: a messy human workflow, an interface that reduces decisions, an AI layer with explicit boundaries, a design system that has to survive real expansion, and infrastructure that stays understandable after the demo ends. TekJobs is all of it in one system that I use and maintain myself.
Try TekJobs → · View the source (opens in a new tab) · Install from npm (opens in a new tab) · Talk to me about building systems like this
