nubook: a product built by directing an AI coding agent
nubook is a bookshop for novels about women and gender, where books are connected by the ideas they share. I designed it end to end and directed an AI coding agent as the implementer. The shop grew around one layer: motifs, and a bookseller who writes a recommendation for the book you came for.
Type
AI-native
, 0→1

Overview
A bilingual (Polish and English) bookshop for novels about women and gender, built to test one proposition: that the most useful thing a specialist bookshop can offer is not a better filter, but a better unit of meaning.
Role: Product designer: product strategy, research, IA, interaction design, UI, content design, QA
Implementer: Claude Code, an AI coding agent
Type: Self-directed project, in progress
Scale: 19 titles · 15 motifs · 256 commits · 13 test suites · roadmap of 8 steps, 7 closed
Source: github.com/agakijek2/nubook
It didn’t start as a shop
It started as a way to connect the dots between novels. I am interested in how novels keep returning to the same questions about women and gender, and in the fact that the books answering one of those questions are almost never shelved together.
Once the connections existed, the obvious next question was what someone does with them. The honest answer was: buys the book. So nubook became a bookshop. The recommendation layer is not a feature bolted onto a shop; the shop is what got built around it.
The problem it answers
Online bookshops sort by what is easy to count: genre, price, publication date, bestseller rank. None of those answer the question a reader actually arrives with: is this book about the thing I care about? A reader interested in how fiction handles madness, or motherhood, or passing, has no way in.
Three constraints I held to
The shop has to work as a shop. Search, filters, sort, cart, checkout and confirmation are real, not sketched.
Nothing invented. Every interpretive claim the shop makes is traceable to a named source.
Bilingual. Both languages are written independently, not translated one from the other, so each gets not only correct grammar and structure but also its own idiom and tone.
The scope
The shop is built on documents I wrote with AI: fifteen motifs, nineteen book descriptions and the bookseller’s brief, her rules. The bookseller works only from those sources, and what she gives back is a recommendation from the shelf.

The motif layer: the core of the project
I defined 15 motifs – the madwoman, the angel in the house, passing, the social clock, who is looking – each an idea that recurs across the catalogue. Each carries a short explanation, a named origin (Gilbert and Gubar, Spivak, Creed, Butler, Freeman) and the year. Books carry two to four motifs. A motif is a filter, a name on a product page and a short essay in a drawer: the same object at three magnifications.
The constraint that shaped it: a motif is not a tag. A tag labels; a motif makes a claim about a book, so it has to cite someone. Writing the sources took longer than building the filtering.
The bookseller, version one: a chat in the corner
The first bookseller followed the usual pattern for an assistant: a mark in the corner of every view that opened into a panel, like a chat. She spoke on three titles – The Handmaid’s Tale and two that are out of stock – naming other books from the shelf and explaining why each one belongs beside the book the reader came for.
What usability testing showed
I showed the shop to six people, including 3 employees of gender studies, and ran usability tests with them. The feedback was consistent: the bookseller wasn’t understood, and as an element she felt strange – disconnected from the page, and promising to accompany the reader through the whole shop.
That was never my intention. She has something to say only where the motifs are, on the page of a specific book.
The decision: drop the chat, move her into the context
I decided not to follow the usual chat UI. The bookseller became a section of the product column, built from the same parts as everything around her. She arrives after the description and the motifs, so the reason comes before the recommendation drawn from it.
Testing it again
I showed the new version to another six people. Five of them read the bookseller as part of the book’s story. They were curious about books they hadn’t noticed on the listing, and they understood why those particular ones were proposed.
And I heard the feedback I was hoping for: buying two books connected by motifs felt more satisfying than buying two without straightforward connection. That was exactly the goal – to give readers a way to grow into literature about gender step by step, with the books they pick together telling a bigger story.
This also taught me something about AI in products: presenting a feature as an assistant, a chat in the corner, mimicking AI, added nothing for readers. They weren’t interested in the technology, only in discovering books in the context they were already exploring.
Designing the exceptions, not the happy path
Most of the interesting work was in states a demo usually skips: a filter that disables itself when it would return zero results, but never when it is currently applied; a mobile filter sheet that keeps the control that opened it visible; and a search that finds nothing.
Where she is going: a search that still answers
Today, a search for a title the shop doesn’t stock says so and offers the way back to the whole shelf. The step in progress turns that dead end into the bookseller’s moment: we don’t have this title, but here are three that share its motifs – and why each one.
Her texts are written by hand against the catalogue, which is honest and doesn’t scale. The next step puts a model behind her, with the rules deliberately limiting her reach. For a title the shop doesn’t stock, my own server will fetch from named sources, keep what the book is about and how it was received, and drops the plot summary before any model sees the text. The bookseller will only see that text, the shop’s catalogue and the list of motifs, and she can only recommend books the shop actually has. The model lets her answer many more searches, but her rules stay exactly the same.
How it was built
I directed Claude Code, an AI coding agent, as the implementer. Every design and architecture decision, every rejection and every piece of copy is mine; the agent wrote the code under those decisions. Each commit is one approved decision, and each completed step closes with a written decision record – what was decided, why, and what was rejected. Test suites and documentation audits held the agent to those decisions. The design system it runs on is a case study of its own.

A product page: description, quotation, motifs, and the bookseller at the foot of the column. The listing view on the phone.

Dark scheme.
Outcomes
A bookseller shaped by research. Two rounds of usability testing with six people each turned a chat-like widget into part of the book’s page, read as part of the story by five of six testers.
A shop that works end to end. Grid, search, motif and genre filters, sort, product page, author drawer, cart, checkout with validation and confirmation – in two languages and two colour schemes, at every breakpoint.
A browsing model that holds up. A reader who cares about the madwoman finds the books and an explanation of why those. The same layer makes the out-of-stock case useful instead of apologetic.
A documented design system, shipped with the shop: 24 tabs and 136 tokens, generated from the stylesheet the shop runs on.
Accessibility as a design constraint. Visible focus everywhere, drawers as proper dialogs, live regions for anything that appears unasked, and a contrast table computed from the tokens.
Honest about its gaps. Two contrast pairs sit below AA, named as open items rather than left out.
What comes next
The roadmap is published with the shop and mirrored in the repository, with a test comparing the two. Seven of eight steps are closed, each with its own decision record. The open one is the model behind the bookseller – and a written account of how it works, because a shop that makes interpretive claims owes its reader an explanation of where they come from.
The long version of the ambition is a shop I would like to open one day. The short version is the one being tested here: that a reader deserves to browse by what a book is about.