← Selected workFieldwork
INDEPENDENT PROJECT / CASE STUDY 01

Fieldwork.

Research with receipts.

An AI-assisted product research workspace that collects sources, calls tools, checks factual report content against exact source excerpts, and makes uncertainty visible.

138Backend tests passed
9Frontend tests passed
CI ✓GitHub Actions verification passed

Recorded September 27, 2026. See verification record ↗

An AI answer isn't the same as evidence.

Product research is useful only when you can trace conclusions back to their sources.

My goal was to build a research workflow that does more than generate a plausible-sounding report. It needed to collect real search results, preserve source references, handle failures honestly, and enforce boundaries on what the model could submit.

Fieldwork accepts a product idea and optional cost inputs, launches a research job, shows activity as it runs, and saves the resulting report with citations and limitations. The application is a research aid—not a source of independently verified market intelligence.

One agent. Bounded tools. Verified references.

The system keeps the model's decisions separate from the server's rules. The agent chooses from validated tools; the backend decides what evidence and calculations are accepted.

SYSTEM MAPSIMPLIFIED ARCHITECTURE, NOT A SCREENSHOT
01 / INTERFACEReact workspaceSubmit idea · read activity · view reports
02 / API + STATEFastAPI + SQLValidate request · queue job · persist events
03 / EXECUTIONWorker + Ollama agentBounded tool-calling loop · timeouts
RESEARCH TOOLTavily searchCapture source IDs + excerpts
CALCULATION TOOLDecimal mathCompute from provided cost inputs
04 / GUARDED OUTPUTReport validationResolve exact excerpts · reject invalid claims · save report

Conceptual flow based on the repository architecture. Tool calls may repeat within configured limits.

Decisions behind the build.

01

Evidence comes from the server.

The model selects source IDs and excerpts. Server-side code resolves exact quotes and rejects missing, mismatched, or duplicate references rather than trusting invented citations.

02

Tool use has limits.

Native Ollama calls are restricted to a validated tool registry, with bounds on turns, calls, request time, and recovery behavior.

03

Research is a durable job.

A SQL-backed queue tracks jobs and tool events, supports session-private history, and preserves explicit failed or partial states rather than silently losing errors.

04

Numbers don't come from guesses.

Optional contribution-margin calculations use Decimal arithmetic and only the original user-supplied cost scenario. Without enough inputs, the app explains the limitation.

Tested locally. Limitations documented.

V1 completed automated checks, local real-provider acceptance, and remote GitHub Actions verification. That includes backend behavior, frontend error states, report validation, and PostgreSQL migration checks in CI.

Backend: 138 tests

Validation, session boundaries, provider handling, persistence, queue limits, timeouts, and evidence contracts.

Frontend: 9 tests

Interface interactions, API client behavior, failure states, and build/typecheck/lint checks.

Local acceptance + remote CI

Ollama/Tavily acceptance with manual evidence review; GitHub Actions passed, including PostgreSQL migration checks.

Good AI systems need ordinary engineering.

The most valuable work wasn't just getting a model to answer. It was building validation, error handling, persistence, and tests around it.

Fieldwork helped me practice full-stack API boundaries, asynchronous job execution, external provider integration, schema design, and the distinction between a convincing model output and a verifiable system result.