What changed

A record of what changed, and when

Both halves of this — the website and the mobile app — ship separately and on different days. This is the one page where that is visible.

Each stamp is when the change was written, taken from the commit that carried it. Entries from before this was under version control carry the date only — inventing a time for those would be worse than leaving it out.

Newest first · times are Peru time (UTC−5) · last updated 9 September 2026, 09:27 PET

Where things stand today

  • The website is live at neutralperspective.com and reads WhatsApp, SMS and iMessage exports, several at once — in either of two looks, which carry their own words and their own voice for the reading.
  • The app adds two things the website cannot do: a chat shared straight out of WhatsApp, and a conversation recorded out loud.
  • As of yesterday it also reads one person talking on their own.
  • Android has an installable build. iPhone does not yet — that needs an Apple Developer account and TestFlight.

9 September 202609:27 PET

Site

New pictures for Stones, and the first card as separate points

The two placeholder drawings in the Stones look are replaced with the illustrations of someone sitting with a cairn — one at the water, one at sunset — each with its own description for a reader who cannot see them.

The paragraph in the first card is now one box per sentence. It is still a single field in the editor, and still one string to write: the sentences are separated where the page is drawn, so whatever is written there arrives as separate points without anyone having to manage several boxes by hand.

Switching looks was also leaving pictures behind. The swap worked out a look's picture from the filename of the one on screen and skipped anything that was not an .svg — so the moment the Stones hero became a .png it stopped being eligible, and going back to Original left the Stones picture in place. Each image now remembers the one it shipped with.

9 September 202609:10 PET

SiteApp

A reading can tell what was said out loud from what was typed

Recordings and saved notes can be read alongside a chat, and until now the reading could not tell the difference — a note you spoke into your phone arrived as a very long text message, and the reading would say "you wrote" about it.

Each line now carries the medium it came from, and a spoken passage is marked as spoken. The reading is told what that means: never call a spoken line written, a monologue is not the emphasis a message of that length would be, and it has no reply time. Tested against a real reading — it now says "in the 23 August spoken passage, you said".

The labelling was written months ago and never worked: the step that narrows a file to one conversation dropped the source, so every line reached the model unmarked and a mixed reading looked like one long chat. That is fixed, and a single-source reading still carries no labels, because a label on every line is only tokens.

30 August 202610:05 PET

Site

A shorter page that says what the feedback is

The home page loses two whole sections — the ChatGPT comparison and the paragraph above the upload box that repeated the three steps — and folds two more away under their headings, so what is left standing is the claim rather than the explanation of the claim.

The language moves from report to feedback where it describes what comes back, and says plainly that it is tied to objective data and quotes from your own conversation, with guidance drawn from evidence-based practice. "How it works" is now two ways in rather than three steps: the chat history route, and recording, which is the app.

The example was rewritten. The old one described a repair pattern in a way that did not make its own point — it is now a counted finding with the quotes that support it, and advice that names the practice behind it.

29 August 202614:56 PET

Site

New words on the original look

The headline is shorter — "a neutral, non-judgemental analysis", with the rest of the sentence gone — and the page now says what it is in the first line: a purpose-built AI counselling tool for couples. "Made to be used alongside real counselling" became "built to complement therapy, not to replace real connection", and the privacy promise now opens with your information is your information rather than with a rule about rules.

Both languages, and the Stones look keeps its own words throughout — which is the whole reason the two are held separately.

29 August 202614:54 PET

SiteAdmin

Messenger, editable words, and counting without watching

Facebook Messenger conversations can now be read. Facebook has no per-chat export — it hands over an account-wide .zip in which every conversation is a folder of JSON, newest first — so all of it is unpacked and you choose which conversation to read, the same question an SMS backup already asks. It also writes accented text in a way that has been broken for years, turning "café" into "café"; that is undone before anything is read, or every accented name in a Spanish conversation would come back misspelled.

The words on the site are editable from a phone, at /admin/np for Original and /admin/stones for Stones — two editors because the two looks do not say the same things. Only what actually changes is stored, so anything left alone still comes from the deploy and "reset" is a deletion rather than a restore. An invented {placeholder} is refused rather than printed on the page.

And page views are counted now — which page, which language, which look, and the site you came from. No cookie, no address, no identifier of any kind, nothing sent to Google or anyone else, and nothing at all if your browser asks not to be tracked. That means it can say how many views but never how many people, which is the trade: the privacy policy said in four places that there was no analytics, and rather than quietly make those sentences false, this is the kind that leaves them nearly true. The policy now says exactly what is counted.

29 August 202614:27 PET

Site

The page arrives as you read down it

Blocks fade up as you reach them, once, and the three picture panels move a little slower than the words beside them. Original is brisk about it; Stones travels further and takes longer, which is the same principle as the words and the voice belonging to the look.

The first attempt did it the usual way — oversize each image inside its frame and slide it behind the crop — and that cost 18% of every picture at rest, enough to clip the ground shadow off the stones. The panels move whole instead. Nothing is cropped.

None of it can hide the page: the rules that start a block invisible only apply once the script has run and only when the reader has not asked for less movement, anything not reached within four seconds appears regardless, and printing ignores all of it. The upload flow and the report are left out entirely — they are shown and hidden as you move through them, and a second opinion about their opacity is how one ends up invisible.

29 August 202613:00 PET

Site

A sitemap, and a robots file that names it

Four pages are public — the home page, the app page, this one and the privacy policy — and each is now listed at /sitemap.xml with the date of the last commit that actually changed it. Using the file's own timestamp would have been easier and would have told every crawler that all four pages change on every deploy.

The prompt editor is excluded by name rather than by being forgotten, and robots.txt keeps crawlers away from it and from the API. The sitemap is generated rather than typed, and the test run fails if it has fallen behind the pages it describes — a sitemap nobody regenerates is worse than none.

29 August 202611:13 PET

Site

Choosing the thread when a backup arrives with something else

Several files have been read as one conversation since 15 August, but the question of which conversation to take out of an SMS backup was only ever asked when that backup was the only file. Sent up alongside a WhatsApp export, the picker did not appear and the busiest thread was used — on a real phone that is often somebody else entirely, quietly merged into a reading about your partner.

The question is now asked once per file that needs it, and changing the answer changes the names underneath it, because a different thread is a different pair of people. The site also now says outright that a chat and a backup can go up together — it could already do it, and nowhere on the page said so.

29 August 202608:30 PET

SiteAdmin

The prompt editor could not save, and the Spanish footer was English

Publishing was rejected every time. The fields were renamed on the server when the gentler voice stopped being a second pass, and the editor was left naming the old ones — so the form sent two keys that no longer existed and left out two that were required. The gentler voice could not be edited at all, and neither could the language instruction: both boxes were bound to nothing. The editor now takes its fields from the server, so a new one appears in the form because it exists.

Rolling back to an old version failed for the same underlying reason. A version saved before a field existed does not carry that field, and saving requires all of them — so adding a field quietly made every version older than it unreachable. Missing fields now take their shipped default.

And the Spanish page said "Privacy" and "FAQ" in the footer. Those two links had no translation on them, while the header pair carried the same attribute twice — which HTML resolves by keeping the first and discarding the second, so the translations existed and were never used.

28 August 202613:17 PET

Admin

The printed prompts were missing the gentler voice

The prompt export exists so there is a record, outside the machine, of exactly what the readings are written from. It listed the fields by hand — so when the gentler voice was added to the editor, the printed record quietly stopped being complete while still looking like it was.

It now prints whatever the editor holds, in the order the editor holds it, which is the only version of this that cannot fall behind again. A revision saved before a field existed leaves it out rather than printing an empty box under its name.

28 August 202612:20 PET

Site

Two looks, and each one speaks for itself

The site can now be read two ways, switched in the header. Original is exactly what it was — the same palette, the same words, the same pictures. Stones is the softer one: sage and clay from the balanced-stones logo, a serif on the headlines, rounder shapes, and the logo artwork itself where the illustration used to be.

The words belong to the look. Original still opens with "a neutral, non-judgemental analysis of the way two people talk"; Stones opens with "Somewhere to set it down". Only the lines that genuinely differ are held twice, so the rest cannot drift apart.

And so does the voice of the reading. In Stones the reading itself is written more gently — the same findings held to the same standard, delivered differently. It is written that way from the start rather than written plainly and then softened, which keeps it to one request rather than two.

28 August 202611:52 PET

Site

The gentler voice is editable, like everything else

It started life in code, which meant the one voice most likely to need adjusting after real people had read it was the only one needing a deploy to adjust. It now sits in the prompt editor with the rest — versioned, previewable, and revertible.

28 August 202610:45 PET

Site

Three faults found by looking rather than by testing

A drawing that had been replaced kept appearing for hours afterwards: every illustration was cached for a day at a filename that never changes, so a browser that had seen the old one had no reason to ask for the new one. Generated pictures now revalidate; photographs and icons still do not need to.

Switching back from Stones repainted everything except the pictures — the cache fix had moved the end of a filename, and the rule that works out which drawing to show reads from the end. And the headline in Stones was written without a mobile size, so a 74px line stayed 74px on a phone and pushed the page sideways.

24 August 202610:40 PET

Site

Three things that were wrong on the page

A stray null printed near the bottom of every report. The block it came from is switched off, and the way the page assembles itself turns a switched-off block into the literal word rather than nothing at all.

Saving the report is now a button, not a link. The page disappears within the hour and there is no account to find it in afterwards, which makes saving the most consequential thing on it — and it had been sitting in a row of grey text links weighted the same as "read another conversation".

And nobody is called "." any more. A reader whose own name came out of WhatsApp as a full stop was addressed as one throughout their reading, because the check for a usable name listed the placeholders it knew about rather than asking whether the name contained a letter.

24 August 202610:20 PET

Site

Nobody is called "." any more

A reader whose own name came out of WhatsApp as a full stop was addressed as one throughout their reading — the name goes to the model, so it was in every sentence, not just the footer. A usable name now has to contain a letter.

Two others on the same page: a stray "null" printed near the bottom of every report, and saving the report was a grey link among several rather than a button. The page disappears within the hour and there is no account to find it in afterwards, which makes saving the most consequential thing on it.

23 August 202611:45 PET

AppSite

Report a reading that lands badly

Every reading now carries a quiet Report this reading: it said something harmful, or it got something wrong. A model writes these, and the failure that matters in a product like this is not a crash — it is a paragraph about your relationship that is unfair or untrue.

A report sends the reason and nothing else. Not the reading, not the conversation, not what you uploaded. That is a real cost — a report arrives without the text that caused it, so acting on one means changing the instructions from a description rather than reading the output — and it is the right side of the trade for a service that promises not to keep any of it.

22 August 202613:05 PET

AppSite

Point it at your backup folder, once

The honest complaint about text messages was that the route in is a ritual: make a backup, find the file, hand it over, every time. This removes most of it. You nominate one folder through Android's own picker, and after that a new backup shows up on the home screen with an offer to read it. Turn on a scheduled backup in the backup app and the file appears overnight without you doing anything.

The grant covers that one folder and nothing else — not the message store, not anywhere you did not point it — and you can withdraw it in the app or in Android's settings. Nothing is uploaded on its own: a found backup is offered and goes nowhere until you say so.

Still not reading your messages directly. Apps that read an SMS to fill in a verification code use an API that hands them only messages containing their own code — not your conversations. There is no equivalent for reading a thread with a particular person, which is why this route exists at all.

22 August 202612:22 PET

AppSite

Text messages, without the hunting

An SMS backup or an iMessage export can now be shared straight into the app, instead of being saved and then found again in Files. There is also a short guide in the app for the one route Android does not make obvious — getting the backup in the first place.

And you can now choose which conversation is read. A backup holds every thread on the phone; the app had been silently reading whichever was busiest, which is a reasonable guess and the wrong one often enough to matter. The names on the "which one is you" question change with the thread now, because they are different people.

Not doing: reading your messages automatically. Android would allow it with a permission that covers every message on the phone, which contradicts the promise that nothing here is read off your phone by us — and Google restricts that permission to apps whose main job is being your messaging app. So the backup file stays the way in.

20 August 202609:24 PET

App

An About screen, and a version number

The app is at 1.3.0, and now says so. About is on the home screen, with the version, which server it is talking to, and the way out to this page.

It exists for one reason: a report of something odd is hard to place a week later without knowing which build produced it. Quoting the version is the most useful line in any message about a fault — the rest can be looked up.

20 August 202609:06 PET

AppSite

Readings you can come back to

Every reading is now kept on your phone, with a history to open them from. The server still drops its copy within the hour; this is your copy, and deleting it here deletes it.

The reason it matters is the sections. Opening one more closely used to be possible only while the report still existed on our side, so a reading you returned to the next day was fixed as it was. For a reading of your own words that is now solved by the phone keeping the transcript: your words go back up for that one request, and the section opens.

20 August 202609:05 PET

AppSite

Names, spelled the way you spell them

A transcriber hears sounds, not spellings, so it wrote "Cam" for Kam — and from then on every quote in the reading had the wrong person in it. You can now say who you are about to talk about, and those spellings are put back before anything is read. The correction compares by sound rather than letters, and it tells you what it changed.

It is deliberately cautious. An early version turned "talking to myself in the car" into "in the Kam", which is a far worse failure than a misspelled name, so a correction now needs the transcript's own evidence that the word is a name at all.

20 August 202609:05 PET

AppSite

Where to read more

Opening a section of a solo reading more closely now ends with up to three things worth reading — the Gottman Institute on repair attempts, nonviolent communication, what sleep does to an argument at eleven at night — with a line on why that one fits what you described.

They come from a fixed shelf held on the server. The model chooses which apply and cannot add to it, invent a title, or invent a link, because a service whose whole claim is that every statement is grounded cannot start citing books that do not exist.

19 August 202616:58 PET

AppSite

Talking on your own

A recording of one person used to be refused twice over — once for having a single participant, once for holding too few turns, since consecutive speech from one person merges into a single turn and a two-minute account arrives as about three of them. Both refusals were working as built. What they were built for was the wrong thing.

So there is a second kind of reading now: what you are carrying, what is underneath it, what you might not be seeing, and what keeps coming back, then the same three things to try and the same safety flag. It is written knowing it has heard one side only, so it says "as you describe it" and never states what anyone else did or meant.

Your words are kept on your phone. The recording is dropped the moment it has been transcribed, as always, but the transcript comes back and is saved in the app, where you can read it, delete it, or add it to a later reading of an actual conversation.

19 August 202616:58 PET

App

Closer looks now have something under them

"Look at this more closely" was rendering as a list of headings with nothing beneath each one: the app was reading two fields the server does not send. It had presumably been broken since the button was added. The website was never affected.

19 August 202616:58 PET

AppSite

The app now says when it breaks

When something fails on a phone, the app reports the failure itself: which step, what the error said, the status, the app version and the platform. Never any part of a conversation, a recording or a note — the endpoint keeps six fields and discards everything else.

This exists because diagnosing the problem above took a synthesised recording and a local reproduction, when it should have taken reading a log.

19 August 202610:55 PET

Site

A privacy policy, and a page about the app

The four privacy promises on the home page now have a full policy behind them at /privacy, in English and Spanish: what you hand over, what is done with it, which three companies see any of it, and how long every piece exists. It covers the app as well as the website, including the microphone and the on-device voice clips.

/app describes how the mobile app works, for anyone deciding whether to install it.

19 August 202610:48 PET

SiteApp

Moved to neutralperspective.com

Off the hosting subdomain and onto the real name, with its own certificate. The app talks to it too. The old address still works.

15 August 2026

SiteApp

Several sources, read as one conversation

Two people rarely talk in one place. A WhatsApp export, an older SMS backup and a recording made this afternoon can now go up together and be read as one relationship rather than three unrelated reports. Because nothing in the files connects a name in one to a number in another, it asks which person you are in each rather than guessing — guessing wrong would attribute half a conversation to the wrong person.

14 August 2026

App

Recording a conversation, and naming the voices

Put the phone between you and talk: the recording is transcribed, split by voice, and read exactly as an exported chat is. A consent screen comes first, always, before the microphone is touched.

Enrolling a few seconds of each person's voice means the transcript says a real name rather than "Speaker A". Those clips are biometric data and never leave the phone except inside the request they help label.

13 August 2026

Site

Looking at a section more closely

Under each of the four sections, a button that runs a second, deeper pass on that section alone — three to five detailed findings, a question to sit with, and one concrete step.

Earlier in August 2026

Site

The website itself

The page, the export walkthroughs, and the reading behind them: WhatsApp .txt and .zip, Android SMS .xml and iMessage .csv, detected by what is inside the file rather than its name. Every number in a report computed by plain arithmetic from the file itself. English and Spanish throughout, including the report. A prompt editor behind a password, so what the analysis says can be changed without a deploy.

Not done yet

No iPhone build to hand out — that needs an Apple Developer account and TestFlight. Talking on your own is app-only; the website cannot do it. The wording of that reading lives in code rather than the prompt editor, so changing it needs a deploy. There is no PDF or share of a report from the app, which the website has. And www.neutralperspective.com does not yet reach this site — the address without the www does.