AWS-first repository for hosting and delivering the Indriya Polyclinic - Integrated Healthcare public website.
Primary scope:
- Infrastructure as code with Terraform
- Secure static hosting on AWS
- Automated CI/CD with CodePipeline and CodeBuild
- Custom domain with CloudFront, ACM, and Route53
This project provisions the following on AWS:
- S3 private bucket for frontend hosting artifacts
- CloudFront distribution with SPA fallback behavior
- ACM certificate in us-east-1 for CloudFront TLS
- Route53 alias records for apex and www domains
- SNS topic for CloudWatch alarm notifications
- CodePipeline + CodeBuild for build and deployment automation
Request flow:
- User hits indriyaclinic.com or www.indriyaclinic.com
- Route53 resolves to CloudFront
- CloudFront serves static assets from private S3 origin
- SPA route misses are rewritten to index.html
.
├── infrastructure/ # Terraform AWS stack
│ ├── main.tf # Providers and Terraform version
│ ├── variables.tf # Input variables
│ ├── dev.tfvars # Environment values
│ ├── s3.tf # Hosting + log buckets
│ ├── cloudfront.tf # CDN distribution
│ ├── route53.tf # DNS + ACM validation records
│ ├── ci_cd.tf # CodePipeline + CodeBuild
│ ├── sns.tf # Alarm notifications
│ └── iam/ # Bucket policy modules
├── buildspec.public-frontend.yml # Build/deploy instructions for CodeBuild
└── frontend/ # Website source code (build artifact input)
Prerequisites:
- Terraform ~> 1.14
- AWS credentials configured locally
- Existing Route53 hosted zone ID
- Valid CodeStar connection ARN for GitHub integration
Deploy:
cd infrastructure
terraform init
terraform plan -var-file="dev.tfvars"
terraform apply -var-file="dev.tfvars"Set in dev.tfvars (or per-environment tfvars):
- aws_region
- acm_region (must be us-east-1 for CloudFront)
- name_prefix
- hosted_zone_id
- codestar_connection_arn
- repo_fullId
- repo_branch
Pipeline source trigger is configured for:
- frontend/**
- buildspec.public-frontend.yml
Build/deploy sequence:
- CodeBuild installs frontend dependencies
- Frontend is built using Vite
- dist is synced to S3 hosting bucket
- CloudFront cache invalidation is created
- Frontend bucket is private and accessed via CloudFront
- Server-side encryption is enabled on buckets
- Versioning is enabled for hosting and log buckets
- CloudFront access logs are stored in a dedicated S3 log bucket
- CloudWatch alarms notify via SNS email subscription
The website is a React + Vite SPA with multilingual support (EN, KN, HI) and WhatsApp-based appointment booking.
For local frontend dev:
cd frontend
npm install
npm run dev- indriyaclinic.com
- www.indriyaclinic.com
No license file is currently configured in this repository.