Skip to content
Tolu Adeoye5 min readEmail me

Case study · Fintech · 2024

$274,965 in four weeks.
Zero downtime.

I led the frontend of the web app that opened GTCO's public offer to people who don't bank with GTBank. This is how I built it, and the morning it nearly went wrong.

Role
Lead Frontend Engineer
Team
2 engineers · I led the frontend
Timeline
Built Apr – Jul 2024 · live 15 Jul – 12 Aug 2024
Stack
React, Vite, TypeScript, Tailwind, Zod, Web Crypto API, Squad
Currency
US dollars at ₦1,345 to $1 (₦369,827,782)

At a glance

Built · the subscribe-and-pay web app for investors outside GTBank, in a team of two.

But · on launch morning, it was still connected to the wrong payment account.

In the end · caught before anyone paid. $274,965 in four weeks, with zero downtime.

Chapter 01 · Setting

A door for everyone.

In July 2024, GTCO opened a public offer with several ways to subscribe. HabariPay, its fintech arm, was asked to add one built for reach: a web app that made it easy for people who don't bank with GTBank to subscribe and pay from their phone.

Leadership chose me to lead the frontend.note 1

Chapter 02 · Stakes

The whole country was watching.

Ordinary people were trusting this app with their money. If it went down, or took someone's money and failed to record it, it would be on social media within minutes, with GTCO's name on it.

And traffic wouldn't be steady. It would surge without warning, and hardest as the deadline came close.

Fig. 1 · Daily page views, May – Sep 2024: 211K views, with the sharpest surge in the closing days. Shape recreated from Google Analytics.
Chapter 03 · The work

Five days to a working journey.

I started on 23 April. Five days later, the whole journey was clickable: choose how to invest, add your details, review, pay, and see confirmation.note 2

The next eleven weeks went into what makes people trust a payment page: validation, clear errors, security, and the details that only show up on real phones. Four decisions mattered most.

Recreation
01 – 02Choose a path, then add your details
03Review before any money moves
04 – 05Pay through Squad, get confirmation
Fig. 2 · Recreation of the subscription journey, based on the live app (Jul – Aug 2024). Unbranded; details simplified. See the live app as documented by FundVine Securities →
Decision 1

Encrypt in the browser, from week two.

Investors' personal details were encrypted on their own device before they were sent, and anything saved between steps was encrypted too. Security was part of the build from the second week.note 3

Decision 2

Keep everything that might change out of the code.

Offer price, minimum units, open and close dates, documents and the payment key all lived in configuration. On a live national launch, changing the price or a date meant editing a setting.note 4

Decision 3

Make every build version itself.

A small script bumped the version before every build, so after any fix, investors loaded the new code instead of a stale copy.

Decision 4

Use my own library in production.

The checkout ran on squad-pay-react, the open-source library I wrote to make Squad payments simple to add to any React app.note 5

Chapter 04 · The moment

The wrong keys, caught in time.

On launch morning, we realised the app was still connected to the wrong Squad account: a live one, but not the account meant to receive the offer's money. If we'd missed it, real investors' payments would have landed there.

We'd agreed to always make the first real payment ourselves, and that's how we caught it. I switched it to the production account and checked the flow again before investors arrived.note 6

Launch day is part of the product.

Chapter 05 · Outcome

It held, and it paid.

in retail subscriptions
$274,965
minutes of downtime or failed checkouts
Zero
subscription forms started
44k+
page views in four weeks
211K

Every subscription also earned HabariPay a payment fee. In 2025 I was promoted to a more senior grade in recognition of this work.note 7

Chapter 06 · Afterword

What I took with me.

Launch day is part of the product. That's what this project taught me. Configuration, release checks and a real first payment deserve the same planning as any feature, not a scramble on the morning.

I've built that way since. At ama, I set up the team's first end-to-end testing framework, wired into our pull requests, and made the app reload itself when a release leaves someone on outdated code, the same problem my version script solved here.note 8

Back to the top ↑

Also in this series

ama · AI · 2025 – nowEvery search set up by hand. Now, in the app.Read the case study →

Let's talk

Launching something people will trust with their money?

Send me a note. I reply within two working days.

What's it about?
    Only used to reply to you. Never shared.

    Prefer your own inbox? Email me directly