All work

Client work at Mobil80

XcelAudit

Chartered-accountant firms use it to sign off audit steps, answer client queries and approve timesheets. I built the mobile app from scratch.

Role
Built the mobile app from scratch; sole mobile developer
When
Sep 2025 – now
Status
Live on iOS and Android
Platforms
Android, iOS, iPad
Built with
Flutter, GetX, AWS Amplify, AppSync GraphQL, Firebase Cloud Messaging, Hive

What it is

XcelAudit is built for chartered-accountant firms in India. A CA firm runs many audits at once. Each audit follows a checklist of stages, sub-stages and steps, and every step needs a preparer and a reviewer. Some steps also need sign-off from partners.

The product already had a web portal. The mobile app puts the same backend on a phone or iPad, so firm staff can sign off steps, answer client queries, approve timesheets and chat. The firm’s clients can log in too, with access to chat and queries only.

What I worked on

When the client wanted a mobile app, I built it from scratch, starting in September 2025. The current repository starts in January 2026. I’ve made 54 of its 65 commits, and every commit since mid-January is mine. I shipped the Android and iOS releases from 2.0.0 in January 2026 to 3.1.0 in August 2026, including the first App Store release in February.

Besides the work below, I added project groups and a mode that gives each step its own partner, and rebuilt the query module. A colleague worked on the app with me for the first two weeks of January 2026, mainly on the project screens and the member and timesheet forms.

Technical notes

Multi-level sign-off

I wrote the rules for who can sign off and un-sign in January 2026. A step goes from preparer to reviewer, then through up to three optional partner reviews, chosen per step when it’s assigned. What a user can do depends on the step’s status, their place in the chain and their member rights. Un-signing has to send the step back to whoever held the previous level, which changes with the reviews that are switched on. A step can’t be signed off while it has open queries, and signing off after the target closure date asks for a written reason.

Chat

Messages arrive in real time over an AppSync subscription. A sent message shows at once with a temporary ID while any upload and the send run in the background. When the server’s copy arrives it has to replace that pending bubble, matched on sender and text because the real ID isn’t known yet. The newest 100 messages per conversation are cached in Hive, so a chat opens with history before the network responds. In groups, typing @ suggests members.

Notifications that open the right screen

Push payloads come in several shapes, so the app normalises them first. If a notification is tapped before the app is ready, while signed out, or before the user’s details have loaded, the target is saved and opened after login. To open an audit step, the app fetches the project’s stages and rebuilds the back stack (home, project, step) so Back works.

Client users and iPad

Firm staff get a dashboard, projects, queries, timesheets and settings. Client users get chats, queries and settings. I built the client side in April 2026, and the same month I added iPad support to the iOS app.