← All insights
Case studyWebGLProgrammatic SEOShopify

Three things we built for ourselves, and what each one cost

A Shopify launch page rewritten for implementers, a 3D landing page you can play, and 900 pages of programmatic SEO. No clients, so every number in them is ours to publish — including the ones that do not flatter us.

Most agency portfolios are built from client work, which means the interesting numbers are the ones under NDA. Ours are not. These three projects have no client, no borrowed logo and no invented metric: we own them, so we can tell you what they weigh, what broke, and what we would not do again. Each one was built to answer a question we get asked in sales calls and could not previously answer with a link.

Vietfolk ’26 — the launch page, rewritten for the people who build it

Every Shopify Editions release ships as a long, motion-heavy microsite written for merchants in general. Vietfolk ’26 is the same format rebuilt in Vietnamese from the implementer’s side: twelve scroll-driven scenes, 47 compressed glTF binaries with 30 GPU-compressed KTX2 textures, 27 Rive animations and 99 short clips — and 6,352 words rewritten so each feature says what it takes to set up rather than what it is.

The Vietfolk ’26 microsite hero, a scroll-driven Shopify Editions-style launch page in Vietnamese.
Vietfolk ’26 — twelve scenes, one per Shopify feature family.

What it cost: 8.1 MB on first load and a 1.36 MB HTML document. Acceptable for a deliberate showcase, indefensible on a storefront. It also broke our deployment — 208 MB of assets on disk could not ship through Hostinger’s upload API, which wipes the directory first and rejects large archives, so the entire site moved to an rsync merge over SSH. A demo page changed how production deploys.

Read the Vietfolk ’26 case study

The full rewrite, the asset inventory, and the deployment consequence in detail.

BloomBound — a 3D landing page you can actually play

A hero section with a model spinning in it proves you can time an animation. It does not prove you can hold a frame budget while a skinned character, a rigged enemy, instanced foliage and a grapple system all run at once. So we built a real single-player game instead: four districts assembled from nine CC0 models, three chapters, and a one-eyed giant remeshed from a two-eyed CC0 body and animated in code against its 22 bones.

The BloomBound launcher, with the live 3D valley rendering behind the hero copy and three selectable chapters.
The launcher — the 3D world is already running behind the copy, with no loading screen between page and game.

What it cost: the whole build is 6.2 MB, and the honest headline is that the Three.js core is 143 KB gzipped against 27 KB for all of our own game logic. That ratio is the real lesson of any 3D project — the weight lives in the engine, not in your code. It is a fair price for a destination someone chose to visit, and we would not put it in a storefront’s critical path.

The player mid-flight at eye level with a one-eyed Cyclops in a floral crown, the prompt reading 2 m and SLASH.
Buying a rigged model and animating it yourself is far cheaper than commissioning animation — and keeps the licence clean.
Read the BloomBound case study

The remesh pipeline, the sub-path build, and all 96 automated browser checks. Or just play it from the App menu.

Tarotto — 900 pages from a standing start

Tarotto is a content site in the tarot and astrology niche, built on this same Next.js stack. Its sitemap listed 910 URLs when we read it on 8 September 2026, of which 729 are editorial pages under a single section, alongside 87 tarot pages, 26 personality tests and 17 horoscope pages. It ships in English and Vietnamese with hreflang alternates, and it started from zero indexed pages in April 2026.

It is the clearest answer we have to a request merchants make constantly: can we have a page for every category and every city. Yes — and it works exactly as well as the substance you can put on each one. A 729-page section and a collection tree that ranks are the same mechanism: one template, a clean content model, and enough genuinely distinct content per page to deserve the URL.

What it cost: honesty about measurement. Our most recent traffic figures are a May 2026 snapshot — 248 active users over 30 days, up 359%, with 4.05K pages indexed of roughly 8.1K crawled. Those are four months old, and they are not comparable to a same-day sitemap count: one counts canonical URLs a site declares, the other counts everything Search Console crawled. Two facts, not a trend. A site publishing at this rate should be measured on a schedule, not when someone asks for a case study.

Read the Tarotto case study

The content model, bilingual hreflang from day one, and why the URL casing is a lesson.

What the three have in common

Every one of them has a number that does not flatter us, and in each case that number is the most useful thing in the write-up. The 8.1 MB page that broke a deploy. The 143 KB engine that dwarfs the code it runs. The traffic snapshot that went stale while nobody was looking. A studio that only publishes its good numbers is telling you it has not measured the others.

  • The cost is almost never in your code — it is in the engine, the asset pipeline, or the infrastructure underneath it. Measure that first.
  • A showcase and a storefront have opposite budgets. Techniques that are right for a destination page are wrong in a purchase path, and saying so is part of the recommendation.
  • Decide what you will measure, and when, before the first page ships. Retrofitted measurement produces snapshots instead of trends.
  • Internationalisation, canonical URLs and URL casing are nearly free on day one and become migrations by month six.
  • If a demo cannot survive being deployed to production, it is a prototype. All three of these are live at their own URLs.

We scope client work the same way we report on these: what it will weigh, what it will cost, and the places we would advise against the interesting option. If that is the kind of answer you want before signing anything, the case studies are the long version.

All case studies

Four write-ups, every figure measured rather than estimated.