The job
Double Half is a Swedish wholesaler that sells greeting cards to shops. The previous owner sold mostly by calling shops herself. When the new owner took over, she wanted resellers to be able to order online, and she asked me to build the whole site.
I built it alone with Claude Code. The owner gave me a requirements spec, and I worked from that and asked her questions along the way. All the technical decisions were mine, and a lot of the features came from my suggestions as we went. A designer drew wireframes for the start page, the catalog and the product page.
The site is finished and live at doublehalf.se. The owner is filling in the inventory before it opens to resellers, and I make smaller changes when she asks.
What the shop does
Anyone can browse the catalog. A shop applies for an account, and once it's approved it can log in, fill a cart and place an order. There's no payment in the checkout. The order is invoiced afterwards.
Cards are sold in packages, and the pack size is set per product. An order has a minimum number of packages, and a card can come with the envelope that belongs to its series. An order keeps a copy of the prices, addresses and terms from the moment it was placed, so changing a product later never changes an old order. VAT depends on where the customer is and whether it's a VAT-registered company in the EU, and the checkout handles each case. The whole shop is in Swedish and English.
How it was built
Before building anything, I went through the spec with Claude and listed everything it left open or contradicted itself on. Those became my questions for the owner. Then I split the work into sessions, each one a feature with a written design spec, a plan and tests against a real database. I built it with Claude Code and the superpowers plugin, and read and tested what came back at the end of every session. When a decision was wrong I sent it back and said what to do instead.
The stack is Next.js, TypeScript and Postgres, hosted on Vercel. The database is in Frankfurt and the site runs in Stockholm, so customer data stays in the EU.
The admin
The owner runs the business from the admin on her own. It covers orders, products, customers and stock, and also packing slips, invoice details, statistics and sales. She can import her existing customer and product lists from CSV files and put the start page together herself from sections.
I split the admin in two. One part has what she uses every day: orders, products, customers, stock and images. The other has what she sets up once and leaves alone, like series, designers, texts and settings. Before choosing that, I had three different versions built as clickable prototypes and picked one by switching between them.
The site was delivered empty, and a product can't be added until there's a series and a designer for it. So the admin has a checklist that shows the setup steps in order and ticks them off as the data comes in.
The card in 3D
Most of Double Half's cards are die-cut. The front has a hole, and part of the inside shows through it, so a flat photo can't show what the card looks like. The old site had a 3D viewer for this, but it was clunky and didn't look good. I suggested a new one on the product page that shows the card as two panels on a hinge, which the visitor can open and turn over. It's done in CSS with no 3D library.
Cards from the print files
The previous owner handed over the print PDFs the cards were made from. The die cut is drawn in each file as a magenta line, solid for a cut and dashed for a fold. That's more exact than a photo, so I had a script built that renders each side of the card from the PDF, leaves the guide lines out and turns the hole into transparency.
The script sorts each card by its lines. Cut marks mean a hole, a dashed line means a folded card, and no dashed line means a flat one. Some cards fold in ways the 3D viewer can't show, so the owner marks those herself and the shop shows the flat artwork with a photo instead.
What I took away
I hadn't built a shop before, and it went from the requirements spec to a finished site in about a month, with me as the only developer.
It also showed that I can work to someone else's spec. The requirements came from the owner, and I turned them into a working product and made the technical decisions along the way.