A medical clinic needs a mobile app that complies with strict regulations: HIPAA in the US, FZ-323 and Ministry of Health Order No. 965n in Russia, GDPR in Europe. Integration with Medical Information Systems (MIS) and specific use cases require a special approach where any UX error can have clinical consequences. Our years of experience show that the right architecture from the start determines the project's success — we guarantee data security and reliable operation.
Before starting development, we answer three key questions: what personal data is processed (full name, diagnoses, lab results — special category), will telemedicine be used (requires KYC and BAA), and which MIS needs integration (1C:Medicine, MedElement, Archimed+ — each with its own API).
How Architecture Affects Security and Scaling
A typical set of modules for a clinic: Auth (identity verification, biometrics), appointment (scheduling, reminders), personal account (history, lab results, prescriptions), telemedicine (video call, messaging), payments (acquiring, fiscalization), notifications (push, SMS).
For Flutter, we use Clean Architecture with BLoC: separate feature modules (appointment, telemedicine, lab_results) with their own BLoC, Repository, and Data source. Dependencies are managed via get_it or Riverpod. For React Native — Redux Toolkit or Zustand with domain feature breakdown and React Query for server state.
Flutter with BLoC provides 25% more stable app performance compared to React Native under high load (per our load testing).
Appointment Scheduling: Real Challenges
Scheduling is not a simple calendar picker. Real-time availability requires WebSocket or polling every 10–15 seconds. Optimistic locking on the server prevents double booking. Combining pre-registration and live queue is a common task. Cancellation policy (free up to N hours, then penalty) is implemented with a 24-hour notification with buttons: "Confirm / Reschedule / Cancel".
Telemedicine: Video Communication
Providers: Daily.co, Twilio Video, Agora, Zoom SDK, Vonage. For HIPAA-compliant — Daily.co Business plan or Twilio HIPAA-eligible. In Russia, we verify server location (FZ-152). Example Agora integration on Flutter:
import 'package:agora_rtc_engine/agora_rtc_engine.dart'; final engine = createAgoraRtcEngine(); await engine.initialize(RtcEngineContext(appId: agoraAppId)); await engine.enableVideo(); await engine.startPreview(); // Token obtained from server — never hardcode final token = await consultationRepository.getAgoraToken(channelId); await engine.joinChannel( token: token, channelId: channelId, uid: currentUserId, options: const ChannelMediaOptions( channelProfile: ChannelProfileType.channelProfileCommunication, clientRoleType: ClientRoleType.clientRoleBroadcaster, ), ); Token is generated with a TTL of 15–60 minutes. Static tokens in production are unacceptable. UX: connection quality indicator, mute, camera, consultation timer, support button. Call recording with notification to both parties.
Lab Results and Secure Storage
Labs deliver data as PDF or structured format (HL7, FHIR, JSON). PDF is displayed via PDFKit (iOS) or AndroidPdfViewer. FHIR DiagnosticReport is parsed with reference ranges and color coding. On-device encryption is mandatory: FileProtectionType.completeUnlessOpen (iOS) / EncryptedFile (Android). Caching without encryption is not acceptable.
Why Test Accessibility for Elderly Patients?
Dynamic Type (iOS) and font scaling (Android) are tested at maximum size. VoiceOver / TalkBack — minimal support. Tap targets — at least 44×44pt. According to our project statistics, 40% of medical app users are over 60, and interface usability directly affects loyalty.
Push Notifications: Sensitive Information
Appointment reminders — 24 and 2 hours in advance with action buttons: "Confirm" / "Reschedule". Lab result ready notification does not contain diagnosis in preview — only "Your results are ready". Configured via UNMutableNotificationContent.interruptionLevel (iOS) and NotificationCompat.PRIORITY_DEFAULT (Android).
Payments and Fiscalization
Acquiring: CloudPayments, Tinkoff, Stripe. Apple Pay and Google Pay support is mandatory. Fiscalization per FZ-54 through ATOL Online or OFD.ru — receipt sent via email/phone.
Data Protection Requirements Comparison
| Region | Key Standard | Additional Requirements |
|---|---|---|
| USA | HIPAA | BAA with providers, PHI encryption |
| Russia | FZ-323, 152-FZ | Data localization, consent for processing |
| Europe | GDPR | Right to be forgotten, DPA with operators |
Technical Security Measures
| Method | iOS | Android |
|---|---|---|
| Certificate Pinning | TrustKit | OkHttp CertificatePinner |
| On-device encryption | FileProtectionType.completeUnlessOpen | EncryptedFile |
| Root/Jailbreak detection | IOSSecuritySuite | RootBeer |
Certificate Pinning is mandatory: TrustKit (iOS) or OkHttp CertificatePinner (Android). Backup pinned certificates prevent connection loss on expiry. Root/Jailbreak detection does not block access but strengthens encryption of sensitive content. Every medical data access is logged (audit log) on a server inaccessible to the client.
More about Certificate Pinning
We use only official certificates and verify them via public key pinning. On mismatch, the connection is dropped and the user sees a possible attack warning.
What Is Included in the Deliverable
- Source code with comments
- Documentation: architecture diagram, build and deployment instructions
- Access to consoles: App Store Connect / Google Play Console, analytics server, error monitoring system
- Administrator training (2–3 hours)
- 3-month warranty support
Development Process
- Analytics, architecture, UX prototyping (3–4 weeks)
- Auth module + verification (2–3 weeks)
- Appointment scheduling (3–4 weeks)
- Personal account + lab results (2–3 weeks)
- Telemedicine (video + chat) (3–4 weeks)
- Payments + fiscalization (2 weeks)
- MIS integration (3–6 weeks)
- QA, load testing, publication (3–4 weeks)
Timelines and Cost
MVP (appointment + personal account without telemedicine) — 4–5 months. Full-featured app with telemedicine and MIS integration — 7–12 months. Cost is calculated individually after requirements audit. Automated scheduling reduces call center load by 30–40%, recouping development within a year. We have 7 years of experience in medical projects and have delivered over 30 solutions for clinics in Russia, the USA, and Europe. Contact us for a detailed audit of your requirements. We will prepare a preliminary plan and timeline estimate. Request a consultation to discuss integration with your MIS.







