# Show HN: I used AI to turn 8 years of texts into a love story

> Source: <https://story-of-us-preview.vercel.app/hacker-news-post>
> Published: 2026-06-11 17:16:50+00:00

## The AI Argument At My Kitchen Table

I've been watching the AI argument from a weird seat.

I'm technical enough to build things. My two sons are software engineers, so this isn't an abstract argument in my house. I talk to them about this stuff. I understand the excitement, and I also understand the fatigue. I get annoyed by both extremes: the sales-pitch version where AI eats the world by Thursday, and the reflexive version where every useful thing gets dismissed as slop. We're clearly in a hype cycle. Some people think AI is about to replace everyone. Some people are vibe coding production apps and then discovering that production isn't vibes.

I wanted to try something different.

Not **a SaaS product**. Not a startup. Not a "look, I made a full-stack app in 20 minutes" demo. I wanted to use AI to help make something for **my partner, Tina**: something she could open, read, and listen to without it feeling like a demo, a data dump, or a machine trying to perform intimacy.

That became a **private storybook**.

It's based on eight years of our text messages, photos, dates, trips, family logistics, difficult stretches, ordinary days, and the life around all of that.

It all began on October 6, 2017, with an initial message from Tina after our first coffee date.

The full version is private. It's got the actual chapters, images, and voice narration. The public version keeps the structure and design, but removes the private chapter content.

## First, I Followed The Numbers

Before I got anywhere near the emotional part of this, I did what I suspect a lot of people here would do: I started geeking out over the data.

The archive had **54,564 messages**, 5,027 attachment records, and roughly **390,595 words** of message text. The finished storybook manuscript is about 36,339 words, so the final version carries a little under 10% of the raw written archive.

There were messages on **2,143 days**, or about **67.9% of the full date span**. The longest active streak was 155 days. The peak day had 307 messages. The busiest year was 2025, with 12,452 messages, followed by 2024 with 10,208. The archive had **2,786 image attachments**. Noon was the busiest hour. Wednesday was the busiest day.

I found all of this fascinating.

Tina, I'm pretty sure, would've made it about 45 seconds before her eyes glazed over.

And that was a useful reminder. The stats were interesting, but they weren't the gift. They helped me understand the shape and scale of the archive. They didn't explain why any of it mattered.

So I moved from "look at this dataset" to the harder question: how do you turn all of that into something personal, accurate, and worth giving to someone you love?

## Texts Tell The Truth, But Not All Of It

This wasn't "write me a love story from my texts."

That would've been easy to ask for and almost certainly bad. It would've produced something generic, creepy, sentimental, or all three.

The first trap was obvious: the model wanted to smooth everything out. Relationships aren't smooth. So the actual question became: how do you use AI to help tell the story of a relationship without flattening it, over-explaining it, or turning it into surveillance?

The most important decision was this: **the messages are evidence**. **They are not the relationship**.

That sounds obvious, but it changed the whole project.

Texts capture some things very clearly: timing, logistics, jokes, stress, affection, planning, errands, apologies, kids, work, meals, trips, health updates, and all the small "are you home?" / "how did it go?" / "do you need anything?" messages that quietly make up a life.

But texts also miss a lot.

Sometimes the thread goes quiet because nothing is happening. Sometimes it goes quiet because everything is happening in person. Vacations, hotel rooms, ferry lineups, kitchens, family dinners, long drives, and shared homes often produce fewer messages, not more.

So the system couldn't treat **message volume as emotional truth**. A dense day might mean conflict. It might also mean care, logistics, travel planning, parenting, health updates, or just two busy people trying to make a day work.

That pushed the project away from summarization and toward evidence modeling.

## The Story Needed A Timeline

An evidence pack might say: this period looks quiet in the messages because we were together, not because nothing was happening. Or: this day is dense because of travel logistics, not because it was emotionally more important. Or: these three photos carry more context than the surrounding texts.

I broke the archive into **time-based evidence packs**. Each period needed anchors, representative moments, uncertainty notes, travel context, family context, **side-channel clues**, and a draft boundary. The story had to be **chronological** because a thematic version would've turned everything into generic buckets like "love," "travel," "family," and "hard times."

Real life didn't happen in categories. It happened over time.

Kids grew up. Houses changed. COVID happened. Work changed. Trips were planned, cancelled, re-planned, and taken. Rooms got painted. Meals got ordered. Someone needed a ride. Someone needed reassurance. Someone was tired. Someone was trying.

That was the material.

Side channels mattered too. Apple Messages wasn't the whole relationship. There were WhatsApp messages, SMS texts, family threads, photos, remembered events, and the basic fact that most of life happens outside any archive. The story had to account for gaps without pretending every gap could be solved.

## The Photos Knew Where We Were

The messages were only one layer of the archive. The attachments turned out to matter just as much.

There were thousands of them, and most weren't story material. Receipts, screenshots, memes, logistics, tickets, menus, parking signs, random one-off images. But mixed into all of that were the photos that actually carried memory: trips, family dinners, hotel rooms, hikes, birthdays, beaches, kitchens, Christmas mornings, ordinary selfies.

This is one place where AI was genuinely useful in a very practical way. I didn't need it to "understand love." I needed it to help separate **a receipt from a travel photo**, a screenshot from a family moment, **a useful visual anchor** from archive noise.

The attachments also helped solve one of the weirdest problems in the project: the more physically together we were, the thinner the text record often became. Vacations, visits, dinners, shared houses, and long stretches of actual life produced fewer messages because we weren't texting each other. We were there.

So photos became a way to **fill in gaps without inventing things**. A quiet stretch in the messages might look empty until the attachments showed where we were, who was there, what season it was, what we were doing, and why the texts had gone quiet.

That also changed the design of the storybook. Each chapter needed a visual anchor, not just prose. The right image could do work that a paragraph shouldn't have to do. It could remind Tina of the place, the trip, the age of the kids, the table, the weather, the look of that year.

In a normal data project, attachments might be supporting files. In this project, they were part of the memory system.

## Give The Model A Smaller Job

This was one of the places AI was useful, but only after the problem was framed correctly.

A few early attempts exposed the failure mode. Sparse stretches got over-interpreted. Busy days got treated like drama. A tender message could turn into greeting-card prose if I let it. The model was useful only when I gave it a **defined period**, evidence anchors, constraints, and a clear instruction to **preserve uncertainty**.

Not magical. Useful.

The project needed a **source-of-truth layer**. I ended up tracking chapters, drafts, evidence packs, statuses, manifests, image choices, audio status, and deploy state. Otherwise the whole thing would've become "whatever the model last generated," which is a terrible place to be when the material is emotionally important.

That's probably the least glamorous and most important technical lesson.

AI made it easier to generate text. That made it more important to track what was canonical.

## The Voice Had To Sound Like Me

The voice was one of the hardest parts.

**Too romantic felt fake.** Too literal felt like a transcript. Too analytical felt invasive. Every once in a while a draft would produce a sentence that sounded like **a wedding toast written by a stranger**, and that was an immediate delete. I wanted it to feel human: warm, honest, grounded in the evidence, but not trapped by the data.

There were also boundaries. A relationship over eight years has funny parts, intimate parts, boring parts, practical parts, hard parts, and things that don't belong in a public post. The goal wasn't to expose everything. The goal was to make something **Tina could recognize as true**.

That's where the human work stayed central.

AI could help find patterns. It could draft. It could revise. It could notice repetition. It could help me turn raw evidence into something readable. But it couldn't decide what would feel loving, what would feel unfair, what would feel too private, or what would make the gift land the right way.

## Privacy Had To Be Built In

Privacy was the other hard part.

This **wasn't zero-knowledge AI**. I did use AI to process private material. I think it's important to be honest about that, especially here. The mitigation wasn't "nothing left my machine." The mitigation was careful handling, a private repo, constrained outputs, **no raw archive in the deployed artifact**, and a lot of attention to what ended up where.

The final site is static, but the pipeline behind it isn't trivial.

The source repo can contain working material: drafts, SQLite, evidence notes, source assets, audio pieces, scripts, and internal review files. The deployed package is **generated separately** and includes only the final referenced page files and assets.

That separation mattered.

## The Public Version Had To Stand On Its Own

I didn't want to deploy the repo. I wanted to deploy an artifact.

I also needed a version I could actually show people. I had mentioned the storybook to a few friends and family members, and some of them started asking if I could help build something like this for them, maybe on a smaller scale. They didn't need to see Tina's private version. They needed to see what the thing was: how it felt, how it opened, how the chapters worked, and why it was more than a PDF or a long ChatGPT transcript.

The deployed version gets a **clean generated folder**. For the private version, that means the finished storybook and its referenced assets. For the public preview, it means a version where the private chapter text, real right-rail photos, and chapter audio **aren't hidden with CSS**. They're not in the package.

I also **stripped metadata** from deployed image copies. Images can carry device, timestamp, and location metadata. The visible page isn't the only privacy surface.

The public preview uses fictional blurred placeholder images and short public-safe chapter text so people can understand the project without getting access to the actual gift. Those placeholders aren't blurred private photos. They're generated stand-ins.

The final artifact is intentionally boring at runtime: HTML, CSS, JavaScript, images, and audio. **No database.** No accounts for the public preview. No complicated app stack.

But underneath that simple surface is a pipeline of archive processing, evidence modeling, chapter planning, prose drafting, visual selection, metadata stripping, validation, and manual deployment.

The output looks like a personal storybook.

The process felt more like building a small editorial system for one relationship.

## What AI Couldn't Decide

And the biggest lesson wasn't "AI can write from your data." Everyone knows it can produce text now.

The lesson was that AI only became useful when I **stopped asking it to write the story** and started using it to help me build **a system for deciding what the story was**.

That's the part I keep coming back to.

This didn't resolve my feelings about AI. It didn't make me an accelerationist. It didn't make me less worried about bad AI software, lazy AI writing, or people shipping things they don't understand.

But it did make me more convinced that there's a category of AI use that isn't about replacing people or automating taste.

It's about helping a person stay with a problem that's too large, too messy, or **too emotionally loaded** to hold in their head all at once.

For me, that problem was eight years of a life with someone I love.

**Postscript:** I used a few of the archive numbers above because the scale was part of what made the project interesting to me. The full analytics postscript has the visual version: message counts, attachment counts, word counts, active-day streaks, chapter density, recurring themes, reaction counts, and timing patterns. It's less romantic than the story itself, but it helps explain why this became a real project instead of a weekend prompt. You can see the [visual analytics section here](/#reader-analytics).
