DEV Community

Cover image for Building a Search Engine for Kids That Doesn't Track Them
Mirko Stahnke
Mirko Stahnke

Posted on Originally published at kids.findnix.eu

Building a Search Engine for Kids That Doesn't Track Them

Search engines for kids usually mean one of two things

Either a heavily filtered wrapper around a big commercial index (which still leaks through things a filter didn't anticipate), or a walled garden with a handful of hand-picked links that goes stale in a month. kids.findnix.eu is an attempt at a third option: build and maintain our own curated index, specifically for kids and teenagers, as a companion project to the main findnix.eu search engine.

The homepage states the promise plainly: "no data is stored, and we only try to present vetted, educationally valuable content." Two mascots, Uli and Nele, sit on either side of the search box — which sounds like a small detail, but user testing with actual kids made clear that a friendly, recognizable interface matters as much as the filtering underneath it.

Curation is a crawling problem, not a filtering problem

Rather than filtering an existing general-purpose index after the fact, kids.findnix.eu runs its own dedicated crawlers:

  • kids_page_image_crawler.php / kids_page_video_crawler.php — pull images and videos specifically from sources already cleared for the kids index
  • crawl_sitemap_articles.php, crawl_topic_pages.php, crawl_wissenskarten.php — walk sitemaps and topic pages of vetted educational sites
  • crawl_wp_generic.php — a generic crawler for WordPress-based educational sites, since a huge share of school/educational content in German-speaking countries runs on WordPress
  • classify_sonstiges_llm.php — an LLM-assisted classification pass for the long tail of content that doesn't fit a hand-written rule

The result, shown live on the homepage, is a running count rather than a marketing number: pages indexed, images, videos, links. It updates because the crawlers keep running, not because someone typed a number into a template once.

The search box is only half the product

What's easy to miss from the name is that kids.findnix.eu isn't just a search box with a filter — half the site is interactive, kid-facing tools built around learning:

  • Flag Quiz (flaggenquiz.php) — geography, gamified
  • Secret Code Workshop (geheimcode_werkstatt.php) — classic ciphers, taught by building them
  • Riddle Challenge (knobel_challenge.php) — logic puzzles
  • Train your own AI (ki_trainer.php) — a hands-on, simplified intro to how machine learning classification actually works, aimed at demystifying "AI" rather than treating it as magic
  • Code Adventure (code_abenteuer.php) — a first, gentle introduction to programming

None of these need the search index at all — they're standalone reasons to visit the site directly rather than only arriving via a search query, which matters for a product whose whole pitch is "safe corner of the internet for kids," not just "safe search results."

Accessibility gets its own crawler, too

a11y_crawler.php checks the site's own HTML structure for accessibility issues — worth calling out specifically because it's easy for a "kids" product to over-index on colorful UI and under-index on actually being usable by kids with different needs. Running the accessibility check as its own recurring job, rather than a one-time manual pass, keeps it from silently rotting as pages get added.

No data stored means no data stored

The "no data stored" line on the homepage isn't just copy — visit counting, for example, is deliberately coarse: one cookie-gated counter per visit session (30 minutes), not a log line per page view, and no data ends up tied to an individual beyond a hashed IP used only to avoid double-counting the same visit:

if (!isset($_COOKIE['kids_visited'])) {
    kids_db()->prepare(
        "INSERT INTO fnx_kids_stats (type, referrer, url, ip_hash, lang, user_agent)
         VALUES ('visit', ?, ?, ?, ?, ?)"
    )->execute([...]);
    setcookie('kids_visited', '1', time() + 1800, '/', '', false, true);
}
Enter fullscreen mode Exit fullscreen mode

That's the whole point of building a dedicated kids product instead of just adding a "kids mode" toggle to the main search engine: every default — logging, cookies, what gets shown, what gets stored — gets re-examined for a young audience specifically, instead of inherited from an adult product and only trimmed down after the fact.

kids.findnix.eu is live at kids.findnix.eu, EU-hosted, and — like the rest of the findnix.eu family — built to be small enough that you can actually read the whole thing and know what it does.

Top comments (0)