ResearchX
A deep-research studio where you bring your own model, storage, and memory; choose a research methodology before a single query fires; and every claim in the final report is anchored to a visited, verified, quotable source.
Status: MVP in development (milestone v0.2) — the approved v0.1 prototype frontend (mock-backed) plus the FastAPI backend, research engine, adapter layer, and trust loop. The frontend runs standalone on mock data; live backend mode arrives with v0.2 phase 3.
Quickstart
# frontend (prototype, mock-backed — works today)
cd frontend
corepack pnpm install
corepack pnpm dev # http://localhost:3000
# backend (MVP — uv manages Python 3.12 and the venv)
cd backend
uv sync # installs deps + editable researchx package
uv run uvicorn researchx.api.app:app --reload --port 8000
uv run pytest # full suite, zero API keys
Three clicks from cold start to initiated research.
Monorepo command map
| Layer | Install | Dev | Gates |
|---|---|---|---|
| backend (uv, Python 3.12) | uv sync |
uv run uvicorn researchx.api.app:app --reload --port 8000 |
uv run ruff check src tests · uv run mypy src · uv run pytest |
| frontend (pnpm 12.6) | corepack pnpm install |
corepack pnpm dev |
corepack pnpm typecheck · corepack pnpm lint · corepack pnpm test · corepack pnpm build |
Adapter configuration (v0.2)
All keys resolve from env files only (.env, .env.secrets, .env.* — never the shell environment, never git):
| Variable | Scope | Used by |
|---|---|---|
OLLAMA_API_KEY |
model (cloud) | Ollama cloud endpoint https://ollama.com/v1; absent/keyless falls back to http://localhost:11434/v1 automatically |
OLLAMA_BASE_URL |
model | Overrides the default cloud base URL |
TAVILY_API_KEY |
search | Tavily default search; absent falls back to the keyless DuckDuckGo adapter (degraded mode — surfaced in the run trace) |
The test suite needs no keys: fake model/search adapters (REQ-31) drive every engine test.
What's in the prototype
| Screen | What it does |
|---|---|
/ask |
One question box + one optional context box — plus two opt-in helpers below and beside them: open-question suggestions (follow-ups from your past runs, one click fills the box) and the Refine question dialogue (a few clarifying answers → a composed, sharper question). Neither ever auto-starts. |
/choose |
All 8 locked methodology cards — mock ETA, cost estimate, why-recommended, and the 12 methodology dials behind each card's Advanced drawer. |
/run/[id] |
Plan & Run: approve the research plan (sub-questions, source universe, outline), watch the live trace stream, pause/resume or cancel. |
/run/[id]/report |
Reading Room: the report with page-anchored citations — hover or focus any [n] marker for the exact quoted passage — plus the citation ledger and Markdown/JSON exports. |
/library |
Stored reports filed into auto-categorized folders (sortable, links into the Reading Room), the Connections panel (shared sources ⇄, related topics →), plus v2-preview project graph and task inbox. |
/settings |
API-key status (masked, never raw), the reports storage directory, methodology defaults with the resolved 12 dials, appearance, and about/version. |
The persistent shell (every screen): sidebar nav + adapter connection-status dots, top bar with the ⌘K navigation palette (screens + stored reports) and the avatar menu (local profile, Settings, About).
All data flows through a typed ApiClient interface backed by MockApiClient — the same components will talk to the FastAPI backend via the OpenAPI-generated client in the MVP milestone, with zero rewrites.
Scripts
Run inside frontend/:
| Command | Purpose |
|---|---|
pnpm dev |
Dev server on :3000 |
pnpm build |
Production build |
pnpm lint |
ESLint (flat config) |
pnpm typecheck |
tsc --noEmit (strict) |
pnpm test |
Vitest + Testing Library (jsdom) |
Repository layout
frontend/ Next.js 15 App Router, TypeScript strict, Tailwind v4, Vitest
.ciagent/ Pipeline state (roadmap, requirements, plans, checkpoints)
Milestone v0.2 (MVP: FastAPI backend, research engine, adapter layer, trust loop) begins only after this prototype is approved.