{"slug": "i-built-a-static-ai-tools-directory-with-1638-auto-generated-pages-here-s-the", "title": "I built a static AI tools directory with 1,638 auto-generated pages — here's the full technical breakdown", "summary": "A developer built AsmiAI, a fully static AI tools directory with 236 reviewed tools and 1,638 auto-generated comparison pages, using Node.js and Python to generate 2,373 pages from JSON data files in under two minutes. The site, hosted on Cloudflare Pages, features a free AI chat advisor powered by Groq's Llama 3.1 that can only recommend tools from the directory. The developer optimized for AI discoverability by including machine-readable files like llms.txt and a JSON API endpoint.", "body_md": "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.\n\nHere's exactly how it works technically.\n\nEverything is generated from JSON data files at build time using Node.js and Python. One `./build-asmiai.sh`\n\ncommand generates 2,373 pages in under 2 minutes and deploys to Cloudflare Pages.\n\n```\n# Each tool is a JSON file in data/tools/\n{\n  \"name\": \"ChatGPT\",\n  \"slug\": \"chatgpt\",\n  \"category\": [\"ai-chatbots\"],\n  \"pricing\": \"Free / $20/mo\",\n  \"free_plan\": true,\n  \"rating\": 4.9\n}\n```\n\nThe most interesting part — 1,638 comparison pages like `/compare/chatgpt-vs-claude/`\n\nare generated automatically from the tool data. Every tool is compared against every other tool in the same category.\n\nThe generator computes all valid pairs, skips reverse duplicates, and generates enriched HTML with:\n\nA 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.\n\nThe 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`\n\n.\n\nBuilt for AI discoverability from the start:\n\n`llms.txt`\n\n— machine-readable site summary`llms-full.txt`\n\n— complete tool inventory`/api/tools.json`\n\n`robots.txt`\n\nallows", "url": "https://wpnews.pro/news/i-built-a-static-ai-tools-directory-with-1638-auto-generated-pages-here-s-the", "canonical_source": "https://dev.to/bhagvat_meena_9f123a2f2d5/i-built-a-static-ai-tools-directory-with-1638-auto-generated-pages-heres-the-full-technical-25m2", "published_at": "2026-07-04 08:13:14+00:00", "updated_at": "2026-07-04 08:48:55.434148+00:00", "lang": "en", "topics": ["ai-tools", "developer-tools", "generative-ai", "large-language-models", "ai-infrastructure"], "entities": ["AsmiAI", "Cloudflare Pages", "Groq", "Llama 3.1", "Node.js", "Python", "ChatGPT", "Claude"], "alternates": {"html": "https://wpnews.pro/news/i-built-a-static-ai-tools-directory-with-1638-auto-generated-pages-here-s-the", "markdown": "https://wpnews.pro/news/i-built-a-static-ai-tools-directory-with-1638-auto-generated-pages-here-s-the.md", "text": "https://wpnews.pro/news/i-built-a-static-ai-tools-directory-with-1638-auto-generated-pages-here-s-the.txt", "jsonld": "https://wpnews.pro/news/i-built-a-static-ai-tools-directory-with-1638-auto-generated-pages-here-s-the.jsonld"}}