dbaseextractor is a web application that crawls the web and web directories to find and extract email leads on the internet. A lead researcher supplies one or more starting web pages or web directory locations, the application crawls them in the background, extracts every email address it finds, and stores the results as durable, reviewable lead records tied to that researcher's account.
The product intent is narrow and deliberate: turn the open web and public web directories into a usable, persistent contact list. The audience is the solo lead researcher who spends long sessions reading dense result tables and needs a calm, trustworthy tool that keeps crawl history and extracted leads available across sessions rather than a one-shot scraper.
This document is the System Requirements Document for dbaseextractor. It covers the current delivery: public entry, self-service identity establishment, crawl initiation, background crawl execution, and lead review.
dbaseextractor is delivered as a React frontend, a shared FastAPI backend, MariaDB for durable application-owned data, and Redis for crawl job coordination and progress state. The backend runs crawls and extraction as background work and persists crawl and lead records. Identity is application-owned: a new researcher enrolls through Sign Up, and a returning researcher verifies through Login before reaching any protected crawl or lead work.
The single active human actor is the Lead researcher. The application itself (backend crawl and extraction process) is a non-persona system actor that performs the crawl and extraction work the researcher initiates.
Current accepted behavior:
Removed from scope
dbaseextractor is a first-party, application-owned product. All six destinations — Landing, Sign Up, Login, Crawls, New Crawl, and Leads — are custom application pages. There is no provider-owned surface, no external destination, and no headless delivery boundary in the current scope.
Access is split into two boundaries. Landing, Sign Up, and Login are anonymously reachable so a new researcher can understand the product and establish identity, and a returning researcher can verify identity. Crawls, New Crawl, and Leads require login, because crawl history and extracted leads are durable records privately owned by the researcher who created them. A protected destination never owns the interaction that establishes access to itself; enrollment and verification live on their own anonymous pages.
Crawl execution is background automation. The researcher starts a crawl and then observes its progress and results; the backend performs fetching, parsing, and email extraction without further researcher input. Redis coordinates the queued crawl work and progress state; MariaDB holds the durable crawl and lead records.
Everything described in this document is current. No future-horizon capabilities are accepted.
Not applicable. No reference directive with content_source authority was supplied.
FR-1 — Crawl the web and web directories for email leads (explicit) As a Lead researcher, I should be able to start a crawl against one or more web pages or web directory locations so that the application searches the internet for email leads.
FR-2 — Extract email leads from crawled pages and directories (explicit) As a Lead researcher, I should have email addresses extracted from every crawled page and directory so that I obtain a usable contact list.
FR-3 — Self-service enrollment and returning verification (required_inference) As a Lead researcher, I should be able to create an account on Sign Up and verify my identity on Login so that my crawl and lead records stay private to me and available across sessions.
FR-4 — Background crawl execution with durable records (required_inference) As a Lead researcher, I should have my crawls run in the background and their progress and results stored durably so that I can leave and return without losing work.
The creative direction is authoritative: warm editorial for a lead-hunting tool, after Frank Chimero — calm, trustworthy, humane, never hype.
Mode: Light only. No dark mode for this product.
Colour tokens (light mode):
| Role | Hex | Usage |
|---|---|---|
| Background | #F7F1E4 | Cream ground, ~70% of surface |
| Surface | #FFFBF2 | Panels, cards, alternating table rows |
| Text | #221E1A | Ink text and 1px rules, ~20% |
| Primary | #B4451F | Rust CTA bar, primary actions, hero block |
| Accent | #C98A16 | Mustard crawl status fill and links, ~10% |
| Muted | #6E6255 | Secondary labels and metadata |
| Done signal | #4E6E7E | Dusty blue, rare third signal for completed states |
Typography: Headings in Literata at 600 weight, tight leading, sentence case, large and calm. Body in Work Sans. Modular scale 1.25: 56 / 44 / 34 / 26 / 18 / 16 px; body 18px with 1.6 line height. No Inter, Roboto, or system fonts.
Shape language: Soft 12px radii on panels and inputs. Thin 1px ink rules divide rows. No shadows except a faint offset on the lead card.
Layout: Single reading column at 680px for copy. Lead tables span 1120px in a ruled grid. Wide margins; section openers carry small drawn marks.
Imagery: Warm flat spot illustrations of a spider, a folder, and an envelope. Hand-drawn rule marks open each section.
Avoid: No blue or indigo accents on white; no gradient blobs or glass panels; no grid of identical hover-lift cards; no Inter, Roboto, or system fonts; no dark mode.
Responsive readability: Headlines, wordmarks, labels, numbers, card text, and controls stay entirely inside the viewport and their container at 375px, 768px, and 1280px, wrapping or scaling (for example clamp() with a mobile size) to fit, with no element covering them. Imagery and decoration may crop, bleed, or overlap freely as long as they cover no readable text or control.
The public entry is a warm editorial front page. An oversized Literata headline at clamp(56px, 8vw, 112px) sits flush left over the cream #F7F1E4 ground, occupying a left-aligned nine-column measure. To its right, a solid rust #B4451F colour block holds a hand-drawn web-to-envelope diagram in hairline strokes — a spider's web on one side, an envelope on the other, connected by a thin line — expressing the product's single promise: crawl the web, extract the email. Under the headline, the CTA is a solid rust bar (not a pill) leading to Sign Up, with a quiet text link to Login. A small drawn mark and a short serif label open the section below, which states in the 680px reading column that dbaseextractor crawls web pages and web directories and stores the extracted email leads. The concept recomposes only accepted content and controls: the product statement, the Sign Up and Login entry points.
Interaction Model: Animated Motion Tempo: restrained Hero Dimensionality: flat
Landing Hero Motion Brief
prefers-reduced-motion shows the diagram fully drawn and static, with the crawl status bar rendered as a static filled state and plain text count.The crawl status bar on Crawls uses the same restrained vocabulary: a mustard #C98A16 fill that grows in steps beside a plain text count, with no bounce.

dbaseextractor
dbaseextractor crawls web pages and web directories to find and extract email leads, and keeps each one in a list you can return to.
dbaseextractor crawls web pages and web directories to find and extract email leads on the internet, and stores what it finds as a persistent lead list you can return to.
Crawls and leads are private to the researcher who started them, and remain available across sessions — long, careful work, kept in order.

dbaseextractor
dbaseextractor crawls web pages and web directories to find and extract email leads, and keeps each one in a list you can return to.
dbaseextractor crawls web pages and web directories to find and extract email leads on the internet, and stores what it finds as a persistent lead list you can return to.
Crawls and leads are private to the researcher who started them, and remain available across sessions — long, careful work, kept in order.
No comments yet. Be the first!