Inspiration

During Homecoming week at Howard, we walked past the small Black-owned businesses along Georgia Avenue and saw the real story. Shop owners and local organizers are the heartbeat of our community, but they miss out on critical grant money because the application process means fighting through 10-page web portals, writing long narrative essays, and building complex budgets. We built Civic Grant Finder so that loving our community means building tools that protect it.

What it does

Civic Grant Finder turns a complex grant search into a simple text message. An organizer texts our Telegram bot in plain language, such as “I run a youth basketball camp and need money for jerseys.” The system extracts the category, the need, and the amount, matches them against our grant database, and replies with the matching grant’s name, its deadline, and a pre-written opening paragraph so the organizer never faces a blank page. Meanwhile, city organizers watch incoming requests appear live on a Next.js dashboard.

How we built it

Organizers message a Telegram bot, which sends the text through an Ngrok tunnel to a FastAPI webhook. LangChain with Google Generative AI extracts structured variables from the conversation and drafts the opening essay paragraph. Local FastEmbed vector embeddings then search our grants.json database, so every result is a verified record. Finally, the backend pushes updates to the Next.js Live Command Center over Server-Sent Events (SSE).

Accomplishments that we’re proud of

Reduced a 10-page grant portal to a single text message. Built a live dashboard that updates in real time without refreshing the page. Grounded every match in verified records, so the system returns zero hallucinated grants. Replaced a single-client queue with a broadcast stream that lets multiple dashboard clients watch requests at once.

What we learned

Local embeddings deliver fast, grounded search, while the LLM is most useful for translating everyday language into municipal categories and drafting text. We also learned that designing around the people who will actually use the tool, busy grassroots organizers, shapes every technical decision.

What’s next for Civic Grant Finder

Expand the AI extraction prompt and grants.json schema to filter by legal status, adding fields like requires_us_citizenship: false and accepts_fiscal_sponsorship: true so non-citizens can find funding. Replace the static JSON database with a live API that pulls real-time micro-grants from local municipalities.

Built With

  • fastapi
  • fastembed
  • generativeai
  • langchain
  • llm
  • next.js
  • ngrok
  • python
  • restapi
  • sse
  • telegram
Share this project:

Updates

Submission history