soulwise_persons
Album entries। userId, status, deletedAt मा indexes। पहिले soft-delete; PII को hard-delete 30 दिनमा।
इन्जिनियर, PM, पत्रकार र पार्टनरशिप स्काउटहरूका लागि। सम्पूर्ण पाइपलाइन, चारवटा MongoDB कलेक्सन, EDA इभेन्ट, V-Model कठोरता, परफर्मेन्स लक्ष्य, सुरक्षा र पहुँचयोग्यता — सबै एउटै पृष्ठमा।
हरेक step मा एउटा service, एउटा contract, र एउटा event हुन्छ।
प्रयोगकर्ताको कुनै कार्य — 'Sister का लागि आजको अध्याय बनाऊ' — वा कुनै तय गरिएको cron, जस्तै आइतबार 9 a.m. को रिक्याप, वा हरेक-6-घण्टाको मौसम रिफ्रेस।
यो जब soulwise-chapter-generation नामको BullMQ क्युमा पुग्छ, जसको कडा 28-सेकेन्डको टाइमआउट हुन्छ। लामो चल्ने जबहरू बन्द गरिन्छन् र प्रयोगकर्तालाई 'फेरि प्रयास गर्नुहोस्' भनेर देखाइन्छ।
ChapterGenerationService ले चार-कारक प्रम्प्ट — व्यक्ति सन्दर्भ, ज्योतिष, संकेत, ताल — लाई एउटै इनपुटमा जोड्छ। कुनै पनि कच्चा प्रयोगकर्ता PII जस्ताको तस्तै प्रम्प्टमा जाँदैन; सबै कुरा पहिले स्क्रब गरिन्छ।
AI_GENERATION_ADAPTER symbol token मार्फत एउटा AI provider लाई कल गरिन्छ — यो provider फेर्न मिल्ने हुन्छ। अगाडि बढ्नुअघि response को लम्बाइ, बनावट र सुरक्षा जाँचिन्छ।
चारवटा कुरा हुन्छन्: एउटा crisis classifier ले संकटको भाषा छ कि भनेर जाँच्छ; एउटा aspect-chip extractor ले एकदेखि तीनवटा ज्योतिष chips निकाल्छ; एउटा anti-claim filter ले निषेधित वाक्यांशहरू हटाउँछ; platform-managed key सँग body लाई AES-256 ले encrypt गरिन्छ।
यो artifact उपयुक्त MongoDB collection मा लेखिन्छ — chapters, journal entries, resonances — द्रुत खोजका लागि userId र personId indexes सहित। पहिले soft-delete; 30 दिनमा PII को hard-delete।
database commit पछि एउटा EventEmitter2 event — CHAPTER_COMPLETED, JOURNAL_CREATED — फायर हुन्छ। notifications module ले यसलाई टिप्छ, एउटा inbox item बनाउँछ, र विकल्पका रूपमा एउटा push पठाउँछ (दिनमा एकमा सीमित, quiet hours को सम्मान गर्दै)।
frontend ले authenticated API call मार्फत artifact तान्छ। Hub नयाँ content सँग पुनः render हुन्छ। प्रयोगकर्ता offline थिए भने cache ले हिजोको view देखाउँछ र पुनः जडान हुँदा नयाँ artifact देखिन्छ।
हरेकले जवाफ दिने queries का लागि indexed।
Album entries। userId, status, deletedAt मा indexes। पहिले soft-delete; PII को hard-delete 30 दिनमा।
AI-ले लेखेका chapters, encrypted body। personId, userId, generatedAt मा indexes। छिटो filtering का लागि aspect chips छुट्टै array मा भण्डारण गरिन्छन्।
प्रयोगकर्ताले लेखेका reflections, encrypted body। userId, personId, createdAt मा indexes। search का लागि text-indexed body। प्रत्येक entry मा 'private — Luminara लाई नदिनुहोस्' flag।
प्रति bond चार-आयामिक scores। personId मा unique index। Chapter वा journal लेखेपछि service call मार्फत पुनः गणना गरिन्छ।
कडा नियम: डेटाबेस कमिट भएपछि मात्र इभेन्ट फायर हुन्छ। क्रस-मोड्युल निर्भरताहरू 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 लाई सम्मान गर्छ।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 मा म्यानुअल रूपमा प्रमाणित।
किनभने upstream स्पेकले सुविधालाई नयाँ रूपमा बनाउँछ, र अवस्थित मोड्युलभित्र पुनर्निर्माण गर्दा या त v1 अनुभव भाँडिन्छ या पछि fork-then-merge गर्नुपर्छ। नयाँ मोड्युलले v1 लाई अछुतो राख्छ, v2 लाई प्रमाणित हुन दिन्छ, र तयार भएपछि सफासँग migrate गर्छ।
अवस्थित My Zodiac AI ब्याकएन्ड MongoDB मा छ; स्विच गर्नु भनेको यो सुविधासँग सम्बन्धित नभएको इन्फ्रास्ट्रक्चर निर्णय हुन्छ। डकुमेन्ट मोडेल पनि अध्याय र जर्नल एन्ट्रीहरूसँग राम्रोसँग मिल्छ — नेस्टेड, फरक-फरक लम्बाइको, blob रूपमा इन्क्रिप्ट गरिएको।
BullMQ Redis मा चल्छ, जुन सेसन र rate-limit का लागि पहिल्यैदेखि स्ट्याकमा छ। कुनै नयाँ इन्फ्रास्ट्रक्चर छैन। बिल्ट-इन retry, timeout, र observability ले कस्टम काम नगरीकनै अध्याय-निर्माणका आवश्यकताहरू पूरा गर्छन्।
आन्तरिक रिपो। यो पृष्ठका सङ्ख्या र कन्ट्र्याक्टहरूले upstream V-Model आर्टिफ्याक्टहरूलाई सारांश रूपमा प्रस्तुत गर्छन्। My Zodiac AI को ब्लग क्लस्टरमा रहेका सार्वजनिक इन्जिनियरिङ ब्लग पोस्टहरू ('cosmic-story-v2' ट्याग गरिएका) ले निर्माणका निश्चित भागहरूमा थप गहिराइमा जान्छन्।
Soulwise ले आफ्ना छालहरू खोल्दै गर्दा, हाम्रो प्रमुख ज्योतिष app पहिल्यै तपाईंको हातमा छ।
ज्योतिष सामग्री आत्मचिन्तन र मनोरञ्जनका लागि हो। यहाँ वर्णन गरिएका Cosmic Story v2 का सुविधाहरू विकासको क्रममा छन्; उपलब्धता बिना सूचना परिवर्तन हुन सक्छ।