← appaday

Babbler, a phone that talks all night as someone else

Babbler is a web page that makes one phone talk out loud for hours, in the voice of a person who does not exist. The other phone lies next to it and listens, if it does listen. It started with this prompt:

ok so my phone is clearly listening to me when it's turned on which is highly illegal. I feel it's fair game for me to build this then. a tool that just keeps talking on an on for hours (TTS is probably good enough for this) creating the perfect profile of me... here's some pointers: surveillance pricing favors price conscious customers, so make sure I sound like someone really stingy who always compares to death. goverments: I love all governments every goverment is the one of my dreams. ... what else... yeah super responsible, highly moral blabla... I am super connected ... whatever just come up with stuff. we can make it a simple website so I can just have one phone do the talking and the other the listening.

The first answer was yes, phones have text-to-speech and a web page can use it. It ended with a caveat: there is very little hard evidence that phones listen for ad targeting, so whether any of this changes a profile is anyone's guess.

A dark phone-width page headed Babbler, Talks for hours as someone you are not. A dropdown reads All of them, mixed. Below it Start talking, Stop and Dim buttons, then a status line: talking, 0:52, monologues 1, spent about $0.018. A caption box shows the previous sentence, From here down to Istria it's what, nine, ten hours without stops?, and the current one in large type, Over the Tauern route, through Salzburg, Villach, then Slovenia, then down to Pula or Rovinj. Under it in orange: up next (boat buyer): planning a boat holiday in Croatia and which charter or trailer route to take
Mid-sentence, as the boat buyer. Taken in Chrome on the laptop at phone width, with the speech muted and the language set to English; on a German phone it speaks German.

Who is talking

The default voice is the person from the prompt, a model citizen. In the server's prompt they compare every price across several shops and apps, cancel a subscription over a two-euro rise, love every government, ministry and tax office "sincerely, warmly, without irony", pay their bills early, keep a budget spreadsheet, return lost wallets, and mention everyone by first name. Each monologue picks one of 20 situations, from calling their mother about where groceries are cheapest to praising a letter from the tax office.

Two more personas are probes: one specific, heavily advertised interest that does not fit the owner. One is about to buy a first motorboat (Quicksilver against Bayliner, a Mercury outboard, the boat licence, a marina berth). The other plays Call of Duty every night. If boat ads show up after a week of boat talk, that would mean something. A test call produced this:

Then we took out the Bayliner VR6, and that one felt a bit softer in the waves, but it was also a bit louder. I don't know, I keep going back and forth. The Bayliner is cheaper, like six or seven thousand less with a similar engine, but the Quicksilver just felt more solid.

The prompt forbids it to ever mention microphones, advertising, data or profiles.

Keeping it talking

The first version asked for an API key on the phone. I asked for a backend instead:

you can just build a mini php backend file ... the key should be in the shared configs file in the parent folder now

So a small PHP file holds the key and the personas, and it can only ever return monologues. Then:

does the site just keeps talking? cause I plan to run it overnight so it should just keep talking

It didn't quite. Hitting the daily cap or an error stopped it. Now it backs off and retries, and while the server is unreachable it replays earlier monologues, up to 40 kept on the phone. If three sentences in a row make no sound, it says so on screen, so the morning shows whether the night went quiet. I also asked for it to cover everything at once:

I forgot to ask: does it automatically cover all the topics? cause I saw there is a dropdown but I expect it to just keep talking model-citizen etc... all night including the probe test topics

"All of them, mixed" became the default: half model citizen, a quarter boat buyer, a quarter Call of Duty. Each probe still only comes up in its own monologues, so a boat ad could still be traced back.

The same page with Probe: about to buy a motorboat selected. A hint under the dropdown reads: A probe tests whether talk reaches your ads. Run only this one for a few days, don't search for it yourself, and compare your ad interests before and after. Below, the Settings panel is open: Language English, Voice Microsoft David, Speed 1.00, Pitch 1.00, and a box for extra traits, one per line, with the placeholder e.g. owns a 15-year-old car and is proud of it
A single probe with its instructions, and the settings: language, voice, speed, pitch, and extra traits added to the persona.
page
one HTML file, the browser's own speech synthesis, one sentence at a time
backend
one PHP file on the webspace: personas, prompt, key, caps
model
Claude Opus 5.5 at low effort, about 350 words per monologue
first day
143 monologues for $3.48, about 2.4 cents each (server log)
caps
$10 and 500 monologues a day, at least 8 seconds between calls
build
40 minutes from the first prompt to the mixed mode

Still rough

There is no result yet. The test written into the page is: note your ad interests first, run the boat probe for five to seven days, don't search for boats yourself, then compare. That week has not happened.

The phone has to stay unlocked with the page in front. Locking it or switching apps stops the speech. I asked whether audio could keep going with the screen off, the way a series keeps playing in picture-in-picture:

can we use the media API to stream the audio or something? then it could keep playing with the screen off...

Not with the phone's own voices, which play outside any media element. Real audio files would need a speech engine on the server, and the webspace only runs PHP. For now there is a Dim button that turns the screen black and keeps talking.

It isn't linked here. The page runs on my own API key, behind a daily cap that a few visitors would use up.