In the browserEn el navegador
The widget runs in three execution contexts.El widget corre en tres contextos.
Each context has one job. The main thread paints. The Worker computes. The Service Worker survives the tab being closed.Cada contexto tiene un trabajo. El main thread pinta. El Worker computa. El Service Worker sobrevive a que se cierre la pestaña.
BackendBackend
Small services, sharp boundaries.Servicios chicos, fronteras claras.
Each service has a single responsibility. Mongo holds data, Redis holds counters and cache, BullMQ holds background work. There is no shared runtime state between processes — only the data store.Cada servicio tiene una sola responsabilidad. Mongo guarda datos, Redis guarda contadores y caché, BullMQ guarda trabajo en background. No hay estado de runtime compartido entre procesos — solo el data store.
| ServiceServicio | StackStack | RoleRol |
|---|---|---|
| quelora-public-api | Node · Express | Community-facing API: auth, SSO, posts, comments, profiles, follows, notifications, GIF proxyAPI pública: auth, SSO, posts, comentarios, perfiles, follows, notificaciones, GIF proxy |
| quelora-dashboard-api | Node · Express · ws | Admin backend: RBAC, WordPress sync, Sentinel debug brokerBackend de admin: RBAC, sync WordPress, broker Sentinel |
| quelora-dashboard | React 18 SPA | Admin UIUI de admin |
| quelora-worker | BullMQ worker | Emails · push · notifications · activity · aggregation queuesEmails · push · notificaciones · activity · aggregation |
| quelora-jobs | BullMQ worker | Reputation · suggestions · system · gravity-decayReputación · sugerencias · system · gravity-decay |
| MongoDB | mongo:4.4 | Primary datastoreDatastore primario |
| Redis | redis:alpine | Cache · counters · BullMQ broker · presenceCaché · counters · broker BullMQ · presencia |
| nginx | nginx:mainline-alpine | Reverse proxy · TLS · rate limitReverse proxy · TLS · rate limit |
Request flowFlujo de request
From the browser to the database — and back.Del navegador a la base de datos — y de vuelta.
Multi-tenancyMulti-tenant
One install. Many tenants.Una instalación. Muchos tenants.
Every record carries a cid (Client ID, format QU-XXXXXXXX-XXXXX). Every query is scoped by CID. Tenant configuration lives in a single Client document — including which features and which plugins are activated.
Cada registro lleva un cid (Client ID, formato QU-XXXXXXXX-XXXXX). Cada query está scopeada por CID. La configuración por tenant vive en un solo documento Client — incluyendo qué features y qué plugins están activados.
A god role lets you operate any tenant from a single dashboard install — useful when running multiple sites or hosting communities for others.
Un rol god te deja operar cualquier tenant desde una sola instalación del dashboard — útil si corrés múltiples sitios o hospedás comunidades para terceros.
| god | 100 | Master — all tenantsMaster — todos los tenants |
| admin | 50 | Full client managementGestión total del tenant |
| editor | 40 | Content editingEdición de contenido |
| moderator | 30 | Moderation actionsAcciones de moderación |
| advertiser | 20 | Ad managementGestión de ads |
| analyst | 15 | Analytics read-onlyAnalytics solo lectura |
| user | 10 | BaseBase |