Helm: Cross-Platform Client Portal App

A bilingual (EN/PT) invoicing and client-management app for self-employed clients of an accounting practice, live on the App Store and Google Play from a single codebase.

Next.js
Capacitor
Stripe
APNs
TypeScript
PWA

Good afternoon

Maple & Co.

EN · PT

Invoiced this month

€2,230

Outstanding

€1,280

New invoice
Upload doc
Next tax deadline · VAT return due in 12 days

Recent invoices

Riverside Wellness Clinic

€640.00

Paid

Kelly Civil Engineering

€1,280.00

Overdue

Harte & Sons Joinery

€310.00

Draft
DashboardInvoicesClientsDocuments

Illustrative interface with fictitious sample data, shown in place of confidential client screens.

The problem

Many of the practice's clients are self-employed sole traders who needed a simple way to raise invoices, track who owed them money, and keep on top of tax deadlines, without learning a full accounting package or calling the practice for every small task.

What I built

A single Next.js PWA wrapped with Capacitor for native iOS and Android distribution, so one deploy serves the web app and both app-store builds. Inside: invoice creation and history, client and balance tracking, a tax calendar surfacing upcoming deadlines, and document upload (receipts, statements, letters) straight to the practice. Sign-in is passwordless (email-link based) and the whole interface is bilingual, English and Portuguese, reflecting the client base.

Subscriptions run through Stripe, and native push notifications go out via Apple Push Notification service directly rather than Firebase/FCM, keeping the notification path fully within Apple's stack for iOS. I owned the app end to end, including the App Store and Google Play submissions: navigating review feedback (screenshot and onboarding-flow requirements), TestFlight distribution and the release process through to approval.

Impact

Clients can raise an invoice, check who still owes them, and upload a document from their phone in under a minute, work that used to mean a spreadsheet, an email, or a phone call to the practice.