I've been building AsmiAI (asmiai.xyz) for the past 6 months — a fully static AI tools directory with 236 reviewed tools, 1,638 side-by-side comparison pages, and a free AI chat advisor. Zero database, zero framework, free hosting.
Here's exactly how it works technically.
The build system
Everything is generated from JSON data files at build time using Node.js and Python. One ./build-asmiai.sh command generates 2,373 pages in under 2 minutes and deploys to Cloudflare Pages.
# Each tool is a JSON file in data/tools/
{
"name": "ChatGPT",
"slug": "chatgpt",
"category": ["ai-chatbots"],
"pricing": "Free / $20/mo",
"free_plan": true,
"rating": 4.9
}
Auto-generated comparison pages
The most interesting part — 1,638 comparison pages like /compare/chatgpt-vs-claude/ are generated automatically from the tool data. Every tool is compared against every other tool in the same category.
The generator computes all valid pairs, skips reverse duplicates, and generates enriched HTML with:
- Pricing comparison table
- Feature breakdown
- Who should choose which
- Quick verdict
AI chat advisor
A floating chat widget on every page powered by Groq (Llama 3.1). The system prompt is grounded in all 236 tools — the AI can only recommend tools that actually exist in the directory.
The tricky part: Groq free tier is 6,000 TPM. With 236 tools in the system prompt (~2,500 tokens), I only have room for 2-3 requests per minute. Solution: compact the tool context format from verbose pipe-delimited to just Name (category, free/paid) slug.
LLM SEO
Built for AI discoverability from the start:
-
llms.txt— machine-readable site summary -
llms-full.txt— complete tool inventory - Public JSON API at
/api/tools.json -
robots.txtallows
Top comments (0)