PRODUCT CASE
SajuBase
A live paid service where deterministic calculation and context-sensitive AI consultation have separate responsibilities.
Inspect now

Why This Product Needed to Exist
SajuBase contains two fundamentally different problems.
Calculating the natal chart and ten-year cycles from birth date, time, and location must return the same result for the same input. What users actually ask, however, is what that result means for their current relationships, work, or decision. That answer depends on context.
If a language model owns both, calculations can drift and it becomes difficult to distinguish a calculation failure from an interpretation failure. A static chart alone, however, does not reach the user's real question.
Separate What Must Repeat From What Must Adapt
A TypeScript engine produces structured chart data. The consultation model receives only those computed results and the user's current question.
Users create profiles, speak with a primary consultant, and move into focused conversations about relationships, compatibility, career, or timing. Facts and interests they approve can become memory candidates, and users can edit, disable, or delete them.
Full Service Lifecycle
- Birth date, time, and location-based calculation
- Primary consultation using the calculated data and current question
- Specialized consultations and conversation history
- Long-term memory, conversation summaries, and user controls
- Free sessions, timed access, subscription, and guest checkout
- Payment history, cancellation, support, refund, and account deletion
Responsibility Split
| Owner | Responsibility |
|---|---|
| Calculation engine | Reproducible chart and cycle data |
| Consultation model | Interpret structured results in the language of the user's current concern |
| Memory system | Manage long-term memory and summaries with source and scope |
| Payment and account system | Connect purchase state, access rights, and data ownership |
| User | Control consultation direction and memory storage, correction, and deletion |
Problems Solved While Building
Deterministic Core: Keep Reproducible Rules Outside Language Generation
- Observed problem: Time zone, location, seasonal boundaries, and domain rules could produce inconsistent results when left to a model.
- Reasoning: Reproducible domain calculations belong in code; the model should interpret completed data.
- Implementation: A TypeScript engine calculates and structures the chart before consultation.
- What changed: Calculation, prompt, memory, and model response became separate failure domains that could be debugged independently.
User-Controlled Memory: Make Memory Correctable, Not Merely Abundant
- Observed problem: A model inference or stale interest stored as fact could distort every later conversation.
- Reasoning: Source, scope, and user control mattered more than maximum memory volume.
- Implementation: Long-term memory and same-conversation summaries were separated. Explicit facts, preferences, and goals were stored conservatively, with no-memory mode and edit, archive, and delete controls.
- What changed: Consultation could continue across sessions without taking memory away from the user.
Entitlement Recovery: Align Payment, Access, and Ownership
- Observed problem: Guest consultation and checkout followed by OAuth sign-up could lose access, duplicate ownership, or restore stale temporary state.
- Reasoning: Payment state, conversation state, and account ownership needed separate, verifiable transitions.
- Implementation: Limited linking data and duplicate checks connect entitlements and sessions during the auth callback, with a defined recovery order.
- What changed: Users can continue a pre-login consultation and purchase after registration, and recover if the transition fails.
Inspect the Work
- Open the live SajuBase service
- View the screen where users revisit topics discovered in consultation
- Inspect the responsibility split across calculation, consultation, memory, payment, and recovery
The product judgment here is the separation of reproducible domain logic from adaptive generation, then carrying that boundary through memory, access, and recovery in a live paid service.