soulwise_persons
Entrades d'àlbum. Índexs per userId, status, deletedAt. Suavement eliminat primer; eliminació definitiva de dades personals a 30 dies.
Per a enginyers, PMs, periodistes i reclutadors de col·laboracions. La cadena completa, quatre col·leccions MongoDB, esdeveniments EDA, rigor del V-Model, objectius de rendiment, seguretat i accessibilitat — tot en una sola pàgina.
Cada pas té un servei, un contracte i un esdeveniment.
Una acció d'usuari — 'genera el capítol d'avui per a Sister' — o un cron programat, com el resum del diumenge 9 a.m., o l'actualització meteorològica cada 6 hores.
La tasca entra a una cua BullMQ anomenada soulwise-chapter-generation, amb un límit estricte de 28 segons. Les tasques de llarga durada es cancel·len i es notifica a l'usuari amb 'torna a intentar-ho'.
El ChapterGenerationService combina l'indicador de quatre factors — context de la persona, astrologia, senyal, ritme — en una única entrada. Cap dada personal identificable entra al prompt tal qual; tot es neteja prèviament.
Un proveïdor d'IA es crida mitjançant el símbol token AI_GENERATION_ADAPTER — el proveïdor és intercanviable. La resposta es comprova per longitud, forma i seguretat abans de continuar.
Passen quatre coses: un classificador de crisi detecta llenguatge de crisi; un extractor de fitxes d'aspecte selecciona d'una a tres fitxes astrològiques; un filtre anti-afirmacions elimina les expressions prohibides; el cos es xifra amb AES-256 amb una clau gestionada per la plataforma.
L'artefacte s'escriu a la col·lecció MongoDB corresponent — capítols, entrades de diari, ressonàncies — amb índexs userId i personId per a una cerca ràpida. S'aplica una supressió suau primer; supressió definitiva de PII a 30 dies.
Un esdeveniment EventEmitter2 — CHAPTER_COMPLETED, JOURNAL_CREATED — s'activa després del compromís a la base de dades. El mòdul de notificacions el captura, crea un element a la safata d'entrada i, opcionalment, envia una push (limitada a una al dia, respectant les hores silencioses).
El frontal recupera l'artefacte mitjançant una crida API autenticada. El Hub es torna a renderitzar amb el nou contingut. Si l'usuari estava fora de línia, la memòria cau mostra la vista d'ahir i el nou artefacte apareix en reconnectar-se.
Indexades per les consultes que cadascuna respon.
Entrades d'àlbum. Índexs per userId, status, deletedAt. Suavement eliminat primer; eliminació definitiva de dades personals a 30 dies.
Capítols escrits per IA, cos xifrat. Índexs per personId, userId, generatedAt. Els xips d'aspecte s'emmagatzemen en una matriu separada per a un filtratge ràpid.
Reflexions escrites per l'usuari, cos xifrat. Índexs per userId, personId, createdAt. Cos indexat per text per a la cerca. Marca per entrada 'privada — no alimentar a Luminara'.
Puntuacions de quatre dimensions per enllaç. Índex únic per personId. Recalculades via crida de servei després d'escriure un capítol o una entrada de diari.
Regla estricta: els esdeveniments s’activen només després del commit de la base de dades. Dependències entre mòduls a través de tokens d’injecció Symbol, mai via forwardRef. No hi ha imports directes de servei a servei entre mòduls de funcionalitat.
SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — s’activa després que un capítol es xifri i es persisteixi. Notifications-v2 escolta; crea un element de safata d’entrada; opcionalment envia una notificació push.SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — s’activa després que una entrada de diari es xifri i es persisteixi. El servei Resonance escolta; desencadena una recomputació.SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — s’activa després que les dades de naixement d’una persona canviïn. La memòria cau de sinastría s’invalida.SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — segons el contracte de notifications-v2; respecta el pressupost de push i les hores de silenci.119 requisits traçables, sense buits. Cada requisit es mapja cap endavant a un cas de prova (UTP, ITP, STP, E2E) i cap enrere a una user story. 20 user stories. 15 requisits funcionals. 12 categories no funcionals. 8 portes d’acceptació globals.
Generació de capítols 30 segons o menys per al 95% de les sol·licituds, mesurat respecte la distribució de durada de tasques BullMQ. Latència GET de l’API p99 500 ms o menys amb 1,000 usuaris concurrents, mesurat via la prova de càrrega k6. TTI del frontend 3 segons o menys en simulació de 4G, mesurat amb Lighthouse CI.
Xifratge AES-256 en repòs amb claus gestionades per la plataforma per a cossos de diaris i capítols. TLS 1.2+ en trànsit; redirecció HTTP→HTTPS. Tokens d’accés JWT amb vida útil de 1 hores, tokens de refresc amb vida útil de 30 dies, rotació en refrescar. Suavitzat (soft-delete) amb una finestra de 30 dies abans del supressió definitiva de PII.
prefers-reduced-motion globalment respectat — les animacions GSAP es converteixen en desvaniments només d'opacitat. Etiquetes VoiceOver i TalkBack a cada element interactiu. Verificat manualment a iOS i Android abans de cada llançament.
Perquè l'especificació ascendent reconstrueix la funcionalitat, i reconstruir dins d'un mòdul existent trencaria l'experiència v1 o requeriria un fork‑then‑merge més endavant. Un mòdul nou manté v1 intacta, permet que v2 es provi i migri netament quan estigui llest.
El backend existent de My Zodiac AI funciona sobre MongoDB; canviar implicaria una decisió d'infraestructura que no té relació amb aquesta funcionalitat. El model de documents també s'adapta bé a capítols i entrades de diari — imbricat, de longitud variable, encriptat com a blob.
BullMQ s'executa sobre Redis, que ja forma part de la pila per a sessions i límits de taxa. No cal nova infraestructura. La reintenta, el temps d'espera i l'observabilitat integrats cobreixen les necessitats de generació de capítols sense cap canalització personalitzada.
Repositori intern. Els números i contractes d'aquesta pàgina parafrasegen els artefactes V‑Model ascendent. Les publicacions del blog d'enginyeria de My Zodiac AI (etiquetades 'cosmic-story-v2') aprofundeixen en parts específiques del desenvolupament.
Mentre Soulwise obre les seves ones, la nostra aplicació estrella d'astrologia ja és a les teves mans.
El contingut d'astrologia és per a reflexió i entreteniment. Les funcions de Cosmic Story v2 descrites aquí estan en desenvolupament; la disponibilitat pot canviar sense avís.