← All projects

Akawntant: CPALE Board Exam Review Platform

Cover Image for Akawntant: CPALE Board Exam Review Platform

The problem

Passing the CPALE (Certified Public Accountant Licensure Examination) in the Philippines is brutal. Six subjects, thousands of topics, and most review materials are either outdated PDFs or expensive classroom sessions. Students study in isolation with no way to track weak areas or measure readiness.

Existing review apps either cover too little or dump content without any intelligence. There's no feedback loop between practice and study strategy.

What I built

Akawntant is a full review platform covering all six CPALE subjects: FAR, AFAR, MAS, Auditing, Taxation, and RFBT. It offers multiple study modes, mock exams, progress tracking, and collaborative study features.

The journey

I thought the hard part would be building the quiz engine. The real challenge was designing a system that adapts to how students actually learn and forget.

Tech stack

Layer Technology Why
Frontend Next.js 16 App Router, React 19 transitions
Language TypeScript Type safety across the stack
Database Supabase PostgreSQL + Auth + Row Level Security
Styling Tailwind CSS v4 Utility first, fast iteration
UI shadcn/ui Accessible component primitives
Hosting Vercel Edge caching, easy deploys

What building this taught me

1. Study modes are not one-size-fits-all

I started with just a quiz mode. Users immediately asked for flashcards. Then review mode where they could see answers immediately. Then a mode that only surfaces questions they got wrong before.

Each mode required different UI, different state management, and different progress tracking logic. What seemed like "just showing questions differently" turned out to be fundamentally different interaction patterns.

2. Progress tracking drives motivation more than content

The activity calendar, streak counters, and mastery scores became the most used features. Students opened the app to maintain streaks even when they didn't feel like studying. The gamification wasn't gimmicky; it mapped to real study consistency.

I learned that in edtech, the meta-experience (tracking, goals, social proof) matters as much as the content itself.

3. Row Level Security changes how you think about multi-tenancy

Supabase's RLS meant every query was automatically scoped to the authenticated user. Study group permissions, bookmarks, notes, all enforced at the database level. This eliminated entire categories of authorization bugs I would have written in application code.

-- RLS policy: users only see their own progress
CREATE POLICY "Users read own progress"
ON daily_progress FOR SELECT
USING (auth.uid() = user_id);

-- Study group members see shared content
CREATE POLICY "Group members can view sessions"
ON public.group_study_sessions FOR SELECT
USING (
  group_id IN (SELECT public.get_user_active_group_ids(auth.uid()))
);

The group policies route through a get_user_active_group_ids helper rather than an inline subquery over group_members. Writing the membership check inline means the policy on one table queries a table whose own policy queries back, and Postgres either recurses or re-evaluates it per row. A SECURITY DEFINER function breaks that cycle and is evaluated once. Across 292 policies, that difference stops being academic.

4. Native iOS extends reach but doubles complexity

Building the companion iOS app with SwiftUI and Supabase gave students offline study capabilities. But maintaining feature parity across web and iOS meant every feature took twice as long. I learned to ship web first, then port only the high-value features to mobile.

The bigger realization

Building Akawntant taught me that edtech products succeed not because of content volume, but because of study experience design. The adaptive algorithm that resurfaces forgotten material, the streak that keeps students coming back, the study group that adds accountability; these "soft" features drive outcomes more than having 10,000 questions.

What I would do differently

Start with a smaller subject scope. Launching with all six CPALE subjects meant spreading content quality thin. I'd pick one or two subjects, nail the depth and quality, then expand. Depth beats breadth in educational content.

References

Links

Let's build something together.

Got an idea? I'm always up for a new challenge, whether it's a side project, a startup, or something in between.

© 2026 Cyrus David Pastelero. All rights reserved.

Built with Next.js, TypeScript & Tailwind CSS