Inspiration
Gratitude came from a practical problem: local opportunity data exists, but it’s scattered across city pages, university calendars, nonprofits, social feeds, and event platforms. For most people, especially students, newcomers, and families balancing limited time, finding accurate and relevant local information is too hard.
We were especially motivated by four real community friction points:
- People who need support often can’t find it fast enough.
- Community organizations struggle to be discovered by the right audience.
- Local opportunities are fragmented by platform and format.
- Existing tools prioritize generic search over neighborhood-level context. The goal became clear: create one trusted, actionable interface where a user can answer “What can I do nearby right now?” and “Where can I get help nearby right now?” in minutes, not hours. Gratitude is also intentionally inclusive: support for language and cultural filters, newcomer-friendly resource discovery, and broader civic awareness were treated as core features rather than optional add-ons.
What it does
Gratitude is a neighborhood discovery platform designed to make local support and opportunities easier to find, trust, and act on. The app organizes community information into clear tabs so users can quickly browse nearby:
- Events
- Volunteer opportunities
- Food banks and donation resources
- Community organizations
- Help & Support services (clinics, legal aid, shelters, translators/interpreters, newcomer guides)
- Connections (nearby users for networking and collaboration)
- Civics & Politics (upcoming elections, candidates, local committees, and eligibility guidance)
The experience is map-first and filter-driven, so users can sort by distance, relevance, or date and switch between list/map/split views without losing context. Results include source attribution, confidence indicators, and deduplication safeguards to reduce noise and misinformation.
The platform is built to remain useful even when AI is unavailable by relying on scraper/API pipelines and rule-based categorization. AI is used as an enhancement layer for structuring messy data, improving classification quality, and filling gaps when deterministic sources are thin. The App does have a built-in AI to help answer questions and find resources for you as well.
The application is incredibly customizable, allowing users to change the language of the app.
How we built it
Gratitude was built as a full-stack web platform with reliability-first architecture.
Frontend
- React + TypeScript UI with a two-column, neighborhood-style layout.
- Persistent sidebar navigation and tab-specific filter panels.
- List/Map/Split view modes with synchronized filtering. -Accessibility controls for appearance, contrast, text size, and reduced motion.
- Language switching in settings with interface-level persistence.
- Local save/bookmark flow for user-selected items.
Backend
- Node.js + Express API layer handling data aggregation, filtering, and enrichment.
- Local-first caching strategy to reduce repeated external calls and improve performance.
- Structured endpoint model for events, organizations, support resources, connections, civics, videos, and artists.
- Source-aware normalization pipeline that preserves provenance (source_url, timestamps, confidence).
Data pipeline
- API-first where possible, scraper fallback when APIs are missing/incomplete.
- Deterministic ingestion captures raw fields (title, date, location, source, description, tags).
- Normalization for dates, coordinates, and categories.
- Duplicate detection and consolidation across overlapping feeds.
- Relevance and quality filtering to reduce off-topic content leaks.
AI integration (enhancement layer, not hard dependency)
- AI-assisted classification into canonical types/audiences/subcategories.
- AI repair flow for malformed descriptions/addresses/date text.
- AI fallback search when no results are found from primary sources.
- Multi-provider strategy for resiliency, with dedupe between providers.
- Review flags (needs_review) when confidence is low.
Map + geo behavior
- Coordinates validation and geocoding fallback for address-only records.
- Marker rendering for all valid-located entities, with clustering support.
- Shared filter engine between map and list to prevent data mismatch.
- Radius-mode defaults and viewport-mode optional behavior.
- Current-location map pin support for user orientation.
Community and networking
- Connections tab with profile discovery by radius/audience/skills/industry.
- Direct messaging primitives with privacy gates.
- Community posts and lightweight groups for local engagement.
Civics module
- Upcoming-election-first listing behavior.
- Candidate/office/committee schemas with source tracking.
- Eligibility guidance surfaced in-app with authoritative tool links.
- Neutral, factual presentation constraints and confidence labeling.
Challenges we ran into
Data Fragmentation: Syncing disparate sources (government PDFs, community boards, and outdated websites) into a unified schema.
The "Hallucination" Hurdle: Ensuring AI only acts as a filter/formatter rather than generating fictional resources—maintaining a "source of truth" via original URLs was key.
Performance: Balancing heavy map renders with fast load times on older mobile devices.
Accomplishments that we're proud of
The "Split-View" UX: Successfully merging map-based exploration with detailed list-based filtering.
Resilience: Building a system that prioritizes local data, making the app snappier on repeat visits.
Deduplication Logic: Creating an algorithm that recognizes when three different listings are actually the same local food bank.
What we learned
We discovered that for social impact tools, trust is the primary currency. If a user travels to a location and the service is closed, we lose that trust. This taught us to prioritize "verified" timestamps and direct source links over automated summaries.
What's next for Gratitude Afropix '26
The 100+ Language Initiative: Leveraging our dedicated network of translators to localize the interface and resource categories into over 100 languages. This ensures that language barriers never stand between a community member and their basic necessities.
Community Vouching: Implementing a "Check-in" feature where users can verify if a service (like a food pantry or clinic) is currently active and stocked.
Offline First Expansion: Enhancing our local cache system so that users can access their "saved" services and nearby maps even when they run out of data or lose signal.
Direct API Integrations: Moving beyond scraping to partner with local municipal databases for real-time updates on shelter availability and emergency services.
Log in or sign up for Devpost to join the conversation.