All posts
EdTech & UniApplyForMe3 June 2026·8 min read

Five Years of Building UniApplyForMe

I co-founded UniApplyForMe with Wandise Boyd in May 2021. The problem we were trying to solve was simple to explain and hard to fix: thousands of South African Grade 12 learners every year miss university application deadlines, apply to the wrong programmes, or don’t apply at all because they don’t have the guidance or the resources to navigate the process.

What followed was five years of building, rebuilding, learning, and building again.

It Started With WordPress and a Clever Domain

The first version of UniApplyForMe was a WordPress website at uniapplyfor.me. I built it myself while I was in my second year studying at NWU. I had been building WordPress sites as a side hustle for a while, so it was the obvious tool.

We started by publishing guides, posting prospectuses, and writing content to help learners understand what they needed to do and when. Slowly, we started getting traffic.

In 2022 I migrated the site from uniapplyfor.me to apply.org.za. That migration taught me more than any tutorial could: how to move a WordPress site between domains, how to handle emails, what DNS records actually do. It also introduced me to the world of web hosting in a way that stuck with me. But I’ll save that story for another day.

The Data Problem

As traffic grew, I realised the site needed to be more than a content hub. Learners weren’t just looking for blog posts. They needed tools.

The first real tool we built was the APS calculator. Most APS calculators you’ll find online are generic. They give you one number. The problem is that every South African university calculates APS differently. Some count Life Orientation at full weight. Some at half. Some not at all. Some use percentage bands. Some use level-based points tables. A generic calculator is almost useless.

We built individual calculators for each of the 26 public universities. Each one captured a learner’s subject marks and applied that specific university’s rules. It was tedious to set up, but the accuracy was the point. Users noticed, and the traffic followed.

Then I added university and bursary data as custom post types in WordPress using ACF. Qualifications came next. At first I added them myself. Chris Makhoba later helped with the manual work of capturing qualification data from university prospectuses, a task I would not wish on anyone. It is slow, detailed, and genuinely important. Big shoutout to Chris for that.

By the time we hit our stride, apply.org.za had become something I didn’t initially plan: a structured data platform dressed as a content site.

The Performance Wall

More features meant more plugins. At one point we had over 120 plugins running on the site. The site was slow. Embarrassingly slow at times.

I made a series of decisions to fix it:

  • Cut the plugin count down to just over 60, and now it is at 32.
  • Offloaded WordPress media to AWS S3
  • Set up email delivery through AWS SES to keep our domain reputation clean and improve deliverability of APS results emails
  • Added Nitropack for caching and performance

None of this was glamorous. Most of it was learned through trial and error with Google as my guide. But it worked.

In late 2024 to mid-2025 we introduced qualification matching, a feature that let learners enter their subjects and marks and see which qualifications across South African universities they actually met the requirements for. That feature changed our numbers completely.

apply.org.za lifetime analytics

In 2025 alone, apply.org.za received over 4 million pageviews and was visited by more than 2.35 million unique visitors. For context, 2024’s numbers were under 700,000 pageviews and under 405,000 visitors. The cumulative total has now passed 8 million pageviews and 3.6 million visitors.

Top pages, referrers, and user breakdown.

Those numbers came from a WordPress site with no marketing budget. Just content and tools that actually worked.

The App: First Attempt

The success of the website made one thing clear: we needed an app. Most of our users were on mobile. The website experience, no matter how optimised, had a ceiling.

I built the first version of the UniApplyForMe app in FlutterFlow using custom Dart code and packages, versions 0.1.0 through 0.1.5. I released v0.1.5 to the Google Play Store on 26 January 2026.

Within a month, without any marketing:

  • 1,000+ downloads on the Google Play Store
  • 30+ downloads on the Huawei AppGallery
  • ~150 installs via direct APK

The Apple App Store rejected us during that period. One of the stated reasons was app quality. That stung. But instead of arguing with the decision, I took it as a signal: the app wasn’t ready yet. I paused iOS submissions and went back to building.

At that point, the app had one core feature: Bursary Listings.

The Rebuild

FlutterFlow helped me move fast. But fast only gets you so far. After two months of building, I kept hitting the platform’s ceiling. Certain things were harder than they needed to be. Certain things weren’t possible at all.

I explored my options: export the code and continue in Flutter/Dart, or find a different cross-platform framework. I didn’t want to maintain two separate codebases. That ruled out going fully native.

React Native came up in my research. It had also come up in a more personal way. I’d seen Tumelo Thinane building mobile apps with it during my time at the Project Y & Re:Coded bootcamp in 2024, and that experience had stayed with me. After some research I landed on Expo as the right approach, and after a few weeks of tutorials from the Expo YouTube channel and a YouTuber called Code with Beto, I had enough to start.

I started with the middleware layer. Before writing a single screen, I built a proper REST API at api.apply.org.za to sit between our Supabase database and the app. That turned out to be one of the most important decisions of the whole project. A typed, versioned, documented API meant the app was never directly dependent on WordPress or Supabase’s raw APIs, and it meant the same data layer could eventually serve the website, the app, internal tooling, and third-party developers.

Alongside the API, I built a Cloudflare Worker at app.apply.org.za to handle deep links and smart link routing, directing users to the Play Store, App Store, or web depending on their device, while sending bots to the web URL for proper social media previews.

Then I built the app itself.

What the email inbox looks like when you’re iterating fast. Every one of those is a build

There were periods where I was completely stuck. The work was often overwhelming. I was juggling it alongside a full-time job, studies, family, and everything else that comes with trying to be a provider for the people around you. But I kept pushing.

The App Store Saga

The original rejection hurt. But it made the approval feel earned.

The rejection. There were a few of these before the one that mattered.
And then this arrived.

The App That Shipped

By late May 2026, the rebuilt app was ready. It launched on Android and, as of now, on iOS too.

The core features in the shipped version:

APS Matching is the feature I’m most proud of. A learner enters their subjects and marks once. The app calculates their APS for every South African public university simultaneously and shows which qualifications they’re eligible for, with a breakdown of exactly what’s met and what’s missing. This required syncing over 1,000 qualifications from WordPress into Supabase and building a qualification evaluation engine that checks both APS requirements and compulsory subject requirements in a single request.

Bursary Browsing brings our full bursary database to the app, filterable and searchable, with reminders for closing dates so learners don’t miss opportunities.

University Profiles give learners full information on all 26 public universities, including campuses, contacts, and application cycle dates.

The UNISA Noname Converter solves a small but genuinely frustrating problem. UNISA sends certain official documents as files with no extension, known as “noname” files. Most people can’t open them and have no idea what to do with them. The converter takes the file and returns a clean, properly formatted PDF.

Push Notifications let users set reminders for bursary and university application deadlines, with alerts at 1 month, 7 days, and 24 hours before closing.

What the Tools Actually Do

One of the things I’m proudest of is that apply.org.za doesn’t just list information. It processes it. When a learner uses the APS calculator, they get a personalised email with their results. This was in WordPress, by the way.

An APS results email from apply.org.za. University-specific, not generic.

That attention to accuracy and detail is what drives the traffic. And it’s what I wanted to bring fully into the app.

What’s Next

The app is live. The API is live. The platform is real.

There’s still a lot to build. SAQA qualification data integration is in progress. A low data mode is being designed for users on prepaid mobile data.

I’ll write more about the technical decisions behind the build, the API layer, the infrastructure, what went wrong and how we fixed it in a follow-up post.

For now: if you’re a Grade 12 learner in South Africa, the app is free. Search UniApplyForMe on the Play Store, App Store, or Huawei AppGallery.

And if you’re an organisation that works with matric learners and wants access to our structured data, reach out at data@apply.org.za or email me directly at mthokozisi@apply.org.za.

Found this useful? Share it.

App StoreAPS CalculatorBursariesEdTechExpoFlutterFlowGoogle Play StoreMobile AppReact NativeSouth AfricaSupabaseUniApplyForMeuniversity applicationsWordPress