A premium, minimalist Flutter health application bringing world-class healthcare tools to Naga City, Philippines.
MyHealth isn't just another health appโit's a life-saving companion designed with emergency response in mind. Built with a stunning Apple Health-inspired design, every pixel is crafted to deliver critical health information when seconds matter most.
- โก Offline-First - Works without internet for emergency situations
- ๐จ Premium Minimalist - Beautiful, distraction-free interface
- ๐จ Emergency-Focused - Every feature designed for crisis situations
- ๐ Privacy-First - Your health data stays on YOUR device
Comprehensive CVD risk assessment calculator with:
- 11-factor medical questionnaire
- Real-time risk stratification (Low โ Very High)
- Personalized action plans
- Color-coded visual results with circular indicators
Live outbreak tracking with interactive maps:
- Real-time hotspot visualization on OpenStreetMap
- Pulsing animated markers (you can see them breathe!)
- Strict Naga City bounds to keep you focused
- Prevention tips accordion for community action
- One-tap emergency hotline calling
Award-winning stroke identification tool featuring:
- Interactive symptom cards - Tap to select Face, Arms, Speech issues
- Persistent global timer - Starts automatically when symptoms detected
- Cross-screen timer toast - Follows you everywhere (except stroke page)
- Navigation warnings - Prompts before leaving with active timer
- Golden hour education - Learn why 3-4.5 hours matters
- Emergency FAB - One tap to call 911
Your life in a QR code:
- Emergency contact information
- Blood type & allergies
- Medical conditions & medications
- Persistent local storage (Privacy guaranteed!)
- Instant QR generation for first responders
- Edit/View mode toggle
Free health screenings made accessible:
- Cervical cancer screening (21-65 years)
- Prostate health checks (40+ men)
- HIV/AIDS testing (All adults)
- Diabetes screening (At-risk populations)
- Detailed eligibility requirements
- Expandable service cards
Four critical tools in one place:
- Stroke (Purple) - F.A.S.T. brain emergency detection
- Heart Attack (Red) - Cardiac emergency recognition + aspirin guidance
- Dengue Fever (Orange) - Warning signs + medication warnings
- Child Emergency (Teal) - Pediatric alerts with age-specific fever guides
Flutter: 3.x # Cross-platform native performance
Dart: 3.x # Type-safe, modern language
Material: 2.x # Custom theme, Material 3 DISABLEDProvider # Reactive state management
โโ PassportProvider # Health data + SharedPreferences
โโ StrokeTimerProvider # Global timer with cross-screen persistencego_router: ^14.0.0 # Declarative routing with nested layouts
โโ ShellRoute # Persistent bottom navigation
โโ context.go() # Top-level navigation
โโ context.push() # Nested routes| Package | Purpose | Why We Love It |
|---|---|---|
flutter_map |
OpenStreetMap integration | Free, offline-capable maps |
shared_preferences |
Local data persistence | Simple, reliable storage |
google_fonts |
Plus Jakarta Sans typography | Premium font family |
lucide_icons |
Beautiful icon set | 1000+ consistent icons |
qr_flutter |
QR code generation | Fast, customizable QR codes |
url_launcher |
Phone calls & external links | One-tap emergency calling |
Our medically-inspired color scheme speaks the language of healthcare:
// Primary
Medical Blue #0EA5E9 // Trust & professionalism
Off-White BG #F8FAFC // Calm & clean
// Emergency
Alert Red #EF4444 // Heart attack, critical alerts
Stroke Purple #8B5CF6 // Brain emergency indicator
Dengue Orange #F97316 // Fever & infection warnings
Success Green #22C55E // Health achievements
Child Teal #14B8A6 // Pediatric careFont Family: Plus Jakarta Sans
Weights: 400 (Regular), 500 (Medium), 600 (SemiBold), 700 (Bold), 800 (ExtraBold)
Hierarchy:
โโ Hero Headers: 40px, Weight 800
โโ Page Titles: 28px, Weight 800
โโ Card Headers: 20px, Weight 700
โโ Body Text: 16px, Weight 400
โโ Captions: 12px, Weight 500- ๐ฎ Glassmorphism - Floating bottom navigation dock with blur effects
- ๐ Soft Shadows - Layered depth without harshness
- ๐ฏ Large Touch Targets - Emergency buttons are HUGE (minimum 64x64)
- ๐ Generous Whitespace - 24px standard padding for breathing room
lib/
โโโ ๐ฏ main.dart # App entry + custom theme
โโโ ๐บ๏ธ router.dart # GoRouter navigation config
โ
โโโ ๐ providers/
โ โโโ passport_provider.dart # Health passport + persistence
โ โโโ stroke_timer_provider.dart # Global timer state
โ
โโโ ๐ฑ screens/
โ โโโ home_screen.dart # Landing page with service grid
โ โโโ cvd_screen.dart # CVD risk calculator
โ โโโ dengue_screen.dart # Map + hotspots + prevention
โ โโโ identify_hub_screen.dart # Emergency tool selector
โ โโโ stroke_screen.dart # F.A.S.T. + timer + education
โ โโโ heart_attack_screen.dart # Cardiac emergency guide
โ โโโ dengue_identify_screen.dart # Dengue symptom checker
โ โโโ child_emergency_screen.dart # Pediatric alert system
โ โโโ passport_screen.dart # QR code + health data
โ โโโ roadmap_screen.dart # Project timeline
โ โโโ screening_screen.dart # Wellness catalog
โ
โโโ ๐งฉ widgets/
โโโ custom_scaffold.dart # Nav dock + stroke toast
โโโ emergency_guide_screen.dart # Reusable emergency template
โโโ risk_result_sheet.dart # CVD result bottom sheet
# Check versions
flutter --version # Need 3.0+
dart --version # Need 3.0+# 1. Clone & navigate
cd myhealth_mobile
# 2. Get dependencies
flutter pub get
# 3. Run on device
flutter run
# 4. Or build release APK
flutter build apk --release- Use
flutter run -d chromefor web preview (beta) - Hot reload: Press
rin terminal - Hot restart: Press
Rin terminal - Debug mode: Device toolbar with performance overlay
Your health data guardian:
class PassportProvider extends ChangeNotifier {
// Auto-saves to SharedPreferences after every change
Future<void> updateBloodType(String type) async {
_bloodType = type;
await _save();
notifyListeners(); // Triggers UI rebuild
}
// QR-ready data export
String get qrData => jsonEncode({
'name': fullName,
'blood': bloodType,
'allergies': allergies,
// ... more fields
});
}The hero of emergency response:
class StrokeTimerProvider extends ChangeNotifier {
Timer? _timer;
int _seconds = 0;
bool _isActive = false;
void startTimer() {
_isActive = true;
_timer = Timer.periodic(Duration(seconds: 1), (_) {
_seconds++;
notifyListeners(); // Updates timer display AND floating toast
});
}
String get formattedTime {
final mins = (_seconds ~/ 60).toString().padLeft(2, '0');
final secs = (_seconds % 60).toString().padLeft(2, '0');
return '$mins:$secs';
}
}Why this matters: The stroke timer persists across ALL screens, showing a red floating toast everywhere except the stroke page itself. This ensures users never forget they have an active emergency in progress.
We use strict geographical bounds to keep users focused on Naga City:
MapOptions(
initialCenter: LatLng(13.6218, 123.1948), // Naga City center
cameraConstraint: CameraConstraint.contain(
bounds: LatLngBounds(
LatLng(13.58, 123.15), // Southwest bound
LatLng(13.66, 123.25), // Northeast bound
),
),
minZoom: 13.0,
maxZoom: 18.0,
)- User taps Face card โ Timer starts
- Navigate to home โ Red toast appears at bottom
- User sees "SYMPTOM ACTIVE: MM:SS"
- Try to leave stroke page โ Warning dialog
- Call button always visible as FAB
Material 3 is intentionally disabled. Our custom theme in main.dart:
ThemeData(
useMaterial3: false, // Critical!
primaryColor: Color(0xFF0EA5E9),
scaffoldBackgroundColor: Color(0xFFF8FAFC),
fontFamily: 'PlusJakartaSans',
// ... custom button styles, card themes, etc.
)ShellRoutewraps all main routes for persistent nav dock- Use
context.go('/route')for same-level navigation - Use
context.push('/route')for drill-down navigation - Stroke timer toast checks:
if (location != '/identify/stroke')
Only PassportProvider persists data. StrokeTimerProvider is in-memory only by design (emergency timers should reset on app restart).
Our journey to revolutionize healthcare in Naga City:
graph LR
A[โ
Phase 1: Public Beta] --> B[๐ Phase 2: Mobile App]
B --> C[๐ Phase 3: Hospital Integration]
C --> D[๐ Phase 4: National ID Sync]
- โ Phase 1: Public Beta - MVP features (LIVE on web)
- ๐ Phase 2: Mobile App - Flutter native app (YOU ARE HERE!)
- ๐ Phase 3: Hospital Data - Real-time patient records
- ๐ Phase 4: PhilSys Integration - National ID verification
| Service | Number | Availability |
|---|---|---|
| Emergency Hotline | 911 | 24/7 |
| Dengue Hotline | (054) 473-2326 | Office hours |
| City Health Office | (054) 473-2326 | 8AM - 5PM |
Want to make healthcare more accessible? Here's how:
- Fork the repository
- Create a feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
- Follow official Flutter style guide
- Use
flutter format .before committing - Add comments for complex medical logic
- Write tests for critical health calculations
This project is licensed under the MIT License - empowering healthcare innovation worldwide.
Built with โค๏ธ for Naga City
- Design Inspiration: Apple Health, Notion
- Icons: Lucide Icons
- Maps: OpenStreetMap Contributors
- Typography: Plus Jakarta Sans by Tokotype
- Community: Flutter Philippines
Coming soon - App screenshots showcasing the beautiful UI
MyHealth Mobile | Making Healthcare Accessible
Your health, connected. Your life, protected.