A production-grade, local-first mock website designed to generate and serve over 503,000 deterministic pages across 10 diverse verticals. Built with Hono v4, Bun, bun:sqlite, and Tailwind CSS.
Created specifically as a high-performance benchmark testbed for Black Sparrow to test its asynchronous crawler, AIMD adaptive congestion controller, internal PageRank calculator, streaming HTML parser, and 120 technical SEO audit rules.
- Bun (v1.2+ installed)
# 1. Install dependencies
bun install
# 2. Seed the core taxonomy database (generates SQLite & JSON in ~20ms)
bun run seed
# 3. Compile production Tailwind CSS
bun run build:css
# 4. Start local high-speed server (runs on http://localhost:3001)
bun run devThe server will be live at http://localhost:3001!
Generating 500,000 static .html files on disk would take 5–10 GB of storage, hours to build, and strictly violate Vercel's ~15,000 file upload cap.
Instead, this project uses a Hybrid Virtual Database:
- The Backbone (~600 KB on disk): A lightweight SQLite database (
src/db/taxonomy.sqlite) stores the core taxonomy: 50 categories, 500 subcategories, 1,000 brands, 500 cities, 500 authors, and 200 topics. - The Virtual Leaves (0 MB on disk): The 500,000+ leaf pages (products, locations, questions, articles) are deterministically derived from their URL ID via a mathematical PRNG seed (
src/lib/prng.ts).
- When a crawler visits
/p/48291today or six months from now, it always receives the exact same title, price, brand, breadcrumbs, specifications, and related cross-links. - Any request is computed in < 0.05 milliseconds with zero database locks.
| Vertical | URL Pattern | Page Count | Primary Schema.org Structured Data |
|---|---|---|---|
| E-Commerce Products | /p/:id |
120,000 | Product, Offer, AggregateRating |
| Retail Store Locations | /locations/:country/:state/:city/:id |
100,000 | LocalBusiness, PostalAddress, Geo tags |
| Community Q&A Forums | /community/questions/:id |
100,000 | QAPage, Question, Answer |
| Hardware Comparisons | /compare/:id |
50,000 | Product, Review, Comparison Table |
| Technical Documentation | /docs/:id |
50,000 | TechArticle, HowTo, Code blocks |
| Editorial Newsroom | /news/:year/:month/:id |
30,000 | NewsArticle, Article, Author byline |
| Curated Buying Guides | /best/:id |
20,000 | ItemList, Ranked awards |
| A-Z Technical Glossary | /glossary/:letter/:id |
15,000 | DefinedTerm, Phonetic pronunciation |
| Careers & Job Board | /careers/jobs/:id |
10,000 | JobPosting, Salary brackets |
| Events & Podcasts | /events/:id & /podcasts/:id |
5,000 | Event, PodcastEpisode, Full Transcripts |
| Taxonomy Hubs & Legal | /, /category/:cat, /team, /faq |
~3,000 | Organization, WebSite, FAQPage |
| Total Live Pages | ~503,000 | 12+ Distinct Schemas |
A mock website where every page is 100% flawless cannot properly test an audit engine. src/lib/chaos.ts deterministically injects controlled SEO defects:
- HTTP 404 Broken Pages (
1.0%of pages):id % 100 === 13returns 404. - HTTP 301 Permanent Redirects (
0.5%of pages):id % 200 === 7redirects to canonical sibling. - HTTP 302 Temporary Redirects (
0.2%of pages):id % 500 === 23temporary redirect. - Missing
<title>Tags (0.67%of pages):id % 150 === 1omits<title>. - Title Too Long (>70 Chars) (
2.0%of pages):id % 50 === 3triggers length warnings. - Missing Meta Description (
1.25%of pages):id % 80 === 5omits meta description. - Robots Directives (
0.5%of pages):id % 200 === 19injectsnoindex, nofollow. - Canonical Mismatches (
0.83%of pages):id % 120 === 11points canonical to external/http URL. - Artificial Latency (1.5s) (
0.2%of pages):id % 500 === 0tests the crawler's AIMD backoff.
- Sitemap Index: Accessible at
/sitemap.xml - 11 Chunked Urlsets: Accessible at
/sitemaps/sitemap-1.xmlthrough/sitemaps/sitemap-11.xml(each containing up to 50,000 URLs). - Robots Directives: Accessible at
/robots.txt.
Once the server is running locally on port 3001:
# Run Black Sparrow crawler against the local testbed (first 5,000 pages)
blacksparrow audit http://localhost:3001 --max-pages 5000 --concurrency 32
# Check crawl telemetry and PageRank convergence
blacksparrow report --format markdownThis repository is preconfigured for 1-click Vercel deployment:
api/index.tsexposes the Hono serverless handler via@hono/vercel-adapter.vercel.jsonroutes all wildcard traffic to the serverless function.- In serverless environments where
bun:sqliteis unavailable,src/db/taxonomy.tsautomatically falls back to bundledsrc/db/taxonomy.json(~590 KB).
Deploy via the Vercel CLI:
bunx vercelWe welcome contributions of new verticals, chaos fault heuristics, and architectural improvements! Please review our Contributing Guide before submitting a pull request.
Dual-licensed under either of:
- MIT License (
LICENSE-MIT) - Apache License, Version 2.0 (
LICENSE-APACHE)
at your option.