2026 · archive · memorial · photography
Pocketbook, what women carry
An archive my grandmother can rummage through
- Status
- live
- Bags
- 1
- Items
- 23
- Hard part
- voice without nostalgia
why
When I moved to Houston, my aunt had a closet I volunteered to clean out. Inside it was my great-grandmother’s old pocketbook, still filled with all her personal items: the kiss-lock coin purse with a torn corner of a ten-dollar bill folded inside, a rain bonnet in its plastic case, a stick of Juicy Fruit, a little red Bible, a silver pouch from her parish’s twenty-fifth anniversary. Mary Kukurugya, Hopwood, Pennsylvania, early 1970s by the look of the Eisenhower stamp tucked in the inner pocket.
I’d rummaged through that bag as a child. I was moving and going through my own clutter the same week, and rummaging through hers turned out to be the steadying act of the whole season. The women who came before me had carried the same kinds of things I was carrying.
My grandmother (Mary’s daughter, alive, ninety-nine) used to suggest I go through her bag with her to pass the time in the days before the internet. I built this so she could enjoy something AI helped me make. The first bag in the archive is her mother’s.
how it works
A static site. One JSON file holds the data, one page lists the bags, one page shows the bag’s contents: no CMS, no backend, no auth. The pipeline is short:
- Shoot the bag’s contents in a flat-lay
- Hand the photo to Claude, ask for bounding boxes plus a caption per item
- Crop along the boxes
- Run
rembg(a Python library that lifts a subject off its background) on each crop - Paste the JSON in
The model does the noticing. I do the editing.
The pipeline runs three Claude prompts:
- Flat-lay detects items in a multi-item photo and returns a bounding box plus a caption per box.
- Single captions a one-item photo end-to-end, for the close-ups I shot afterward.
- Verify runs over each cropped region from the flat-lay pass and answers either with a caption or the literal word REJECT: the safety net that catches edge crops, duplicates, and shadows the flat-lay pass mistook for objects.
All three prompts carry the same instruction in the body: no backstory, no speculation. One sentence, or two short ones. That instruction is most of the project.
the bag
Twenty-three items came out of Mary’s pocketbook. Some of what was in it, in the model’s words:
An open vintage metal-framed clasp coin purse with worn dark brown leather interior, containing a torn fragment of a paper ten-dollar bill showing the green “10 TEN” corner.
A small lavender-blue plastic case labeled “Rain Bonnet” in gold cursive script.
A small silver vinyl squeeze coin pouch with a metal clasp, printed in black with “25th Anniversary, ST. MARY & ST. CECILIA, C C & M, 1946 – 1971.”
A small red leatherette booklet titled “Personal Bible: Verses of Comfort, Assurance, Salvation” in black lettering, with slightly worn edges.
Two vintage black-and-white portrait photographs, one of a smiling young woman with wavy blonde hair and one of a young man in a light jacket, accompanied by handwritten notes in cursive, one dated 13/VII 1952 and signed “Mariena Slovová.”
I would have written an old coin purse, a rain bonnet, a parish keepsake, a Bible, some old photos. The model’s catalogue is the truer one: closer to a finding-aid than a memoir, closer to what a curator at a county historical society would type into the accession ledger than what a granddaughter would write in a memorial. The model’s job is to see; my job is to catch the misreads.
decisions I’d defend
The prompt does the no-nostalgia work. No backstory, no speculation. One sentence, or two short ones. That instruction sits at the bottom of all three prompts, and it’s the only register the model can reach for. If I’d asked for write a description of this item, I’d have gotten the eulogy I was already writing in my head. Asking for the catalogue voice gets the catalogue. The voice isn’t a property of the model; it’s an artifact of the prompt. Voice is engineered. Same instruction-as-load-bearing pattern in Celine’s information-not-advice constraints.
Static site, JSON-as-database. No CMS, no backend, no signups. The site is HTML and one JSON file because the user this is for (my ninety-nine-year-old grandmother) won’t outlive a startup, and the artifacts in it shouldn’t either. JSON files outlive most services. Same impulse as SPF’s URL-as-config: make the data the file.
Cutouts on cream, not retouched photos. Each item is rembg’d onto a paper-cream backdrop. The cutouts read as an estate-sale catalogue or a museum vitrine (index card, label, item) instead of a tech demo. The torn ten-dollar corner sits next to the recipe sits next to the Eisenhower stamp. The visual register is artifact, not content.
Built so a ninety-nine-year-old can use it. Large items, one-thumb scroll, no log-in, no swipe gestures, no notifications, no animation past what the page needs. The site reads like a photo album because grandma reads photo albums. The 2026 assumption that a user wants a feed is the wrong assumption for the user this was made for. Designing for one named person is sharper than designing for a persona, and the constraints fall out of who she is, not who I’d like to imagine the user as.
the receipts
The Flat-lay prompt, verbatim from ingest.py, what the model is reading on every multi-item photograph:
You are looking at a flat-lay photograph of items from someone's
pocketbook or purse.
Identify each distinct item you can clearly see. For each item,
return:
- a short, plain caption describing what the item is (no
backstory, no speculation)
- a bounding box as fractions of the image dimensions, where
each value is between 0.0 and 1.0:
[x_min, y_min, x_max, y_max] with origin (0,0) at the top-left.
Be conservative: only include items you can clearly see as
distinct objects. Merge items that are obviously one thing
(e.g. a coin purse with a coin half-out is one item).
Do not return the same item twice.
Return ONLY a valid JSON array, no prose, no markdown fencing.
The Verify prompt that runs on each cropped region from the flat-lay pass:
You are looking at a cropped region from a flat-lay photograph of
items from a pocketbook or purse.
If this crop clearly shows a single distinct item, write a
caption: include concrete details you can see (materials, text,
age cues) but no backstory, no speculation. One sentence, or
two short ones.
If the crop is empty, blurry beyond recognition, mostly
background, a duplicate fragment of an adjacent item, or just
the edge of something without clear item identity, respond with
exactly the word: REJECT
The phrase doing most of the work (no backstory, no speculation. One sentence, or two short ones) appears in both. The catalogue voice falls out of that line.
what I learned
The model sees without nostalgia, because the prompt told it to. Seeing-without-nostalgia isn’t a property of LLMs; it’s the prompt instruction doing exactly what it says. I would have written an old coin purse. Claude returned open vintage metal-framed clasp coin purse with worn dark brown leather interior, containing a torn fragment of a paper ten-dollar bill showing the green “10 TEN” corner. The flat description is the truer one. Take the no backstory line out and the eulogy comes back.
Bounding boxes collapsed the pipeline. Once I asked the model for coordinates instead of just descriptions (flat-lay in, cropped items out, no hand-cropping in between), and added the Verify pass on each cropped region, I could trust the boxes without re-checking each one by eye.
There’s a small loop running in the background. The model describes the bag. I read the description and decide what’s wrong with it. The next bag I shoot, I shoot a little differently because of how the last description landed. The pipeline is a conversation between three readers (the bag, the model, me), and I’m not always the most reliable one. Same hand-catches-what-the-machine-misses pattern in the Periodic Table’s catalogue work.
Designing for one named person beats designing for a persona. A ninety-nine-year-old user (somebody who doesn’t have an app folder, doesn’t think in feeds, isn’t going to remember a password) sets sharper constraints than any UX archetype. What falls out is closer to what most users actually want than what most products ship.
what would prove it
Three hypotheses I’d test with more bags than the one Mary’s pocketbook gave me:
- Caption correction rate stays low as the corpus grows. The bet is that no backstory, no speculation keeps the model in the catalogue register. If my hand-edits per caption stay roughly steady (around one substantive change per item, give or take) across new bags from new photographers, the prompt is doing the work. If they climb, the no-nostalgia line isn’t transferring across photographers and lighting, and the prompt needs more constraint, not less.
- Verify catches what flat-lay misses, with few false rejects. REJECT is the safety net. The hypothesis is that real rejects (empty crops, blurry edges, duplicates) outnumber false rejects (items the model second-guessed) by a wide margin. If too many real items get REJECTed, the verify prompt is paranoid; if too few duplicates get caught, the flat-lay pass is being optimistic. Both numbers, every bag.
- The catalogue voice ports across artifact types. A wallet, a dopp kit, a glove compartment, a side-table drawer: each has its own ecology of small things. If no backstory, no speculation produces the same finding-aid register across all of them, the voice is a property of the constraint, not of the artifact. If the model needs a new prompt for every new bag type, the rule is fragile and the project is harder to scale than it looks.
Two risks the project has to keep watching:
- The prompt holds for one photographer; it might not hold for ten. The model’s voice is consistent partly because my photos are: one room, one light, one angle, cream backdrop. Contributor flat-lays from kitchen tables and dim hallways will test whether the prompt compensates or drifts. The verify pass mitigates; contributor instructions (a one-pager, eventually) are the rest of the answer.
- The archive is sentimental territory; the prompt is the only thing keeping it from rewriting people’s families. No backstory, no speculation protects the catalogue voice. It does not protect against a contributor who wants the AI to write their grandmother’s biography. The submission flow has to surface the rule upfront (we describe; we don’t narrate) or the project becomes the eulogy generator I was careful not to build.
what’s next
More bags. The about page carries the coming-soon line (a way to send yours in), and that’s the thread. If you have a pocketbook you want catalogued, or a wallet, a dopp kit, a glove compartment, a side table drawer, write me. The archive opens with my great-grandmother’s bag, but the archive isn’t about her. It’s about what we carry. Hers, mine, yours when you want to share it.
See also
All projects- flowerpostcards Two archives, one rule: the source material is verbatim; the only invention is in how it's surfaced. Pocketbook hand-edits Claude's captions; flowerpostcards refuses to paraphrase a single LiveJournal sentence.
- Celine AI Same division of labor: AI does the noticing, the human edits before it ships. Celine is the same move in legal-tech: the model drafts the explanation; the human refuses to let it advise.
Working on something similar?
I take a small handful of consulting briefs a year and am always up for trading notes with anyone shipping in this space — send a note.
Or: values behind the work · obsessions that shape it · other projects.