Skip to content
Nachi3D Labs

ProjectsNachi3D Certify

Nachi3D Certify

Live

NFC-based authenticity verification for hand-painted resin figurines.

Live demoSource available on request

About this project

Overview

Nachi3D Certify pairs each figurine I sell with an NTAG215 NFC chip embedded in its base. A customer taps their phone on the chip and lands on a verification page showing the piece's number, photos, edition size, sculpt and paint dates, and ownership chain. The page is publicly accessible — no app to install — and proves the figurine came from my workshop, not a reseller or counterfeiter.

Built on Next.js 15 with App Router, TypeScript strict mode, and Tailwind v4, hosted on Vercel with Supabase as the Postgres + Auth + Storage backend. HMAC-SHA256 tokens prevent URL forgery: every verification URL contains a 24-character signature computed server-side, so editing the chip's UID by even one character lands the visitor on a tamper page. Trilingual EN/FR/AR with full RTL.

The real reason: I was making original figurines and watching cheap unauthorized reprints appear online before I'd even finished a series. I wanted a way to say 'this one is real' that survived photos, copies, and bad-faith resale.

Key features

What it does

Tap-to-verify via embedded NTAG215 chips — no app install needed
A6 PDF certificate generated on demand with QR code
Owner claim flow via magic-link auth (Supabase + Brevo SMTP)
Peer-to-peer ownership transfer with revoke before accept
Public gallery with character search and license filters
Append-only provenance timeline (created, claimed, transferred)

Built with

The Stack

Next.js 15
React 19
TypeScript
Supabase
Tailwind v4
next-intl
pdf-lib
Playwright

What I'd do differently

In hindsight

I'd separate test and production Supabase projects from day one — sharing one project caused a near data-loss bug where e2e seed pruned real pieces. I'd also build the public auth header in Phase 1 instead of grafting it on after admin-only login was shipped.

Want something like this built for you?

Tell me what you'd like to build and we'll see if it fits.