Unlockd - DeFi Lending Platform Case Study

A portfolio case study documenting my frontend engineering work on a DeFi lending platform that enabled NFT-backed loans.

Next.jsTypeScriptWeb3DeFiReact

Portfolio Case Study: This page is a professional portfolio case study documenting my engineering work. Unlockd ceased operations in 2025. This is not an active financial service or application. All content describes past technical contributions as a Senior Frontend Blockchain Engineer.

Project Overview

Unlockd was a DeFi lending platform. NFT holders could borrow against blue-chip collections like Bored Ape Yacht Club and CryptoPunks as collateral, without selling them, through direct integrations with major NFT marketplaces. Rates were competitive and liquidations were automated.

I joined as senior frontend blockchain developer during a scaling phase, on a small, fully remote frontend team. The business needed better conversion and retention, and better visibility into what was actually happening in the product, while we kept shipping Web3 features in an environment where a bug could cost someone real money. My job was turning those priorities into frontend architecture and features that actually worked.

The hard part was that UI state, wallet connection status, on-chain data, and risk calculations were all tightly coupled. If the frontend got any of that wrong, it wasn’t just a bad experience, it was money and trust on the line.


Core Platform Capabilities

  • NFT-Collateralized Lending – Borrow against NFTs without liquidating long-term holdings
  • Earn Module – Liquidity providers deposit assets to earn yield
  • Marketplace & Auctions – Buy, sell, and liquidate NFTs directly within the platform
  • Loan Health Monitoring – Real-time alerts to prevent forced liquidations
  • Multi-Wallet Support – MetaMask, WalletConnect, and other Web3 wallets
  • Cross-Collection Valuation – Dynamic pricing across multiple NFT collections
  • Marketing-Driven Landing Pages – CMS-managed content for rapid growth experiments

My Role & Contributions

Senior Frontend Blockchain Developer

Company: Unlockd
Location: Spain (Remote)
Duration: February 2023 – September 2023

The job sat between product, engineering, and growth. I had to keep frontend systems working as usage grew, without breaking security or losing visibility into what was happening in production.


Contribution Areas

1. Web3 Frontend Architecture & Smart Contract Integration

Smart contract interactions are unforgiving. A wrong assumption in the UI doesn’t just show a broken screen, it can send a signed transaction the user didn’t mean to send. I built the Next.js and TypeScript layouts against Figma designs, integrated Ethers.js for wallet connectivity and transaction signing, and typed the blockchain interaction flows strictly enough to catch edge cases before they shipped.

I also rewrote error handling and feedback across the lending, earning, and dashboard modules, since a generic error message on a failed transaction was one of the biggest sources of support tickets. Fewer confusing states meant fewer abandoned transactions.


2. Analytics & Product Intelligence (Primary Ownership)

Before I got here, nobody could answer basic questions like where users dropped off in the borrow flow, or which features actually got used. I built a centralized analytics layer on Raleon, starting with a registerRaleonEvent utility so every event got logged the same way instead of each engineer inventing their own format.

I instrumented the flows that mattered most: borrowing and repaying, earn deposits and withdrawals, marketplace bids and purchases, wallet approvals and navigation. I also made sure we only tracked mainnet activity, since testnet noise would have made every dashboard useless, and wrote down naming conventions so the next person’s events didn’t drift from mine.

That gave product and growth their first real view into the funnel, and let roadmap decisions get made on what users actually did instead of what we assumed they did.


3. Blockchain-Native Messaging & Notifications (Full Ownership)

Users needed to know when their loan health was getting risky or when an auction they cared about closed, and email wasn’t fast enough. I integrated Hashmail for wallet-address-based notifications and built a HashmailScript component to handle secure initialization and identify users without a traditional login.

I also tracked down a mainnet delivery bug that was silently dropping notifications, which was worse than having no notification system at all, since people trusted alerts that weren’t arriving.


4. Marketplace & Auction Experience (Shared Ownership)

Marketplace and auctions were where the platform actually made money, so I spent time here too, even though I shared ownership with another engineer. I improved the auction cards and activity feeds, added analytics tracking on bids, listings, and purchases, and tightened the real-time feedback during live bidding so users could tell their bid had actually registered.


5. CMS-Driven Landing Pages for Growth Teams

Marketing kept filing tickets just to change a headline or swap a campaign image, which wasted everyone’s time. I built a landing page system on Sanity CMS and GraphQL so marketing could update copy, layouts, and campaigns themselves. After that, I mostly stopped hearing about landing pages at all, which was the whole point.


6. Scalable UI & Design Systems

I built the component layer in TailwindCSS to be responsive and mobile-first by default, and used Storybook to keep components reusable instead of every feature growing its own one-off button or card. I also kept an eye on new frontend tooling, since a platform moving this fast couldn’t afford to get stuck on patterns that stopped fitting.


Technologies Used

Frontend & Web3

  • React, Next.js, TypeScript, Ethers.js

Styling & UI

  • TailwindCSS, Figma, Storybook

Data & CMS

  • Sanity CMS, GraphQL

Analytics & Messaging

  • Raleon, Hashmail

Tooling & Collaboration

  • Git, Linear

Conclusion

Unlockd is where I learned that in DeFi, the frontend isn’t a layer on top of the business, it is the business, as far as the user is concerned. Nobody borrowing against a Bored Ape cares whether the bug is in my React code or in the smart contract underneath it. They just know their transaction failed. That’s the standard I still hold my own code to.