๐Ÿ† $15K Funding Awarded

SmartDose

Intelligent medication adherence system combining IoT hardware and mobile technology to prevent medication errors and save lives

$15K Funding Awarded
Top 20% of 50+ Submissions
4 Team Members
UMich 2023-2024

The Critical Problem

Medication non-adherence is a silent epidemic causing preventable deaths and massive healthcare costs

๐Ÿ’€
125K
Deaths annually from medication errors
๐Ÿ’ฐ
$300B
Annual healthcare cost burden
๐Ÿ“Š
50%
Patients are non-adherent
๐Ÿฅ
33%
Hospital readmissions preventable

Meet Margaret

Our primary user persona represents millions of seniors struggling with medication management

Margaret Thompson, 72

6 daily medications
Lives alone in Detroit
Daughter Sarah lives 200 miles away
Frequently forgets medications

User Journey

How SmartDose transforms medication management

1

Setup

Margaret's daughter configures the SmartDose device with medication schedule

2

Detection

Smart sensors detect when pills are removed from the container

3

Notification

Real-time alerts sent to Margaret and her daughter via mobile app

4

Tracking

Adherence data logged and analyzed for patterns and insights

5

Care

Healthcare providers access reports for better treatment decisions

The SmartDose Device

Explore our intelligent hardware solution with interactive 3D visualization

SmartDose
LCD Display
Real-time status and alerts
ESP32 MCU
240MHz dual-core processor
Sensor Array
Weight & IR break-beam sensors
BLE Antenna
Bluetooth 5.0 connectivity
Battery
3000mAh, 90-day runtime

Mobile App Experience

Intuitive interface for patients and caregivers

Dashboard

98%
85%
Today
Next: Metformin in 2h 15m

Schedule

Today
Lisinopril - 8:00 AM
Metformin - 12:00 PM
Metformin - 6:00 PM
Atorvastatin - 9:00 PM

Alert

2:15 PM

Missed Dose Detected

Margaret hasn't taken her 2:00 PM Metformin

History

Last 7 Days
90%
85%
95%
80%
88%
92%
85%
MonTueWedThuFriSatSun

System Architecture

Scalable cloud-native architecture with real-time data processing

ESP32
BLE 5.0
React Native
HTTPS
API Gateway
Lambda
DynamoDB
Cognito
SNS

Technical Specifications

Detailed hardware and software specifications

Hardware

Processor ESP32 240MHz dual-core
Connectivity Bluetooth 5.0 LE
Weight Sensor HX711 (ยฑ0.1g accuracy)
Motion Detection IR break-beam sensor
Temperature DS18B20 digital sensor
Real-time Clock DS3231 RTC module

Connectivity

Protocol Custom GATT profile
Services 3 BLE services
Characteristics 8 GATT characteristics
MTU Size 512 bytes
Range 10m indoor
Latency <500ms

Power

Battery 3000mAh Li-ion
Runtime 90 days typical
Deep Sleep 8ยตA current draw
Active Mode 120mA peak
Charging USB-C, 2A fast charge
Efficiency 98% detection accuracy

Data

Primary Key userId (partition key)
Sort Key timestamp
GSI DeviceIndex
Retention 2 years
Backup Point-in-time recovery
Encryption AES-256 at rest

Key Metrics & Achievements

Quantifiable results and technical performance

$15K
Funding Awarded
<500ms
BLE Latency
98%
Detection Accuracy
90
Day Battery Life
4
Team Members
Top 20%
Competition Ranking

Project Timeline

9-month journey from ideation to funding

Sep 2023

Ideation

Identified medication adherence problem through user research and market analysis

Oct 2023

Team Formation

Assembled interdisciplinary team with hardware, software, and business expertise

Dec 2023

Hardware Prototype

Built first working prototype with ESP32, sensors, and BLE connectivity

Feb 2024

App MVP

Developed React Native mobile app with core features and AWS backend

Mar 2024

User Testing

Conducted 8 user testing sessions with seniors and caregivers

Apr 2024

Funding Pitch

Presented to university innovation committee and industry judges

May 2024

$15K Awarded

Secured funding as top 20% of 50+ submissions in university competition

Technical Challenges

Complex problems solved through innovative engineering

BLE Reliability

Implemented custom GATT profile with connection recovery and data buffering to ensure 99.9% uptime

Power Optimization

Achieved 90-day battery life through deep sleep modes, sensor duty cycling, and efficient BLE protocols

Real-time Sync

Built event-driven architecture with Lambda and SNS for instant notifications across multiple devices

Technologies Used

Modern tech stack for scalable IoT solution

Mobile & Frontend

React Native JavaScript Redux

Backend & Cloud

Node.js AWS Lambda API Gateway DynamoDB Cognito SNS

Hardware & IoT

ESP32 BLE 5.0 HX711 C/C++ Arduino
/* Mobile App Demo Styles */ .phone-demo { display: flex; justify-content: center; margin: 3rem 0; } .phone-frame { width: 280px; height: 560px; background: #1a1a1a; border-radius: 30px; padding: 20px; position: relative; box-shadow: 0 20px 40px rgba(0, 0, 0, 0.3); } .phone-notch { width: 120px; height: 25px; background: #1a1a1a; border-radius: 0 0 15px 15px; position: absolute; top: 0; left: 50%; transform: translateX(-50%); z-index: 10; } .phone-screen { width: 100%; height: 100%; background: var(--bg-primary); border-radius: 20px; overflow: hidden; position: relative; } .screen { position: absolute; top: 0; left: 0; width: 100%; height: 100%; padding: 20px; opacity: 0; transition: opacity 0.5s ease; } .screen.active { opacity: 1; } .screen-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem; padding-bottom: 1rem; border-bottom: 1px solid rgba(13, 115, 119, 0.2); } .screen-header h3 { color: var(--text-primary); font-size: 1.2rem; } .battery-indicator, .date, .alert-time, .period { color: var(--accent-teal); font-size: 0.9rem; } .adherence-ring { width: 150px; height: 150px; margin: 2rem auto; position: relative; } .ring-progress { width: 100%; height: 100%; border-radius: 50%; background: conic-gradient(var(--accent-teal) 0deg, var(--accent-teal) calc(var(--progress) * 3.6deg), var(--bg-secondary) calc(var(--progress) * 3.6deg)); display: flex; align-items: center; justify-content: center; } .ring-center { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; color: var(--text-primary); font-size: 1.5rem; font-weight: 700; } .next-dose { text-align: center; color: var(--text-secondary); display: flex; align-items: center; justify-content: center; gap: 0.5rem; } .medication-list { display: flex; flex-direction: column; gap: 1rem; } .med-item { display: flex; align-items: center; gap: 1rem; padding: 1rem; background: var(--bg-secondary); border-radius: 10px; } .med-item.completed i { color: var(--accent-teal); } .med-item.pending i { color: var(--text-muted); } .alert-content { text-align: center; padding: 2rem 0; } .alert-content i { font-size: 3rem; color: var(--accent-coral); margin-bottom: 1rem; } .alert-content h4 { color: var(--text-primary); margin-bottom: 0.5rem; } .alert-content p { color: var(--text-secondary); margin-bottom: 2rem; } .alert-actions { display: flex; gap: 1rem; justify-content: center; } .btn-taken, .btn-remind { padding: 0.5rem 1rem; border: none; border-radius: 8px; cursor: pointer; font-size: 0.8rem; } .btn-taken { background: var(--accent-teal); color: white; } .btn-remind { background: var(--bg-secondary); color: var(--text-secondary); border: 1px solid var(--text-muted); } .adherence-chart { margin-top: 2rem; } .chart-bars { display: flex; justify-content: space-between; align-items: end; height: 120px; margin-bottom: 0.5rem; } .bar { width: 25px; background: var(--accent-teal); border-radius: 4px 4px 0 0; position: relative; display: flex; align-items: end; justify-content: center; padding-bottom: 5px; } .bar span { font-size: 0.7rem; color: white; } .chart-labels { display: flex; justify-content: space-between; font-size: 0.7rem; color: var(--text-muted); } /* System Architecture Styles */ .architecture-diagram { display: flex; flex-direction: column; align-items: center; gap: 2rem; max-width: 800px; margin: 0 auto; } .arch-layer { display: flex; gap: 2rem; justify-content: center; flex-wrap: wrap; } .arch-component { background: var(--bg-secondary); border: 2px solid var(--accent-teal); border-radius: 15px; padding: 1.5rem; text-align: center; min-width: 120px; transition: transform 0.3s ease; } .arch-component:hover { transform: translateY(-5px); } .arch-component i { font-size: 2rem; color: var(--accent-teal); margin-bottom: 0.5rem; display: block; } .arch-component span { color: var(--text-primary); font-weight: 600; } .arch-arrow { display: flex; flex-direction: column; align-items: center; color: var(--accent-coral); } .arch-arrow i { font-size: 1.5rem; margin-bottom: 0.5rem; } .arch-arrow span { font-size: 0.8rem; color: var(--text-muted); } /* Technical Specifications Styles */ .specs-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 2rem; } .spec-category { background: var(--bg-secondary); border-radius: 15px; padding: 2rem; border: 1px solid rgba(13, 115, 119, 0.2); } .spec-category h3 { color: var(--text-primary); margin-bottom: 1.5rem; display: flex; align-items: center; gap: 0.5rem; } .spec-category h3 i { color: var(--accent-teal); } .spec-list { display: flex; flex-direction: column; gap: 1rem; } .spec-item { display: flex; justify-content: space-between; align-items: center; padding: 0.75rem 0; border-bottom: 1px solid rgba(13, 115, 119, 0.1); } .spec-item:last-child { border-bottom: none; } .spec-label { color: var(--text-secondary); font-size: 0.9rem; } .spec-value { color: var(--text-primary); font-weight: 600; font-family: 'JetBrains Mono', monospace; font-size: 0.85rem; } /* Responsive Design */ @media (max-width: 768px) { .architecture-diagram { gap: 1rem; } .arch-layer { gap: 1rem; } .arch-component { min-width: 100px; padding: 1rem; } .specs-grid { grid-template-columns: 1fr; } } /* User Persona Styles */ .persona-card { background: var(--bg-secondary); border-radius: 20px; padding: 3rem; display: flex; align-items: center; gap: 3rem; max-width: 800px; margin: 0 auto; border: 1px solid rgba(13, 115, 119, 0.2); } .persona-avatar { font-size: 6rem; color: var(--accent-teal); } .persona-info h3 { font-size: 1.8rem; margin-bottom: 1.5rem; color: var(--text-primary); } .persona-details { display: grid; gap: 1rem; } .persona-item { display: flex; align-items: center; gap: 1rem; color: var(--text-secondary); } .persona-item i { color: var(--accent-coral); width: 20px; } /* User Journey Styles */ .journey-steps { display: flex; justify-content: space-between; gap: 2rem; flex-wrap: wrap; } .journey-step { flex: 1; min-width: 200px; text-align: center; position: relative; } .journey-step:not(:last-child)::after { content: ''; position: absolute; top: 30px; right: -1rem; width: 2rem; height: 2px; background: var(--accent-teal); } .step-number { width: 60px; height: 60px; border-radius: 50%; background: linear-gradient(135deg, var(--accent-teal), var(--accent-coral)); color: white; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; font-weight: 700; margin: 0 auto 1.5rem; } .step-content h4 { font-size: 1.2rem; margin-bottom: 0.5rem; color: var(--text-primary); } .step-content p { color: var(--text-secondary); font-size: 0.9rem; } /* 3D Device Styles */ .device-container { text-align: center; } .device-controls { margin-bottom: 2rem; display: flex; justify-content: center; gap: 1rem; } .control-btn { background: var(--bg-secondary); border: 1px solid var(--accent-teal); color: var(--text-primary); padding: 0.75rem 1.5rem; border-radius: 8px; cursor: pointer; transition: all 0.3s ease; display: flex; align-items: center; gap: 0.5rem; } .control-btn:hover { background: var(--accent-teal); transform: translateY(-2px); } .device-3d { width: 400px; height: 400px; margin: 0 auto; perspective: 1000px; position: relative; cursor: grab; } .device-3d:active { cursor: grabbing; } .device-box { width: 200px; height: 120px; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%) rotateX(-15deg) rotateY(25deg); transform-style: preserve-3d; animation: rotate 10s infinite linear; } @keyframes rotate { from { transform: translate(-50%, -50%) rotateX(-15deg) rotateY(25deg); } to { transform: translate(-50%, -50%) rotateX(-15deg) rotateY(385deg); } } .face { position: absolute; border: 2px solid var(--accent-teal); border-radius: 10px; background: linear-gradient(135deg, var(--bg-secondary), #2a3441); box-shadow: 0 0 20px rgba(13, 115, 119, 0.3); } .front, .back { width: 200px; height: 120px; } .front { transform: translateZ(40px); display: flex; align-items: center; justify-content: center; } .back { transform: translateZ(-40px) rotateY(180deg); } .right, .left { width: 80px; height: 120px; } .right { transform: rotateY(90deg) translateZ(40px); } .left { transform: rotateY(-90deg) translateZ(160px); } .top, .bottom { width: 200px; height: 80px; } .top { transform: rotateX(90deg) translateZ(60px); } .bottom { transform: rotateX(-90deg) translateZ(60px); } .lcd-display { background: #000; color: var(--accent-teal); padding: 0.5rem 1rem; border-radius: 5px; font-family: 'JetBrains Mono', monospace; font-size: 0.9rem; border: 1px solid var(--accent-teal); } .hotspot { position: absolute; z-index: 10; } .hotspot-dot { width: 12px; height: 12px; border-radius: 50%; background: var(--accent-coral); animation: pulse-dot 2s infinite; cursor: pointer; } @keyframes pulse-dot { 0%, 100% { transform: scale(1); box-shadow: 0 0 0 0 rgba(233, 69, 96, 0.7); } 50% { transform: scale(1.2); box-shadow: 0 0 0 10px rgba(233, 69, 96, 0); } } .hotspot-tooltip { position: absolute; bottom: 20px; left: 50%; transform: translateX(-50%); background: var(--bg-secondary); color: var(--text-primary); padding: 0.5rem 1rem; border-radius: 8px; font-size: 0.8rem; white-space: nowrap; opacity: 0; pointer-events: none; transition: opacity 0.3s ease; border: 1px solid var(--accent-teal); z-index: 100; } .hotspot:hover .hotspot-tooltip { opacity: 1; } /* Responsive Design */ @media (max-width: 768px) { .persona-card { flex-direction: column; text-align: center; padding: 2rem; } .persona-avatar { font-size: 4rem; } .journey-steps { flex-direction: column; align-items: center; } .journey-step:not(:last-child)::after { display: none; } .device-3d { width: 300px; height: 300px; } .device-controls { flex-direction: column; align-items: center; } }