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%
Find a file
2026-03-19 11:44:32 +01:00
drizzle/migrations Initial commit 2026-03-19 11:34:16 +01:00
messages Initial commit 2026-03-19 11:34:16 +01:00
public Initial commit 2026-03-19 11:34:16 +01:00
src - Fix published date: use publication time 2026-03-19 11:44:32 +01:00
.env.example Initial commit 2026-03-19 11:34:16 +01:00
.gitignore Initial commit 2026-03-19 11:34:16 +01:00
components.json Initial commit 2026-03-19 11:34:16 +01:00
drizzle.config.ts Initial commit 2026-03-19 11:34:16 +01:00
eslint.config.mjs Initial commit 2026-03-19 11:34:16 +01:00
LICENSE Initial commit 2026-03-19 11:34:16 +01:00
next.config.ts Initial commit 2026-03-19 11:34:16 +01:00
package-lock.json Initial commit 2026-03-19 11:34:16 +01:00
package.json Initial commit 2026-03-19 11:34:16 +01:00
postcss.config.mjs Initial commit 2026-03-19 11:34:16 +01:00
README.md Initial commit 2026-03-19 11:34:16 +01:00
tsconfig.json Initial commit 2026-03-19 11:34:16 +01:00
vitest.config.ts Initial commit 2026-03-19 11:34:16 +01:00

PawFed

Federated collaborative map for animal welfare

pawfed.org


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

  1. A user mentions @[email protected] on Mastodon, Misskey, or any ActivityPub-compatible platform
  2. PawFed parses the mention: hashtags for species/category, attachments for photos, text for address
  3. The address is geocoded (Nominatim) and a DM is sent back to verify the location
  4. Once confirmed, the point appears on the public map
  5. 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)

License

AGPL-3.0