Federated collaborative map for animal welfare. Report and find shelters, vets, lost/found animals and more by mentioning @PawFed on any Fediverse platform.
https://pawfed.org
- TypeScript 92.6%
- CSS 7.3%
- JavaScript 0.1%
| drizzle/migrations | ||
| messages | ||
| public | ||
| src | ||
| .env.example | ||
| .gitignore | ||
| components.json | ||
| drizzle.config.ts | ||
| eslint.config.mjs | ||
| LICENSE | ||
| next.config.ts | ||
| package-lock.json | ||
| package.json | ||
| postcss.config.mjs | ||
| README.md | ||
| tsconfig.json | ||
| vitest.config.ts | ||
Federated collaborative map for animal welfare
PawFed is a public, no-login community map where anyone can report and find animal-related resources (shelters, vets, lost/found animals, foster homes, etc.) simply by mentioning @PawFed on any Fediverse platform.
Reports are parsed automatically from mentions (species, category, photos, address), geocoded, and displayed on an interactive map. No account required to browse.
How it works
- A user mentions
@[email protected]on Mastodon, Misskey, or any ActivityPub-compatible platform - PawFed parses the mention: hashtags for species/category, attachments for photos, text for address
- The address is geocoded (Nominatim) and a DM is sent back to verify the location
- Once confirmed, the point appears on the public map
- A note is published to all followers via ActivityPub
Trusted actors (after several approved reports) skip the moderation queue.
Quick start
cp .env.example .env # edit with your values
npm install
npm run db:push # apply schema to PostgreSQL
npm run dev
Environment
| Variable | Description |
|---|---|
DATABASE_URL |
PostgreSQL connection string |
NEXT_PUBLIC_APP_URL |
Public URL of the app |
AP_ACTOR_HANDLE |
ActivityPub actor handle (default: PawFed) |
BETTER_AUTH_SECRET |
Auth secret (random 32+ chars) |
ADMIN_EMAIL / ADMIN_PASSWORD |
First super admin, created on first run |
AUTO_TRUST_THRESHOLD |
Reports needed before auto-trust (default: 5) |
SMTP_* |
SMTP config (optional, dev mode logs to console) |
Stack
- Next.js (App Router) + React 19 + TypeScript
- PostgreSQL + Drizzle ORM
- Leaflet for maps, Nominatim for geocoding
- ActivityPub federation (HTTP signatures, inbox/outbox)
- Better-Auth (credentials + 2FA TOTP)
- next-intl for i18n (EN/FR)