Vai al contenuto
Menu

Architettura

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 configuration

Ogni 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.