Skip to content

Infrastructure Architecture ​

Compact reference for Digital Thai MoCA / BrainDI platform infrastructure.

AWS account: 564141170168 · Region: ap-southeast-1

Repositories & Deploy Targets ​

RepositoryDeploy targetRuntime
automoca-web-appAWS Amplify → CloudFrontStatic SPA
braindi-backoffice-frontendAWS Amplify → CloudFrontStatic SPA
automoca-api-servicesECS (braindi-backend) + ALBGo API (port 8080)
automoca-aiserviceECS (automoca-ai-service-dev)Python Kafka worker

automoca-api-services is deployed in AWS as braindi-backend (ECR, ECS, secrets).

Topology ​

DNS (Route53 → CloudFront / ALB) ​

EnvironmentPatient appBackofficeAPI
Prod DTMdtm.aimet.techbackoffice.dtm.aimet.techapi.dtm.aimet.tech
Prod BrainDIbraindi.aimet.techbackoffice.braindi.aimet.techapi.braindi.aimet.tech
Devdev.dtm.aimet.techbackoffice.dev.dtm.aimet.techapi.dev.braindi.aimet.tech
Sirirajsiriraj.*.aimet.techbackoffice.siriraj.*.aimet.techapi.siriraj.*.aimet.tech
  • Frontends: CloudFront distributions
  • Prod API: braindi-prod-1392139716.ap-southeast-1.elb.amazonaws.com
  • Dev API: dev-alb-452655975.ap-southeast-1.elb.amazonaws.com

ECS ​

ClusterServiceTask definition
braindi-backendbraindi-backend-devbraindi-backend-dev
braindi-backendbraindi-backend-prodbraindi-backend-prod
automoca-ai-service-devautomoca-ai-service-dev-service-*automoca-ai-service-dev
automoca-ai-service-devautomoca-ai-service-prod-service-*automoca-ai-service-prod

Global ASR Integration ​

Shared platform used by braindi-backend (not deployed from this repo).

ModePathUse case
Real-timePatient app → WSS /web/tests/ws/speech → backend WebSocket reverse proxy → ASR_WS_URL/ws/v1/speechLive transcription during MoCA test (via @bream-is-a-fish/aimet-asr-react-client)
AsyncBackend → Kafka input.asr → global-asr-service → Kafka braindi.output.asr → backend consumerBatch/offline audio transcription

Backend env: ASR_WS_URL (WebSocket base URL), ASR_KAFKA_* (async topics/brokers).

Global ASR Service ECS ​

ClusterServiceTask definition
global-asr-serviceglobal-asr-api-server-devglobal-asr-api-server-dev
global-asr-serviceglobal-asr-consumer-devglobal-asr-consumer-dev
global-asr-serviceglobal-asr-api-server-prodglobal-asr-api-server-prod
global-asr-serviceglobal-asr-consumer-prodglobal-asr-consumer-prod
  • api-server — real-time WebSocket (/ws/v1/speech)
  • consumer — async Kafka (input.asr → braindi.output.asr)

Global ASR Service S3 ​

BucketNotes
global-asr-service-devAsync ASR input storage (dev). Backend uploads audio for Kafka input.asr jobs; consumer reads and transcribes.
global-asr-service-prodSame as dev (prod).

Kafka ​

  • Topics: input.asr → braindi.output.asr
  • IAM auth in prod

ECR ​

RepositoryImage example
braindi-backend564141170168.dkr.ecr.ap-southeast-1.amazonaws.com/braindi-backend:<tag>
automoca-ai-service564141170168.dkr.ecr.ap-southeast-1.amazonaws.com/automoca-ai-service:<sha>

Amplify ​

AppRepositoryDefault domain
auto-moca-web-appautomoca-web-appddvcmytiooo28.amplifyapp.com
braindi-backoffice-frontendbraindi-backoffice-frontendd36kp5f38yecvq.amplifyapp.com

Build: yarn install → yarn build → artifacts from dist/. Sentry secrets injected from AWS Secrets Manager at build time.

Data Stores ​

ServiceResourceNotes
MongoDBExternal (Atlas)MONGO_URI via Secrets Manager
Redisbraindi-backend-prod-0001-001ElastiCache, cache.t4g.micro
S3automoca-web-backend-devPrimary storage: test uploads (audio/images), generated PDFs. Used by braindi-backend-dev, automoca-ai-service-dev. Keys: {testId}/{uuid}_{filename}
S3automoca-web-backend-prodSame as dev. Used by braindi-backend-prod, automoca-ai-service-prod

Messaging ​

ComponentTopics / channels
Kafka (IAM auth in prod)AI: input.ai.braindi → output.ai.braindi
SNSbraindi-predict-result-delay-alarm-dev/prod
automoca-aiservice (ECS)Consumes input.ai.braindi, produces output.ai.braindi

Secrets Manager ​

Secret prefixUsed by
braindi-backend-dev, braindi-backend-prodGo API
dev/prod/automoca/ai-service/*AI service (GCP, Azure, API keys)

CI/CD ​

RepoTriggerPipeline
automoca-api-servicesPush to devGitHub Actions → ECR → ECS braindi-backend-dev
automoca-aiservicePush to dev / mainGitHub Actions → ECR → ECS dev / update prod task def
automoca-web-appGit pushAmplify auto-deploy
braindi-backoffice-frontendGit pushAmplify auto-deploy

Backend deploy role: arn:aws:iam::564141170168:role/braindi-backend-actions-runner

External Dependencies (outside this AWS account) ​

ServicePurpose
Google Cloud Speech-to-TextSpeech recognition
Google Gemini / Azure OpenAIAI scoring (via aiservice)
CFC proxy (VITE_CFC_PROXY_ENDPOINT)Backoffice file upload
SentryFrontend error tracking