Ddr.dev
← Work
Hodiya screenshot

Hodiya

WebAndroidiOSFlutter · Python · PostgreSQL · PayHere
hodiya.lk

Introduction

Hodiya is Sri Lanka's first learning app made for children aged 2 to 5, in Sinhala and English. It's built in Flutter, with a Python/PostgreSQL backend I designed and built end-to-end — auth, payments, and the API contract the app is written against.

How it works

  • A Flutter app for Android and iOS, with an illustrated onboarding and login flow.
  • A Python REST API over PostgreSQL, documented with Swagger/OpenAPI before the client existed, so app and backend could be built in parallel.
  • JWT authentication with refresh-token rotation — access tokens are short-lived, and refresh tokens are invalidated the moment a new one is issued.
  • Reuse detection: if a refresh token is presented twice, every token in that session's family is revoked.
  • PayHere payment gateway integration for subscriptions, with its own auth path separate from the main user flow.

Writing the OpenAPI spec first felt slow, but it meant the mobile side and the API were built against a contract instead of guessing — and slotting the payment callbacks in later didn't disturb the main auth flow.

The companion site

hodiya.lk is the public face of the product — features, learning modules, an inside-the-app tour, and the wishlist sign-up, in both Sinhala and English.

hodiya.lk — the product site, in Sinhala and English
Because the app targets pre-readers, the site has to sell the product to parents rather than to its users. It carries the same characters the children meet in the app, so the thing a parent sees before installing matches what their child opens afterwards.