Inspiration
Finding reliable, up-to-date healthcare resources—whether it’s an urgent care clinic, a 24-hour pharmacy, or a mental health professional—can be incredibly stressful, especially when you are in an unfamiliar area or dealing with an emergency. Traditional search engines and map apps are often cluttered with irrelevant ads, outdated hours, and unverified information. We built HealthPin to cut through the noise, providing a beautifully simple, community-vetted, and location-aware directory of essential health services.
What it does
HealthPin is a crowdsourced mobile application that instantly connects users to nearby, verified healthcare resources.
- Smart Location Sorting: It automatically detects the user's location and serves up a real-time, distance-sorted feed of nearby facilities (down to the meter).
- Community Crowdsourcing: Users and designated "Field Workers" can easily add new clinics or water stations to the map. By utilizing a "Use Current Location" feature, the app securely locks in precise GPS coordinates to eliminate data-entry errors.
- Trust & Verification: Users can upvote helpful resources, and our system flags officially verified providers with distinct badges so users know exactly who to trust.
- Frictionless UX: The app features a highly accessible, buttery-smooth interface where users can view detailed information, copy contact details with a single tap, and seamlessly push exact coordinates to Google or Apple Maps for live turn-by-turn navigation.
How we built it
We built the frontend entirely in Flutter using Dart, focusing heavily on a clean, modular architecture.
- UI/UX: We heavily utilized Flutter's
CustomScrollViewand Slivers to create dynamic, collapsible headers with parallax effects and smooth scroll physics. We also implemented custom animations for community interactions and custom painters to generate the map-grid placeholders. - Location Services: We used the
geolocatorpackage, combining cached last-known positions with background fresh-locks. This ensures the UI is snappy and calculates dynamic distances instantly without hanging while waiting for GPS signals. - Backend Integration: We structured our services to stream data in real-time. This allows the app to instantly reflect new facility submissions from Field Workers or community upvotes without requiring a manual refresh.
- Accessibility: We baked
Semanticsand accessibility features directly into our custom widgets so the app is usable by everyone, including those relying on screen readers.
Challenges we ran into
One of our biggest hurdles was handling GPS states gracefully. Initially, our resource list would hang on a "Locating..." state if the device struggled to get a fresh GPS lock indoors. We had to completely rethink our location logic to instantly grab cached coordinates while silently fetching a fresh lock in the background. We also had to untangle our error states—ensuring that a failed location ping or denied permission didn't accidentally wipe out the entire screen of loaded resource data!
Additionally, orchestrating complex UI elements—like calculating the exact opacity for the SliverAppBar title based on scroll offset and building interactive layers over custom map painters—required a lot of fine-tuning to get the math exactly right.
Accomplishments that we're proud of
- The Polished UI: We are incredibly proud of how the app looks and feels. From the custom UI components to the subtle haptic feedback and scale animations, it feels like a production-ready application.
- Resilient State Management: We successfully decoupled our data-loading states from our location-fetching states, resulting in a highly robust user experience that degrades gracefully if permissions are denied or GPS completely fails.
- Frictionless Data Entry: Engineering the "Use Current Location" coordinate-fetching tool for the submission form to ensure our crowdsourced data remains highly accurate.
What we learned
- Mastering Slivers: We deepened our understanding of Flutter's advanced scrolling mechanics, particularly
SliverAppBar,FlexibleSpaceBar, and dynamic layout constraints. - Hardware Interfacing: We learned that "failing silently" and showing cached data is almost always better than blocking the user with a loading spinner when dealing with hardware sensors like GPS.
- State & Stream Management: We gained valuable experience in handling and disposing of Dart
StreamSubscriptions to prevent memory leaks in a real-time application.
What's next for HealthPin
- AI-Powered Search: Integrating the Gemini API to allow users to search for resources using natural language (e.g., "Where is the closest clinic open right now that has pediatric care?").
- Expanded User Roles: Adding deeper gamification and verification tiers for Field Workers to reward high-quality community contributions.
- Offline Mode: Caching the local city's database on the device so users can still find emergency resources even if cellular networks are down during a crisis.
Log in or sign up for Devpost to join the conversation.