Inspiration

As parents grow older, the distance feels harder. Mine live in India. They use WhatsApp because it's simple, but there's no way to know from here if they took their morning tablets, if they slept okay, or if today was harder than usual. We find out something is wrong when it's too late.

Then I looked at the bigger picture.

According to the India Ageing Report 2023, India's population aged 60 and above is projected to grow from approximately 149 million in 2022 to 347 million by 2050. Meanwhile, HelpAge India's 2024 research found that 59% of surveyed older adults had no access to digital devices, and only 20% felt comfortable using them. The challenge is not just providing more technology. It is making support accessible to people who may struggle with the technology itself.

That changed how I approached the problem. What if older adults did not need to learn another interface? What if the interface was simply a conversation?

I built AuraSenior around that idea: a voice-first eldercare companion that works through familiar messaging channels, understands what an older person says in Hindi or English, and helps connect everyday needs to the people who can act on them.

What it does

AuraSenior is a voice companion that lives inside WhatsApp. The elder gets a morning check-in and replies with a voice note. The agent understands the reply via Amazon Transcribe, responds with a warm Amazon Polly voice, and keeps family informed across RCS, SMS and email.

One conversation can start in WhatsApp and complete an action in another channel. The elder says "BP tablets ran out," and the agent sends a refill card to family over RCS with two tap buttons: Order refill or Remind me later. A tap sends the order straight to the pharmacy via Amazon SES. The elder never sees the coordination. She just talks, and things happen.

Safety-critical steps never go through the model. STOP, fall and help words, approval taps, the pharmacy order, the check-in chain, and the weekly summary are all plain deterministic code. A hardened wording rule runs on every outbound message to enforce it never says "you have" a condition, never names an illness, never changes a dose, never scores health. It only ever nudges: "worth a call today."

AuraSenior does not diagnose illnesses, prescribe medication or independently verify a person's health. It helps people communicate, keeps reported needs organized and makes appropriate follow-up easier.

How we built it

AuraSenior runs end to end on AWS Communication Developer Services. Two Lambda functions handle everything with no public HTTP endpoint. Every inbound event arrives via Amazon SNS or Amazon EventBridge, so the attack surface is zero.

The WhatsApp voice path goes: voice note in, Amazon Transcribe, Amazon Bedrock Converse with Nova 2 Lite and tool use, Amazon Polly voice reply out. AgentCore Memory sits in the middle so the agent remembers context across turns with automatic DynamoDB fallback.

The outbound path runs through a single guard on every send: it checks consent, the WhatsApp 24-hour messaging window, the no-diagnosis wording rule, and an hourly rate cap. If any check fails, the message is dropped with a log trace. No exceptions.

RCS and SMS are sent via AWS End User Messaging with automatic SMS fallback when RCS is not delivered. Family gets interactive cards with tap buttons routed back through the inbound Lambda. Email goes out via Amazon SES with delivery events coming back through Amazon SNS. A CloudWatch error alarm fires and emails on any failed send.

Channel choice is data driven. Each person has a language, a preferred channel and a fallback stored in DynamoDB. The same code runs an India-based elder with a US son or a US-only household without changes.

AWS SAM infrastructure as code provisions the entire stack. Every service is serverless, pay per use, on demand.

Challenges we ran into

Keeping the model out of safety decisions while still sounding warm. I pinned the agent to specific tool functions for logging, looking things up, and requesting refill approval. Every outbound message passes through the wording guard before it goes out. The guard catches patterns like "you have diabetes" or dose changes and blocks them before they leave the system. The prompt teaches the model to defer, not decide, which took rounds of testing to tune.

Making RCS work on deployed Lambda. The runtime boto3 did not ship SendRcsMessage yet, so I pinned the latest boto3 in requirements so the function carries it. The test device sent postback data nested deep in the message body JSON, which meant writing a custom parser to route a tap to the approval handler instead of the model.

One guard, no exceptions. Every send goes through the same outbound path: consent check, messaging window, wording rule, rate cap. I used to have separate paths for alerts and summaries, which meant two places to enforce the same rule. Consolidating to one guard made the logic simpler and safer.

Accomplishments that we're proud of

Voice changes everything. A typed message forces the elder to sit down, open an app, and type. A voice note is instant. She just talks. That shift made the whole interaction feel natural instead of like homework.

Omnichannel is not just convenience. Family does not check WhatsApp every hour, but they see an RCS card instantly and can tap to act without switching apps. The pharmacy needs a structured email with the order details, not a text message. Each channel solves a different problem, and routing between them automatically is what makes the system work.

WhatsApp and RCS running live on AWS. The elder sends a Hindi voice note, Amazon Transcribe understands it, the agent responds, and Amazon Polly speaks back. The family gets an RCS card with tap buttons, and a tap triggers the pharmacy order via Amazon SES. End to end, working on the deployed stack.

327 passing tests. Every safety rule, every channel path, every consent check and the full offline scenario are tested. The test suite runs completely offline with no AWS account needed, with channels and model responses mocked and clearly labeled [SIMULATED].

What we learned

Safety must be deterministic. Early on, the model would say helpful-sounding things that crossed medical lines. Moving all safety logic into plain code with a wording guard on every outbound message made the system trustworthy. The model can talk warmly, but it cannot diagnose, prescribe, or score health.

Transparency beats perfect. I built a demo-replay mode that shows the full flow locally with all AWS channels stubbed and clearly labelled [SIMULATED]. It can run without an AWS account and see exactly what the agent does. When I showed real device footage in the video, The system automatically records simulated=false in the DynamoDB trace for live interactions, making it easy to distinguish real executions from simulated ones.

The channel is the interface. Meeting people where they already are is not just easier for them, it is the only way to reach the hundreds of millions who will never install another app. HelpAge India's 2025 research found that 66% of surveyed older adults found digital technology confusing and 51% feared making mistakes. Voice-first design addresses that fear.

What's next for AuraSenior

Production SMS number. Right now SMS uses the AWS simulator origination number. A 10DLC number is the one remaining step for real SMS delivery.

Launch the RCS agent. RCS delivery is live to registered test devices. Launching with Google and carriers opens it to everyone.

Try AgentCore Runtime. I built the agent loop manually around Bedrock Converse and AgentCore Memory. The new AgentCore Runtime could handle the loop natively and simplify the code.

Field test with real families. The design is based on real family needs, but testing with a wider group will surface edge cases I have not seen yet. A small, consent-based usability study with older adults and family caregivers would measure task completion, ease of use, and user-reported confidence.

Built With

Share this project:

Updates

Submission history