Case study · Own venture
Ruby and River
A direct-to-consumer clothing shop, built and run end to end — storefront, payments, compliance, and the company behind it.
This is my own business, not a client engagement. It trades under the same SIREN as Canon Fidei, as the mentions légales record. It is here because it is the work I can show you in the most detail — I made every decision on it and can tell you why, including the ones I would take back.
- My role
- Founder, designer and sole engineer
- Platform
- Shopify, theme written in Liquid
- Checkout
- Card payments with 3D Secure
- Market
- France and the EU
- Live since
- 2026
- Status
- Live and trading
Where it started
Nothing. No company, no domain, no product photography, no legal entity, no payment processor. That is worth stating because most portfolio pieces begin somewhere further along, with a brand that already exists and a brief that already knows what it wants. This one had to answer the boring questions first, and the boring questions are the ones that sink small shops.
The decisions, and why
Shopify, not a custom storefront
I write software for a living and could have built the whole thing from scratch. I did not, and the reasoning is the same reasoning I would give you.
A shop is not mostly a website. It is tax rules, shipping zones, stock, refunds, chargebacks, PCI scope, and a checkout that has been tested against more edge cases than one person will ever see. Rebuilding that is not craftsmanship, it is expense. Shopify carries it, and the monthly fee buys a checkout I do not have to be liable for.
The line I do hold: the theme is mine, written in Liquid rather than configured from a preset. That is where a shop actually differs from its competitors, and it is the part a page builder makes generic. So the commerce engine is rented and the storefront is not — which is a different trade from the one this site warns against elsewhere, and worth being precise about.
Card payments, and the part everyone forgets
Taking a card is easy. What takes the time is everything around it: 3D Secure so that a disputed transaction is the bank’s problem and not mine, sensible behaviour when a payment is declined mid-checkout, and the reconciliation between what the store thinks it sold and what actually settled. A shop that takes a card wrongly costs more than the testing would have.
French and EU compliance, up front
Distance selling to consumers in France carries obligations that are not optional and are painful to retrofit: mentions légales, conditions générales de vente, the fourteen-day withdrawal right stated in the right place, GDPR consent that is real rather than decorative, and a company actually registered before the first sale. I did the registration, the filings and the pages myself. It is the least glamorous part of the project and the part most likely to end a shop that skipped it.
What I would do differently
Two things, and I would rather you hear them from me than discover the pattern yourself.
I built the theme before the product photography existed, so I designed around placeholder images and then adjusted the layout twice when the real ones arrived at a different aspect ratio and mood. On a client project I now ask for photography, or at least its shape, before the design is finalised — and if it does not exist yet, that is a line in the quote rather than a surprise later.
I also configured shipping zones optimistically, on the assumption that anywhere in the EU was much the same. It is not: carrier cost and delivery time vary enough that a flat rate either loses money or loses the sale. That is now something I set up from real carrier quotes rather than an average.
What this means for your project
The point of showing you my own shop rather than a logo wall is that I have been on the other side of it. I have had the payout not match the orders. I have had the compliance page be the thing standing between me and trading. When I quote you a shop, the estimate includes the parts that are invisible until they go wrong, because I have already paid for having underestimated them once.
If that is the kind of build you need, the shape of it is on the pricing section, and the way it runs is in the delivery model.