soulwise_persons
Záznamy alba. Indexy na userId, status, deletedAt. Nejprve měkké smazání; trvalé smazání osobních údajů po 30 dnech.
Pro inženýry, produktové manažery, novináře a skauty partnerství. Celá pipeline, čtyři MongoDB kolekce, události EDA, přísnost modelu V, cíle výkonu, zabezpečení a přístupnost — vše na jedné stránce.
Každý krok má službu, smlouvu a událost.
Uživatelská akce — „vygenerovat dnešní kapitolu pro sestru“ — nebo naplánovaný cron, jako nedělní shrnutí v 9 ráno, nebo aktualizace počasí každých 6 hodin.
Úloha je zařazena do fronty BullMQ s názvem soulwise-chapter-generation, s pevně nastaveným časovým limitem 28 sekund. Dlouho běžící úlohy jsou ukončeny a uživateli je oznámeno „zkuste to znovu“.
Služba ChapterGenerationService skládá 4faktorový prompt — kontext osoby, astrologii, signál a kadenci — do 1 vstupu. Do promptu se nedostanou žádné nezpracované osobní údaje uživatele v doslovné podobě; nejdřív se všechno vyčistí.
Poskytovatel AI je volán pomocí symbolického tokenu AI_GENERATION_ADAPTER — poskytovatel je vyměnitelný. Odpověď je před dalším zpracováním kontrolována z hlediska délky, struktury a bezpečnosti.
Dějí se čtyři věci: klasifikátor krizí kontroluje krizový jazyk; extraktor aspekt‑chipů vytáhne jeden až tři astrologické čipy; anti‑claim filtr odstraňuje zakázané fráze; tělo je šifrováno AES-256 klíčem spravovaným platformou.
Artefakt se zapíše do příslušné kolekce v MongoDB — kapitoly, deníkové záznamy, rezonance — s indexy podle userId a personId pro rychlé vyhledávání. Nejprve měkké smazání; tvrdé smazání osobních údajů po 30 dnech.
Událost EventEmitter2 — CHAPTER_COMPLETED, JOURNAL_CREATED — se spustí po potvrzení transakce v databázi. Modul oznámení ji zachytí, vytvoří položku v doručené poště a volitelně odešle push (maximálně jeden za den, s ohledem na tiché hodiny).
Frontend načte artefakt pomocí autentizovaného API volání. Hub se přerenderuje s novým obsahem. Pokud byl uživatel offline, cache zobrazí včerejší pohled a nový artefakt se objeví po opětovném připojení.
Indexované pro dotazy, na které každá z nich odpovídá.
Záznamy alba. Indexy na userId, status, deletedAt. Nejprve měkké smazání; trvalé smazání osobních údajů po 30 dnech.
AI-sepsané kapitoly, zašifrovaný text. Indexy na personId, userId, generatedAt. Aspektové čipy uloženy jako samostatné pole pro rychlé filtrování.
Uživatelsky psané reflexe, zašifrovaný text. Indexy na userId, personId, createdAt. Textový index těla pro vyhledávání. Příznak 'soukromé — nezahrnovat do Luminary' pro každý záznam.
Skóre ve čtyřech dimenzích pro každou vazbu. Jedinečný index na personId. Přepočítává se prostřednictvím volání služby po zápisu kapitoly nebo deníku.
Přísná pravidla: události se aktivují pouze po potvrzení databáze. Vzájemné závislosti mezi moduly prostřednictvím tokenů Symbol injection, nikdy prostřednictvím forwardRef. Žádné přímé importy služeb mezi feature moduly.
SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — aktivována po zašifrování a uložení kapitoly. Notifications-v2 naslouchá; vytváří položku v doručené poště; volitelně odesílá push oznámení.SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — aktivován po zašifrování a uložení záznamu deníku. Služba rezonance naslouchá; spouští přepočítání.SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — aktivován po změně dat narození osoby. Cache synastrie se zneplatní.SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — podle smlouvy notifications-v2; respektuje rozpočet push oznámení a tiché hodiny.119 sledovatelných požadavků, nula mezer. Každý požadavek vede dopředu k testovacímu případu (UTP, ITP, STP, E2E) a zpět k uživatelskému příběhu. 20 uživatelských příběhů. 15 funkčních požadavků. 12 nefunkčních kategorií. 8 globálních akceptačních bran.
Generování kapitoly 30 sekund nebo lepší u 95% požadavků, měřeno podle rozložení doby trvání úloh v BullMQ. Latence API p99 GET 500 ms nebo lepší při 1,000 souběžných uživatelích, měřeno zátěžovým testem k6. Frontendové TTI 3 sekund nebo lepší na simulovaném 4G, měřeno přes Lighthouse CI.
Šifrování AES-256 při uložení s platformou spravovanými klíči pro těla deníku a kapitol. TLS 1.2+ při přenosu; přesměrování HTTP→HTTPS. JWT přístupové tokeny s 1hodinovou životností, obnovovací tokeny s 30denní životností, rotace při obnově. Měkké odstranění s 30denním oknem před trvalým odstraněním PII.
Globálně respektujeme nastavení prefers-reduced-motion — animace GSAP se mění na pouhé přechody průhlednosti. Popisky VoiceOver a TalkBack na každém interaktivním prvku. Ručně ověřeno na iOS a Androidu před každým vydáním.
Protože upstream specifikace tuto funkci přebudovává a přestavba uvnitř stávajícího modulu by buď narušila prostředí verze 1, nebo by později vyžadovala fork-then-merge. Nový modul ponechává verzi 1 nedotčenou, umožňuje verzi 2 osvědčit se a po dokončení provede čistou migraci.
Stávající backend My Zodiac AI běží na MongoDB; přechod by znamenal rozhodnutí o infrastruktuře nesouvisející s touto funkcí. Model dokumentu se také dobře hodí pro kapitoly a deníkové záznamy — vnořené, proměnlivé délky, šifrované jako blob.
BullMQ běží na Redisu, který už je ve stacku pro relace a omezení rychlosti. Žádná nová infrastruktura. Vestavěné opakované pokusy, časové limity a pozorovatelnost pokrývají potřeby generování kapitol bez vlastního propojování.
Interní repozitář. Čísla a smlouvy na této stránce parafrázují upstream artefakty V-Modelu. Veřejně dostupné inženýrské blogové příspěvky na blogu My Zodiac AI (označené „cosmic-story-v2“) se podrobněji zabývají konkrétními částmi sestavení.
Zatímco Soulwise teprve otevírá své vlny, naši vlajkovou astrologickou aplikaci už máš v ruce.
Astrologický obsah slouží k zamyšlení a zábavě. Funkce Cosmic Story v2 popsané zde jsou ve vývoji; dostupnost se může bez předchozího upozornění měnit.