Architektura Cosmic Story v2 – hluboký ponor.

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.

  • Soulwise-story je nový modul NestJS vedle stávajícího modulu cosmic-story. Zero přímých importů mezi feature moduly.
  • Čtyři MongoDB kolekce: soulwise_persons, soulwise_chapters, soulwise_journal_entries, soulwise_resonances. AES-256 šifrovaná těla, indexovaná pro dotazy, které každý slouží, jsou 4.
  • Asynchronní generace prostřednictvím fronty BullMQ s 28 s časovým limitem. Události jsou emitovány prostřednictvím EventEmitter2 pouze po potvrzení v databázi — žádné fantomové položky v doručené poště.
  • Specifikace V-Model: 119 požadavků, 0 mezer. Cílové pokrytí backendu 85% příkazů ve službách; frontend 90% u úložišť Pinia.

Pipeline, znovu, s technickými detaily

Každý krok má službu, smlouvu a událost.

  1. Spouštěč

    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.

  2. Fronta

    Ú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“.

  3. Napsat

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

  4. Generovat

    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.

  5. Postproces

    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.

  6. Uložit

    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.

  7. Upozornit

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

  8. Zobrazit

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

Sedm kroků od spouštěče až na povrch a každý je pojmenovaný podle toho, co skutečně dělá.

Čtyři kolekce

Indexované pro dotazy, na které každá z nich odpovídá.

soulwise_persons

Záznamy alba. Indexy na userId, status, deletedAt. Nejprve měkké smazání; trvalé smazání osobních údajů po 30 dnech.

soulwise_chapters

AI-sepsané kapitoly, zašifrovaný text. Indexy na personId, userId, generatedAt. Aspektové čipy uloženy jako samostatné pole pro rychlé filtrování.

soulwise_journal_entries

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.

soulwise_resonances

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.

Události EDA

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.

Striktnost specifikace V-modelu

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.

Smlouva o výkonu

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.

Bezpečnostní smlouva

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

--- Smlouva o přístupnosti ---

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.

Proč samostatný modul soulwise-story místo rozšíření cosmic-story?

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.

Proč MongoDB a ne Postgres?

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.

Proč je volbou fronty BullMQ?

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

Kde je vlastně upstream specifikace zapsaná?

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

Vyzkoušej My Zodiac AI ještě dnes

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.