There’s something quietly revolutionary happening in a corner of Lagos. While most Nigerian developers are building apps like fintech solutions, e-commerce platforms, delivery services, AbdulAzeez Olanrewaju is building something different. He’s building the tools that other developers use to build those apps.
It’s a rarer path, a harder path, and if you ask him about it, he’ll tell you the story started with boredom. Not passion. Not some grand vision. Just boredom and a VB.NET tutorial that felt like watching paint dry.
The Apprenticeship That Wasn’t Really One
After secondary school, AbdulAzeez moved in with his uncle. His uncle’s wife, Rahmot Oshoala was a programmer working at Attain Enterprise Solution Ltd, building ERP solutions in VB.NET. She saw potential in him, or maybe just availability. Either way, she started teaching him.
“The language was so boring,” he admits, laughing at the memory. “I was really struggling to even understand what was really going on.”
But here’s where the story gets interesting. See, before the programming came the graphics design. His aunt initially wanted him to learn graphics, and he picked it up quickly. That eye for UI, that sense of visual design, it became his secret weapon when he finally started building web interfaces.
When he did start learning VB.NET properly, building forms wasn’t just about functionality. “Because of my graphics knowledge, I started enjoying it,” he says. “I could build beautiful web forms and then connect them to SQL.”
Eventually, his aunt took him to work at her side company, where he met five senior developers: Mr. Gafar, Mr. Bio, Mr. Io Maxwell, and Mr. Oluwatosin. These names matter because what happened next would shape everything.
“They told me I have to first drop the knowledge I have for VB.NET,” AbdulAzeez recalls. “They said I need to go to the web first—HTML and CSS—then come back to C#.”
And then they did something that might seem cruel or brilliant, depending on your perspective: they put him in a room alone.
“They just took me to another room in the company and said, ‘You have internet, this is CodeAcademy, this is W3 School, start working.’ They said we take updates every Friday.”
He pauses, then adds: “I’m not going to lie. It was really boring at first. Sometimes I would just sleep.”
But something clicked. He finished all the free CodeAcademy lessons. Then moved to W3Schools. Then Free Code Camp. His graphics background made CSS come fast—he just needed to learn the syntax, the properties. The design sense was already there.
From HTML and CSS, he moved to JavaScript. Then TypeScript. They involved him in projects. He built a mobile app, it didn’t fly because he was slow, but the experience stuck. And somewhere in all of that self-directed learning, something important was happening: he was learning not just to code, but to learn.
The Mentality of a Maker
“I’ve always had this mentality of create thing,” AbdulAzeez says. “I just don’t want to be a consumer. I also want to be a producer.”
The idea for Stunk had been in his head since 2023, but he kept circling it, looking for the right approach. He’d moved from Angular to Vue.js, and something about Vue’s reactive model caught his attention.
“I found the reactive model very interesting,” he explains. “The way they update states, the way they actually compute values. So I thought, okay, Vue looks interesting when it comes to managing states. Why can’t I just copy Vue’s reactive model and put it in Stunk?”
But that first prototype? “It was just like a mess,” he admits. “I didn’t really get what I really needed from it.”
He kept working on it between his day job, between other projects. The challenge wasn’t just technical—it was figuring out what problem he was really solving. What was the unique selling point? What loophole in existing state management libraries could he actually fix?
The answer came from frustration. Working on a vendor portal project with lots of forms in React, he kept hitting the same wall: “Why would I want to be using hooks that render so much? What if I want to update states outside the React component?”
Zustand existed, but even that required calling hooks and selecting specific states. “I was like, why can’t we just have a centralized store that’s a source of truth? Then we call the source and update whatever we want to update with a single function instead of hooks that keep trying to render.”
That became Stunk: framework-agnostic, fine-grained reactive state management. No unnecessary re-renders. No bloat. Just clean, precise state updates.
The Challenge of Building the ‘Computed’
Ask any developer about their worst technical challenge, and you’ll get a story. AbdulAzeez’s involves months of struggle with a single feature: computed state.
“Computed was really, really complex for me,” he says, and there’s real weight in his voice. “I spent months even trying to launch the first prototype.”
He wanted Stunk to have a separate computed function that could derive new values from multiple state chunks like calculating a shopping cart total from quantities and prices across five different states. But his first implementation ended up mimicking React’s useEffect with dependency arrays.
“I had to pass in an array of all those states, then pick them one by one. It was so challenging,” he recalls. “While I was building, one of my guys in Stunk said, ‘Why can’t we just look at how you built this?’ I said, ‘I’ve tried, but I didn’t get it.'”
But his teammate tried something that gave AbdulAzeez a new idea. “The new computed that we’re going to launch in version three, you don’t even need to pass in dependency arrays. You just call your computed value. You do dot value on your computer and you get the value, just like Vue does.”
It’s a small detail that reveals something bigger: the willingness to admit difficulty, to accept help, to iterate until it works. This isn’t a solo genius story. It’s a collaboration story.
Time Travel, Persistence, and Other Magic Tricks
When developers talk about Stunk, one feature keeps coming up: built-in time travel debugging.
Most state management libraries, including the massively popular Zustand, require a separate plugin for time travel. Zustand uses Zundo. Jotai has its own system. But Stunk? It’s built right in.
“People are surprised that I can actually go back to my first state, go to the second state I set it to, and just time travel across the chain of setting and getting and updating those states,” AbdulAzeez explains. “I’m keeping track of whatever you are setting in those ranges, so developers can have a very good experience even when they’re debugging.”
The other feature that gets attention is state persistence. “We made it much more flexible,” he says. “You can select the type of storage you want. You can integrate your own storage. People really enjoy that.”
It’s not just about features, though. It’s about developer experience. The middleware system. The async chunks for API calls. The fine-grained reactivity that updates only what actually changed, not the entire parent object.
When AbdulAzeez talks about these features, he’s not showing off. He’s explaining problems and solutions. And that’s the difference between someone who’s building to build versus someone who’s building to solve.
The Reality Check from TanStack
Sometimes the story you think you’re in takes an unexpected turn. For AbdulAzeez, that moment came when TanStack—the team behind TanStack Query, one of the most popular data fetching libraries in React reached out on Twitter.
“They messaged me and said, would I want to merge Stunk with TanStack?” he recalls. “They were building a state management library called TanStack Store.”
Stop for a moment and appreciate what that means. TanStack, backed by a massive community, approaching a solo developer from Lagos about merging his project. It’s validation. It’s opportunity. It’s also a test.
“I was thinking, what am I going to do? Should I forfeit all those views just because of the connection? Or should I just stand on my ground?” He chose to stand his ground. “I said no.”
But the story doesn’t end there. The TanStack developer asked if AbdulAzeez could help work on one of their features. He did the update, submitted a pull request. “But I noticed they didn’t merge that PR,” he says. “I think that was when I noticed that they lost interest in the collaboration. So I just left it and continued what I’m doing.”
There’s no bitterness in his voice when he tells this story. Just acceptance. Sometimes doors open and then close. You keep building anyway.
160 Stars and the Visibility Problem
Currently, Stunk has about 160 stars on GitHub. For context, Zustand has over 45,000. It’s easy to look at those numbers and draw conclusions about quality or capability. But AbdulAzeez knows the real issue isn’t the product—it’s visibility.
“That was not what I was projecting,” he says about the star count. “I’m kind of juggling between trying to maintain work and open source. I haven’t been really consistent when it comes to posting on social media about it.”
He’s honest about where Stunk actually is. “I think it hasn’t reached maybe 5% or 10% of where I even want it to reach,” he admits. “But so far, to everybody that has actually seen it, they’ve really liked it.”
And people are using it. A developer from Togo (or was it another African country? AbdulAzeez can’t quite remember) showed him internal apps built with Stunk. Another user is building a React Native mobile app with it. AbdulAzeez himself used it to build the vendor portal for ARM Investments.
“I actually integrated TanStack Query because I was having issues with Stunk’s async chunk working well with a real production app,” he explains. “I didn’t want to risk it—it’s a company’s work. So I brought in TanStack Query and merged it with Stunk, and it worked really well.”
The async chunk issues are being addressed in version three. He’s taking it to the level of what TanStack offers, “at least to an extent.”
That phrase “at least to an extent” shows up often in our conversation. It’s the mark of someone who understands scope, who knows the difference between good enough and perfect, who’s building for real users and not theoretical perfection.
The Other Tools in the Workshop
Stunk isn’t AbdulAzeez’s only project. There’s GitRoast, a fun project that roasts people’s GitHub profiles and gives advice based on the roast. There’s InkCurate, a book recommendation tool where you can express feelings—”I want books that deal with depression”—and it suggests collections.
“Someone on Twitter said, why can’t they just express their feeling when they’re trying to look for a book recommendation?” he explains. “So instead of looking for a particular title every time or asking for recommendations, that’s what brought out InkCurate.”
Then there’s Error-Ease, born from the pre-AI era when debugging TypeScript errors felt like decoding ancient hieroglyphics. “I was thinking if I can just have error translation in simple English, in Yoruba, and in Pidgin,” he says. “Sometimes you’d post on Stack Overflow for days without getting any response. Sometimes your question gets downvoted.”
Each project solves a real problem he or someone else actually faced. That’s the philosophy: identify friction, reduce it, share the solution.
And now there’s something new brewing: a UI design system for Vue, inspired by shadcn/ui but built from scratch.
“Someone reached out and said, why can’t we build a UI system?” AbdulAzeez explains. “React has a lot of component libraries, but Vue is kind of limited in that space. We don’t really have options.”
They’re targeting modern design with simple APIs, building on top of an abandoned project called VueSax. “We’re reviving the project. We’ve built about 17 components now.”
The Economics of Open Source in Africa
When we talk about open source sustainability, the conversation often centers on Western developers, GitHub Sponsors, and corporate backing. AbdulAzeez’s perspective is different.
“We don’t actually build,” he says about African developers. “We like to use tools that the Europeans build. I even met one guy on Twitter one time. He was building a JavaScript framework. I was surprised. He called it Q Flow.”
But the developer isn’t active anymore. There was no motivation, no support. He had to find a job.
“It’s not really easy, seriously,” AbdulAzeez says. “I don’t think we really have that solid mindset to support open source. But what I would say is that our fintech companies, they can really help us.”
His idea is practical: companies could test tools being built by local developers. “Okay, build this particular tool. Integrate it—we already have a working product for our customers. Let’s try to integrate it, see the benefits.”
Without that kind of support, even good tools struggle for visibility. “If Stunk gets popular, it’s going to compete with your favorite state management library,” he says with quiet confidence. “I know what I’m saying. This stuff is well packed in, but it needs that visibility. People have not really known it.”
The Daily Reality: Water and Showers
After a long coding day, what does AbdulAzeez reach for? Coffee? Garri? Suya?
“I just drink water and take a shower,” he says, laughing. “It’s not that I don’t drink garri—I drink garri, but not after a long coding day.”
It’s a small detail, but it feels important somehow. While other developers might romanticize late-night coding sessions fueled by caffeine and junk food, AbdulAzeez keeps it simple. Water. A shower. Reset.
Maybe that’s the secret. Not some superhuman work ethic or genius-level IQ, but the ability to keep showing up, keep it simple, keep building even when progress feels slow and recognition feels distant.
Impossibility Doesn’t Exist
When I ask what keeps him going, he quotes his aunt: “When you are doing something or when you are building something, impossibility does not exist, meaning that you can actually do it.”
He continues: “You might be thinking it’s not possible just because you don’t have that knowledge currently. But it is possible in the real sense when the knowledge has come.”
This isn’t blind optimism. It’s earned confidence. He’s seen himself go from sleeping through CodeAcademy lessons to building state management libraries. He’s watched complex problems like computed state go from impossible to solved. He’s learned that the distance between “I don’t know how” and “I figured it out” is usually just time and persistence.
The Five to Ten Year Vision
Where does he see Stunk in five to ten years?
“I believe if I can work on my social media scale and get Stunk much more visible, in 5 to 10 years, Stunk will be competing with all of these state management libraries,” he says. “I believe so.”
There’s no hesitation in his voice. He’s tested Stunk on different applications. It’s working as expected. States are updating fine. There’s no lag, no excessive renders. The technical foundation is solid. The missing piece is reaching people who need it.
As for solving one systemic challenge in Africa using tech? He’s thinking about e-commerce, but with a twist: “Having a social business platform where people can actually give feedback on your products physically.”
It’s still forming in his mind, but the pattern is there: identify a gap, think about how software can fill it, build something that makes life slightly better for someone somewhere.
Success Isn’t What You Think
Ask AbdulAzeez what success means to him, and you won’t get the standard answers about salary or status.
“Seeing people use what I build—to me, it’s an achievement,” he says. “I’m really, really proud of it. Even proud of me using it myself and seeing that it is working fine.”
He pauses, then adds: “Most importantly, the applications we build for our customers and they really like it and it’s really working well for them to grow their business. Basically seeing people’s businesses doing fine while we use our technical skills to build a product for that. I think that’s a success.”
It’s a refreshingly honest definition. Not unicorn valuations or TechCrunch features. Just: did it work? Did it help? Are people using it?
The Message for Newbies
When I ask what he wants newbies to take from his story, he doesn’t sugarcoat anything.
“Success doesn’t really come easy,” he says. “Even when people say it’s not every time it comes hard, there’s always hard work. That’s the truth. There’s always some input that is actually under the hood that even people might not even see.”
His advice for anyone building tools (not just apps) in Nigeria or Africa?
“Don’t give up. Don’t let negative feedback make you feel insecure with whatever you’re building. So far you have a unique selling point for a particular tool that you are building, I believe it is going to thrive. It might just take time because of the kind of environment we are.”
That phrase again: “the kind of environment we are.” No illusions about easy paths or overnight success. Just realistic optimism backed by stubborn persistence.
Building in Public, One Chunk at a Time
AbdulAzeez’s story isn’t finished. Version three of Stunk is in development. The Vue UI library is growing. More developers are discovering his tools and actually using them in production.
The GitHub stars will come, or they won’t. The visibility will increase, or it’ll stay hard. TanStack might circle back, or they might not. None of that changes the fundamental truth: in Lagos, in a competitive job market, while juggling work and open source and life, AbdulAzeez Olanrewaju is building tools that other developers use to build the future.
He’s not building apps. He’s building the things that build apps. And that distinction—that choice to be a producer of tools rather than just a consumer of them—might be the most important contribution of all.
Because every revolution starts with better tools. And sometimes those tools are built by someone who started by sleeping through VB.NET tutorials, learned to code in a room alone, and refused to give up on the idea that impossibility doesn’t exist
The Geek Circle The Voice of Africa’s Tech Community