Come funziona
Architettura
Un monorepo TypeScript con un core neutrale rispetto ai protocolli. Semplice da far girare, facile da leggere.
Principi
Core neutrale
Il dominio conosce post e persone, non protocolli.
Prima la privacy
La visibilità è un dato su ogni oggetto, controllato in un punto.
Facile da ospitare
Node, PostgreSQL, Redis. Basta una piccola VPS.
Portabilità
Export, import e trasferimento dell'account.
Moderazione dal primo giorno
Segnalazioni, blocchi, limiti, registro delle azioni.
Tipizzato da capo a fondo
Server e app web condividono tipi e schemi.
Lo stack
Server
- Node.js 22 LTS
- Fastify + Zod
- Drizzle ORM + PostgreSQL 16+
- Redis + BullMQ
- Fedify (ActivityPub)
- Libreria diaspora* scritta da noi
Web
- React 19 + Vite
- TanStack Router & Query
- Tailwind CSS v4
- i18next (en, it)
- PWA + Web Push
- API compatibile con le app Mastodon
Qualità
- TypeScript strict
- Vitest: 450+ test
- Fixture diaspora* dalla gem ufficiale
- Biome
- Turborepo
- Integrazione continua
Il monorepo
apps/server REST API, inbox/outbox, WebSocket
apps/worker BullMQ jobs: federated delivery
apps/web React single-page app
packages/core domain: posts, people, canView()
packages/db Drizzle schema and migrations
packages/activitypub ActivityPub adapter (Fedify)
packages/diaspora diaspora* protocol and bridge
packages/diaspora-import in-place pod migration
packages/shared shared types and Zod schemas
packages/config typed configurationOgni oggetto federabile ha sia un URI ActivityPub sia un GUID diaspora*. Le decisioni di progetto sono in docs/decisions.md.
Livelli
Web & apps
L'app React e le app Mastodon usano la stessa /api/v1.
API
Le rotte Fastify validano l'input con Zod e chiamano il core.
Core
Regole social, visibilità ed eventi, senza protocolli dentro.
Adapter
ActivityPub e diaspora* traducono gli eventi in messaggi, e viceversa.
