Writing
-
Sharing Code Between a Browser Extension and React Native App
How we refactored Leather's activity feed into a platform-agnostic features package — sharing queries, types, and business logic across extension and mobile.
-
Branded Types for Bitcoin Addresses
How adding a branded type for BTC addresses caught bugs at compile time and made the send flow safer in Leather's mobile wallet.
-
From Web Components to Native: Shipping a Cross-Platform UI Library
How we extended a web-first React UI library to support React Native, built components bottom-up, and shipped the first production mobile screen from shared packages.
-
Three Iterations to Get Container Architecture Right
How Leather's browser extension went from a global container system to composable page-level headers — across 468 files and two major refactors.
-
Mnemonic Validation with @scure/bip39
Adding real-time word validation to a 12/24-word seed phrase input — consolidating BIP39 libraries and catching typos before they cost someone their wallet.
-
Shipping a 5,000-Line PR Without Losing Your Mind
Lessons from shipping massive pull requests on a crypto wallet — including a 5,783-addition PR that refactored collectibles across a monorepo.
-
Sharing Features Between React Native and a Browser Extension in a Monorepo
My first monorepo, two rendering targets, one shared feature layer
-
Building a Multi-Protocol NFT Gallery for a Bitcoin Wallet
Supporting Ordinal Inscriptions, SIP-9 NFTs, Bitcoin Stamps, and BNS Names in a single collectibles experience
-
Personalising Your App with Alternate Icons
How we implemented 11 app icon options using expo-alternate-app-icons
-
OTA Updates for Financial Apps
Balancing speed with security using EAS Update for a production crypto wallet
-
Building a Multi-Chain Wallet UI with React Native
Managing Bitcoin and Stacks in a unified interface with chain-specific balance, send, and receive flows
-
Secure Storage & Biometrics in a Crypto Wallet
How we protect seed phrases with expo-secure-store and expo-local-authentication
-
Designing a Mobile Deep Link Flow for iOS
Setting up Apple Universal Links for a React Native crypto wallet — associated domains, entitlements, and the apple-app-site-association file.
-
How We Cut Our Mobile CI Time by 70% with Expo and EAS
Fingerprinting, EAS Workflows, and Maestro E2E tests for a production crypto wallet
-
The Six-Line Fix: UTXO Consolidation at the Barcelona Offsite
Sometimes the best code is the code you delete. +6/-10 lines, merged same day.
-
Shipping a Crypto Wallet Mobile App From Scratch (As a React Native Newcomer)
From zero React Native experience to App Store in 3 months, launching at BTC Vegas
-
FlashList vs FlatList in a Crypto Wallet
How switching from FlatList to FlashList cut dropped frames and improved scroll performance in Leather's React Native token list.
-
Adding a Hide Balance Feature to a Crypto Wallet
A privacy feature that touches every balance display in the app — and why the implementation is simpler than you'd think.
-
Filtering Spam Tokens in a Crypto Wallet
How we built and evolved a spam filter for token names, symbols and transactions in Leather — from a URL regex to a generic sanitiser across the whole UI.
-
Building an Installable UI Library from a Production App
How I extracted 20+ React components from a crypto wallet browser extension into a published, versioned UI library — and then integrated it back.
-
Creating a Panda CSS Preset for a Design System
How I extracted a wallet extension's theme configuration into a reusable Panda CSS preset package — consolidating tokens, recipes, and semantic styles into a single installable dependency.
-
Displaying Correct Amounts for Legacy UTXOs on Ledger
A small but critical fix for hardware wallet users — ensuring nonWitnessUtxo transactions display the right amount before signing.
-
Migrating a Design System: Stacks UI to Panda CSS
Incrementally removing a design system across 500+ files in a production crypto wallet
-
Designing a Monorepo for a Browser Extension and Mobile App
How I set up and designed the monorepo architecture for Leather wallet — consolidating a browser extension, mobile app, and shared packages into a single repository with automated publishing.
-
Fixing Modal Routing in a React Browser Extension
How I refactored overlay modal routing in a browser extension to properly handle background content, direct navigation, and nested route state.
-
Migrating Colour Tokens from Brown to Ink
How we renamed an entire design token vocabulary during Leather's rebrand — and why semantic naming matters more than you think.
-
Making Ethereum Transactions Human-Readable
Raw blockchain transactions are incomprehensible to most users. Here's how you decode them into something meaningful — and why it matters for crypto UX.
-
Building Coderunner: A Trading Automation Tool at Cryptowatch
Taking over a prototype and shipping an MVP for custom Python trading scripts at Kraken's Cryptowatch
-
Building the Cryptowatch Cockpit Portfolio Table
Creating a real-time portfolio management table and trading UI components for Kraken's Cryptowatch platform
-
Evaluating JavaScript Frameworks at Fidelity Investments in 2014
A look back at evaluating Ember.js vs Backbone/Marionette for enterprise financial applications — and what it taught me about making technology decisions that stick.
-
My First Real Web Application: Building a Telco Monitoring Tool in 2012
Before React, before frameworks, before crypto — I built an internal monitoring tool at The Now Factory using Java, jQuery, HighCharts, and the Google Visualisation API.
-
My Master's Thesis: Building an Academic Performance Analysis Tool in 2010
Highlights from my MEng thesis at DCU — a Java web application that used HighCharts, the Google Visualisation API, and linear regression to analyse student academic data.