cd /news/developer-tools/needfeed-safe-in-kind-mutual-aid-wit… Β· home β€Ί topics β€Ί developer-tools β€Ί article
[ARTICLE Β· art-121927] src=dev.to β†— pub= topic=developer-tools verified=true sentiment=↑ positive

NeedFeed 🀝 β€” Safe, In-Kind Mutual Aid Without Cash or Tagging

A developer built NeedFeed, a hyperlocal mutual aid platform that facilitates in-kind donations without cash transactions or public tagging of beneficiaries. The platform uses a two-party verification cycle where givers earn badges only after stewards confirm receipt, and it integrates with Snowflake and Google Gemini AI for metrics and auto-tagging.

read8 min views2 publishedSep 7, 2026

This is a submission for the Weekend Challenge: Generosity Edition.

Prize categories: Best Use of Snowflake Β· Best Use of Google AI

Most charity tech solves the wrong problem.

It makes it easier to move money β€” when the actual friction is moving things. It makes it easier to identify people in need β€” when the actual requirement is protecting them. It makes it easier to claim generosity β€” when the actual value is proving it.

Three failure modes, and they all start before a single dollar changes hands:

Cash is a liability, not a feature. When the need is "10 kg of rice" but the mechanism is "send β‚Ή500," you've introduced an unnecessary conversion step β€” and with it every failure mode: fee skimming, diversion, a middleman buying the wrong thing entirely.

Tagging is surveillance in a helpful mask. "Tag someone who needs this!" sounds generous. It publicly identifies a vulnerable person to a stranger, with no consent, no accountability, and no recourse.

Self-reported badges are meaningless. Most platforms award "generous donor" status when someone says they gave. No one checks. The badge becomes a participation trophy, not a trust signal.

NeedFeed exists because charity does not have to mean money β€” and almost everyone has something they can give.

NeedFeed is a hyperlocal, in-kind mutual aid platform. Neighbors coordinate real, physical help β€” food, clothing, medical supplies, school materials, volunteer time β€” without ever touching cash, without publicly tagging vulnerable people, and without asking anyone to just trust the process.

The unit of generosity is a physical item: a warm sweater, a walking cane, a bag of rice.

The unit of trust is a verified handoff β€” not a payment receipt, not a checkbox.

1. Strictly in-kind, zero cash, ever.

Food, clothing, medicine, mobility aids, school supplies, shelter materials, hygiene kits, and volunteer time only. There is no "donate cash" button, and there never will be.

2. Open pledge pool, no direct tagging.

A posted need enters a public pledge pool. Any neighbor can pledge to fulfill it, but no one gets a private link, a DM, or a direct connection to the beneficiary.

3. Steward representation, with recorded consent.

People who can't represent themselves online β€” no phone, no literacy, no connectivity β€” are represented by a verified local steward who opens a persistent Case Page on their behalf, only after a recorded verbal consent clip, not a checkbox.

4. Two-party verification cycle.

A giver pledges, marks the item "Handed Off." Only after the steward independently confirms receipt with the beneficiary does the giver earn their Honor Badge. A mismatch is flagged and auditable.

The badge means something because it costs something to earn.

Run locally β€” zero API keys required:

git clone https://github.com/Pritam-mb/charity.git
cd charity
npm install
npm run dev

The local auto-tagger and local metric engine stand in for Gemini and Snowflake respectively. To connect the real services, add keys to .env.local:

SNOWFLAKE_ACCOUNT=<account>.<region>
SNOWFLAKE_USERNAME=<username>
SNOWFLAKE_PASSWORD=<password>
SNOWFLAKE_DATABASE=CHARITY
SNOWFLAKE_SCHEMA=PUBLIC
SNOWFLAKE_WAREHOUSE=COMPUTE_WH

GOOGLE_AI_API_KEY=AIzaSy...
GOOGLE_AI_MODEL=gemini-1.5-flash

Delete data/store.json and restart the dev server to reseed with fresh, realistic demo data.

GitHub β†’ Pritam-mb/charity

The home feed is designed for Gen Z: visual, fast, and community-driven. It's a dark-mode, Reddit-style three-column layout β€” a collapsible left sidebar for navigation, a center feed with segmented sorting (New / Hot / Top Urgent) and category/neighborhood filters, and a right rail with a Local Area Explorer and community rules.

You can browse new, hot, or urgent needs, filter by category and neighborhood, and see exactly what is needed β€” with a real image, urgency flair, and steward-beneficiary attribution ("Posted by Rashid on behalf of Arjun"). Every need card has a four-action bar: Support, Comments, Share, and Pledge Help.

Open a need and you get the full context β€” item, urgency, quantity, neighborhood, and the Case Page it belongs to. A verified local handoff point appears on the Leaflet map, so help stays simple and local. No stranger-to-stranger coordinates. No private DMs.

Choose Pledge Help, select what you can provide, and complete the handoff. But a pledge is not impact.

You mark it Handed Off. Then the verified steward confirms delivery with the beneficiary. Only when both sides confirm does the system record a verified contribution and award the Honor Badge. That two-step is not a formality β€” it's the whole point.

Posting only requires a plain-language caption and an optional photo or video. Gemini AI analyzes the description and proposes category, item type, quantity, and urgency β€” all fully editable before publishing. AI proposes; a human confirms. Nothing auto-publishes.

When Gemini isn't configured, a local keyword-and-regex inference engine (lib/auto-tag.ts) handles the same job. The workflow never breaks because of a missing API key.

Case Pages (/cases/[id]) are dedicated, persistent profiles for recurring or high-vulnerability beneficiaries. Instead of isolated posts, a Case Page becomes a living record of the community helping one person over time.

Each page has:

The community extends beyond individual needs too β€” people can offer items, volunteer their time, connect with organisations, and follow cases they care about.

Account settings define a person's platform role (volunteer, steward, NGO leader), primary neighborhood for anchor-point matching, and contact info β€” which is only ever shared with stewards at the point of a pledge or handoff, never made public.

Confirmed, fulfilled needs become a quiet public record β€” not a leaderboard of who gave the most, but a feed of what actually changed for someone, with a link back to their Case Page. Verified contributions, not participation trophies.

Then comes Snowflake HQ β€” what I call the GlassPocket layer, because every transaction is visible through the glass.

A one-click POST /api/sync pushes the entire local transactional state to Snowflake. Dashboard metrics are then computed via Snowflake SQL when available, or locally from store.json when not β€” the platform is always operational either way.

Snowflake surfaces:

Top Givers are ranked by confirmed handoffs β€” not pledges. That single distinction is the difference between a leaderboard and an accountability record.

Layer Tech Why
Framework Next.js 15 (App Router), React 19 Server Components for the heavy lifting, Client Components for interactive hubs
Language TypeScript (strict mode) 100% type safety across every API route and component
Styling Vanilla CSS, custom design system Reddit dark theme, glassmorphism, responsive grids β€” no framework overhead
Data Local JSON store ( data/store.json ) Atomically managed via lib/store.ts , auto-seeded on first run
Intelligence Google Gemini AI Auto-categorization, item extraction, urgency scoring on upload
Analytics Snowflake Data Cloud Relational telemetry with automated local fallback
Mapping Leaflet + OpenStreetMap Hyperlocal anchor point visualization

Repo structure:

app/              Next.js App Router β€” pages, layouts, API routes
components/       Feed, need cards, pledge pool, steward tools, forms, dashboard widgets
lib/              Types, store, seed data, Gemini client, Snowflake queries, auto-tagger
data/             store.json (auto-generated, gitignored)
scripts/          Snowflake diagnostics and connectivity tests
public/images/    Photorealistic need imagery

Worth reading: plan.md (product thesis), problems.md (every risk identified and how it's mitigated), lib/store.ts (the two-party verification cycle), lib/snowflake.ts (dual-engine telemetry with automatic fallback).

Alias names, not legal names. Case Pages use pseudonyms and broad neighborhood tags β€” never exact addresses, never legal identity.

No solo stewardship. One person alone speaking for another is exactly the risk the platform exists to prevent. The system requires co-stewardship.

Consent isn't a checkbox. Verbal recorded consent is a structural requirement β€” a field in the data model, not a terms-of-service paragraph.

Anchor points over direct meetups. Handoffs route through a known local location (a shop, a community hub) rather than a stranger-to-stranger connection.

Staleness detection. Snowflake flags Case Pages with no recent updates. An abandoned page that still looks active is worse than no page at all.

Editable AI tags. Gemini proposes; the steward confirms. No auto-publish, no blind trust in classification.

Best Use of Snowflake β€” GlassPocket accountability layer

Snowflake is the transparency backbone. It powers the institutional dashboard (unfulfilled needs by category/area, urgency distribution, steward staleness detection, confirmed-handoffs-only leaderboard) with a dual-engine design that falls back to local computation with zero downtime if Snowflake is unreachable. Key design choice: analytics that fail silently are worse than no analytics at all β€” so the fallback is first-class, not an afterthought.

Best Use of Google AI β€” Gemini auto-categorization

Gemini analyzes every posted need (description and/or photo) to propose category, item type, quantity, and urgency. A local keyword-and-regex engine (lib/auto-tag.ts) provides identical functionality when Gemini isn't configured, so the platform never depends on a live API key to function. AI assists the steward β€” it does not replace the steward's judgment.

ConfirmationRecord model already has an on_chain_ref field waiting. Someone posts a need. Someone else offers what they can. The community connects them. The handoff happens. The steward verifies it. The contribution becomes part of a trusted record.

Not everyone can donate money. But almost everyone has something they can give β€” a bag of rice, a spare cane, an afternoon.

NeedFeed turns those small acts into a connected, accountable community. No cash to divert. No vulnerable people to tag. No badges to fake. Just rice, sweaters, wheelchairs, and the receipts to prove they arrived.

Hyperlocal in-kind giving. Post a need, anyone can pledge a piece of it into an open pool a steward confirms the handoff, and the giver earns a verifiable badge β€” no money, no tagging of vulnerable people.

Product thinking lives in plan.md and problems.md (at repo root, ..).

npm install
npm run dev        # http://localhost:3000

The app works with zero API keys. Local auto-tagging stands in for Google AI and the Snowflake dashboard falls back to computing the same metrics locally.

/) β€” filter by category/area, open a need./cases/c-arjun) β€” multi-entry timeline, recorded-consent badge, steward tools.store.json). Built with Next.js 15 Β· React 19 Β· Snowflake Data Cloud Β· Google Gemini AI Β· Leaflet Β· TypeScript

── more in #developer-tools 4 stories Β· sorted by recency
── more on @needfeed 3 stories trending now
sponsored brought to you by zahid.host 4,200+ EU-deployed projects
reading about agents? ship yours in a single git push.

Run your AI side-project on zahid.host

EU-based hosting, git-push deploys, automatic HTTPS, no cold starts. Free tier with a custom domain β€” perfect for shipping the agent you just read about.

$git push zahid main
β†’ Live at https://your-agent.zahid.host βœ“
Get free account β†’ Pricing
from €0/mo Β· no card required
LIVE [news/needfeed-safe-in-kin…] indexed:0 read:8min 2026-09-07 Β· β€”