// selected work
Things I've built

Innov8 HRM
Multi-tenant HR app for attendance, leave, payroll, and tasks — GPS-verified geofenced punch-in, manager approvals, and runtime tenant resolution from a single build.

Philly's Best
Flutter food-delivery app with a Node.js backend, Stripe payments, and a consolidated home-screen API backed by Redis caching.

Hodiya
Sri Lanka's first learning app for children aged 2–5, in Sinhala and English — backed by a Python/PostgreSQL API with JWT auth and PayHere payments.
EduLoan
EdFinTech platform connecting parents and students with financial institutions to request education loans — a Flutter Web front end over a Python/Flask API.
// about
Ship it end to end.
Software engineer with 3+ years building cross-platform mobile apps with Flutter and Dart, end-to-end from UI to backend integration. Shipped production Flutter apps across HR, fintech, food delivery, and ride-hailing use cases, with hands-on Firebase, REST API integration, and native release pipelines. Also comfortable writing the backend those apps talk to — Python/Node.js APIs, PostgreSQL, and deployments on GCP and AWS.
Mobile (Flutter)
- Flutter
- State management
- Firebase
- REST API integration
Backend
- Python
- Node.js, Express.js
- REST API design
- JWT & OAuth2
Databases
- PostgreSQL
- MongoDB
- Firebase/Firestore
- Redis
Web
- Next.js
- React
- TypeScript
- JavaScript
Cloud & DevOps
- GCP
- AWS
- Docker
- GitHub Actions
Tools & Practice
- Git/GitHub
- Postman
- Agile/Scrum/Kanban
// career
Where I've worked
Software Engineer · Innov8 Fusion
Aug 2025 – Present- Built the Innov8 HRM Staff Flutter app, including GPS-based check-in/check-out logic and integration with backend attendance APIs.
- Configured Flutter release pipelines via Codemagic, including Android keystore management and iOS build settings.
- Scaffolded production-grade REST APIs on GCP Cloud Run backed by PostgreSQL, supporting JWT, Google OAuth, and Apple Sign-In, with secrets managed via GCP Secret Manager.
- Set up a GitHub + GCP CI/CD pipeline with webhook-triggered builds and Cloud Run deployments.
Software Engineer → Junior Software Engineer · Yara Technologies (Pvt) Ltd
Jul 2024 – Jul 2025- Delivered YaraPay, a Flutter-based payments portal, with backend services built in Python (FastAPI) and Firebase.
- Designed and secured RESTful APIs; deployed services to AWS and GCP.
- Built Eduloan, a Flutter app connecting schools and banks, backed by a Python/Flask API.
- Integrated Firebase Auth and Google Cloud Functions for real-time data updates.
Trainee Software Engineer · EPIC Technology Group
Mar 2022 – Mar 2023- Built and tested banking features for the CDB mobile app in Flutter.
- Delivered a merchant portal for Bank of Ceylon using React and Node.js.
Freelance Software Engineer · Self-employed
Apr 2023 – Present- Built Philly's Best, a Flutter food-delivery app with a Node.js backend, integrating Stripe payments and a consolidated home-screen API with Redis caching.
- Built BidGo, a Flutter-based ride-hailing app with Firebase Authentication, leading UI development and API integration end-to-end.
- Built Hodiya-backend, a Python/PostgreSQL REST API with JWT authentication, refresh-token rotation, and PayHere payment gateway integration, documented with Swagger/OpenAPI.
- Built a bilingual (Tamil/English) business web app for a gold/pawn shop using Next.js 14 and Supabase, with Google OAuth and customer/transaction management.
- Delivered production apps end-to-end for SMEs using the MERN stack, Flutter, PHP, and Firebase.
// writing
Latest posts
TDD and Clean Architecture in Flutter
How I structure Flutter apps into presentation, domain, and data layers, and write the tests before the widgets to keep them that way.
Flutter release pipelines that don't wake you up at 2am
Setting up Codemagic for the Innov8 HRM app — Android keystore management, iOS build settings, and the small config decisions that save a rebuild.
Designing a JWT auth flow with refresh-token rotation
Notes on building Hodiya Backend's auth system — access/refresh tokens, rotation on reuse, and why I documented it all in OpenAPI before writing a single client.