← All work
Case study

A food directory the community owns.

Find food near you.

MidcoastFood.ME is a searchable, mapped directory of free and local food resources across Maine — built for Midcoast Solidarity so the people who run it own the data outright, no funder required.

midcoastfood.me/resources
The MidcoastFood.ME resource directory — a filterable list beside a live map of Maine
0
free & local food resources mapped
0
Maine towns covered
0
counties — every one in Maine
0
resource categories, color-coded
The brief

Everyone deserves good food.

In Midcoast Maine, the information about where to find a free meal was real but scattered — taped to church doors, buried in PDFs, passed along phone trees. If you needed it, you had to already know someone who knew.

Midcoast Solidarity, a local mutual-aid group, wanted one place that was current, trustworthy, and theirs — not a directory rented from a vendor who could pull the plug, raise the price, or quietly mine the data. So we built exactly that: a platform the organizers own, that volunteers can keep accurate, and that costs almost nothing to run.

“We are all responsible for all.”

— the line MidcoastFood.ME is built around
What we built

A directory you can actually use.

midcoastfood.me
The MidcoastFood.ME homepage — Find food near you

The homepage. Six color-coded categories, live counts, and one big invitation — find food, or help feed your community.

midcoastfood.me/resources/…
A MidcoastFood.ME resource detail page

Every resource, in plain language. Hours, eligibility, what the place offers, and one-tap directions.

midcoastfood.me/get-involved
The MidcoastFood.ME get-involved page

Two-sided by design. The same platform that helps you find food helps you volunteer, host, or correct it.

Under the hood

Built first-party, built to last.

Every architectural decision answered the same question: will this still be standing, and still be theirs, in five years? That ruled out rented platforms and ruled in a small, owned, modern stack.

Framework

Next.js 15, React 19

App Router with server components — pages are fast, indexable, and static wherever they can be. The directory renders on the server, so search engines and screen readers see the real content.

Next.js 15React 19Tailwind CSSTypeScript
Data

A first-party source of truth

Neon serverless Postgres with a typed Drizzle schema. The published directory is one clean table — no spreadsheets, no proprietary CMS lock-in. The data belongs to the organizers, full stop.

Neon PostgresDrizzle ORM
Contributions

A review queue, not a free-for-all

Volunteer edits, business profiles, and public corrections never touch live data. Each one lands as a pending submission an approver applies or rejects — so anyone can contribute without anyone breaking the directory.

Submissions tableApprover role
Search & maps

Find food three ways

Fuzzy search (Fuse.js) tolerates typos and partial names. A Leaflet map plots every geocoded resource. Filter by category, county, and accessibility — list and map stay in sync.

Fuse.jsLeafletGeocoding pipeline
Accounts

Private by design

Accounts are pseudonymous — a username and password, no email ever stored. Recovery runs on one-time codes or an approver-assisted community password reset. A volunteer can help out without handing over their identity.

Pseudonymous authServer sessionsOne-time codes
Delivery

Cheap to run, easy to keep

Hosted on Vercel, transactional email through Resend, performance watched with Speed Insights — and a built-in analytics opt-out. Running costs stay near zero, so the platform outlives any single grant cycle.

VercelResendSpeed Insights
How an edit becomes the truth

Open to contribute. Closed to chaos.

The hardest part of a community directory is staying accurate without becoming a wiki anyone can vandalize. MidcoastFood.ME splits the difference with a review queue.

1

Submit

Anyone adds a resource or reports a correction — no account required.

2

Queue

It lands as a pending submission, never a live edit to the directory.

3

Review

An approver checks it against the real-world resource and its hours.

4

Publish

Approved, it joins the directory. The source of truth stays clean.

Design

Warm, clear, and quietly accessible.

The directory leads with calm — soft paper tones, a steady green, generous space — because someone reaching for it may be having a hard week. Nothing shouts. Everything is one tap from the next useful thing.

Six categories carry consistent colors and hand-drawn icons, so a regular learns the map at a glance. It is mobile-first by necessity — most visitors arrive on a phone — and tested against WCAG AA. Even the releases are named like the Maine coast they serve.

Community / Non-profit141 listings
Religious food pantry91 listings
Waldo County Bounty28 listings
Government / Town office15 listings
Little Free Food Pantry13 listings
Local business8 listings
v1.0Rockland
v1.1Rising Tide
v2.0Belfast
v2.1Rockweed
What we're proudest of

A platform a volunteer can trust and a funder can't capture.

The review queue and the pseudonymous accounts do quiet, serious work together: anyone can improve the directory, no one can wreck it, and no one has to surrender their identity to help. The data lives in the organizers' own database.

If the grant runs out, the vendor folds, or the maintainer changes — MidcoastFood.ME keeps working. That is the whole point of building it this way.

See it in the wild.

MidcoastFood.ME is live, growing, and tended by the community it serves. Have a project that needs to outlast its funding?

Built and maintained by SunshineHouse for Midcoast Solidarity.