soulwise_persons
Entri album. Indeks pada userId, status, deletedAt. Hapus lembut dulu; hapus permanen PII pada 30 hari.
Untuk para insinyur, PM, jurnalis, dan pencari peluang kemitraan. Pipeline lengkap, empat koleksi MongoDB, event EDA, ketelitian V-Model, target performa, keamanan, dan aksesibilitas — semua dalam satu halaman.
Setiap langkah memiliki layanan, kontrak, dan event.
Tindakan pengguna — 'hasilkan bab hari ini untuk Saudari' — atau cron terjadwal, seperti rekap Minggu pukul 9 pagi, atau penyegaran cuaca setiap 6 jam.
Pekerjaan masuk ke antrian BullMQ bernama soulwise-chapter-generation, dengan batas waktu keras 28 detik. Pekerjaan yang berjalan lama dihentikan dan dilaporkan kepada pengguna sebagai 'coba lagi'.
ChapterGenerationService menggabungkan prompt empat faktor — konteks orang, astrologi, sinyal, irama — menjadi satu input. Tidak ada data pribadi pengguna mentah yang masuk ke dalam prompt secara langsung; semuanya dibersihkan terlebih dahulu.
Penyedia AI dipanggil melalui token simbol AI_GENERATION_ADAPTER — penyedia dapat diganti. Respons diperiksa untuk panjang, bentuk, dan keamanan sebelum melanjutkan.
Empat hal terjadi: pengklasifikasi krisis memeriksa bahasa krisis; ekstraktor aspect-chip mengambil satu hingga tiga chip astrologi; filter anti-klaim menghapus frasa terlarang; isi dienkripsi AES-256 dengan kunci yang dikelola platform.
Artefak ditulis ke koleksi MongoDB yang sesuai — chapters, journal entries, resonances — dengan indeks userId dan personId untuk pencarian cepat. Soft-delete terlebih dahulu; hard-delete data PII pada 30 hari.
Sebuah event EventEmitter2 — CHAPTER_COMPLETED, JOURNAL_CREATED — dipicu setelah commit database. Modul notifikasi menangkapnya, membuat item kotak masuk, dan opsional mengirim push (dibatasi satu kali per hari, menghormati jam tenang).
Frontend mengambil artefak melalui panggilan API yang terautentikasi. Hub merender ulang dengan konten baru. Jika pengguna sedang offline, cache menyajikan tampilan kemarin dan artefak baru muncul saat terhubung kembali.
Diindeks untuk kueri yang dijawab oleh masing-masing.
Entri album. Indeks pada userId, status, deletedAt. Hapus lembut dulu; hapus permanen PII pada 30 hari.
Bab yang ditulis AI, badan dienkripsi. Indeks pada personId, userId, generatedAt. Chip aspek disimpan sebagai array terpisah untuk pemfilteran cepat.
Refleksi yang ditulis pengguna, badan dienkripsi. Indeks pada userId, personId, createdAt. Badan yang diindeks teks untuk pencarian. Bendera 'pribadi — jangan umpankan ke Luminara' per entri.
Skor empat dimensi per ikatan. Indeks unik pada personId. Dihitung ulang melalui panggilan layanan setelah bab atau jurnal ditulis.
Aturan ketat: event hanya dipicu setelah komit database. Ketergantungan antar modul melalui token injeksi Simbol, tidak pernah melalui forwardRef. Tidak ada impor langsung antar layanan antar modul fitur.
SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — dipicu setelah bab selesai dienkripsi dan dipersisten. Notifications-v2 mendengarkan; membuat item kotak masuk; secara opsional mengirim push.SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — dipicu setelah entri jurnal dienkripsi dan dipersisten. Layanan resonansi mendengarkan; memicu penghitungan ulang.SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — dipicu setelah data kelahiran seseorang berubah. Cache sinastri menjadi tidak valid.SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — sesuai kontrak notifications-v2; menghormati anggaran push dan jam tenang.119 kebutuhan yang dapat dilacak, nol celah. Setiap kebutuhan terpetakan maju ke sebuah kasus uji (UTP, ITP, STP, E2E) dan mundur ke sebuah user story. 20 user story. 15 kebutuhan fungsional. 12 kategori non-fungsional. 8 gerbang penerimaan global.
Pembangkitan bab 30 detik atau lebih baik untuk 95% permintaan, diukur terhadap distribusi durasi pekerjaan BullMQ. Latensi GET p99 API 500 ms atau lebih baik pada 1.000 pengguna bersamaan, diukur melalui pengujian beban k6. TTI Frontend 3 detik atau lebih baik pada simulasi 4G, diukur melalui Lighthouse CI.
Enkripsi AES-256 saat diam dengan kunci yang dikelola platform untuk badan jurnal dan bab. TLS 1.2+ dalam transit; pengalihan HTTP→HTTPS. Token akses JWT dengan masa aktif 1 jam, token refresh dengan masa aktif 30 hari, rotasi saat refresh. Penghapusan lunak dengan jendela 30 hari sebelum penghapusan permanen PII.
preferensi gerakan berkurang dihormati secara global — animasi GSAP menjadi fade opacity-saja. Label VoiceOver dan TalkBack pada setiap elemen interaktif. Diverifikasi secara manual di iOS dan Android sebelum setiap rilis.
Karena spesifikasi upstream membangun ulang fitur, dan membangun ulang di dalam modul yang ada akan merusak pengalaman v1 atau fork-then-merge kemudian. Modul baru menjaga v1 tetap utuh, membiarkan v2 terbukti, dan bermigrasi dengan bersih ketika siap.
Backend My Zodiac AI yang ada saat ini menggunakan MongoDB; beralih akan berarti keputusan infrastruktur yang tidak terkait dengan fitur ini. Model dokumen juga cocok untuk bab dan entri jurnal — bersarang, panjang bervariasi, dan dienkripsi sebagai blob.
BullMQ berjalan di Redis, yang sudah ada di stack untuk sesi dan rate-limit. Tidak ada infrastruktur baru. Retry bawaan, timeout, dan observabilitas menutupi kebutuhan generasi bab tanpa perlu plumbing khusus.
Internal repo. Angka-angka dan kontrak pada halaman ini memparafrasekan artefak V-Model upstream. Posting blog teknik yang menghadap publik di cluster blog My Zodiac AI (diberi tag 'cosmic-story-v2') membahas lebih dalam tentang bagian-bagian tertentu dari pembangunan.
Saat Soulwise membuka gelombangnya, aplikasi astrologi andalan kami sudah ada di genggamanmu.
Konten astrologi bersifat untuk refleksi dan hiburan. Fitur-fitur Cosmic Story v2 yang dijelaskan di sini sedang dalam pengembangan; ketersediaan dapat berubah tanpa pemberitahuan terlebih dahulu.