PagePilot
From a long article to a grounded conversation.
A practical pattern for adding source-aware AI assistance to reading, documentation, and knowledge workflows.
The problem
Reading a long article and asking a model about it are often separate tasks. PagePilot keeps the extracted source, a summary, and follow-up questions in the same workflow so answers can be checked against passages.
The approach
An Axum API validates a public URL, fetches bounded HTML, and extracts readable passages. Separate generation requests stream a selected provider's response to the React interface. Pasted text is available when extraction fails.
- Read extracted content before connecting an AI provider
- Summarize and ask follow-up questions with streamed responses
- Select passages and inspect source citations
- Keep reading history in IndexedDB and export the conversation as Markdown
Follow the flow.
Select a stage to explore its role. This diagram explains the documented design; it is not live infrastructure.
URL or pasted source
The visitor supplies a public page or text; extraction does not require a provider key.
The decisions behind it.
Separate fetch, parse, and generation workloads
Each stage has its own concurrency limit. A full stage returns a busy response instead of creating an unbounded queue.
Keep history local
IndexedDB avoids an account or server database for the current scope. It also means history is not encrypted or synchronized between devices.
Make the source inspectable
Passage selection and citation links support verification. A valid passage link is not proof that a generated answer is correct.
What the evidence supports.
The repository documents Rust tests, Clippy, frontend tests/build, a no-key smoke script, and mocked provider streams. This case study summarizes that verification approach; no paid-provider or load test was run for the portfolio.
Current boundaries
- One public HTML page or pasted document per conversation; PDF upload and multi-page research are not implemented.
- The existing app retains visitor-supplied keys in sessionStorage and receives them transiently on the backend. The portfolio itself accepts no keys.
- JavaScript-rendered pages and authenticated sources are outside scope; provider access and billing are required for generation.
What comes next.
- Validate streaming through the chosen production proxy and provider.
- Measure latency by extraction and generation stage under a declared workload.