Halcyon Health
Digital health · 9 weeks
9 weeks
From empty AWS account to first paying clinic
A patient booking product that had to survive a security review before it could take a single booking.
The problem
Two contract developers had built a booking prototype and then left. The code ran on one over-provisioned EC2 instance, credentials lived in a .env file on that server, and nobody could say which parts of the system stored patient data. The next clinic on their list required a security questionnaire completed before signing.
The constraint
The questionnaire used a control set the team had never worked against, there was no budget for a compliance consultant, and the prototype had to keep taking bookings for the two pilot clinics the entire time.
What we did
- Rebuilt the infrastructure as code so environments could be torn down and recreated, then recreated the live one without downtime.
- Moved patient records into a private-subnet Postgres instance with encryption at rest and daily snapshots, and cut the remaining services off from the public internet.
- Replaced the .env file with AWS Secrets Manager and rotated every key that had ever been on that server.
- Answered the questionnaire control by control, attaching the actual configuration as evidence rather than a written assurance.
- Deleted everything the prototype did not need, which turned out to be most of it.
What changed
- Signed the clinic that had asked for the questionnaire, six weeks after the review started.
- Monthly infrastructure cost fell from $410 to $158, mostly by removing idle capacity nobody had looked at since launch.
- The two-person team could now deploy from a pull request, which they had never been able to do.
What it cost
- Discovery and audit
- $850
- Infrastructure and migration
- $6,400
- Security questionnaire support
- $1,100
- Ongoing retainer from month three
- $1,450 / month
Stack
- AWS ECS Fargate
- RDS Postgres
- Terraform
- Next.js
- GitHub Actions