Skip to content

Twin Talk

A toddler-shaped slice of the internet for my twin girls. First words, colors, letters. DNS-enforced allowlist. Deliberately small.

The personal reason. The engineering problem.

The difficult feature was deciding what should never appear.

A hand-curated directory, a restricted browser shell, and a network allowlist shape a deliberately small browsing experience. The interface is simple because the boundaries underneath it are explicit.

A private family project for configured home devices. Curation and network configuration remain part of operating it.

Interaction design / Network boundaries
  • Electron
  • Pi-hole
  • DNS policy
  • YAML allowlist
  • Curated profiles
The question behind the build

What changes when the goal is a finite set of choices rather than more time on screen?

Make the directory the product. A small group of recognizable tiles leads to parent-selected content, and navigation outside the approved set is handled at both the browser and network layers.

Follow the logic

One system. Different situations.

An illustrated walkthrough of the documented design.

Choose a situation
The input

A child selects an entry from the curated directory.

The logic

The browser checks navigation against the approved domain list.

The result

The selected content opens inside the deliberately limited experience.

Why this matters

A recognizable tile gives a child a simple choice. Parent curation determines what that choice can reach.

Curated sites
25
Ads
0
Autoplay loops
0
Algorithm picks
0

Why this exists

My twin daughters are toddlers. That is an incredible age for language, first words arriving daily, colors starting to stick, letters beginning to register as distinct shapes that mean something. It is also precisely the age where the default media diet on any mainstream platform is terrible. Autoplay pulls them off a gentle counting video and into whatever the algorithm thinks maximizes watch time. Thumbnail design is optimized for the attention of the nearest adult, not the developmental stage of a toddler.

I do not trust the “kids mode” switch on any major platform. The setting is a layer on top of a product whose core objective is to keep whoever is watching watching. The only safe thing to do with that is not use the product. What I wanted for the girls was the opposite: a tiny, curated, Web 1.0-shaped space built around the three things they are actually learning right now, speaking, colors, and letters / ABCs.

Twin Talk is that. A hand-picked directory tuned for a toddler's developmental stage. A DNS wall that blocks everything else at the network level. A browser that cannot reach anything outside the list. No autoplay, no recommendations, no infinite scroll. Just a handful of things that support first words, the names of colors, and the alphabet, with big friendly tiles a kid can slap with a hand to open.

How it works

Kid's tabletruns Twin Talk shellBrowser shell (Layer 2)only renders allowlisted domainsDNS wall (Layer 1)Pi-hole on LAN, NXDOMAIN off-listallowlist.yaml~80 domains, hand-curatedsingle source of truthallowed siteskid-learning directory onlyeverything elseblocked at DNS → NXDOMAIN

Two enforcement layers. DNS blocks anything off-list at the network, the browser is a thin shell that only renders sites from the directory. Belt and suspenders, because one layer is never enough.

Layer 1: DNS-level allowlist.I run a Pi-hole instance on the home network with a custom upstream config that only resolves explicitly-allowed domains when the request comes from one of the kids' devices. Everything else returns NXDOMAIN. A kid's tablet that somehow ends up in YouTube's ad network can't load a single ad domain. A link to an unfamiliar site dies at the DNS layer before it ever opens a connection. The list of approved domains lives in a small YAML file I edit when they ask for something new.

Layer 2: the browser shell.The kids don't open “Chrome.” They open Twin Talk, an Electron-based browser shell I built that renders the directory as a grid of giant colorful tiles, each a site they can go to. Inside a tile, the browser will only navigate to URLs whose domains are on the same allowlist the DNS layer enforces. Any link that points off-list is intercepted and replaced with a little cat drawing that says “that link goes somewhere else, go back home.” They think the cat is funny.

The directory

The directory is small on purpose, maybe 25 entries total. A toddler doesn't need 80 options; 80 options is a trigger for decision fatigue and screen-time sprawl. The directory fits on one screen as a grid of oversized tiles, each one a simple high-contrast icon (cat · blue · A · 1) that a pre-literate kid can recognize and tap. None of the entries have advertising, autoplay, recommendations, or anything trying to pull them to the next thing.

twintalk.local

What do you want to play with?

A

ABCs

1

Numbers

Colors

Songs

Hi

Words

🐱

Animals

An illustration of the Twin Talk home screen. Six big tiles, no chrome, no autoplay, no “up next.” They tap a tile, the curated content opens; they tap the home button, they come back here.

CategoryWhy it's in thereExample sources
First words / speechNaming, repetition, single-word labelsMs Rachel (curated episodes), Super Simple Songs, Dave and Ava
ColorsColor naming with high-contrast visualsColor flashcard pages, Blippi color episodes (curated)
ABCs / lettersLetter recognition, phonetic sounds, not writingStoryBots ABCs, Leapfrog letter factory clips
Counting / numbers1–10 recognition, simple quantity conceptsNumberblocks, counting songs on Super Simple
Animals / soundsEarly vocabulary anchored in familiar objectsOld MacDonald clips, zoo-sound flashcards
Nursery songsAudio repetition is the fastest path to speechSuper Simple Songs, Cocomelon (pre-selected tracks only)

The hard part of curation is not adding sites. It is saying no to sites that look toddler-friendly on the surface but have a surprising back door, a music video channel whose “up next” is unvetted, a colorful app that turns out to have microtransactions, a counting game buried inside an ecosystem that cross-promotes a dozen other apps. I pass on a lot of sites that would have been easy yeses with any loose criterion. It is easier to stay strict than it is to un-show a website to a toddler.

The counter-intuitive detail

Everybody who builds “safe internet for kids” tools immediately reaches for machine learning , classify the content, filter the bad stuff. I tried it. It is a nightmare. Classifiers are probabilistic, they're wrong at the tail, and the tail is precisely where the edge cases you care about live. A classifier that's 99.9% accurate still lets through one thing per thousand pageviews that you really, really did not want your kid to see.

An allowlistgives this setup an explicit default: domains outside the approved set are blocked on the configured devices and network. If a new site shows up tomorrow that's perfect for a kid, it's blocked until I add it. That's the correct default. The cost of “they can't visit the new great kid site yet” is vastly lower than the cost of “the model mis-classified a domain and they saw something they shouldn't.”

The generalizable lesson: for anything with high-stakes edge cases, prefer an allowlist over a classifier. Allowlists are boring, maintainable, auditable, and fail in the correct direction. Classifiers fail in whichever direction their training data happened to encode, which is not a direction you chose.

What it is deliberately not

  • Not a parental-control app.No app on the kids' devices. The network-level DNS wall works for every device on the LAN; the browser shell just makes the experience pleasant.
  • Not a classifier.See above. Nothing infers what's “safe.” Everything on the list got there because I put it there.
  • Not a walled garden with in-app purchases.Nobody's making money here. If they ask for a new site, I add it if it fits. No leaderboard, no rewards, no gamified screen-time economy.
  • Not indexed by Google.The directory is not on the public internet. It only lives on devices in our house. If the kids mention Twin Talk to a friend at school, the friend can't find it. Good.

What grows with them

The directory is designed to evolve as the girls do. The current set is tuned for 12–24 months: first-words content, color naming, alphabet recognition, simple counting. The next tier adds story readalouds, simple cause-and-effect animations, early-phonics content. The tier after that (roughly 3–4 years) adds question- answering sites like DK Findout and Britannica Kids, short educational videos, and the first truly interactive learning games.

The architecture supports this by version: each age band is its own tile set, toggled by which profile is active on the tablet. A two-year-old and a four-year-old in the same household don't see the same directory. The same DNS wall protects both. The tiles just change shape.

The engineering judgment

What I chose. What that costs.

01

Selection before prediction

Every directory entry is chosen by a parent. Unfamiliar destinations stay outside the approved set until they are considered deliberately.

The tradeoff

New content requires curation. That constraint is part of the product’s purpose, not a gap to fill with automatic recommendations.

02

Two layers, different jobs

The Electron shell handles the interaction and navigation feedback. DNS policy supplies an additional domain boundary on configured devices.

The tradeoff

The arrangement depends on its device and network setup. A curated domain also needs ongoing review as its content changes.

03

An interface with an ending

Large tiles, a return-home action, and a finite directory keep the available choices legible without an endless feed.

The tradeoff

A smaller catalog means leaving out material that might be useful. The deliberate limit is what makes each addition a meaningful decision.

What this build taught me

The visible product is a handful of tiles. The engineering work is keeping the experience aligned with that small, deliberate promise.