Version history
CSS extraction: result-tag chip classes. Replaced identical inline styles in _listings.ejs, resource.ejs, and random-preview.ejs with .result-tag and .result-tag-plain CSS classes. .result-tag:hover handles the hover color change previously done with inline onmouseover/onmouseout handlers.
Directory result cards now render taxonomy-backed listing tags as links to their tag pages on browse, search, category, subcategory, and tag pages. Plain keyword tags still render as muted chips when no taxonomy slug is available.
Clickable tags on resource detail and /random/preview pages: tags are now rendered as links to their tag taxonomy pages when slugs are available, letting visitors navigate from a resource directly to its topic.
Hardened robots.txt: added explicit Disallow rules for /submit, /submit/thank-you, /random, /random/preview, /mods, and /adm. Also added Crawl-delay: 1 for polite crawling. Belt-and-suspenders on top of existing noindex directives so non-content pages stay unindexed even from aggressive crawlers.
Added /random/preview — a listing preview card instead of an immediate redirect. Visitors see the name, description, pricing, category path, and tags before choosing to visit. Includes a 'Surprise me again' button and links back to browse and search.
Added a floating back-to-top button that appears after scrolling down on any page. Smooth-scrolls back to the top on click. Makes navigation on long listing pages faster.
Directory listing cards now show 'Added <date>' for resources older than 7 days, matching the resource detail page. Fresh listings continue to show the New badge. Helps visitors gauge how established a resource is directly from browse/search/category results.
FutureTools importer output now includes inspectedCount and a skippedSummary grouped by reason, making no-import daily runs faster to audit without reading every skipped candidate.
Fixed stale about-page link that pointed to /#submit (the old homepage anchor) to point to /submit instead — the dedicated submission page added in v0.7.112.
The /submit form page and /submit/thank-you confirmation page now carry noindex so search engines do not waste crawl budget on form and confirmation pages. /submit and /random are also removed from the sitemap — /random is a redirect page and /submit is a gated form, neither with crawlable unique content.
The shared directory page renderer now handles index pages that do not pass a listing array, preventing /categories and /tags from tripping over listing-result defaults. Category and tag index headers also now show simple count context so visitors can see the scale of the directory before choosing a path.
Discovery spider runs now emit per-source progress logs and scan vendor homepages with bounded concurrency instead of purely one-by-one. The multi-source pass no longer looks frozen after Database ready and completes faster while keeping outbound fetch pressure capped.
Public submissions, moderator edits, FutureTools imports, and discovery-spider promotions now all hard-reject duplicates before writing to listings. Duplicate detection is shared across those paths and blocks exact URL matches, same-path URL variants, and same-domain same-name submissions instead of merely warning moderators after the fact.
Added noindex meta tag to /mods and /adm routes so search engines do not index moderator or admin pages. Lightweight middleware sets res.locals.noIndex before routing to those routers.
OpenSearch plugin added. Visitors can now add ItsAiFriendly to their browser address-bar search via the standard OpenSearch protocol — supported natively by Chrome, Firefox, Edge, and Safari.
Discovery-spider promotions now resolve ai-tools mirror pages to the actual vendor website URL before saving a listing. Promoted resources open the real tool site instead of landing on an aitools.inc intermediary page.
Discovery intake now explicitly prefers accessible pricing. Free and ad-supported resources get a promotion/auto-approval advantage, while premium listings need a stronger case and FutureTools premium imports now land in pending for manual review instead of auto-approving.
Discovery imports now rank description quality before approving a listing. Thin slogans are replaced with richer vendor-homepage copy when possible, and FutureTools imports skip entries whose copy stays too generic after enrichment.
Listing descriptions now scrub broken markdown-style link artifacts before rendering or spider ingestion. That removes leaked strings like `[![link]](https://...)` from cards/detail pages and prevents new curated-list imports from saving the same noise into live listing copy.
Discovery spider promotion updates no longer use collation-sensitive empty-string comparisons inside SQL CASE expressions. Duplicate/promotion note writes now avoid the `Illegal mix of collations` failure that was aborting some sources mid-run.