Frak Labs
Co-founder & CTO
2022 - present
In Production
- Daily wallet loads
- 100k+
- Infra cost
- -85%
- Wallet CI (cached)
- 9min to 2min
- Onboarding
- Seedless, biometric
What Frak is
Frak is an on-chain reward and referral platform: brands run campaigns where users get paid in tokens for actions like sharing a product or referring a friend, settled automatically through smart contracts on Arbitrum. The catch with any “pay users in crypto” product is the onboarding wall: nobody installing a Shopify plugin wants to explain seed phrases to their customers. Frak’s whole technical bet is removing that wall, then embedding the result cheaply enough that merchants don’t notice the cost.
I’m co-founder and CTO. I own everything technical: architecture, the wallet, the chain layer, the backend, the infra, and the team building all of it.
The wallet
The core product is a self-custodial smart wallet built on ERC-4337 account abstraction with WebAuthn (passkey) signing instead of a seed phrase. Users authenticate with their device’s biometrics; a P256 signature validates the user operation on-chain through a Kernel-based smart account, so there’s no private key for anyone to lose, write down, or phish. We built on and contributed back to the ZeroDev Kernel and Pimlico’s permissionless.js to get there.
Once the wallet holds value, it needs to leave the crypto bubble. We integrated Monerium, a licensed e-money institution, to give the smart account a real SEPA-reachable IBAN: a backend-free OAuth2 + PKCE connect flow, ERC-1271 wallet linking, delegated KYC, and a signed EURe redeem off-ramp. Users can move from on-chain rewards to euros in their bank account without us touching a compliance license.
The blockchain layer
Reward logic, referral tracking, and campaign accounting live in Solidity contracts across 8 master contracts and multiple factories. We moved our contract tooling from Hardhat to Foundry early on for faster, more reliable testing, and gas optimization has stayed a constant discipline (I’ve placed #2 globally in a gas-golfing competition, which is more than a flex: it’s the same skill that keeps user operations cheap to sponsor).
Backend, SDK, and the embeddable wallet
The backend runs on Bun and Elysia. Integration has grown into a full SDK surface: a vanilla JS core SDK for the underlying protocol, a vanilla JS component SDK with prebuilt HTML components for teams that want drop-in UI, a React SDK for the same, and, newest, native Android and iOS SDKs so mobile apps get the same reward and referral flows as the web. The web SDKs mount a listener iframe on the merchant’s page, a guest on someone else’s page loading on hundreds of thousands of partner pageviews a day where the vast majority never trigger any wallet UI, so its cost had to round down to nearly zero. We rebuilt it around a “ring architecture”: a 3-chunk eager bundle for the RPC bridge, with everything else (Preact, the modal, the sharing flow) split into lazy chunks the SDK preloads speculatively. Combined with an earlier pass that cut the wallet bundle by 30%, this is what keeps the embed invisible on partner sites’ load times.
Separately, the Frak wallet app itself also ships as a native consumer app via Tauri (React + Rust), including a from-scratch native WebAuthn plugin for iOS and Android so passkeys work outside the browser.
E-commerce integrations
Frak plugs into the platforms merchants already run: a Shopify app (storefront banner, product-page share button, and a post-purchase checkout extension, unified under one merchant-owned translation source across four different runtimes), a WordPress/WooCommerce plugin built to add near-zero overhead to every page load with webhook delivery delegated to WooCommerce’s native pipeline rather than a hand-rolled dispatcher, and a Magento module for the same flows. Any other stack integrates through the base SDK directly, with a custom webhook acceptance flow standing in for a platform-specific plugin.
Infrastructure
Infrastructure went through a real evolution: AWS Lambda serverless, to SST-managed infrastructure, to a self-hosted Kubernetes platform on Hetzner, cutting infrastructure costs by 85%. On top of that we run our own CI: in-cluster GitHub Actions runners, BuildKit over mTLS, and a shared registry cache, which took the wallet’s deploy pipeline from a 9-minute build down to a 4-minute cold run and 2-minute cached run.
My role
I’ve been technical lead since day one: architecture decisions across the wallet, contracts, backend, and infra; hiring and leading the engineering team; and staying hands-on in the codebase, from WebAuthn validator internals to the Kubernetes platform underneath everything.
Articles about this project
Designing a Kotlin SDK ABI You Can Never Take Back
Kotlin SDK ABI design for Maven Central: why default arguments break binary compatibility, how to hand-roll an apiCheck gate on AGP 9, and what .api dumps miss.
18 min read
Two Native SDKs, One Wire Contract: Golden Fixtures Instead of Kotlin Multiplatform
Golden JSON fixtures as a cross-platform SDK contract: why we rejected Kotlin Multiplatform, the ICU U+202F hazard, and the drift the corpus still misses.
20 min read
540ms Tap-to-Paint: A WebView Bottom Sheet That Feels Native
WebView bottom sheet performance on Android and iOS: warm pooling, session-at-the-tap and fragment activation cut tap-to-first-paint from 716-1119ms to ~540ms.
20 min read
Giving a Smart Wallet a Bank Account With Monerium
How we gave Frak's self-custodial smart wallet a real IBAN via Monerium: OAuth2 with PKCE, ERC-1271 linking, delegated KYC, and a signed EURe off-ramp.
19 min read
Shopify i18n: One Metaobject Source for Four Runtimes
A Shopify app's banner, share button, and checkout card localized from one frak_i18n metaobject, plugged into Shopify's Translate & Adapt.
11 min read
Rebuilding the Wallet's CI: From 9 Minutes to 2
How we cut wallet CI from 9 minutes to 2: killing Dockerfile.base, in-cluster BuildKit, a Zot registry cache, and shared apt and bun caches across six images.
17 min read
A Self-Hosted Hetzner CI Platform for the Frak Stack
How we self-hosted CI on Hetzner: in-cluster GitHub runners, BuildKit over mTLS, a Zot OCI registry, and a Verdaccio NPM mirror on k3s.
20 min read
Ring Architecture: A Wallet That Costs Nothing to Embed
How our embedded wallet boots from a 3-chunk eager bundle: React to Preact, eager/lazy ring splitting, and SDK prefetching of lazy chunks.
20 min read
Rich Native Share Sheets for Tauri on iOS and Android
Build a native Tauri share plugin for iOS and Android: rich URL preview cards via LPLinkMetadata, FileProvider thumbnails, and a bounded image race.
14 min read
Passkey Recovery That Survives App Uninstalls in Tauri
Persist passkey recovery hints through app uninstalls with a Tauri plugin: NSUbiquitousKeyValueStore, iCloud Keychain, Google Block Store, Auto Backup.
14 min read
A Fast WordPress + WooCommerce Plugin in Production
How we shipped a production WordPress and WooCommerce plugin with near-zero request cost, manifest-based block registration, and native webhooks.
15 min read
Replacing MongoDB With libSQL and RustFS on Kubernetes
How we retired our last MongoDB dependency by running sqld (libSQL) and RustFS on Kubernetes, with bottomless replication and a 7-line Drizzle schema.
18 min read
Bun Memory Leak on Kubernetes: 3 Days to a Pod Restart
Debug a Bun RSS memory leak on a Elysia.js backend in Kubernetes: forced GC, heap snapshots, and why a lying health endpoint and pod restart won.
9 min read
Native WebAuthn Passkeys for Tauri on iOS and Android
Build a custom Tauri plugin exposing native WebAuthn passkeys on iOS and Android: platform APIs, CBOR and COSE key parsing, and the TLS dev workaround.
9 min read
DevX Overhaul: Cutting Build Times by 10x at Frak
How we migrated a monorepo from Next.js to TanStack Start, adopted Rolldown, unified on Vitest, and got the full deploy pipeline under 4 minutes.
8 min read
How We Cut Our Wallet Size by 30%: Frontend Optimization
How we cut our embedded wallet bundle by 30% by migrating Jotai to Zustand, splitting wallet from listener, and self-hosting Nginx over AWS S3.
17 min read
Why We Chose SST and Pulumi over Terraform for IaC
Why Frak abandoned HCL for TypeScript: multi-cloud infrastructure with SST and Kubernetes cluster management with Pulumi.
21 min read
Replacing the Paywall: Our WebAuthn Smart Wallet POC
The product story behind our first passkey smart wallet: swapping a newspaper paywall for a biometric check, and the SDK, PWA and paymaster behind it.
11 min read
Cost-Effective Blockchain Infrastructure: eRPC and Ponder
How Frak runs automated on-chain reward distribution on Arbitrum within a tight budget, using eRPC for RPC routing and Ponder for on-chain indexing.
8 min read
WebAuthn Signatures for ERC-4337 Smart Wallets
How we validate ERC-4337 user operations with WebAuthn signatures: P256 passkeys, the FCL on-chain verifier, and paymaster gas simulation.
10 min read
Account Abstraction on Polygon With ERC-4337
How Frak moved from MPC wallets to ERC-4337 account abstraction on Polygon with ZeroDev and Pimlico, and what the transition taught us.
10 min read
Migrating Solidity Testing from Hardhat to Foundry
We migrated our Solidity test suite from Hardhat to Foundry: 13 seconds down to 102 milliseconds, plus a fuzzed test that runs 256 times for free.
5 min read
Working on something similar?
Happy to go through the technical details, or look at the same problem in your system.
Book a call