Cosmic Story v2 आर्किटेक्चर — गहिरो विश्लेषण।

इन्जिनियर, PM, पत्रकार र पार्टनरशिप स्काउटहरूका लागि। सम्पूर्ण पाइपलाइन, चारवटा MongoDB कलेक्सन, EDA इभेन्ट, V-Model कठोरता, परफर्मेन्स लक्ष्य, सुरक्षा र पहुँचयोग्यता — सबै एउटै पृष्ठमा।

  • Soulwise-story भनेको अवस्थित cosmic-story मोड्युलसँगै रहेको नयाँ NestJS मोड्युल हो। फिचर मोड्युलहरूबीच कुनै प्रत्यक्ष इम्पोर्ट छैन।
  • चार वटा MongoDB collections: soulwise_persons, soulwise_chapters, soulwise_journal_entries, soulwise_resonances। AES-256 ले encrypt गरिएका bodies, हरेकले सेवा गर्ने queries का लागि indexed।
  • BullMQ queue मार्फत async generation, 28 s को timeout सहित। Events EventEmitter2 बाट database commit भएपछि मात्र emit हुन्छन् — कुनै phantom inbox items हुँदैनन्।
  • V-Model spec: 119 requirements, शून्य gaps। Backend coverage लक्ष्य services मा 85% statement; frontend मा Pinia stores का लागि 90%।

Pipeline, फेरि, engineering विवरण सहित

हरेक step मा एउटा service, एउटा contract, र एउटा event हुन्छ।

  1. ट्रिगर

    प्रयोगकर्ताको कुनै कार्य — 'Sister का लागि आजको अध्याय बनाऊ' — वा कुनै तय गरिएको cron, जस्तै आइतबार 9 a.m. को रिक्याप, वा हरेक-6-घण्टाको मौसम रिफ्रेस।

  2. क्यु

    यो जब soulwise-chapter-generation नामको BullMQ क्युमा पुग्छ, जसको कडा 28-सेकेन्डको टाइमआउट हुन्छ। लामो चल्ने जबहरू बन्द गरिन्छन् र प्रयोगकर्तालाई 'फेरि प्रयास गर्नुहोस्' भनेर देखाइन्छ।

  3. कम्पोज

    ChapterGenerationService ले चार-कारक प्रम्प्ट — व्यक्ति सन्दर्भ, ज्योतिष, संकेत, ताल — लाई एउटै इनपुटमा जोड्छ। कुनै पनि कच्चा प्रयोगकर्ता PII जस्ताको तस्तै प्रम्प्टमा जाँदैन; सबै कुरा पहिले स्क्रब गरिन्छ।

  4. जेनेरेट गर्नुहोस्

    AI_GENERATION_ADAPTER symbol token मार्फत एउटा AI provider लाई कल गरिन्छ — यो provider फेर्न मिल्ने हुन्छ। अगाडि बढ्नुअघि response को लम्बाइ, बनावट र सुरक्षा जाँचिन्छ।

  5. पोस्ट-प्रोसेस गर्नुहोस्

    चारवटा कुरा हुन्छन्: एउटा crisis classifier ले संकटको भाषा छ कि भनेर जाँच्छ; एउटा aspect-chip extractor ले एकदेखि तीनवटा ज्योतिष chips निकाल्छ; एउटा anti-claim filter ले निषेधित वाक्यांशहरू हटाउँछ; platform-managed key सँग body लाई AES-256 ले encrypt गरिन्छ।

  6. सुरक्षित गर्नुहोस्

    यो artifact उपयुक्त MongoDB collection मा लेखिन्छ — chapters, journal entries, resonances — द्रुत खोजका लागि userId र personId indexes सहित। पहिले soft-delete; 30 दिनमा PII को hard-delete।

  7. सूचना दिनुहोस्

    database commit पछि एउटा EventEmitter2 event — CHAPTER_COMPLETED, JOURNAL_CREATED — फायर हुन्छ। notifications module ले यसलाई टिप्छ, एउटा inbox item बनाउँछ, र विकल्पका रूपमा एउटा push पठाउँछ (दिनमा एकमा सीमित, quiet hours को सम्मान गर्दै)।

  8. देखाउनुहोस्

    frontend ले authenticated API call मार्फत artifact तान्छ। Hub नयाँ content सँग पुनः render हुन्छ। प्रयोगकर्ता offline थिए भने cache ले हिजोको view देखाउँछ र पुनः जडान हुँदा नयाँ artifact देखिन्छ।

ट्रिगरदेखि सतहसम्म सात चरण, प्रत्येकको नाम ती वास्तवमा गर्ने कामअनुसार राखिएको छ।

चार वटा collections

हरेकले जवाफ दिने queries का लागि indexed।

soulwise_persons

Album entries। userId, status, deletedAt मा indexes। पहिले soft-delete; PII को hard-delete 30 दिनमा।

soulwise_chapters

AI-ले लेखेका chapters, encrypted body। personId, userId, generatedAt मा indexes। छिटो filtering का लागि aspect chips छुट्टै array मा भण्डारण गरिन्छन्।

soulwise_journal_entries

प्रयोगकर्ताले लेखेका reflections, encrypted body। userId, personId, createdAt मा indexes। search का लागि text-indexed body। प्रत्येक entry मा 'private — Luminara लाई नदिनुहोस्' flag।

soulwise_resonances

प्रति bond चार-आयामिक scores। personId मा unique index। Chapter वा journal लेखेपछि service call मार्फत पुनः गणना गरिन्छ।

EDA घटनाहरू

कडा नियम: डेटाबेस कमिट भएपछि मात्र इभेन्ट फायर हुन्छ। क्रस-मोड्युल निर्भरताहरू Symbol injection token मार्फत मात्र, कहिल्यै forwardRef मार्फत होइन। फिचर मोड्युलहरूबीच सिधै service-to-service import गर्न मिल्दैन।

  • SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — कुनै अध्याय इन्क्रिप्ट भई स्टोर भएपछि फायर हुन्छ। Notifications-v2 ले सुन्छ; inbox item बनाउँछ; आवश्यक भए push पठाउँछ।
  • SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — कुनै जर्नल एन्ट्री इन्क्रिप्ट भई स्टोर भएपछि फायर हुन्छ। Resonance service ले सुन्छ; पुनर्गणना सुरु गर्छ।
  • SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — कुनै व्यक्तिको जन्म-डेटा परिवर्तन भएपछि फायर हुन्छ। सिनास्ट्रि क्यास invalidate हुन्छ।
  • SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — notifications-v2 contract अनुसार; push बजेट र quiet hours लाई सम्मान गर्छ।

V-Model spec कठोरता

119 ट्रेस गर्न मिल्ने आवश्यकताहरू, शून्य अन्तर। प्रत्येक आवश्यकता अगाडितिर एक test case (UTP, ITP, STP, E2E) सँग र पछाडितिर एक user story सँग म्याप हुन्छ। 20 user stories। 15 functional requirements। 12 non-functional कोटिहरू। 8 वैश्विक acceptance gates।

कार्यसम्पादन सम्झौता

अध्याय generation 95% request का लागि 30 सेकेन्ड वा सोभन्दा छिटो, BullMQ job duration वितरणसँग नापिएको। API p99 GET latency 1,000 concurrent users मा 500 ms वा सोभन्दा राम्रो, k6 load test मार्फत नापिएको। Frontend TTI सिमुलेटेड 4G मा 3 सेकेन्ड वा सोभन्दा राम्रो, Lighthouse CI मार्फत नापिएको।

सुरक्षा सम्झौता

जर्नल र अध्यायका body हरूका लागि platform-managed key सहित at rest मा AES-256 इन्क्रिप्सन। ट्रान्जिटमा TLS 1.2+; HTTP→HTTPS redirect। 1-घण्टे आयु भएका JWT access token, 30-दिने आयु भएका refresh token, refresh मा rotation। PII को hard-delete अघि 30-दिने window सहितको soft-delete।

पहुँचयोग्यता सम्झौता

prefers-reduced-motion विश्वव्यापी रूपमा सम्मान गरिन्छ — GSAP एनिमेसनहरू केवल opacity फेडमा परिणत हुन्छन्। हरेक interactive तत्वमा VoiceOver र TalkBack लेबल। हरेक रिलिजअघि iOS र Android मा म्यानुअल रूपमा प्रमाणित।

cosmic-story विस्तार गर्नुको सट्टा छुट्टै soulwise-story मोड्युल किन?

किनभने upstream स्पेकले सुविधालाई नयाँ रूपमा बनाउँछ, र अवस्थित मोड्युलभित्र पुनर्निर्माण गर्दा या त v1 अनुभव भाँडिन्छ या पछि fork-then-merge गर्नुपर्छ। नयाँ मोड्युलले v1 लाई अछुतो राख्छ, v2 लाई प्रमाणित हुन दिन्छ, र तयार भएपछि सफासँग migrate गर्छ।

Postgres होइन, MongoDB किन?

अवस्थित My Zodiac AI ब्याकएन्ड MongoDB मा छ; स्विच गर्नु भनेको यो सुविधासँग सम्बन्धित नभएको इन्फ्रास्ट्रक्चर निर्णय हुन्छ। डकुमेन्ट मोडेल पनि अध्याय र जर्नल एन्ट्रीहरूसँग राम्रोसँग मिल्छ — नेस्टेड, फरक-फरक लम्बाइको, blob रूपमा इन्क्रिप्ट गरिएको।

क्यू (queue) को रोजाइ BullMQ किन?

BullMQ Redis मा चल्छ, जुन सेसन र rate-limit का लागि पहिल्यैदेखि स्ट्याकमा छ। कुनै नयाँ इन्फ्रास्ट्रक्चर छैन। बिल्ट-इन retry, timeout, र observability ले कस्टम काम नगरीकनै अध्याय-निर्माणका आवश्यकताहरू पूरा गर्छन्।

upstream स्पेक वास्तवमा कहाँ लेखिएको छ?

आन्तरिक रिपो। यो पृष्ठका सङ्ख्या र कन्ट्र्याक्टहरूले upstream V-Model आर्टिफ्याक्टहरूलाई सारांश रूपमा प्रस्तुत गर्छन्। My Zodiac AI को ब्लग क्लस्टरमा रहेका सार्वजनिक इन्जिनियरिङ ब्लग पोस्टहरू ('cosmic-story-v2' ट्याग गरिएका) ले निर्माणका निश्चित भागहरूमा थप गहिराइमा जान्छन्।

आजै My Zodiac AI प्रयोग गर्नुहोस्

Soulwise ले आफ्ना छालहरू खोल्दै गर्दा, हाम्रो प्रमुख ज्योतिष app पहिल्यै तपाईंको हातमा छ।

ज्योतिष सामग्री आत्मचिन्तन र मनोरञ्जनका लागि हो। यहाँ वर्णन गरिएका Cosmic Story v2 का सुविधाहरू विकासको क्रममा छन्; उपलब्धता बिना सूचना परिवर्तन हुन सक्छ।