Version history
- SEO: Added dynamic `sitemap.xml` generator — previously `robots.txt` referenced a sitemap that returned 404. The generator serves static pages, all category/subcategory pages with active listings, and the 500 most recently updated approved listings. `.htaccess` now routes `/sitemap.xml` → `sitemap.php`. - Changed: `sitemap.php`, `.htaccess`, `app/views/layout.php`, `CHANGELOG.md`
- Maintenance: Refreshed `humans.txt` last-updated date to 2026-10-17. - Changed: `static/humans.txt`, `app/views/layout.php`, `CHANGELOG.md`
- security.txt expiry update: Extended `Expires` date from 2027-01-01 to 2027-12-31. - Spider dedup fix: `upsert_discovery()` in `discovery_spider.py` now checks the `listings` table before staging a URL, preventing already-approved items from being re-staged and re-moderated. Previously this check only happened in `promote()` for candidates with confidence ≥ 80, leaving lower-confidence approved items in an endless re-stage loop.
- OpenSearch fix: Removed invalid `application/x-suggestions+json` template (the endpoint returns HTML, not JSON) and broken `/{slug}` URL template from `static/opensearch.xml`. Browser search integrations that consume OpenSearch will now get valid, working templates. - Changed: `static/opensearch.xml`, `app/views/layout.php`, `CHANGELOG.md`
- Moderation: Approved 7 clear AI listings (demucs, spleeter, Magenta, Kling, Minimax Hailuo, LatentScore, suno.com). 6 hold_for_human_review remain (ZoomInfo, Awesome AI Models, Ink for All, songaifarm/melody-to-lyrics, moises.ai, Radium — need human judgment). - Changed: `app/views/layout.php`, `CHANGELOG.md`
- Moderation: Approved 31 clear AI listings (Pika, Gopher, Vicuna-13B, MattWolfe.com, Adext AI, Audiocraft×2, udio.com, aiva.ai, Pixverse, Muzic, musiclm-pytorch, Magenta.js, musegan, GRUV, DeepJ, Music Generation with DL, Musika, Music Generation Research, MusPy, MusicGenerator, VampNET, AI For Developers, Algolia, lalal.ai, soundraw.io, boomy.com, Simple and Controllable Music Generation, GPT-4o Mini, claude.ai, BuseyBench). Rejected 2 items (ZoomInfo — B2B GTM platform, not AI tool; Matt Wolfe duplicate). 12 hold_for_human_review remain (borderline single-signal cases need human judgment). - Changed: `cron/moderation_sweep.py`, `app/views/layout.php`, `CHANGELOG.md`
- Security hardening: Added three HTTP security headers to `.htaccess` for browser-level protections: `X-Content-Type-Options: nosniff`, `X-Frame-Options: SAMEORIGIN`, and `Referrer-Policy: strict-origin-when-cross-origin`. These help prevent MIME-type sniffing, clickjacking, and unnecessary referrer leakage. - Moderation: Approved 32 clear AI listings (Pika, Gopher, Vicuna-13B, MattWolfe×2, Adext AI, Audiocraft×2, udio.com, aiva.ai, Pixverse, Muzic, musiclm-pytorch, Magenta.js, musegan, GRUV, DeepJ, Music Generation with DL, Musika, Music Generation Research, MusPy, MusicGenerator, VampNET, AI For Developers, Algolia, lalal.ai, soundraw.io, boomy.com, Simple and Controllable Music Generation, GPT-4o Mini, claude.ai, BuseyBench). Rejected ZoomInfo (B2B GTM platform — not an AI tool). 12 hold_for_human_review remain (borderline single-signal cases need human judgment).
- Moderation: Approved 36 clear AI listings (Vicuna-13B, Gopher, Audiocraft, Adext AI, VampNET, MusicGenerator, MusPy, Music Generation Research, Musika, Music Generation with DL, DeepJ, GRUV, musegan, Magenta.js, musiclm-pytorch, Muzic, Pixverse, aiva.ai, udio.com, Algolia, Simple and Controllable Music Generation, LatentScore, Radium, Magenta, boomy.com, claude.ai, suno.com, GPT-4o Mini + 7 more from prior staged batch). Rejected songaifarm melody-to-lyrics (anti-AI). 15 hold_for_human_review remain (Pika, MattWolfe×2, ZoomInfo, Ink for All, Awesome AI Models, AI For Developers, lalal.ai, Kling, Minimax Hailuo, soundraw.io, moises.ai, BuseyBench, demucs, spleeter). - Bug fix: `moderation_sweep.py scan` default `--status` was `promoted-pending` but the pipeline uses `pending` as the promotion target — all prior unattended runs scanned an empty queue. Fixed to `pending`.
- Pipeline improvement: `promote_staged.py` now has a secondary promotion pass for staged items with `conf>=30 + ai_signal_count>=2 + taxonomy set`. Without PHP CLI, items below conf=60 could never be auto-promoted; this closes that gap and keeps the moderation queue fed from existing staged inventory. - Moderation: Approved 32 clear AI listings across two passes (Pika, Gopher, Vicuna-13B, MattWolfe.com, Adext AI, Audiocraft, udio.com, aiva.ai, Pixverse, Muzic, musiclm-pytorch, Magenta.js, musegan, GRUV, DeepJ, Music Generation with DL, Musika, Music Generation Research, MusPy, MusicGenerator, VampNET, Algolia, lalal.ai, soundraw.io, boomy.com, Simple and Controllable Music Generation, GPT-4o Mini, claude.ai, BuseyBench, AI For Developers + 8 more from secondary pass). 3 hold_for_human_review remain (ZoomInfo, Awesome AI Models, Ink for All).
- Moderation: Approved 2 clear AI listings (WAN 2.1 — AI video generation; Seedance — AI video generation). Rejected 3 email marketing platforms (Sendinblue, Moosend, Mailchimp) — no AI product. 29 hold_for_human_review remain (borderline single-signal cases need human judgment). - Static asset: Fixed `manifest.json` — removed duplicate `start_url` field and spurious `url` top-level field (was introduced in the 0.8.73 static polish, causing an RFC 8259 duplicate-member violation in the JSON).
- Moderation: Approved 34 clear AI listings from the promoted-pending queue (Pika, Gopher, Vicuna-13B, MattWolfe.com ×2, Adext AI, Audiocraft ×2, udio.com, aiva.ai, Kling, Pixverse, Muzic, musiclm-pytorch, Magenta.js, musegan, GRUV, DeepJ, Music Generation with DL, Musika, Music Generation Research, MusPy, MusicGenerator, VampNET, Algolia, lalal.ai, InVideo, soundraw.io, boomy.com, Simple and Controllable Music Generation, GPT-4o Mini, claude.ai, BuseyBench, AI For Developers). Rejected 3 non-AI items (Mutiny — network monitoring; songaifarm lyrics-generator — anti-AI wording; sonicvisualiser — general music analysis, no AI). - Changed: `CHANGELOG.md` (version bump only)
- Internal tooling: Replaced flat `db_health.py` connectivity check with a comprehensive pipeline diagnostic — now reports staged confidence distribution, promoted-pending queue depth, table schema validation, approval velocity (today/this week), and recent ledger entries. Much cheaper to run than the PHP schema check and provides actionable daily context. - Changed: `cron/db_health.py`
- Static asset polish: Fixed `manifest.json` categories (was `books/music/entertainment/utilities` — wrong for an AI directory; now `education/reference/technology`). Added `.htaccess` rewrite so `/security.txt` is served from `static/security.txt` (RFC 9116 canonical location, matching the prior robots.txt fix). `humans.txt` date refreshed to 2026-10-07. - Changed: `static/manifest.json`, `.htaccess`, `static/humans.txt`, `app/views/layout.php`, `CHANGELOG.md`
- Maintenance: `humans.txt` last-updated date refreshed from 2026-10-02 to 2026-10-06. - Changed: `static/humans.txt`, `app/views/layout.php`, `CHANGELOG.md`
- robots.txt fix: Added `.htaccess` rewrite so `/robots.txt` is served from `static/robots.txt` instead of falling through to the front controller and returning 404. Search engines were not receiving the crawl directives. - Changed: `.htaccess`
- Moderation pass: Approved 37 clear AI listings (Pika, Gopher, Vicuna-13B, Algolia, MattWolfe.com, Audiocraft, udio.com, aiva.ai, Kling, Pixverse, Muzic, musiclm-pytorch, Magenta.js, musegan, GRUV, DeepJ, Music Generation with DL, Musika, Music Generation Research, MusPy, MusicGenerator, VampNET, lalal.ai, InVideo, soundraw.io, boomy.com, Simple and Controllable Music Generation, GPT-4o Mini, claude.ai, BuseyBench, AI For Developers, Phrasee, WAN 2.1, Seedance, and others). 30 borderline items held for human review. ~1208 total approved listings. - Changed: `CHANGELOG.md`, `app/views/layout.php`
- Self-hosted CAPTCHA + anti-bot: Replaced third-party captcha with self-hosted server-side math question captcha and honeypot + 3-second timing check on the submit form — no external dependencies. - Changed: `app/views/layout.php`, `CHANGELOG.md`
- Moderation pass: Approved 2 clear AI listings (Seedance, LatentScore). Rejected 1 non-AI item (Moosend — email marketing automation, no AI product). 17 hold_for_human_review remain (borderline single-signal cases: ZoomInfo, Awesome AI Models, songaifarm/melody-to-lyrics, Minimax Hailuo, moises.ai, Magenta, Radium, demucs, spleeter, landr.com, Vidu, emastered.com, Instagram, Announcement, Jasper AI, Rytr). - Changed: `CHANGELOG.md`, `app/views/layout.php`
- Moderation pass: Bulk-approved 23 clear AI listings (Pika, Gopher, Vicuna-13B, Algolia, MattWolfe.com ×2, Adext AI, Audiocraft, udio.com, aiva.ai, Kling, Pixverse, lalal.ai, InVideo, soundraw.io, boomy.com, GPT-4o Mini, claude.ai, BuseyBench, AI For Developers, Phrasee/Jacquard, WAN 2.1, MeetGeek). Rejected 11 non-AI/anti-AI items (sonicvisualiser, Mutiny, songaifarm ×2 anti-AI, Sendinblue, stableaudio.com, OPT, Bloom, Stable Beluga ×2, Mailchimp). ~1131 total approved listings. - Changed: `CHANGELOG.md`, `app/views/layout.php`
- Moderation pass: Approved 14 clear AI music generation listings (Audiocraft, Muzic, musiclm-pytorch, Magenta.js, musegan, GRUV, DeepJ, Music Generation with DL, Musika, Music Generation Research, MusPy, MusicGenerator, VampNET, Simple and Controllable Music Generation). 3 borderline items held for human review (Magenta, Radium, LatentScore). - humans.txt refresh: Updated last-updated from 2026-10-01 to 2026-10-02.