Cómo funciona
Arquitectura
Un monorepo TypeScript con un núcleo neutral frente a los protocolos. Fácil de poner en marcha, fácil de leer.
Principios
Núcleo neutral
El dominio conoce publicaciones y personas, no protocolos.
Primero la privacidad
La visibilidad es un dato en cada objeto, controlado en un solo lugar.
Fácil de alojar
Node, PostgreSQL, Redis. Basta con un VPS pequeño.
Portabilidad
Exportación, importación y mudanza de cuenta.
Moderación desde el primer día
Denuncias, bloqueos, límites, registro de acciones.
Tipado de principio a fin
El servidor y la app web comparten tipos y esquemas.
El stack
Servidor
- Node.js 22 LTS
- Fastify + Zod
- Drizzle ORM + PostgreSQL 16+
- Redis + BullMQ
- Fedify (ActivityPub)
- Biblioteca diaspora* propia
Web
- React 19 + Vite
- TanStack Router & Query
- Tailwind CSS v4
- i18next (en, it, es)
- PWA + Web Push
- API compatible con las apps de Mastodon
Calidad
- TypeScript strict
- Vitest: 450+ pruebas
- Fixtures de diaspora* de la gema oficial
- Biome
- Turborepo
- Integración continua
El 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 configurationCada objeto federable tiene tanto una URI ActivityPub como un GUID diaspora*. Las decisiones de diseño están en docs/decisions.md.
Capas
Web y apps
La app React y las apps de Mastodon usan la misma /api/v1.
API
Las rutas de Fastify validan la entrada con Zod y llaman al núcleo.
Núcleo
Reglas sociales, visibilidad y eventos, sin protocolos dentro.
Adaptadores
ActivityPub y diaspora* traducen los eventos en mensajes, y viceversa.
