The challenge
AFYTI reached me through a referral from a client I was already working with. A previous team had been building the platform for months, but progress was slow and the deadlines they gave kept slipping.
The codebase I inherited had no automated tests. The business needed a live product, not another missed date.
The promise
I started with a code audit, then made one commitment: go live within a month. That meant deciding fast what to keep, what to rebuild, and what could wait until after launch.
What we shipped
Patient app, redesigned
Flutter app for iOS and Android: find a doctor, chat, voice and video consultations, prescriptions, payments, and push notifications, in English, Arabic, and Hebrew with full RTL.
Doctor app, built from scratch
A new Flutter app for doctors: consultations, chat, video and voice calls with native call screens, prescriptions, and earnings. First commit to the App Store in 11 days.
Backend and web portal
Node.js and Express API on MongoDB with real-time chat over Socket.IO, push and VoIP notifications, card payments, OTP verification, and a web portal for doctors and pharmacies.
Two super admin dashboards
We kept the existing super admin running for daily operations while building its replacement: a new Next.js super admin in a Turborepo with shared UI and translation packages.
Landing page and blog
The marketing site at afyti.co and a blog system for health articles reviewed by doctors.
Infrastructure and quality
I set up the AWS architecture so that releases stopped being risky events. In week two, a production crash caused by building the app on the server itself pushed us to move every build into CI. That incident is why every deploy now ends with a health check and an automatic rollback.
- CI/CD with GitHub Actions: builds run in CI and deploy to EC2 through AWS SSM, with no SSH access to servers.
- Separate staging and production environments, with health checks on every deploy and automatic rollback in production.
- CloudFront in front of the API, website, and dashboards, with AWS WAF rate limiting.
- Encrypted, versioned S3 storage for medical files, managed with Terraform, plus daily AWS Backup.
- Checks on every pull request: lint, type checks, Flutter tests, and translation key parity.
- 1,000+ backend unit tests and 230+ Flutter tests.
- Mobile builds from CI to TestFlight, Firebase App Distribution, and the Google Play internal track.
- Right-sized the production server in the first week, cutting its size by two tiers.
Team and process
A small cross-functional team, with tasks and sprints managed in ClickUp and QA sign-off before every release.
- Technical Lead (me): architecture, AWS, mobile and backend development, code review, and releases.
- UI/UX designer: the patient app redesign and the new doctor app.
- Backend developer: APIs and integrations.
- QA engineer: testing every release before it reached the stores.
Launch
The doctor app went live on the App Store 24 days after we started, and the patient app followed the next day.
Google Play approved both apps on the first submission. Apple approved them on the second, under a new organization developer account we set up for AFYTI. Both apps have kept shipping regular updates since launch.










