Inspiration
Most aid platforms treat people in need as recipients — passive names on a list waiting for charity. But anyone who's been part of a real community knows that the single mom two doors down who skips dinner so her kids eat? She's also the best baker on the block. The neighbor who can't make rent this month? He's been tutoring kids in math for years.
We built Hearth because we believe support shouldn't feel like charity — it should feel like an investment in someone's potential. The name says it all: a hearth is where a community gathers, where warmth is shared. We wanted to build the digital version of that — a place where neighbors don't just ask for help, they show what they bring to the table, and the community rallies behind them.
The core idea: people in need offer a skill they're developing — drawing, cooking, tutoring, music — and the community funds their journey. Supporters don't just donate; they follow along, watch progress through posts and updates, like and comment, and share the story. It turns a one-time transaction into an ongoing relationship.
What it is
Support Tab: Trade Donations for Service
- Real Support: Anyone in need of support can create a request by offering a service they'll contribute back to the community.
- Needs Met Instantly: For more immediate needs like buying dinner, you can offer services like walking the neighbor's dogs.
- Support Real Talent: Subscribe to the success of your fellow community members. Give money to one or multiple days, and see your contributions go to improve the community.
- See Real Growth: Track people's improvement over time with posts with likes and comments.
Community Threads: Interactions
- Real Interactions: Report issues, have a friendly discussion, ask a question for the community members, or share an achievement you're proud of.
- Report Issues: Share real evidence of videos and images of accidents or local issues, and watch your community gather to raise awareness and fix the problem.
- Have Meaningful Discussions: Discuss topics from "favorite songs" to "vacation plans" and deepen your social ties with those living right next door.
- Celebrate Wins: Post milestones you're proud of to foster a culture of mutual encouragement and collective pride.
Map: See what is near you.
- Community Services: Access an interactive map with 900+ real community service organizations across North Carolina.
- Live Updates: Support requests and events appear as dynamic map markers alongside static resources like food pantries and shelters.
- Smart Filtering: Use category filter chips to toggle between resource types or tap a request card to navigate directly to its pin.
- GPS Integration: The map auto-zooms to your current location on open to show you exactly what is available in your immediate vicinity.
Gatherings
- Event System: Create and manage donation drives, resource fairs, outreach events, and community gatherings with ease.
- Full Management: Authenticated users can edit events with custom images, locations, categories, and descriptions.
- Search & Filter: Everyone can browse and search the local calendar to find ways to get involved.
- Visual Coordination: All events are synchronized with the map to ensure community resources are easy to find.
Hearths (Local Communities)
- Hyper-Local Hubs: Join or create a Hearth upon signup based on your GPS proximity within a ~5 mile radius.
- Community Stats: Each Hearth displays its member count, geographic radius, and creation date.
- Foundation for Growth: Designed as the primary layer for localized alerts, discussion threads, and neighbor-to-neighbor support.
Profile
- Your Impact Tracked: Monitor your past donations and support requests through a centralized history.
- Personal Reputation: Showcases the skills you've shared and the neighbors you've helped within your Hearth.
- Skill Management: You are free to update your offered services and manage your active requests in real-time.
* Visual Progress: See the tangible ripple effect of your generosity and track your growing status as a community pillar.
How we built it
Architecture
| Layer | Technology |
|---|---|
| Mobile App | React Native, Expo SDK 54, Expo Router (file-based) |
| State & Data | Redux Toolkit, RTK Query (caching, optimistic updates, tag invalidation) |
| Backend API | Node.js, Express.js, TypeScript |
| Database | Cloud Firestore (collections: users, supportRequests, requestPosts, events, transactions, hearths) |
| Auth | Firebase Auth (client) + Firebase Admin SDK (server token verification) |
| Payments | Stripe (server-side PaymentIntents + client CardForm) |
| Maps & Location | React Native Maps, expo-location, Google Geocoding API |
| Media | expo-image-picker, expo-av (video playback), Firebase Storage (uploads) |
| Sharing | react-native-view-shot (screenshot generation), expo-sharing, expo-media-library |
| Data Pipeline | Python, Google Gemini API (AI-powered scraping & enrichment), OpenStreetMap Nominatim (geocoding) |
| Design | Custom design system (HearthColors, HearthTypography, HearthSpacing) with Reanimated animations |
Frontend
Built with React Native and Expo SDK 54 using Expo Router for file-based navigation. The entire codebase is TypeScript.
The UI follows a custom design system (hearth-theme.ts) built around a warm, earthy palette — forest greens, cream backgrounds, accent oranges, and soft shadows — designed to feel like a community space, not a corporate tool. Animations use react-native-reanimated with useReducedMotion fallbacks for accessibility.
State management uses RTK Query with a custom baseQueryWithReauth that automatically retries on 401/403 by refreshing the Firebase token — so users never get randomly logged out mid-session.
Media handling is layered: expo-image-picker for capture, uploadContentMedia for Firebase Storage uploads, expo-av for video playback in posts, and react-native-view-shot + expo-sharing for generating and distributing shareable donation cards.
Backend
A Node.js / Express REST API in TypeScript with six route groups: auth, requests, posts, events, payments, and hearths.
Firebase Admin SDK verifies ID tokens via requireAuth middleware. Stripe handles payment intents server-side. Firestore serves as the primary database with collections for users, support requests, posts (decoupled from requests for independent querying), events, transactions, and hearths.
Data Pipeline
A suite of Python scripts powers the community resource dataset:
scrape.py— Incremental web scraper that uses the Google Gemini API to extract structured service records from organization websites, with deduplication and progress trackingenrich.py— Geocodes addresses using Google Geocoding API and OpenStreetMap Nominatim, with optional Gemini-powered rescraping for thin recordsvalidate.py— Quality report flagging missing coordinates, duplicates, and placeholder dataconvert_csv_to_json.py— Builds the app'smap-points.jsondataset with NC bounding-box filteringfetch_org_images.py— Scrapes og:image metadata from organization pages and uploads to Firebase Storage
This pipeline produced 900+ verified community service locations that populate the map on launch.
Challenges we ran into
We initially decided to pursue an app for the betterment of the community, which especially included donating to help others. However, we realized that most people downloading the app would not be donators, rather people who were in need and figured that we needed to think a product perspective.
Thus, we identified incentives to bring donators & community at large into the app.
We decided to pursue a platform that went beyond just donating. That is, we instead focused our app on nurturing "skills." People in need could show off their skills and continue to develop their skills in exchange for help. They would be able to show their improvement in singing, drawing, guitar, etc. and their audience would have a reason to follow along the journey with them.
We also looked into building a larger part of the community aspect of the app with community threads and especially alerts signifying potential problems that could be discussed, resolved, and at the very least acknowledged by the entire community.
Accomplishments that we're proud of
- The skill-exchange model — We didn't build another GoFundMe clone. The "offer a skill, get support" loop creates a reason for both sides to engage, and the post/like/comment system keeps supporters invested in the creator's journey.
- End-to-end payments with social amplification — Real Stripe payments flow into a personalized shareable card that supporters can post to Instagram Stories or messages. Each donation becomes free marketing for the platform.
- 900+ real community resources on the map — Not mock data. Our Gemini-powered Python pipeline scraped, enriched, geocoded, and validated real NC organizations, and the map renders them alongside live user-generated requests and events.
- A social layer that works — Posts with images/video, likes, comments, trending badges, and creator-only editing — all backed by a decoupled Firestore collection with dedicated API endpoints. We intentionally separated posts from the request document for reliability and independent querying after running into issues with nested arrays.
- A design system that feels human — Forest greens, warm creams, earthy oranges, handcrafted animations with reduced-motion support. Every screen was designed to feel like a community space, not an enterprise dashboard.
- Auth that doesn't get in the way — Firebase token auto-refresh (via
onIdTokenChanged, periodic refresh, and AppState listeners) plus RTK Query's automatic 401 retry means users never get unexpectedly logged out.
What we learned
- Product thinking matters more than features — Our biggest breakthrough wasn't technical; it was realizing that a donation app without incentives for donors is dead on arrival. The skill-exchange model changed everything about how we designed the UX.
- Firestore's flexibility is a double-edged sword — Nested arrays inside documents (our first approach for posts) seemed clean but became unreliable at scale. Decoupling posts into their own collection with
request_idreferences was the right call, even though it meant rewriting the entire social layer mid-hackathon. - Shareable content is a growth engine — Building the view-shot → share sheet pipeline was non-trivial, but the ability for every payment to become an Instagram Story is the kind of organic loop that makes a community app actually grow.
- AI-powered data pipelines are a superpower — Using Gemini to extract structured records from unstructured organization websites let us populate 900+ real locations in hours instead of weeks of manual data entry.
- Small UX details compound — Auto-generated titles, GPS-inferred locations, animal avatar fallbacks, pull-to-refresh, keyboard-avoiding modals — none of these are headline features, but together they make the difference between an app people tolerate and one they enjoy using.
What's next for Hearth
- Community threads and alerts — The Hearth tab is the foundation for local discussion boards where neighbors can flag issues, share updates, and coordinate in real time
- Push notifications — Alerts for nearby support requests, event reminders, and when someone comments on or likes your post
- Real-time chat — Direct messaging between supporters and request creators to coordinate skill exchanges
- Admin moderation dashboard — Web-based tool for reviewing and approving requests and events at scale
- Skill verification and badges — Let creators earn community-verified skill badges as they post updates and receive positive engagement
- Impact analytics — Community-wide dashboards showing total funds raised, meals sponsored, skills developed, and neighbors connected
- Google and Apple social login — Reducing signup friction to a single tap
Built With
- cloudfirestore
- expo.io
- express.js
- figma
- firebaseauthentication
- firebasestorage
- gemini
- node.js
- python
- reactnative
- reactnativemaps
- reduxtoolkit
- rtkquery
- stripe
- typescript

Log in or sign up for Devpost to join the conversation.