TOKYO23
An on-chain passport for exploring all 23 wards of Tokyo.
TOKYO23 is a location-based NFT experience: a soulbound token that starts as a blank map of Tokyo and fills with ward stamps as its holder physically discovers goal locations across the city — with every pixel of the artwork generated on Ethereum.

- Chain
- Ethereum
- Token
- ERC-721A, soulbound, one per wallet
- Art & metadata
- 100% on-chain SVG
- Role
- Concept, design, contracts, backend & app
The brief
TOKYO23 was mini labo’s first public project: an experiment in using an NFT as a key to a real-world journey rather than a static collectible.
The idea is simple — one token, 23 wards. Each of Tokyo’s special wards hides a goal location, mixing well-known landmarks with hidden corners of the city. Find one, and your token changes to prove it.
How it works
Holders mint a single token, which begins life as a blank map. Out in the city, the TOKYO23 web app uses the browser’s geolocation to check how close the holder is to the nearest undiscovered spot and serves up hints along the way.
Checking a location is free. When a holder is ready, they apply their unlocks on-chain — batching several wards into one transaction to keep gas costs down. Each unlocked ward adds its stamp, colour and Japanese name to the artwork and increases the token’s points trait, out of a possible 23.
Because the token is soulbound — it can be minted or burned but never transferred — a completed map is a genuine record of the journey, not something that can be bought.
Engineering
The smart contract builds on ERC-721A with Solady and OpenZeppelin libraries, developed and tested with Foundry. The base artwork is stored on-chain with SSTORE2, and tokenURI assembles base64-encoded JSON and SVG at read time from a compact 23-bit unlock bitmap — no IPFS, no external servers.
Location proofs are handled by a lightweight verifier written in Rust and deployed as a Cloudflare Worker. Holders sign their coordinates with their wallet; the verifier checks them against the goal locations and returns a signed attestation, which the contract validates before updating the token. Updates emit ERC-4906 MetadataUpdate events so marketplaces refresh the artwork automatically.
The bilingual (English and Japanese) web app is built with SvelteKit and TypeScript, with wallet connection through Web3-Onboard.
Services
- → Concept & game design
- → Branding & artwork
- → UI/UX
- → Smart contracts
- → On-chain SVG
- → Backend services
- → Front end development
Stack
- → Solidity
- → ERC-721A
- → Solady
- → Foundry
- → SSTORE2
- → ERC-4906
- → Rust
- → Cloudflare Workers
- → SvelteKit
- → TypeScript
- → ethers.js
Work with us
Building something on the frontier? mini labo takes projects from first idea to mainnet.