blessed_moon@studio
studio: Blessed Moon Studio
discipline: Strategy · Design · Engineering
stack: Next.js · Tailwind · WebGL
scene: ASCII moon · 5 keyframes
type: Space Grotesk / JetBrains Mono
accent: #ff6a1f
sound: muted
status: ready
B / S / MCASE_07 / 26

— Case study 07

Trísion

One catalogue, a showcase for every reseller — no cart, ever

All work
trísion.capture● verified
Trísion catalogue with format/material/colour filters and real numeração on every card

project overview

A brand site and multi-tenant reseller platform for a Brazilian eyewear label, where every independent optical shop that resells the brand gets its own storefront sharing one catalogue — never a themed copy of the brand's own site.

shipped outcome

A working Fase 0: the homepage, collections, catalogue, product pages, and a path-routed storefront stand-in all render end-to-end against typed mock data, dark-only, with the brand's own gold as the single accent — and every product photo gallery without a real shot renders an honest 'no photo' state rather than an invented one.

Role
Full-stack product engineering
Timeline
Ongoing — Fase 0 of a phased build
Year
2026
Team
Solo delivery
The problem01

The client's entire web presence was a Linklist page and a one-screen Canva site, and her resellers — independent optical shops across Brazil — had nothing of their own to show a customer. The brand already existed: a name, a mark, a specific gold sampled from her own material, '24 years' as the one asset nobody else in the category has. The job was building the platform to carry that identity without letting every reseller flatten into an identical sub-brand.

The approach02

A reseller is an endorsement, not a sub-brand, enforced in the data model itself — no colour field, no logo field, no font field, ever. Every path, brand site or reseller storefront, resolves through one WhatsApp deep-link builder. The catalogue and tenancy layers are built as typed seams over local mock data now, so the CMS arriving in the next phase is a new implementation behind an existing interface, not a rewrite. And where a rule says a number must be a real measurement or a photo must be real, the honest failure state ships instead of a placeholder that would quietly lie to an optician.

The result03

A working Fase 0: the homepage, collections, catalogue, product pages, and a path-routed storefront stand-in all render end-to-end against typed mock data, dark-only, with the brand's own gold as the single accent — and every product photo gallery without a real shot renders an honest 'no photo' state rather than an invented one.

— Interface evidence

The product, not a placeholder

These are the verified interface captures from the project build. Scroll inside taller frames to inspect each complete page.

Trísion homepage: the thesis line and the starfield ground01 / 06
Trísion homepage: the thesis line and the starfield ground
Trísion catalogue with format/material/colour filters and real numeração on every card02 / 06
Trísion catalogue with format/material/colour filters and real numeração on every card
Trísion collections index03 / 06
Trísion collections index
Trísion product page showing the honest 'sem foto' empty state instead of a stock photo04 / 06
Trísion product page showing the honest 'sem foto' empty state instead of a stock photo
Trísion reseller directory, filterable by state and city05 / 06
Trísion reseller directory, filterable by state and city
A reseller's own storefront at /loja/[rev] — the Fase 0 stand-in for a subdomain06 / 06
A reseller's own storefront at /loja/[rev] — the Fase 0 stand-in for a subdomain

— Delivery process

From operating constraint to shipped system

The work is sequenced around risk. Domain rules and failure states come before interface polish; automation arrives before handoff.

01

Scaffold and the pitch deck

Design tokens sampled from the client's own material, including the specific gold rather than a generic stock tone. The first deliverable was a slide presentation built to extract the open questions — domain ownership, pricing model, WhatsApp routing — that block later phases, shown to the client on her phone.

02

The brand components

Hand-written corner brackets that frame something real, the millimetre numeração component with an inline-SVG square glyph, a wordmark drawn from one shared path source across header/favicon/share image, and a starfield canvas that degrades to a complete static page under reduced motion or no WebGL.

03

Catalogue and tenancy, against typed mock data

The full frontend — home, collections, a filterable catalogue, product pages, and a storefront stand-in — built behind one catalogue seam and one tenancy seam, so Payload can implement both later without the pages above them changing.

04

Fase 1 — not started

Payload CMS and Postgres, mounted once the client's apex domain is confirmed — the wildcard-subdomain storefront routing the whole multi-tenant model depends on can't ship without it.

— System architecture

Clear boundaries, explicit responsibilities

Each layer has one job and a narrow contract. That keeps external services replaceable and product behavior testable.

Next.jsTypeScriptTailwind CSS v4Zustand
trísion.sys● online

armação / tri-ex-14

52 □ 18-145

aviador · titânio · bronze

foto

sem foto — honesto

nenhum valor inventado

revendedores / 8

catálogo[x]
numeração[x]
wa.me link[x]
tenancy seam[x]
payload cms[ ]
one catalogue, many storefronts
Client

Next.js App Router

Brand routes and the Fase 0 storefront stand-in sharing one app, dark theme hardcoded, no light-mode toggle.

Catalogue seam

One typed source function

Local mock data today; a CMS implementation later sits behind the same interface, not a rewrite.

Tenancy seam

One scope function

Every tenant-scoped read — reseller, showcase — goes through this one place.

Conversion

One wa.me builder

Every CTA on every route resolves through the same WhatsApp deep-link function.

— What shipped

Product capabilities

01

Endorsement-only reseller storefronts

A reseller gets a name, city, contact, and one photo — never a colour, logo, or font — enforced by the data model, not editorial discipline.

02

Honest 'no photo' empty states

Every product gallery without a real photograph says so plainly instead of substituting a stock image that isn't actually this brand's product.

03

Real numeração or none at all

The millimetre frame measurement renders only from real data, with its square glyph as inline SVG — never a placeholder value.

— Engineering pressure

Challenges resolved

01

Building the CMS seam before the CMS

Fase 0 has no database by design, but every future collection already has a typed consumer waiting for it — getting that boundary right without the real implementation to test against is the highest-risk part of the phasing.

02

Never inventing a fact about the client's business

No price, measurement, city, or reseller name gets invented — an unresolved fact is written down explicitly as a question to verify instead of a plausible-looking placeholder.

03

A brand asset that's still an approximation

The wordmark is currently an approximate redraw pending the original vector — every surface that renders it reads from one shared source so the real file, once it arrives, updates everywhere at once.

next transmission

Need a system this deliberate?

Bring the operating problem. We will shape it into a clear product brief and a buildable next step.

Start a project