<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Pete Watters</title><description>Web3 frontend engineer with a decade in crypto — wallets, trading terminals and institutional interfaces across Bitcoin, Stacks, Solana and EVM chains.</description><link>https://petewatters.ie/</link><item><title>Redesigning My Portfolio: From a React PWA to an Astro Sidebar</title><link>https://petewatters.ie/blog/portfolio-design-evolution/</link><guid isPermaLink="true">https://petewatters.ie/blog/portfolio-design-evolution/</guid><description>Three rebuilds of my personal site -- the tooling, the positioning, and the visual identity -- and the decision behind each one.</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate></item><item><title>Building a Server-Rendered Email Verification Flow at Xapo</title><link>https://petewatters.ie/blog/xapo-nextjs-verify-flow/</link><guid isPermaLink="true">https://petewatters.ie/blog/xapo-nextjs-verify-flow/</guid><description>How we orchestrated a conditional API fetch on the Express side, server-rendered the result into a Next.js 9 page, and avoided the loading flash on email-link landings — and why the same instinct points to Server Components today.</description><pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate></item><item><title>Shipping a 5,000-Line PR Without Losing Your Mind</title><link>https://petewatters.ie/blog/shipping-monster-prs/</link><guid isPermaLink="true">https://petewatters.ie/blog/shipping-monster-prs/</guid><description>Lessons from shipping massive pull requests on a crypto wallet — including a 5,783-addition PR that refactored collectibles across a monorepo.</description><pubDate>Tue, 09 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Sharing Code Between a Browser Extension and React Native App</title><link>https://petewatters.ie/blog/sharing-features-extension-mobile/</link><guid isPermaLink="true">https://petewatters.ie/blog/sharing-features-extension-mobile/</guid><description>How we refactored Leather&apos;s activity feed into a platform-agnostic features package — sharing queries, types, and business logic across extension and mobile.</description><pubDate>Mon, 08 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Sharing Features Between React Native and a Browser Extension in a Monorepo</title><link>https://petewatters.ie/blog/cross-platform-monorepo/</link><guid isPermaLink="true">https://petewatters.ie/blog/cross-platform-monorepo/</guid><description>My first monorepo, two rendering targets, one shared feature layer</description><pubDate>Mon, 01 Dec 2025 00:00:00 GMT</pubDate></item><item><title>Building a Multi-Protocol NFT Gallery for a Bitcoin Wallet</title><link>https://petewatters.ie/blog/building-multi-protocol-collectibles/</link><guid isPermaLink="true">https://petewatters.ie/blog/building-multi-protocol-collectibles/</guid><description>Supporting Ordinal Inscriptions, SIP-9 NFTs, Bitcoin Stamps, and BNS Names in a single collectibles experience</description><pubDate>Sat, 15 Nov 2025 00:00:00 GMT</pubDate></item><item><title>Personalising Your App with Alternate Icons</title><link>https://petewatters.ie/blog/expo-alternate-app-icons/</link><guid isPermaLink="true">https://petewatters.ie/blog/expo-alternate-app-icons/</guid><description>How we implemented 11 app icon options using expo-alternate-app-icons</description><pubDate>Fri, 01 Aug 2025 00:00:00 GMT</pubDate></item><item><title>OTA Updates for Financial Apps</title><link>https://petewatters.ie/blog/expo-ota-updates/</link><guid isPermaLink="true">https://petewatters.ie/blog/expo-ota-updates/</guid><description>Balancing speed with security using EAS Update for a production crypto wallet</description><pubDate>Tue, 15 Jul 2025 00:00:00 GMT</pubDate></item><item><title>Building a Multi-Chain Wallet UI with React Native</title><link>https://petewatters.ie/blog/expo-multi-chain-architecture/</link><guid isPermaLink="true">https://petewatters.ie/blog/expo-multi-chain-architecture/</guid><description>Managing Bitcoin and Stacks in a unified interface with chain-specific balance, send, and receive flows</description><pubDate>Tue, 01 Jul 2025 00:00:00 GMT</pubDate></item><item><title>Secure Storage &amp; Biometrics in a Crypto Wallet</title><link>https://petewatters.ie/blog/expo-secure-storage-biometrics/</link><guid isPermaLink="true">https://petewatters.ie/blog/expo-secure-storage-biometrics/</guid><description>How we protect seed phrases with expo-secure-store and expo-local-authentication</description><pubDate>Sun, 15 Jun 2025 00:00:00 GMT</pubDate></item><item><title>Designing a Mobile Deep Link Flow for iOS</title><link>https://petewatters.ie/blog/ios-deep-linking/</link><guid isPermaLink="true">https://petewatters.ie/blog/ios-deep-linking/</guid><description>Setting up Apple Universal Links for a React Native crypto wallet — associated domains, entitlements, and the apple-app-site-association file.</description><pubDate>Sun, 15 Jun 2025 00:00:00 GMT</pubDate></item><item><title>How We Cut Our Mobile CI Time by 70% with Expo and EAS</title><link>https://petewatters.ie/blog/expo-cicd-fingerprinting/</link><guid isPermaLink="true">https://petewatters.ie/blog/expo-cicd-fingerprinting/</guid><description>Fingerprinting, EAS Workflows, and Maestro E2E tests for a production crypto wallet</description><pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate></item><item><title>Branded Types for Bitcoin Addresses</title><link>https://petewatters.ie/blog/branded-types-crypto-wallet/</link><guid isPermaLink="true">https://petewatters.ie/blog/branded-types-crypto-wallet/</guid><description>How adding a branded type for BTC addresses caught bugs at compile time and made the send flow safer in Leather&apos;s mobile wallet.</description><pubDate>Fri, 21 Feb 2025 00:00:00 GMT</pubDate></item><item><title>The Six-Line Fix: UTXO Consolidation at the Barcelona Offsite</title><link>https://petewatters.ie/blog/utxo-consolidation-six-lines/</link><guid isPermaLink="true">https://petewatters.ie/blog/utxo-consolidation-six-lines/</guid><description>Sometimes the best code is the code you delete. +6/-10 lines, merged same day.</description><pubDate>Mon, 20 Jan 2025 00:00:00 GMT</pubDate></item><item><title>Shipping a Crypto Wallet Mobile App From Scratch (As a React Native Newcomer)</title><link>https://petewatters.ie/blog/shipping-mobile-app-from-scratch/</link><guid isPermaLink="true">https://petewatters.ie/blog/shipping-mobile-app-from-scratch/</guid><description>From zero React Native experience to App Store in 3 months, launching at BTC Vegas</description><pubDate>Sun, 15 Dec 2024 00:00:00 GMT</pubDate></item><item><title>FlashList vs FlatList in a Crypto Wallet</title><link>https://petewatters.ie/blog/flashlist-vs-flatlist/</link><guid isPermaLink="true">https://petewatters.ie/blog/flashlist-vs-flatlist/</guid><description>How switching from FlatList to FlashList cut dropped frames and improved scroll performance in Leather&apos;s React Native token list.</description><pubDate>Fri, 15 Nov 2024 00:00:00 GMT</pubDate></item><item><title>Adding a Hide Balance Feature to a Crypto Wallet</title><link>https://petewatters.ie/blog/hide-balance-privacy-feature/</link><guid isPermaLink="true">https://petewatters.ie/blog/hide-balance-privacy-feature/</guid><description>A privacy feature that touches every balance display in the app — and why the implementation is simpler than you&apos;d think.</description><pubDate>Tue, 24 Sep 2024 00:00:00 GMT</pubDate></item><item><title>From Web Components to Native: Shipping a Cross-Platform UI Library</title><link>https://petewatters.ie/blog/cross-platform-ui-library/</link><guid isPermaLink="true">https://petewatters.ie/blog/cross-platform-ui-library/</guid><description>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.</description><pubDate>Wed, 18 Sep 2024 00:00:00 GMT</pubDate></item><item><title>Three Iterations to Get Container Architecture Right</title><link>https://petewatters.ie/blog/extension-containers/</link><guid isPermaLink="true">https://petewatters.ie/blog/extension-containers/</guid><description>How Leather&apos;s browser extension went from a global container system to composable page-level headers — across 468 files and two major refactors.</description><pubDate>Mon, 19 Aug 2024 00:00:00 GMT</pubDate></item><item><title>Filtering Spam Tokens in a Crypto Wallet</title><link>https://petewatters.ie/blog/spam-token-filtering/</link><guid isPermaLink="true">https://petewatters.ie/blog/spam-token-filtering/</guid><description>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.</description><pubDate>Tue, 02 Jul 2024 00:00:00 GMT</pubDate></item><item><title>Building an Installable UI Library from a Production App</title><link>https://petewatters.ie/blog/building-installable-ui-library/</link><guid isPermaLink="true">https://petewatters.ie/blog/building-installable-ui-library/</guid><description>How I extracted 20+ React components from a crypto wallet browser extension into a published, versioned UI library — and then integrated it back.</description><pubDate>Thu, 20 Jun 2024 00:00:00 GMT</pubDate></item><item><title>Creating a Panda CSS Preset for a Design System</title><link>https://petewatters.ie/blog/panda-css-preset/</link><guid isPermaLink="true">https://petewatters.ie/blog/panda-css-preset/</guid><description>How I extracted a wallet extension&apos;s theme configuration into a reusable Panda CSS preset package — consolidating tokens, recipes, and semantic styles into a single installable dependency.</description><pubDate>Wed, 29 May 2024 00:00:00 GMT</pubDate></item><item><title>Displaying Correct Amounts for Legacy UTXOs on Ledger</title><link>https://petewatters.ie/blog/ledger-nonwitness-utxo/</link><guid isPermaLink="true">https://petewatters.ie/blog/ledger-nonwitness-utxo/</guid><description>A small but critical fix for hardware wallet users — ensuring nonWitnessUtxo transactions display the right amount before signing.</description><pubDate>Tue, 14 May 2024 00:00:00 GMT</pubDate></item><item><title>Migrating a Design System: Stacks UI to Panda CSS</title><link>https://petewatters.ie/blog/design-system-migration/</link><guid isPermaLink="true">https://petewatters.ie/blog/design-system-migration/</guid><description>Incrementally removing a design system across 500+ files in a production crypto wallet</description><pubDate>Wed, 15 Nov 2023 00:00:00 GMT</pubDate></item><item><title>Designing a Monorepo for a Browser Extension and Mobile App</title><link>https://petewatters.ie/blog/designing-a-monorepo/</link><guid isPermaLink="true">https://petewatters.ie/blog/designing-a-monorepo/</guid><description>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.</description><pubDate>Thu, 02 Nov 2023 00:00:00 GMT</pubDate></item><item><title>Fixing Modal Routing in a React Browser Extension</title><link>https://petewatters.ie/blog/modal-routing-browser-extension/</link><guid isPermaLink="true">https://petewatters.ie/blog/modal-routing-browser-extension/</guid><description>How I refactored overlay modal routing in a browser extension to properly handle background content, direct navigation, and nested route state.</description><pubDate>Mon, 16 Oct 2023 00:00:00 GMT</pubDate></item><item><title>Mnemonic Validation with @scure/bip39</title><link>https://petewatters.ie/blog/mnemonic-validation/</link><guid isPermaLink="true">https://petewatters.ie/blog/mnemonic-validation/</guid><description>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.</description><pubDate>Fri, 13 Oct 2023 00:00:00 GMT</pubDate></item><item><title>Migrating Colour Tokens from Brown to Ink</title><link>https://petewatters.ie/blog/colour-token-migration/</link><guid isPermaLink="true">https://petewatters.ie/blog/colour-token-migration/</guid><description>How we renamed an entire design token vocabulary during Leather&apos;s rebrand — and why semantic naming matters more than you think.</description><pubDate>Thu, 15 Jun 2023 00:00:00 GMT</pubDate></item><item><title>Making Ethereum Transactions Human-Readable</title><link>https://petewatters.ie/blog/human-readable-ethereum-transactions/</link><guid isPermaLink="true">https://petewatters.ie/blog/human-readable-ethereum-transactions/</guid><description>Raw blockchain transactions are incomprehensible to most users. Here&apos;s how you decode them into something meaningful — and why it matters for crypto UX.</description><pubDate>Sat, 15 Apr 2023 00:00:00 GMT</pubDate></item><item><title>Building Coderunner: A Trading Automation Tool at Cryptowatch</title><link>https://petewatters.ie/blog/cryptowatch-coderunner-trading-automation/</link><guid isPermaLink="true">https://petewatters.ie/blog/cryptowatch-coderunner-trading-automation/</guid><description>Taking over a prototype and shipping an MVP for custom Python trading scripts at Kraken&apos;s Cryptowatch</description><pubDate>Thu, 10 Mar 2022 00:00:00 GMT</pubDate></item><item><title>Building the Cryptowatch Cockpit Portfolio Table</title><link>https://petewatters.ie/blog/cryptowatch-cockpit-portfolio-table/</link><guid isPermaLink="true">https://petewatters.ie/blog/cryptowatch-cockpit-portfolio-table/</guid><description>Creating a real-time portfolio management table and trading UI components for Kraken&apos;s Cryptowatch platform</description><pubDate>Tue, 15 Jun 2021 00:00:00 GMT</pubDate></item><item><title>Evaluating JavaScript Frameworks at Fidelity Investments in 2014</title><link>https://petewatters.ie/blog/javascript-framework-analysis-fidelity/</link><guid isPermaLink="true">https://petewatters.ie/blog/javascript-framework-analysis-fidelity/</guid><description>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.</description><pubDate>Sat, 01 Nov 2014 00:00:00 GMT</pubDate></item><item><title>My First Real Web Application: Building a Telco Monitoring Tool in 2012</title><link>https://petewatters.ie/blog/first-web-application-telco-monitoring/</link><guid isPermaLink="true">https://petewatters.ie/blog/first-web-application-telco-monitoring/</guid><description>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.</description><pubDate>Fri, 01 Jun 2012 00:00:00 GMT</pubDate></item><item><title>My Master&apos;s Thesis: Building an Academic Performance Analysis Tool in 2010</title><link>https://petewatters.ie/blog/masters-thesis-academic-performance-visualisation/</link><guid isPermaLink="true">https://petewatters.ie/blog/masters-thesis-academic-performance-visualisation/</guid><description>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.</description><pubDate>Wed, 01 Sep 2010 00:00:00 GMT</pubDate></item></channel></rss>