Cosmic Story v2 ആർക്കിടെക്ചർ — ഒരു ആഴത്തിലുള്ള പഠനം.

എഞ്ചിനീയർമാർ, PM-മാർ, പത്രപ്രവർത്തകർ, പാർട്ണർഷിപ്പ് സ്കൗട്ടുകൾ എന്നിവർക്കായി. പൂർണ്ണ പൈപ്പ്‌ലൈൻ, നാല് MongoDB കളക്ഷനുകൾ, EDA ഇവന്റുകൾ, V-Model കൃത്യത, പെർഫോമൻസ് ലക്ഷ്യങ്ങൾ, സുരക്ഷ, ആക്സസിബിലിറ്റി — എല്ലാം ഒറ്റ പേജിൽ.

  • നിലവിലുള്ള cosmic-story മൊഡ്യൂളിനൊപ്പമുള്ള ഒരു പുതിയ NestJS മൊഡ്യൂളാണ് soulwise-story. ഫീച്ചർ മൊഡ്യൂളുകൾക്കിടയിൽ നേരിട്ടുള്ള ഇംപോർട്ടുകൾ പൂജ്യം.
  • നാല് MongoDB collections: soulwise_persons, soulwise_chapters, soulwise_journal_entries, soulwise_resonances. AES-256 എൻക്രിപ്റ്റ് ചെയ്ത bodies, ഓരോന്നും സേവിക്കുന്ന queries-നായി index ചെയ്തിരിക്കുന്നു.
  • 28 s timeout ഉള്ള BullMQ queue വഴി async generation. Events പുറത്തുവിടുന്നത് EventEmitter2 വഴി database commit-ന് ശേഷം മാത്രം — phantom inbox items ഇല്ല.
  • V-Model spec: 119 requirements, ഒരു gap പോലുമില്ല. Backend coverage target services-ൽ 85% statement; frontend Pinia stores-ൽ 90%.

വീണ്ടും, engineering വിശദാംശങ്ങളോടെ pipeline

ഓരോ step-നും ഒരു service, ഒരു contract, ഒരു event എന്നിവയുണ്ട്.

  1. ട്രിഗർ

    ഒരു ഉപയോക്തൃ പ്രവൃത്തി — 'Sister-നായി ഇന്നത്തെ അധ്യായം തയ്യാറാക്കുക' — അല്ലെങ്കിൽ ഒരു ഷെഡ്യൂൾ ചെയ്ത ക്രോൺ, ഞായറാഴ്ച 9 a.m. റീക്യാപ് പോലെ, അല്ലെങ്കിൽ ഓരോ 6 മണിക്കൂറിലുമുള്ള വെതർ റിഫ്രഷ് പോലെ.

  2. ക്യൂ

    soulwise-chapter-generation എന്ന പേരുള്ള ഒരു BullMQ ക്യൂവിലാണ് ജോബ് എത്തുന്നത്, കടുത്ത 28-സെക്കൻഡ് ടൈംഔട്ടോടെ. ദീർഘനേരം പ്രവർത്തിക്കുന്ന ജോബുകൾ അവസാനിപ്പിക്കുകയും ഉപയോക്താവിന് 'വീണ്ടും ശ്രമിക്കുക' എന്ന് റിപ്പോർട്ട് ചെയ്യുകയും ചെയ്യുന്നു.

  3. കമ്പോസ്

    ChapterGenerationService നാല്-ഘടക പ്രോംപ്റ്റ് — വ്യക്തി സന്ദർഭം, ജ്യോതിഷം, സിഗ്നൽ, കാഡൻസ് — ഒറ്റ ഇൻപുട്ടാക്കി കൂട്ടിച്ചേർക്കുന്നു. ഒരു റോ ഉപയോക്തൃ PII യും അതേപടി പ്രോംപ്റ്റിലേക്ക് പോകുന്നില്ല; എല്ലാം ആദ്യം വൃത്തിയാക്കപ്പെടുന്നു.

  4. ജനറേറ്റ് ചെയ്യുക

    AI_GENERATION_ADAPTER സിംബൽ ടോക്കൺ വഴി ഒരു AI provider-നെ വിളിക്കുന്നു — ഈ provider മാറ്റാവുന്നതാണ്. തുടരുന്നതിന് മുമ്പ് response-ന്റെ നീളം, ഘടന, സുരക്ഷ എന്നിവ പരിശോധിക്കുന്നു.

  5. പോസ്റ്റ്-പ്രോസസ് ചെയ്യുക

    നാല് കാര്യങ്ങൾ സംഭവിക്കുന്നു: ഒരു crisis classifier പ്രതിസന്ധി ഭാഷ പരിശോധിക്കുന്നു; ഒരു aspect-chip extractor ഒന്നു മുതൽ മൂന്നു വരെ ജ്യോതിഷ chips വലിച്ചെടുക്കുന്നു; ഒരു anti-claim filter നിരോധിത പ്രയോഗങ്ങൾ നീക്കം ചെയ്യുന്നു; platform കൈകാര്യം ചെയ്യുന്ന ഒരു key ഉപയോഗിച്ച് body AES-256 encrypt ചെയ്യുന്നു.

  6. സൂക്ഷിക്കുക

    ഈ ആർട്ടിഫാക്റ്റ് അനുയോജ്യമായ MongoDB collection-ലേക്ക് എഴുതുന്നു — chapters, journal entries, resonances — വേഗത്തിലുള്ള lookup-നായി userId, personId indexes സഹിതം. ആദ്യം soft-delete; 30 ദിവസത്തിൽ PII-യുടെ hard-delete.

  7. അറിയിക്കുക

    ഡാറ്റാബേസ് commit-ന് ശേഷം ഒരു EventEmitter2 event — CHAPTER_COMPLETED, JOURNAL_CREATED — ട്രിഗർ ചെയ്യുന്നു. notifications module അത് എടുത്ത്, ഒരു inbox item സൃഷ്ടിക്കുന്നു, വേണമെങ്കിൽ ഒരു push അയക്കുന്നു (ദിവസത്തിൽ ഒന്നായി പരിമിതപ്പെടുത്തി, quiet hours മാനിച്ച്).

  8. പ്രദർശിപ്പിക്കുക

    ഒരു authenticated API call വഴി frontend ആർട്ടിഫാക്റ്റ് വലിച്ചെടുക്കുന്നു. പുതിയ ഉള്ളടക്കത്തോടെ Hub വീണ്ടും render ചെയ്യുന്നു. ഉപയോക്താവ് offline ആയിരുന്നെങ്കിൽ, cache ഇന്നലത്തെ view കാണിക്കും, വീണ്ടും connect ചെയ്യുമ്പോൾ പുതിയ ആർട്ടിഫാക്റ്റ് പ്രത്യക്ഷപ്പെടും.

ട്രിഗർ മുതൽ സർഫേസ് വരെ ഏഴ് ഘട്ടങ്ങൾ, ഓരോന്നും അത് യഥാർത്ഥത്തിൽ ചെയ്യുന്നതിന്റെ പേരിലാണ് അറിയപ്പെടുന്നത്.

നാല് collections

ഓരോന്നും ഉത്തരം നൽകുന്ന queries-നായി index ചെയ്തിരിക്കുന്നു.

soulwise_persons

Album entries. userId, status, deletedAt എന്നിവയിൽ indexes. ആദ്യം soft-delete; PII-യുടെ hard-delete 30 ദിവസത്തിൽ.

soulwise_chapters

AI എഴുതിയ chapters, എൻക്രിപ്റ്റ് ചെയ്ത body. personId, userId, generatedAt എന്നിവയിൽ indexes. വേഗത്തിലുള്ള filtering-നായി aspect chips ഒരു പ്രത്യേക array ആയി സൂക്ഷിക്കുന്നു.

soulwise_journal_entries

ഉപയോക്താവ് എഴുതിയ reflections, എൻക്രിപ്റ്റ് ചെയ്ത body. userId, personId, createdAt എന്നിവയിൽ indexes. തിരയലിനായി text-indexed body. ഓരോ entry-ക്കും 'private — Luminara-യ്ക്ക് നൽകരുത്' എന്ന flag.

soulwise_resonances

ഓരോ bond-നും നാല്-dimension scores. personId-യിൽ unique index. Chapter അല്ലെങ്കിൽ journal write-ന് ശേഷം service call വഴി വീണ്ടും കണക്കാക്കുന്നു.

EDA ഇവന്റുകൾ

കർശന നിയമം: ഡാറ്റാബേസ് commit-ന് ശേഷം മാത്രമേ events ഫയർ ചെയ്യൂ. Cross-module ഡിപൻഡൻസികൾ Symbol injection tokens വഴി മാത്രം, ഒരിക്കലും forwardRef വഴിയല്ല. Feature modules-കൾക്കിടയിൽ നേരിട്ടുള്ള service-to-service imports പാടില്ല.

  • SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — ഒരു chapter എൻക്രിപ്റ്റ് ചെയ്ത് persist ചെയ്തതിന് ശേഷം ഫയർ ചെയ്യുന്നു. Notifications-v2 ഇത് കേൾക്കുന്നു; inbox item സൃഷ്ടിക്കുന്നു; ഓപ്ഷണലായി push അയയ്ക്കുന്നു.
  • SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — ഒരു journal entry എൻക്രിപ്റ്റ് ചെയ്ത് persist ചെയ്തതിന് ശേഷം ഫയർ ചെയ്യുന്നു. Resonance service ഇത് കേൾക്കുന്നു; recompute ട്രിഗർ ചെയ്യുന്നു.
  • SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — ഒരു വ്യക്തിയുടെ ജനന-ഡാറ്റ മാറുമ്പോൾ ഫയർ ചെയ്യുന്നു. സിനാസ്റ്റ്രി cache invalidate ആകുന്നു.
  • SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — notifications-v2 contract അനുസരിച്ച്; push budget-ഉം quiet hours-ഉം മാനിക്കുന്നു.

V-Model spec കൃത്യത

119 ട്രേസ് ചെയ്യാവുന്ന requirements, പൂജ്യം വിടവുകൾ. ഓരോ requirement-ഉം മുന്നോട്ട് ഒരു test case-ലേക്ക് (UTP, ITP, STP, E2E) ഉം പിന്നോട്ട് ഒരു user story-ലേക്കും മാപ്പ് ചെയ്യുന്നു. 20 user stories. 15 functional requirements. 12 non-functional categories. 8 global acceptance gates.

പ്രകടന കരാർ

Chapter generation requests-ന്റെ 95%-ന് 30 സെക്കൻഡ് അല്ലെങ്കിൽ അതിലും മികച്ചത്, BullMQ job duration distribution-നോട് അളന്നത്. 1,000 concurrent users-ൽ API p99 GET latency 500 ms അല്ലെങ്കിൽ അതിലും മികച്ചത്, k6 load test വഴി അളന്നത്. സിമുലേറ്റ് ചെയ്ത 4G-യിൽ Frontend TTI 3 സെക്കൻഡ് അല്ലെങ്കിൽ അതിലും മികച്ചത്, Lighthouse CI വഴി അളന്നത്.

സുരക്ഷാ കരാർ

Journal-ഉം chapter bodies-ഉം വിശ്രമാവസ്ഥയിൽ platform-managed keys ഉപയോഗിച്ച് AES-256 encryption. ട്രാൻസിറ്റിൽ TLS 1.2+; HTTP→HTTPS redirect. 1-മണിക്കൂർ ലൈഫ്ടൈമുള്ള JWT access tokens, 30-ദിവസ ലൈഫ്ടൈമുള്ള refresh tokens, refresh-ൽ rotation. PII-യുടെ hard-delete-ന് മുമ്പ് 30-ദിവസ window ഉള്ള soft-delete.

ആക്സസിബിലിറ്റി കരാർ

prefers-reduced-motion ആഗോളതലത്തിൽ പരിഗണിക്കപ്പെടുന്നു — GSAP ആനിമേഷനുകൾ opacity-only ഫേഡുകളായി മാറുന്നു. ഓരോ ഇന്ററാക്ടീവ് എലമെന്റിലും VoiceOver, TalkBack ലേബലുകൾ. ഓരോ റിലീസിനു മുമ്പും iOS, Android എന്നിവയിൽ നേരിട്ട് പരിശോധിച്ച് ഉറപ്പാക്കുന്നു.

cosmic-story വിപുലീകരിക്കുന്നതിനു പകരം എന്തുകൊണ്ട് വേറിട്ട ഒരു soulwise-story മൊഡ്യൂൾ?

കാരണം അപ്സ്ട്രീം സ്പെക് ഈ ഫീച്ചർ പുനർനിർമിക്കുന്നു, ഒരു നിലവിലുള്ള മൊഡ്യൂളിനുള്ളിൽ പുനർനിർമിക്കുന്നത് ഒന്നുകിൽ v1 അനുഭവം തകർക്കും അല്ലെങ്കിൽ പിന്നീട് fork-then-merge ചെയ്യേണ്ടി വരും. ഒരു പുതിയ മൊഡ്യൂൾ v1 തൊടാതെ നിലനിർത്തുന്നു, v2 സ്വയം തെളിയിക്കാൻ അനുവദിക്കുന്നു, തയ്യാറാകുമ്പോൾ വൃത്തിയായി മൈഗ്രേറ്റ് ചെയ്യുന്നു.

എന്തുകൊണ്ട് MongoDB, Postgres അല്ല?

നിലവിലുള്ള My Zodiac AI ബാക്കെൻഡ് MongoDB-യിലാണ്; മാറുന്നത് ഈ ഫീച്ചറുമായി ബന്ധമില്ലാത്ത ഒരു ഇൻഫ്രാസ്ട്രക്ചർ തീരുമാനമാകും. ഡോക്യുമെന്റ് മോഡൽ അധ്യായങ്ങൾക്കും ജേണൽ എൻട്രികൾക്കും നന്നായി ഇണങ്ങുന്നു — നെസ്റ്റഡ്, വ്യത്യസ്ത നീളമുള്ളവ, encrypted-as-blob.

എന്തുകൊണ്ട് BullMQ ആണ് ക്യൂ ആയി തിരഞ്ഞെടുത്തത്?

BullMQ Redis-ൽ പ്രവർത്തിക്കുന്നു, അത് സെഷൻ, റേറ്റ്-ലിമിറ്റ് എന്നിവയ്ക്കായി ഇതിനകം സ്റ്റാക്കിലുണ്ട്. പുതിയ ഇൻഫ്രാസ്ട്രക്ചർ വേണ്ട. ബിൽറ്റ്-ഇൻ റീട്രൈ, ടൈംഔട്ട്, observability എന്നിവ കസ്റ്റം പ്ലംബിങ് ഇല്ലാതെ അധ്യായ-ജനറേഷൻ ആവശ്യങ്ങൾ നിറവേറ്റുന്നു.

അപ്സ്ട്രീം സ്പെക് യഥാർത്ഥത്തിൽ എവിടെയാണ് രേഖപ്പെടുത്തിയിരിക്കുന്നത്?

ഇന്റേണൽ റിപ്പോ. ഈ പേജിലെ സംഖ്യകളും കോൺട്രാക്റ്റുകളും അപ്സ്ട്രീം V-Model ആർട്ടിഫാക്റ്റുകളെ പുനരാവിഷ്കരിക്കുന്നു. My Zodiac AI-യുടെ ബ്ലോഗ് ക്ലസ്റ്ററിലെ ('cosmic-story-v2' ടാഗ് ചെയ്ത) പബ്ലിക്-ഫേസിങ് എഞ്ചിനീയറിങ് ബ്ലോഗ് പോസ്റ്റുകൾ ബിൽഡിന്റെ പ്രത്യേക ഭാഗങ്ങളിലേക്ക് കൂടുതൽ ആഴത്തിൽ പോകുന്നു.

ഇന്നുതന്നെ My Zodiac AI പരീക്ഷിക്കൂ

Soulwise അതിന്റെ തിരകൾ തുറക്കുമ്പോൾ, ഞങ്ങളുടെ പ്രധാന ജ്യോതിഷ app ഇപ്പോൾ തന്നെ നിങ്ങളുടെ കൈകളിലുണ്ട്.

ജ്യോതിഷ ഉള്ളടക്കം ചിന്തനത്തിനും വിനോദത്തിനും വേണ്ടിയുള്ളതാണ്. ഇവിടെ വിവരിച്ച Cosmic Story v2 സവിശേഷതകൾ വികസന ഘട്ടത്തിലാണ്; ലഭ്യത മുൻകൂർ അറിയിപ്പില്ലാതെ മാറാം.