Skip to content
Open to graduate roles from 2027 · freelance nowColombo, Sri Lanka

pixel-perfect, accessible, cross-platform, agent-tested

I build native-feeling mobile apps, the .NET APIs behind them, and the test automation that keeps them honest. Fifteen months in IFS R&D's mobile framework team, now in my final year and looking for a graduate engineering role in 2027, with freelance work in the meantime.

Mobile framework engineer · Final-year BSc (Hons) Computer Science, IIT × University of Westminster

01 — Work

Things I've built and owned.

Work I owned end to end, from client apps to one of my own on the App Store. Most of the code is in private or company repositories, so the write-ups carry the weight.

FreelancePrivate repository

SR Medicals analytics suite

SR Medicals Pharmacy & Minimart

A native iOS analytics app, built for Android as well from the same Swift codebase with the Skip framework, and a .NET Web API giving a pharmacy-and-minimart owner live revenue insight, stock and reorder analytics, and staff and customer management.

Problem
Keeping track of how the shop was doing meant being at the back-office computer. Away from it, the owner had no view of sales, stock or staff.
Solution
A SwiftUI app backed by an ASP.NET Core Web API, with the Android build produced from the same SwiftUI code through Skip: revenue dashboards by day, category and counter; product search, barcode scanning and stock alerts; bill-of-materials and production tracking; employee and customer management; in-house shelving and purchasing analytics that turn sales velocity into order recommendations by days of coverage.
Impact
The owner can see how the shop is doing from anywhere, on either phone, not only from the back-office desk.
Learned
Owners don't want charts, they want answers. The second version cut the dashboard down to the five numbers that change what they order tomorrow.
  • SwiftUI
  • Skip (Android)
  • ASP.NET Core Web API
  • C#
  • SQL

Project Tracker: Uni & Thesis

Published on the App Store

A stage-by-stage deadline tracker for theses, dissertations and final-year projects, native on iPhone, iPad and Mac. Paste the course's deadlines email and Apple Intelligence turns it into stages, dates and tasks on the device.

Problem
University projects run on a handful of weighted deadlines scattered across handbooks and emails, and general to-do apps don't show which stage is next or how close it is.
Solution
One SwiftUI target for iOS and macOS: stages with deadlines, weightings and checklists, a personal target buffer before each real date, per-stage notes and PDFs, a reference library, reminders and a home-screen widget. Pasted deadline emails are parsed by Apple's on-device Foundation Models, with a plain date parser as the fallback, and an import preview keeps ticked tasks when deadlines change. Everything syncs through the student's own iCloud.
Impact
Free on the App Store for iPhone, iPad and Mac, open source, with no account, ads or data collected.
Learned
Nobody wants to type their deadlines in. Letting students paste the email their course already sent did more for setup than any template.
  • SwiftUI
  • Foundation Models
  • WidgetKit
  • App Intents
  • iCloud
  • iOS
  • macOS
Two Project Tracker reminders on the lock screen, each naming the next deadline and the stage to work on
  • At IFS R&DCompany repository

    Xamarin → .NET 10 migration

    IFS R&D

    Led the port of a legacy Xamarin application suite to .NET MAUI on .NET 10 so it could be published to the stores again.

    Case notes
    Problem
    Xamarin reached end of support, so the suite could no longer be pushed to the App Store or Google Play.
    Solution
    Re-platformed projects, dependencies and renderers to .NET MAUI on .NET 10, restored the build pipeline and drove regression across iOS, Android and Windows.
    Impact
    Store-publishable again on a supported runtime, with most of the porting done by one engineer.
    Learned
    The porting is the easy part. Build pipelines, renderer differences and platform-specific regressions are where a migration actually spends its time.
    • .NET MAUI
    • .NET 10
    • Xamarin
    • C#
    • iOS
    • Android
    • Windows
  • At IFS R&DCompany repository

    Agent-ready UI test automation framework

    IFS R&D

    An Appium + PyTest framework whose structure mirrors the IFS application suite, so an AI agent can write and maintain QA tests.

    Case notes
    Problem
    Manual regression across three platforms was slow, and authoring automated tests needed deep framework knowledge.
    Solution
    Page objects and fixtures mapped one-to-one to the suite's screens and flows, with conventions an LLM agent can follow reliably, and cross-platform drivers for iOS, Android and Windows.
    Impact
    QA tests are now generated by an agent and run on every platform, replacing a large share of manual QA effort.
    Learned
    An agent is only as reliable as the vocabulary you give it. Naming every screen and flow exactly like the app did more for test quality than any prompt.
    • Appium
    • PyTest
    • Python
    • AI agents
    • .NET MAUI

02 — Experience

Where I've shipped.

Framework-level mobile work at IFS, freelance analytics products, and a degree that's almost done.

  1. Jun 2025 — Sep 2026
    Colombo, Sri Lanka

    Software Engineering Intern, Mobile Framework

    IFS R&D · Service & Asset Management

    Fifteen months in the framework team behind IFS's field-service mobile apps, working across iOS, Android and Windows.

    • Led the migration of a legacy Xamarin application suite to .NET 10 with .NET MAUI so it could ship to the App Store and Google Play again; owned the bulk of the porting, build pipeline and regression work.
    • Led an Appium + PyTest cross-platform UI automation framework, architected to mirror the IFS application suite so QA tests could be authored by an AI agent. It replaced a large share of manual regression effort.
    • Fixed customer-reported P1 and P2 defects in .NET MAUI features across iOS, Android and Windows, working directly from customer cases.
  2. 2023 — 2027
    Education

    BSc (Hons) Computer Science

    Informatics Institute of Technology, affiliated with the University of Westminster

    Final year. Elected Batch Representative in years one, two and four.

03 — About

Pixel-perfect is a habit, not a finishing touch.

Final-year Computer Science undergraduate at the Informatics Institute of Technology (IIT), affiliated with the University of Westminster. I spent fifteen months in IFS R&D's Mobile Framework team shipping software that field technicians rely on every day, and I build analytics products for small businesses on the side.

I care about the last one percent: the half-pixel misalignment, the missing focus ring, the tap target that's four points too small. I design in Figma, build with each platform's own UI toolkit, and write automation so quality never depends on someone remembering to check.

Beyond code

  • Batch RepresentativeInformatics Institute of Technology · Years 1, 2 and 4
  • TreasurerIEEE Robotics & Automation Society, IIT · IEEE student branch
  • Event volunteerCodeSprint, MicroMaze and other IIT / IEEE events
inside IFS R&D's Mobile Framework team, shipping to field technicians
platforms shipped and tested: iOS, Android and Windows

The right architecture for each need

Cross-platform field apps
.NET MAUI · MVVM · platform handlers
Native iOS products
SwiftUI · MVVM · async/await
Android UI
Jetpack Compose · unidirectional data flow
Business APIs
ASP.NET Core · layered · Docker
Agent-ready test automation
Appium + PyTest · page objects
Framework migrations
Adapters first · screen by screen

04 — Services

Hire me for the whole thing, or the hard part.

I take on freelance work alongside my final year: scoped builds, analytics products and platform migrations.

  • Cross-platform mobile apps

    Native-feeling on every platform, one codebase where it makes sense, fully native where it doesn't. Migrations off Xamarin included.

    • iOS · Android · Windows
    • Store submission
    • Legacy migrations
  • Analytics dashboards & APIs

    Revenue, stock and staff: the numbers you actually run the business on, on your phone, with the API behind them built to last.

    • KPI dashboards
    • REST APIs
    • Hosting & deploys
  • Test automation

    Cross-platform UI test suites structured so AI agents can author and maintain the tests.

    • Cross-platform suites
    • Agent-authored tests
    • CI pipelines
  • UI/UX & accessibility

    Figma design systems, WCAG 2.2 audits and pixel-perfect implementation.

    • Figma to code
    • Design systems
    • WCAG 2.2 audits
  • Open for projects

    Have something to build?

    Send a brief. I'll reply with questions, a rough scope and honest timelines.

    Start the conversation

05 — Stack

The same card, written the way each platform wants it.

One work-order component, four toolkits. Switch the source and the live preview redraws in that platform's design language, using the tokens this site is built with.

Live preview · iOS 26 Liquid Glass

Work order #4821

On site

Replace compressor, cold room 3

Technician
Sam Whitfield
Scheduled
Today, 14:30

Rendered with this site’s own design tokens for that platform. Toggle and button are real.

WorkOrderCard.swift28 lines · Swift
struct WorkOrderCard: View {
let order: WorkOrder
@Binding var notifyCustomer: Bool
var onComplete: () -> Void
var body: some View {
VStack(alignment: .leading, spacing: 12) {
HStack {
Text("Work order #\(order.number)")
.font(.caption)
.foregroundStyle(.secondary)
Spacer()
StatusBadge(order.status)
}
Text(order.title).font(.headline)
LabeledContent("Technician", value: order.technician)
LabeledContent("Scheduled",
value: order.scheduled.formatted(date: .omitted, time: .shortened))
Toggle("Notify customer on completion", isOn: $notifyCustomer)
Button("Complete work order", action: onComplete)
.buttonStyle(.borderedProminent)
.frame(maxWidth: .infinity)
}
.padding()
.background(.background.secondary, in: .rect(cornerRadius: 16))
.accessibilityElement(children: .contain)
}
}

And the rest of the toolbox

C#SwiftKotlinJavaTypeScriptJavaScriptPythonSQLHTMLCSS.NET MAUISwiftUIJetpack ComposeReact NativeXamarin.FormsXAMLReactNext.jsTailwind CSSASP.NET CoreASP.NET Core Web API (.NET 10)REST APIsDockerAppiumPyTestGitCI/CDAI-assisted workflowsFigmaUI/UX designDesign systemsWCAG 2.2 accessibilityPrototyping
  • Languages: C#, Swift, Kotlin, Java, TypeScript, JavaScript, Python, SQL, HTML, CSS
  • Mobile: .NET MAUI, SwiftUI, Jetpack Compose, React Native, Xamarin.Forms, XAML
  • Web: React, Next.js, Tailwind CSS, ASP.NET Core
  • Backend & data: ASP.NET Core Web API (.NET 10), REST APIs, SQL, Docker
  • Quality & tooling: Appium, PyTest, Git, CI/CD, AI-assisted workflows
  • Design: Figma, UI/UX design, Design systems, WCAG 2.2 accessibility, Prototyping

06 — Self-test

This page tests itself.

Real assertions run against the rendered page in your browser and print as they pass: accessible names, contrast, tap targets, layout shift. Nothing is scripted, and it re-runs when you switch theme or design language.

self-test · runs live in your browser

$ pytest tests/lkavi.com -q --tb=short

collected 12 items across 4 files

  1. test_html_lang_declared······
  2. test_single_h1_and_heading_order······
  3. test_headline_contrast_wcag_aa······
  4. test_body_text_contrast_wcag_aa······
  5. test_every_control_has_a_name······
  6. test_images_have_alt_text······
  7. test_tap_targets_wcag_2_5_8······
  8. test_skip_link_targets_main······
  9. test_reduced_motion_honoured······
  10. test_webfonts_loaded······
  11. test_cumulative_layout_shift······
  12. test_largest_contentful_paint······

waiting for viewport

Every line above is a real assertion against this page, run just now, not a recording. It's the same idea as the Appium + PyTest framework I led at IFS: describe the app so precisely that tests can be written by an AI agent.

07 — Contact

Let's build something that holds up.

Custom software, an analytics dashboard, a mobile app or a migration off Xamarin. Tell me what you're working on and where it hurts.

Sent straight to my inbox. No newsletters, ever.