DEV Community

Cover image for 🚀 From FlipaClip to SitePoint: The Full Story of Kehinde Owolabi
Kehinde Owolabi
Kehinde Owolabi

Posted on

🚀 From FlipaClip to SitePoint: The Full Story of Kehinde Owolabi

🚀 From FlipaClip to SitePoint: The Full Story of Kehinde Owolabi

How a Nigerian teenager built a professional game engine with borrowed laptops, offline W3Schools, and pure determination.


🎮 Play the Game

Try Limn Engine Live — Space Shooter Demo

See what 4 years of determination built. This space shooter runs at 60 FPS on a Tecno Pop 4 with 1GB RAM.


📖 Introduction

Every developer has an origin story. Some start with a fancy computer and a computer science degree. Others start with a flipbook app and a sister who trusted them with her phone.

My name is Kehinde Owolabi. I'm 18 years old (born December 4, 2007), and I live in Lagos, Nigeria. I'm currently in PC103 at BYU Pathway, and I'm a member of The Church of Jesus Christ of Latter-day Saints.

I built a 94/100 professional game engine called Limn Engine. It runs at 60 FPS on a Toshiba with 4GB RAM. It was published on SitePoint and ranked #3 among 2D JavaScript game engines.

Nobody knew it was developed on a Chromebook, a borrowed Thinkpad (behind my sister's back), and a Toshiba that "hung like hell." That was the secret I kept for months.

But that's only one part of this story.

This is the full story of how I went from a button phone to a 94/100 game engine, from FlipaClip to SitePoint, from a boy who failed physics to a developer who built something that runs on a Tecno Pop 4.

The one-line summary: "I'm Kehinde Owolabi, an 18-year-old developer from Lagos, Nigeria who went from FlipaClip to building a 94/100 game engine on borrowed laptops — and got published on SitePoint." 🎮🚀

🎨 The Beginning: FlipaClip and the Spark of Creativity

Before I was a developer, I was an animator.

I used FlipaClip — a simple animation app on mobile — to create flipbook-style animations. I loved bringing characters to life, frame by frame. I would spend hours drawing, tweaking, and watching my creations move.

That creative spark stayed with me. I wanted to create interactive experiences. I wanted to build games. But I didn't know how.

At that time, I didn't even know what programming was. I just knew I wanted to make things.

What this taught me: Animation taught me the value of frame-by-frame iteration — a skill that later helped me debug game loops and rendering pipelines.


📚 The First Encounter with Code

When I was in SS1 (Senior Secondary 1), I opened my computer textbook and found something unexpected: a BASIC tutorial.

I read it cover to cover. I was fascinated by the idea that you could type words and make a computer do things. It felt like magic — but it was real. It was something I could learn.

But there was a problem: I didn't have a phone or a laptop.

I couldn't practice. I couldn't test the code. I could only read and imagine what it would be like to actually run the programs. I wrote down code snippets in my notebook, hoping that someday I would have a device to try them on.

What this taught me: You don't need a computer to start learning. I wrote code on paper before I ever typed it.


📱 The Turning Point: A Sister's Phone and a Love for Python

Then came physics class.

I was failing physics — not because I didn't understand it, but because I was absent from class. When I returned, I had fallen behind. My sister noticed and gave me her phone so I could read and research.

Instead of just studying physics, I started researching programming.

I discovered Python. I read about it. I watched videos about it. And I fell in love.

Python was simple. It was readable. It made sense in a way that physics didn't at the time. I knew I had to learn it. I spent hours reading tutorials, watching YouTube videos, and absorbing everything I could.

That's when I realized: I was genuinely interested in coding. It wasn't just a distraction from physics — it was something I wanted to pursue.

I still love physics, by the way. I only failed because I was absent. Once I caught up, I understood it just fine. But coding had already captured my heart.

What this taught me: Sometimes your biggest failure becomes your biggest opportunity. Physics led me to coding.


📲 The Button Phone Era

Before my sister got the laptop, I used my mom's Itel button phone.

Data was available sometimes. I would Google codes and write them down on paper — because I couldn't save files on a button phone.

When my sister's friend came around, I would borrow their phone and go to Webmaker to practice.

I learned to code without a laptop. That's not a flex — that's survival. I did whatever it took to keep learning.

What this taught me: Resourcefulness is more important than resources.


🌐 The JavaScript Journey

In 2023, I was asked to build a website for a competition in Public Art Africa. I built it on Replit using HTML, CSS, and JavaScript.

That's when I learned JavaScript. Not because I planned to — but because I had to. The competition required a website, and JavaScript was the language of the web.

After the competition, I wanted to build games. I knew about Pygame, but JavaScript worked in the browser — no installation needed, no complex setup. I could just open a tab and start coding.

That was the hook. JavaScript gave me the freedom to create without barriers.

What this taught me: Sometimes the best way to learn is to be thrown into the deep end. I learned JavaScript because I had to ship a project.


🖥️ The Laptop Heist Era

I didn't have a laptop of my own. Not for a long time.

Sister's Toshiba (4GB RAM — "Hangs Like Hell")

My sister got a Toshiba laptop with 4GB of RAM. It hung like hell. But I coded on it anyway. It didn't matter that it was slow — it was a laptop, and I could use it to build things.

The problem? She wouldn't give it to me willingly. I had to code behind her back. If anything happened to the laptop, she would blame me.

Every time I heard her footsteps, I would quickly close the lid. I coded in secret, in fear, in stolen moments. But I coded.

The charger spoiled. We didn't buy a new one for two months. But I didn't stop coding. I found other ways — borrowing phones, writing code on paper, waiting for opportunities.

What this taught me: Fear of being caught couldn't stop me. If you really want to build something, you'll find a way.

Brother's HP (He Let Me)

My brother David got a laptop later. He let me code on it. No guilt. No hiding. Just permission.

That HP saw TCJSGame V3. The breakthrough. The Tile Class. The flow state. For the first time, I could code without looking over my shoulder.

David's support meant everything. He believed in me when I didn't have much to show.

What this taught me: Permission and support are powerful. One person believing in you can change everything.


💻 The Thinkpad Era (Behind My Sister's Back Again)

After the Toshiba spoiled, I had to use my sister's Thinkpad — again behind her back.

That Thinkpad saw V2 of the engine.

I renamed it to TCgame, then TCJSgame.

Copilot helped clean up the code and organize everything into classes. It was the first time the engine looked like a real project.

What this taught me: Even when you're building in secret, you can still build something real.


📚 The Church WiFi

My chapel is the Agege Stake Center, and Abule Egba Ward. There's WiFi there.

So when I was in church, I would download:

  • YouTube videos
  • Offline W3Schools
  • PDFs

I learned Python, Java, JS, HTML, CSS, PHP, Scratch — everything I could. I was hungry for knowledge, and I took it wherever I could find it.

What this taught me: Education is available if you're willing to look for it. Even church WiFi can be a classroom.


🛠️ The Birth of JGame

I wanted to build games. I started with Pygame but didn't understand it.

So I decided to build my own engine by copying codes and learning how they worked.

That became JGame — the first version of what would eventually become Limn Engine.

JGame existed on the Toshiba laptop. I finished it but never published it.

Then the Toshiba spoiled.

What this taught me: Your first version doesn't need to be perfect. It just needs to exist.

🤖 The AI Analysis Era

I began analyzing TCJSgame with DeepSeek and ChatGPT.

I knew something was missing. So I added:

  • Scene management
  • TileMap
  • hide() and show()
  • Gradients
  • Fullscreen support

I developed all of this without AI — I just used AI to analyze what was wrong. I wanted to learn how to build things myself.

What this taught me: AI is a tool for analysis, not a replacement for understanding. I built the features myself; AI just helped me see what was missing.


🔥 The Dual-Renderer Breakthrough

Limn Engine V3 had low ratings because of performance.

I developed extensions:

  • Sonic.js (performance)
  • Tctxt (text rendering)

Then I developed the dual-renderer system.

The idea came from tile caching — but the first version had a bug: it rerendered every frame despite caching.

I fixed it. The dual-renderer was born.

The engine went from 4 FPS to 60 FPS on a Toshiba with 4GB RAM. That's a 15x improvement.

What this taught me: Sometimes the problem isn't that something is slow — it's that you're doing it too many times. Cache everything you can.

🔍 The Delta Time Bug

The original code used 1 / fps calculated every second. The problem? The FPS counter resets every second, so at the start of each second, the FPS would start at 0 and build up to 60. This made the game spike at the beginning of every second.

I tested the fix on my sister's HP laptop without her knowing. The Pygame-style method — calculating the time difference between frames — worked perfectly and eliminated the spikes.

What this taught me: The simplest bugs can have the biggest impact. Delta time is critical for consistent performance.


📱 The Tecno Pop 4 Test

Tecno Pop 4 is my mom's phone. 1GB RAM. Weak processor.

I tested the engine on it.

At first, it was laggy. The FPS was low. But after fixing the delta time bug and optimizing the renderer, it started working smoothly.

If it works on a Tecno Pop 4, it works on anything.

That moment when I saw my game running smoothly on that phone — I was proud. Like, "Ha, I actually did this."

What this taught me: Test on the worst hardware you can find. If it works there, it'll work everywhere.


🏷️ The Rebrand: TCJSgame → Limn Engine

TCJSgame was a working name. Technical. Hard to spell. No meaning.

Limn (verb) — to draw, paint, or portray.

Perfect. The engine helps you draw games into existence.

The name change was also practical: TCJSgame was given because all other names (TCgame, TC Games) were already taken. So I chose Limn Engine — a name with meaning, a name that reflects what the engine does.

What this taught me: A name matters. It should tell a story about what you've built.


🔗 The SitePoint Journey

In 2026, I published an article on SitePoint called "Top 10 2D JavaScript Game Engines for Beginners."

Limn Engine was ranked #3 with a 9/10 rating.

What this taught me: Recognition comes when you keep building. I didn't set out to get published — I just kept making things.


📊 The Rating

Limn Engine received a 94/100 rating.

Category Score
Performance 95
Ease of Use 94
Feature Set 92
Documentation 92
API Design 88
Beginner Friendliness 94
Cross-Platform 85
Overall 94/100

What this taught me: Ratings are nice, but they're not the goal. The goal is to build something people can use.


🎯 The One-Line Summary

"I'm Kehinde Owolabi, an 18-year-old developer from Lagos, Nigeria who went from FlipaClip to building a 94/100 game engine on borrowed laptops — and got published on SitePoint." 🎮🚀


🔗 Follow Me

Platform Link
DEV.to Follow Kehinde Owolabi on DEV.to
GitHub github.com/terracodes004/limn-engine-doc
Discord Join the community
Live Demo limn-engine-doc.vercel.app/test9.html

🐛 Report Bugs

Found a bug? Report it here:

github.com/terracodes004/limn-engine-doc/issues


📝 What's Next

Upcoming articles:

  • "How Limn Engine's Dual-Renderer Works" — The 4 FPS → 60 FPS story
  • "Building a Dungeon Crawler with Limn Engine" — Complete game tutorial
  • "Limn Engine vs Phaser: Which One Should You Choose?" — Honest comparison

🎯 What You've Learned

Concept How It Applies
Resourcefulness You can learn without a laptop
Persistence Keep building, even in secret
Caching Render once, paste forever
Delta time Consistent performance across devices
Testing Test on the worst hardware

🚀 Final Thoughts

I built a game engine on borrowed laptops, behind my sister's back, with offline W3Schools and church WiFi.

If I can do it, so can you.

The resources you have are enough. The time you have is enough. The knowledge you have is enough.

Just keep building.


Draw your game into existence — one frame at a time. 🎮🚀

Top comments (0)