Arhitektura Cosmic Story v2 – dubinski pregled.

Za inženjere, voditelje proizvoda, novinare i istraživače partnerstava. Cijeli pipeline, četiri MongoDB kolekcije, EDA događaji, rigoroznost V-Modela, ciljevi performansi, sigurnost i pristupačnost — sve na jednoj stranici.

  • Soulwise-story je novi NestJS modul uz postojeći cosmic-story modul. Nula izravnih uvoza između modula značajki.
  • Četiri MongoDB kolekcije: soulwise_persons, soulwise_chapters, soulwise_journal_entries, soulwise_resonances. AES-256 šifrirana tijela, indeksirana za upite koje svaka opslužuje.
  • Asinkrona generacija putem BullMQ reda s vremenskim ograničenjem od 28 s. Događaji se emitiraju putem EventEmitter2 tek nakon potvrde u bazi podataka — nema prividnih stavki u pristigloj pošti.
  • V-Model spec: 119 zahtjeva, nula praznina. Cilj pokrivenosti pozadinskog dijela 85% izjava na servisima; prednji dio 90% na Pinia spremnicima.

Pipeline, ponovno, s inženjerskim detaljima

Svaki korak ima servis, ugovor i događaj.

  1. Okidač

    Korisnička radnja — 'generiraj današnje poglavlje za Sister' — ili zakazani cron, poput nedjeljnog sažetka u 9 ujutro, ili osvježavanja vremenske prognoze svakih 6 sati.

  2. Red

    Zadatak se stavlja u BullMQ red pod nazivom soulwise-chapter-generation, s tvrdim vremenskim ograničenjem od 28 sekundi. Dugotrajni zadaci se ubijaju i korisniku se prikazuje poruka 'pokušajte ponovno'.

  3. Sastavi

    ChapterGenerationService sastavlja četverofaktorski upit — kontekst osobe, astrologija, signal, ritam — u jedan unos. Nijedan sirovi korisnički PII ne ulazi u upit doslovno; sve se najprije očisti.

  4. Generiraj

    AI pružatelj se poziva putem simbolnog tokena AI_GENERATION_ADAPTER — pružatelj je zamjenjiv. Odgovor se provjerava glede duljine, oblika i sigurnosti prije nastavka.

  5. Postproces

    Događaju se četiri stvari: klasifikator krize provjerava jezik krize; ekstraktor aspekt‑čipova izvlači jedan do tri astrološka čipa; filter protiv tvrdnji uklanja zabranjene izraze; tijelo je AES-256 šifrirano ključem kojim upravlja platforma.

  6. Spremi

    Artefakt se zapisuje u odgovarajuću MongoDB kolekciju — chapters, journal entries, resonances — s indeksima userId i personId za brzo pretraživanje. Prvo se vrši soft‑delete; hard‑delete osobnih podataka nakon 30 dana.

  7. Obavijesti

    Događaj EventEmitter2 — CHAPTER_COMPLETED, JOURNAL_CREATED — aktivira se nakon commita u bazi podataka. Modul obavijesti ga prihvaća, stvara stavku u poštanskom sandučiću i opcionalno šalje push obavijest (ograničeno na jednu dnevno, uz poštivanje tiših sati).

  8. Površina

    Frontend preuzima artefakt putem autentificiranog API poziva. Hub ponovno renderira s novim sadržajem. Ako je korisnik bio izvan mreže, predmemorija prikazuje jučerišnji prikaz, a novi artefakt pojavljuje se pri ponovnom povezivanju.

Sedam koraka od okidača do površine, svaki nazvan po onome što zaista radi.

Četiri kolekcije

Indeksirano za upite na koje svaka odgovara.

soulwise_persons

Unosi albuma. Indeksi na userId, status, deletedAt. Najprije meko brisanje; tvrdo brisanje PII-ja nakon 30 dana.

soulwise_chapters

Poglavlja koja je napisao AI, šifrirano tijelo. Indeksi na personId, userId, generatedAt. Čipovi aspekata pohranjeni kao zaseban niz za brzo filtriranje.

soulwise_journal_entries

Korisnički napisane refleksije, šifrirano tijelo. Indeksi na userId, personId, createdAt. Tekstualno indeksirano tijelo za pretragu. Zastavica 'privatno — nemoj ga davati Luminari' po unosu.

soulwise_resonances

4-dimenzionalni rezultati po vezi. Jedinstveni indeks na personId. Ponovno se izračunava putem servisnog poziva nakon zapisa poglavlja ili dnevnika.

EDA događaji

Strogo pravilo: događaji se aktiviraju tek nakon commita baze podataka. Međumodulske ovisnosti putem Symbol injection tokena, nikada putem forwardRef. Nema izravnih uvoza servisa u servis između funkcionalnih modula.

  • SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — pokrenuto nakon što je poglavlje šifrirano i pohranjeno. Notifications-v2 sluša; stvara stavku u pristigloj pošti; opcionalno šalje push obavijest.
  • SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — pokrenuto nakon što je unos dnevnika šifriran i pohranjen. Servis rezonancije sluša; pokreće ponovno izračunavanje.
  • SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — pokrenuto nakon promjene podataka o rođenju osobe. Sinastrijski cache postaje nevažeći.
  • SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — prema ugovoru notifications-v2; poštuje push budžet i tihe sate.

Strogost V-modela specifikacije

119 prepoznatljivi zahtjevi, nula praznina. Svaki zahtjev se može povezati s testnim slučajem (UTP, ITP, STP, E2E) i nazad s korisničkom pričom. Imamo 20 korisničke priče. Također postoje 15 funkcionalni zahtjevi, 12 nefunkcionalne kategorije i 8 globalna vrata prihvaćanja.

Ugovor o performansama

Stvaranje poglavlja u 30 sekundi ili brže za 95 % zahtjeva, mjereno prema distribuciji trajanja posla BullMQ. API p99 GET kašnjenje 500 ms ili bolje pri 1.000 istovremenih korisnika, mjereno putem k6 testa opterećenja. Frontend TTI 3 sekunde ili brže na simuliranoj 4G mreži, mjereno putem Lighthouse CI.

Sigurnosni ugovor

AES-256 šifriranje u mirovanju s ključevima kojima upravlja platforma za tijela dnevnika i poglavlja. TLS 1.2+ u prijenosu; preusmjeravanje HTTP→HTTPS. JWT pristupni tokeni s trajanjem od 1 sata, tokeni za osvježavanje s trajanjem od 30 dana, rotacija prilikom osvježavanja. Meko brisanje s prozorom od 30 dana prije trajnog brisanja PII-a.

Ugovor o pristupačnosti

prefers-reduced-motion globalno se poštuje — GSAP animacije postaju samo prijelazi neprozirnosti. VoiceOver i TalkBack oznake na svakom interaktivnom elementu. Ručno provjereno na iOS-u i Androidu prije svakog izdanja.

Zašto zaseban modul soulwise-story umjesto proširenja cosmic-story?

Zato što upstream specifikacija ponovno gradi funkciju, a ponovna izgradnja unutar postojećeg modula bi ili narušila iskustvo v1 ili bi zahtijevala fork-then-merge kasnije. Novi modul čuva v1 netaknutim, omogućuje v2 da se dokaže i čisto migrira kada bude spreman.

Zašto MongoDB, a ne Postgres?

Postojeći My Zodiac AI pozadinski sustav koristi MongoDB; promjena bi značila odluku o infrastrukturi koja nije povezana s ovom funkcijom. Model dokumenta također dobro odgovara poglavljima i dnevničkim unosima — ugniježđen, varijabilne duljine, šifriran kao blob.

Zašto je BullMQ izbor za red čekanja?

BullMQ radi na Redisu, koji je već u stacku za sesiju i ograničavanje stope. Nije potrebna nova infrastruktura. Ugrađeno ponovno pokretanje, vremensko ograničenje i promatračnost pokrivaju potrebe generiranja poglavlja bez prilagođene instalacije.

Gdje je upstream specifikacija zapravo zapisana?

Interni repozitorij. Brojke i ugovori na ovoj stranici parafraziraju upstream V-Model artefakte. Javno dostupni inženjerski blog postovi na blog klasteru My Zodiac AI (označeni 'cosmic-story-v2') dublje ulaze u specifične dijelove izgradnje.

Isprobaj My Zodiac AI već danas

Dok Soulwise otvara svoje valove, naša vodeća astrološka aplikacija već je u tvojim rukama.

Astrološki sadržaj namijenjen je razmišljanju i zabavi. Značajke Cosmic Story v2 opisane ovdje su u razvoju; dostupnost se može promijeniti bez prethodne najave.