Case Study 02 · Full-Stack · Active
FleetForge
A browser-based studio for building, testing and running web data-collection jobs. A local language model suggests page selectors, and each suggestion is checked before use.
Problem
Every new data source usually means another bespoke scraper, with the same orchestration bugs written again. The slowest step is not even the code: it is a person picking CSS and XPath selectors off a page by hand.
Solution
Scrapers became configuration: a blueprint is JSON run by a shared engine, authored in a visual wizard that loads the target page into a safe embedded render so selectors can be picked by eye. A self-hosted language model proposes a selector for each named role, and each proposal is checked against the page before it is accepted. Celery runs the resulting missions under a concurrency cap with managed browser lifecycles.
Highlights
- Compresses the page before prompting: drops scripts, styles, SVG and other non-content tags, keeps a short attribute allowlist and caps data attributes per element, so a real page fits in a usable prompt.
- Model output is never trusted as-is: suggestions are validated against the page for a fixed set of named roles.
- The LLM client uses only the standard library and speaks an OpenAI-compatible API, so it works with Ollama or vLLM without new dependencies.
- Requests use JSON mode at low temperature, retry once with backoff, and raise typed errors for a malformed reply or a missing provider.
- Separate unit, integration and end-to-end suites, including browser lifecycle under concurrency, with every dependency pinned exactly.
Outcome
Adding a source stopped requiring Python. The LLM assist is a real feature: specified in a design document first, covered by tests, and switched off cleanly when no provider is configured.
How the Work Ran
Solo, run in numbered delivery phases that show in both the commit history and the stylesheet names. Conventional commit prefixes throughout. Design documents were written before the features they describe, including the selector-assist plan, and an architecture document lives next to the code.
Tech
- Celery
- Ollama
- Redis
- Selenium
- Django
- Python
- SASS




