Donnish
§ Case study · STARTTS

179 nationalities. One platform.

CAMLAP is the Flutter platform Donnish designed and built for the NSW Service for the Treatment and Rehabilitation of Torture and Trauma Survivors. It lets clinicians run trauma-informed clinical assessments in a survivor's first language, with native script and audio. Now expanding from NSW to national, with global in sight.

179
Nationalities served
120+
Languages supported
NSW → national
Deployment scope
Two hands hold a tablet showing the CAMLAP Languages screen, listing Arabic, Dari, Persian, Hazaragi, Nepali, Kirundi, Swahili and Karen
§ 02Who is STARTTS?

Trauma recovery, at scale.

STARTTS is the NSW Service for the Treatment and Rehabilitation of Torture and Trauma Survivors. They deliver trauma recovery services to refugees from torture and persecution. Their clinicians needed to conduct sensitive clinical assessments across massive language and literacy barriers.

STARTTS were decommissioning a first iteration of their assessment platform due to technology end-of-life and a lack of customisation. They approached Donnish to assist in the creation of a new tool that could not only improve the existing process of facilitating clinical programs to assist victims of trauma, but could be utilised by wider national and global organisations.

The goal: leverage the critical work STARTTS have pioneered to give it wider reach, potentially to all parts of the globe. Existing off-the-shelf tools could not handle trauma-informed care for clients who may not read, write, or speak English. The ability to customise clinical questionnaires to offer native script and audio simply did not exist.

A laptop on a plinth showing the CAMLAP Builder questionnaire editor
§ 03Solution architecture

How CAMLAP is built.

A clinical questionnaire builder and presenter for trauma-survivor assessment: two Flutter web apps on Firebase Hosting, a Firebase and Google Cloud backend, Azure Blob for questionnaire bundles and audio, and Stripe for subscriptions.

CAMLAP solution architecture: two Flutter web apps served by Firebase Hosting, backed by Firebase and Google Cloud (Firestore, Cloud Functions, Secret Manager), with Azure Blob storage for questionnaire bundles, and Stripe, SendGrid and Sentry as third-party services. A Cloud Function reads the Azure connection string from Secret Manager and streams files, so the client never ships the secret. A scheduled function purges expired interview links and results hourly.

Request / data flowOwned app / functionOfficial vendor marks · third-party tiles link out ↗
Swipe to explore the full diagram
§ 01 · Client apps

Two Flutter web apps plus a shared Dart library.

CAMLAP BuilderFlutter web · authoring
CAMLAP PresenterFlutter web · review
Interviewee modeLive · Group · Telehealth
Shared libraryDart
HTTPS
§ 02 · Hosting & auth

Served and signed-in through Firebase.

Firebase HostingBoth apps · Google CDN
Firebase AuthGoogle + Microsoft Entra
Callable functions
§ 03 · Serverless functions

Firebase Cloud Functions · Node.js.

azureBlobSecure file access
stripeCheckoutCheckout session
removeExpiredObjectsHourly cron · scheduled
Data / storage
§ 04 · Cloud platform

Firebase and Google Cloud for data and logic; Azure for files.

Google Cloud · Firebase
Cloud FirestoreRecords, users, results
Cloud FunctionsNode.js runtime
Secret ManagerAzure conn string
Scheduler + Pub/SubFirebase-managed cron
Azure
Blob StorageQuestionnaire bundle + audio
AD app registrationApp identity
Integrations
§ 05 · Third parties

Payments, email, monitoring, delivery.

Source & delivery
BitbucketSource control
Manual deployFirebase CLI · scripts
Architecture pattern · Secure file access + lifecycle
Flutter appazureBlob functionSecret Manager · reads secretAzure BlobFile streamed back

The client never ships the Azure connection string: a Cloud Function reads it from Secret Manager and uploads or streams the questionnaire and audio via the Azure SDK, with no direct SAS. A scheduled function purges expired interview links and results hourly, and SendGrid emails a reminder before results expire.

Donnish · CAMLAP solution architectureFlutter on Firebase, Google Cloud and Azure
§ 04How we work together

Co-delivery, not handover.

CAMLAP was created through a Design and Build process using a dual-track agile (Scrum) approach. This was a co-delivery team: STARTTS roles formed part of the delivery team. STARTTS are responsible for product ownership; we are responsible for design, delivery and support.

The team scales up and down as required against the product roadmap, supplemented with a support and maintenance agreement. Delivery is from a hybrid Australia and Philippines team.

What makes the engagement work: clear, transparent communication and agreed processes. All work is visible on the Jira Kanban board, signed off by the client there. That includes future planning and tracking of maintenance items.

How it's built today: engineering, refactoring and tests run through Claude Code, and design changes go through Figma with Claude Code reading the design context directly. A small senior team with that tooling keeps CAMLAP moving across web, mobile and desktop.

Donnish have been excellent partners. They ask great questions to understand what we want to achieve and offer real technical expertise. They worked with us to develop shared and concrete expectations of how to best work together to manage timelines, budget, and outcomes. No uncertainty ever lasts long.

Joshua HallClinical Research Lead, STARTTS, NSW Government Health
§ 05The platform

Built for clinicians. And for survivors.

Design principles

CAMLAP was designed to serve clinicians and their consulting teams as well as the trauma survivors themselves. Human- centred from the first sketch.

  • Designed with trauma survivors at the centre
  • Every interaction designed to feel safe, respectful, accessible
  • Adaptive interfaces for varying literacy levels
  • Audio and visual modes for non-literate clients
  • Simplicity · every user should intuitively understand what to do next

The technology

Flutter for the greatest flexibility across mobile and web. Firebase and Azure backend, Stripe for subscription payments. Work managed through a Jira board, using Loom.

  • Flutter · chosen for one codebase across web and mobile
  • Firebase · auth, real-time data, hosting
  • Google Cloud · backend services
  • Azure · supplementary platform services
  • Stripe · subscription payment when creating a subscription
§ 06Outcomes

From New South Wales. Toward the world.

Reach · expanding

National and international rollout

The platform is now expanding from NSW to national, with international deployment in sight. The trauma-informed clinical-assessment work STARTTS pioneered now has a digital vehicle to reach survivors anywhere a clinician can sit with a tablet.

Design goal · Simplicity

The UX should disappear. The work should not.

Clinicians and survivors alike should intuitively understand what to do next. Adaptive interfaces, audio and visual modes, and native-script questionnaires meet people where they are.

Brisbane / Manila

Got a service that should reach further? Tell us about it.

We'll get back to you within a business day, usually faster.