01 · The challenge
What needed solving
The client had an SPL Token 2022 mint already live but no on-chain metadata attached — the token showed up in wallets as an anonymous blob with no name, symbol or logo. They needed a repeatable way to attach metadata to an existing mint, and to update name / symbol / URI / seller-fee later without redeploying the token or migrating holders to a new mint.
02 · Our approach
How we framed the work
We started with a discovery sprint to map the user journey, business goals and real constraints. From there we wrote a fixed-scope plan: clear milestones, weekly review gates on a staging URL, and a written exit criterion for every phase. The blockchain space rewards teams that ship — not teams that plan — so we biased the engagement towards working software from week two onward.
03 · The solution
What we built
We built a TypeScript toolkit (main.ts + client.ts) around the Metaplex Umi createV1 and updateV1 instructions for the SPL Token 2022 metadata extension. A single INITIALIZE flag decides whether the script attaches new metadata to the mint (name, symbol, off-chain URI, Fungible standard, immutable flag) or updates an existing record (e.g. seller fee in basis points). Mint authority keypair is loaded from a JSON file, network defaults to Devnet for safe iteration, signatures are base58-encoded and logged for explorer lookup. Token logo assets ship in-repo so the off-chain URI JSON references stay deterministic across deployments.
04 · The results
What changed for the client.
Existing mints become wallet-legible without redeploying or migrating supply
Toggle between initialise and update with a single flag — same script, both flows
Devnet-default with explicit keypair loading — safe to re-run while iterating on metadata
Tech stack
Want a similar outcome for your business? We'd love to hear about it.