All projects

Frak Labs

Co-founder & CTO

2022 - present

In Production

On-chain reward infrastructure and a seedless smart wallet for e-commerce and content

  • ERC-4337
  • WebAuthn
  • Kubernetes
  • Bun
  • Elysia
  • TanStack
  • Foundry
  • Tauri
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