soulwise_persons
Mục album. Chỉ mục theo userId, status, deletedAt. Xóa mềm trước; xóa cứng dữ liệu PII sau 30 ngày.
Dành cho kỹ sư, PM, nhà báo và những người tìm kiếm đối tác. Toàn bộ pipeline, 4 collection MongoDB, các sự kiện EDA, sự chặt chẽ của V-Model, mục tiêu hiệu năng, bảo mật và khả năng tiếp cận — tất cả trên một trang.
Mỗi bước đều có một dịch vụ, một hợp đồng và một sự kiện.
Một hành động của người dùng — 'tạo chương hôm nay cho Sister' — hoặc một tác vụ cron đã lên lịch, chẳng hạn bản tóm tắt lúc 9 giờ sáng Chủ Nhật, hay việc làm mới dữ liệu thời tiết mỗi 6 giờ.
Tác vụ sẽ được đưa vào hàng đợi BullMQ tên là soulwise-chapter-generation, với giới hạn thời gian cứng là 28 giây. Các tác vụ chạy quá lâu sẽ bị hủy và báo lại cho bạn dưới dạng 'thử lại'.
ChapterGenerationService tập hợp lời nhắc 4 yếu tố — bối cảnh cá nhân, chiêm tinh, tín hiệu, nhịp điệu — thành 1 đầu vào duy nhất. Không có dữ liệu PII thô nào của người dùng được đưa nguyên văn vào lời nhắc; mọi thứ đều được làm sạch trước.
Một nhà cung cấp AI được gọi thông qua token biểu tượng AI_GENERATION_ADAPTER — nhà cung cấp này có thể thay đổi linh hoạt. Phản hồi sẽ được kiểm tra về độ dài, cấu trúc và độ an toàn trước khi tiếp tục.
Bốn (4) việc diễn ra: một bộ phân loại khủng hoảng kiểm tra ngôn ngữ khủng hoảng; một bộ trích xuất chip khía cạnh lấy ra từ 1 đến 3 chip chiêm tinh; một bộ lọc chống tuyên bố loại bỏ các cách diễn đạt bị cấm; phần nội dung được mã hóa AES-256 bằng khóa do nền tảng quản lý.
Bản ghi được lưu vào đúng collection MongoDB — chapters, journal entries, resonances — kèm chỉ mục userId và personId để tra cứu nhanh. Xóa mềm trước; xóa cứng dữ liệu PII sau 30 ngày.
Một sự kiện EventEmitter2 — CHAPTER_COMPLETED, JOURNAL_CREATED — được kích hoạt sau khi database commit. Module thông báo sẽ tiếp nhận nó, tạo một mục trong hộp thư đến, và tùy chọn gửi push (giới hạn một lần mỗi ngày, tôn trọng giờ yên tĩnh).
Giao diện người dùng lấy artifact qua một lệnh gọi API đã xác thực. Hub sẽ kết xuất lại với nội dung mới. Nếu bạn đang ngoại tuyến, bộ nhớ đệm sẽ hiển thị giao diện của ngày hôm qua, và artifact mới sẽ xuất hiện khi kết nối trở lại.
Được lập chỉ mục theo những câu hỏi mà mỗi mục giải đáp.
Mục album. Chỉ mục theo userId, status, deletedAt. Xóa mềm trước; xóa cứng dữ liệu PII sau 30 ngày.
Các chương do AI viết, phần nội dung được mã hóa. Lập chỉ mục theo personId, userId, generatedAt. Các chip góc chiếu được lưu thành mảng riêng để lọc nhanh.
Suy ngẫm do người dùng viết, phần nội dung được mã hóa. Lập chỉ mục theo userId, personId, createdAt. Nội dung được lập chỉ mục văn bản để tìm kiếm. Mỗi mục có cờ 'riêng tư — không đưa cho Luminara'.
Điểm số 4 chiều cho mỗi mối liên kết. Chỉ mục duy nhất trên personId. Được tính lại qua lệnh gọi dịch vụ sau khi ghi chương hoặc nhật ký.
Quy tắc nghiêm ngặt: sự kiện chỉ kích hoạt sau khi đã commit vào cơ sở dữ liệu. Các phụ thuộc giữa các module được xử lý qua Symbol injection token, không bao giờ qua forwardRef. Không import service-to-service trực tiếp giữa các feature module.
SoulwiseEvents.CHAPTER_COMPLETED — SoulwiseEvents.CHAPTER_COMPLETED — kích hoạt sau khi một chương được mã hóa và lưu trữ. Notifications-v2 lắng nghe; tạo mục trong hộp thư; tùy chọn gửi thông báo đẩy.SoulwiseEvents.JOURNAL_CREATED — SoulwiseEvents.JOURNAL_CREATED — kích hoạt sau khi một mục nhật ký được mã hóa và lưu trữ. Dịch vụ Resonance lắng nghe; kích hoạt việc tính toán lại.SoulwiseEvents.PERSON_BIRTH_UPDATED — SoulwiseEvents.PERSON_BIRTH_UPDATED — kích hoạt sau khi dữ liệu ngày sinh của một người thay đổi. Bộ nhớ đệm chiêm tinh quan hệ sẽ bị vô hiệu hóa.SoulwiseEvents.PUSH_REQUESTED — SoulwiseEvents.PUSH_REQUESTED — theo hợp đồng notifications-v2; tôn trọng ngân sách push và giờ yên tĩnh.119 yêu cầu có thể truy vết, zero khoảng trống. Mỗi yêu cầu đều ánh xạ xuôi đến một ca kiểm thử (UTP, ITP, STP, E2E) và ánh xạ ngược về một user story. 20 user story. 15 yêu cầu chức năng. 12 nhóm yêu cầu phi chức năng. 8 cổng chấp nhận toàn cục.
Tạo chương 30 giây hoặc nhanh hơn cho 95% số yêu cầu, đo theo phân bố thời lượng job BullMQ. Độ trễ API p99 GET 500 ms hoặc thấp hơn với 1,000 người dùng đồng thời, đo bằng kiểm thử tải k6. TTI frontend 3 giây hoặc nhanh hơn trên mạng 4G mô phỏng, đo bằng Lighthouse CI.
Mã hóa AES-256 khi lưu trữ với khóa do nền tảng quản lý cho nội dung nhật ký và chương. TLS 1.2+ khi truyền tải; chuyển hướng HTTP→HTTPS. Token truy cập JWT có thời hạn 1 giờ, token làm mới có thời hạn 30 ngày, xoay vòng khi làm mới. Xóa mềm với khoảng thời gian 30 ngày trước khi xóa cứng dữ liệu cá nhân (PII).
prefers-reduced-motion được tôn trọng trên toàn cục — các hiệu ứng GSAP chuyển thành hiệu ứng mờ dần chỉ thay đổi độ trong suốt. Nhãn VoiceOver và TalkBack trên mọi phần tử tương tác. Được kiểm tra thủ công trên iOS và Android trước mỗi lần phát hành.
Bởi vì bản đặc tả phía trên sẽ xây dựng lại tính năng này, và việc xây dựng lại bên trong một module hiện có sẽ hoặc làm hỏng trải nghiệm v1, hoặc buộc bạn phải tách nhánh rồi gộp lại sau. Một module mới giữ nguyên v1, để v2 được kiểm chứng, và di chuyển gọn gàng khi sẵn sàng.
Backend hiện tại của My Zodiac AI đang chạy trên MongoDB; việc chuyển đổi sẽ là một quyết định về hạ tầng không liên quan đến tính năng này. Mô hình tài liệu cũng phù hợp với các chương và mục nhật ký — dạng lồng nhau, độ dài thay đổi, được mã hóa dưới dạng blob.
BullMQ chạy trên Redis, vốn đã có sẵn trong stack để quản lý session và rate-limit. Không cần thêm hạ tầng mới. Cơ chế retry, timeout và observability tích hợp sẵn đáp ứng đủ nhu cầu tạo chương mà không cần thiết lập thủ công.
Kho lưu trữ nội bộ. Các con số và hợp đồng trên trang này diễn giải lại các tài liệu V-Model từ thượng nguồn. Các bài đăng blog kỹ thuật công khai trên cụm blog của My Zodiac AI (gắn thẻ 'cosmic-story-v2') đi sâu hơn vào những phần cụ thể của quá trình xây dựng.
Trong khi Soulwise mở ra những con sóng của mình, ứng dụng chiêm tinh chủ lực của chúng tôi đã nằm sẵn trong tay bạn.
Nội dung chiêm tinh chỉ mang tính chiêm nghiệm và giải trí. Các tính năng của Cosmic Story v2 được mô tả ở đây đang trong quá trình phát triển; khả năng cung cấp có thể thay đổi mà không cần báo trước.