Skip to content
Menu

Arquitectura

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 configuration

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