01 · A
Problem
Career workflows mix untrusted web pages, personal documents, model output and long-running tasks. A chat-only architecture would hide failure states, provenance and consequential writes.
Reliable workflow before autonomous agent
A typed monorepo for structured job data, resume ingestion and observable background work, with explicit security and authorization boundaries.
TL;DR

01 · A
Career workflows mix untrusted web pages, personal documents, model output and long-running tasks. A chat-only architecture would hide failure states, provenance and consequential writes.
01 · B
The current platform divides a TypeScript monorepo into a Next.js web app, tRPC/Zod contracts, Prisma persistence, BullMQ/Redis workers and an isolated crawler service.
I use this workflow illustration to make task state, URL checks, resume versions and the review-before-commit gate legible in one place.

Career data is personal and application state is consequential. Typed contracts, durable task status and explicit authorization keep failures diagnosable and prevent an assistant from silently acting beyond user intent.
Public URL imports must reject unsafe schemes, private targets, dangerous redirects and oversized responses.
Model-produced job data must pass a schema before persistence.
Long-running work needs durable state and explicit failure reporting.
Current development identity and SQLite persistence are not production authentication or storage.
Untrusted URL boundary
Every redirect and resolved target stays inside resource and network rules before content can become a structured record.
Treat page and redirects as untrusted
Reject unsafe protocols and private targets
Revalidate hops, timeout and body size
Provider output must pass Zod
Human-approved data enters application state
System path
Import job pages and upload resumes through bounded interfaces
Apply tRPC/Zod contracts before data becomes business state
Run crawler and BullMQ workers with persisted TaskRun status
Expose editable records, application state and explicit failures
Durable task lifecycle
Persisted status lets the web application explain waiting, progress and failure even when the worker runs in another process.
Task record exists before work begins
Worker claims the task and reports progress
Validated result is attached to the record
Failure reason remains queryable
A controlled decision starts the next attempt
Key trade-offs
Queue messages trigger work; TaskRun remains the queryable record of queued, running, completed or failed state.
Crawler controls keep untrusted fetching outside the main process and validate redirects and resource limits.
Provider output becomes application data only after schema validation; a model response is not a database record.
04 · A
04 · B
01Agent products start with verifiable state, limited authority and deterministic writes—not with more tools.
02Async architecture earns its complexity only when status, retries and failures are observable.
What I can share
I am developing this platform around monorepo boundaries, data flows, structured job extraction, controlled URL retrieval and asynchronous resume processing. It is a prototype: identity and SQLite persistence are development-oriented, and several Agent/RAG processors remain in progress.
Public sources