Designing K-Saju: turning a traditional birth-chart system into a lightweight K-culture web product
I recently shipped the first public version of K-Saju, a small web project that reimagines Korean Saju / Four Pillars as a K-culture character card and friend chemistry experience.
Live: https://ksaju.piyaklabs.com?ref=devto
Personal build log, in Korean: https://log.piyaklabs.com/posts/dev/k-saju-project-open/
The product pitch is intentionally simple:
Hatch your K-drama / K-pop style character in about 10 seconds, then check your chemistry with a friend.
This post is not a deep implementation guide yet. Instead, it is a product/technical design write-up: how I framed an old cultural system for global users, what I chose to hide, what I chose to simplify, and why the first version focuses on birth date, share cards, and 1:1 chemistry.
The problem: Saju is interesting, but the default UX is heavy
In Korea, Saju is familiar enough that many people have encountered it at least once: New Year readings, naming, relationship compatibility, or just casual curiosity.
For a global audience, though, the default packaging has problems:
- The terminology is unfamiliar.
- It can sound deterministic or fatalistic.
- Traditional explanations can be dense.
- Some users may connect it with serious fortune-telling rather than playful self-discovery.
- Many English-speaking users do not know their exact birth time.
So the core product question became:
How can I preserve the structure of Saju without making the first user experience feel like a heavy fortune report?
My answer for version 1.0 was to treat Saju as the underlying engine and K-culture archetypes as the user-facing layer.
Product frame: not “your destiny”, but “your character card”
A lot of personality products work because they give users language they can share:
- “I am an INFJ.”
- “I am a Leo.”
- “This is my role in the group.”
Saju has enough structure to support that kind of experience, but the raw vocabulary is not friendly for a first session. So K-Saju leads with concepts such as:
| Traditional idea | User-facing language |
|---|---|
| Saju / Four Pillars | K-Saju Birth Chart |
| Five Elements | Element Balance |
| Day Master / core stem | Core Energy |
| Compatibility | Chemistry |
| Harmony | Natural Bond |
| Clash | Tension Point |
This is not meant to erase the origin or tradition. It is an onboarding layer.
The cultural note is also important: K-Saju is inspired by modern Korean Saju culture, but Saju belongs to the broader East Asian Four Pillars tradition. The product should never claim that Korea uniquely invented the system.
Guardrail: avoid deterministic claims
One design rule I keep coming back to:
The product should feel like entertainment and self-reflection, not a fixed prediction about someone’s life.
That affects the copy everywhere.
Prefer:
- “You may tend to…”
- “This pattern can show up as…”
- “Your growth point might be…”
- “This chemistry works best when…”
Avoid:
- “You will definitely…”
- “This person is your soulmate.”
- “You should break up.”
- “Your future is…”
This is partly a safety issue, but it is also a product issue. Global users who enjoy astrology apps, MBTI, tarot, or character tests often want recognition and conversation starters. They do not necessarily want a heavy fatalistic reading.
Why birth date first?
Traditional Four Pillars uses year, month, day, and hour. The hour pillar matters, but it creates a very practical funnel problem:
Many global users do not know their birth time.
If birth time is required, the product loses a large portion of curious users before they see any value.
So the first version is designed around a birth-date-first experience:
- Ask for enough information to generate a lightweight card.
- Make the free result feel complete.
- Treat birth time as an optional deeper layer later, not a blocker.
That meant the flagship result had to work from year/month/day and element balance, while leaving room for premium or advanced readings later.
System shape
The product architecture is intentionally split into layers:
Birth input
-> deterministic Saju / calendar calculation
-> structured chart features
-> rule-based interpretation and archetype mapping
-> friendly K-culture copy
-> result card / OG image / share flow
The important constraint is that an LLM should not calculate the chart.
I like LLMs for rewriting, summarizing, and tone variation, but the birth-chart calculation should be deterministic and testable. If the calculation is wrong, the entire product loses credibility.
In the current repo, the engine is a separate package from the web app:
engine/ -> deterministic calculation and card data
web/ -> Next.js app, UI, result pages, share/OG routes
The web app is built with Next.js and React, while the engine is a small TypeScript package. Keeping the engine separate makes it easier to test the calculation logic independently from the UI.
Mapping chart features to characters
The fun part is the interpretation layer.
Instead of showing traditional terms first, K-Saju maps structured chart features into shareable archetypes:
- K-Saju type
- Element Balance
- Core Energy
- K-pop-style group role
- K-drama-style character role
- relationship style
- friend chemistry
The archetypes must feel explainable, not random.
For example, if a result has strong expressive/fire-like energy, a user-facing role might feel closer to a “Stage Spark” than a quiet strategist. If a result is more grounding and stabilizing, it might map toward a “Team Anchor” or warm support role.
The exact mapping rules can evolve, but the product principle is fixed:
The result should pass the user’s “that sounds like me” gut check.
If the card feels random, no one will share it.
Pop culture without IP trouble
Because the product uses K-pop and K-drama language, there is an obvious trap: referencing real idols, real groups, real shows, or brand names.
I avoid that.
K-Saju uses generic archetypes, not real people or fictional characters. Examples of the style:
- Stage Spark
- Team Anchor
- Mood Reader
- Detail Ace
- Bold Main Character
- Mysterious Second Lead
- Warm Best Friend
This keeps the product legally safer and makes the archetypes more reusable. It also helps the service feel like its own world rather than a derivative fan quiz.
Designing for sharing: cards before reports
For this kind of product, the free result card matters more than the paid report.
A long private report might be useful, but it does not naturally travel. A card does.
So version 1.0 focuses on:
- a mobile-first result page
- a visually distinct card
- a shareable poster / OG image
- a result that can be sent to a friend
- a direct path into 1:1 chemistry
The ideal loop is:
I get my card
-> I share it
-> a friend tries theirs
-> we compare chemistry
-> the friend shares again
That is why the first product wedge is not “build the most complete Saju report.” It is “make the first card interesting enough to share.”
Why 1:1 chemistry is in v1
A solo personality card is fun, but relationship content is more viral.
People do not just want to know “What am I?” They also want to know:
- What are we together?
- Why do we click?
- Where is the tension?
- Are we co-stars, rivals, or a chaotic duo?
So K-Saju 1.0 includes both:
- My K-Saju — the personal character card.
- Friend chemistry — a 1:1 comparison flow.
Again, the language stays soft. The chemistry result should be a conversation starter, not a verdict.
Mascot and visual direction
Piyaklabs has a yellow chick mascot. For K-Saju, I decided to use the mascot as the brand anchor.
That solved a tone problem.
Saju can look mystical, serious, or heavy. A small chick character makes the product feel warmer and more approachable. The user is not receiving a scary fortune report; they are hatching a K-style character card.
For the result images, I prefer pre-made static assets mapped to result types instead of real-time per-user image generation.
Reasons:
- faster page loads
- more consistent art direction
- easier QA
- fewer unpredictable image-generation failures
- stronger brand identity
The current direction is to vary outfit, background, props, expression, and mood by result type while keeping the mascot recognizable.
What shipped in 1.0
The first public version includes:
- personal K-Saju result flow
- birth-date-based result generation
- element / role / archetype style result copy
- share-oriented result card
- 1:1 friend chemistry flow
- poster/OG image direction
The next step is premium functionality: deeper readings, richer relationship reports, and more detailed result layers.
I am intentionally not starting with a subscription or a massive app. The current goal is to validate whether users:
- complete the birth input,
- like the card,
- share it,
- invite a friend into the chemistry flow,
- show interest in a deeper report.
Lessons so far
A few early product lessons from building this:
1. Translation is not localization
Translating Saju terms directly would make the UI technically accurate but emotionally distant. The product needs to translate the experience, not just the words.
2. The hard part is not only calculation
The calculation engine matters, but the product succeeds or fails on interpretation, tone, and shareability.
3. Optional inputs can be more powerful than complete inputs
If requiring birth time kills the funnel, it is better to make the first experience work without it and reserve deeper precision for later.
4. Cultural products need guardrails
The service needs to be clear about origin, avoid deterministic advice, and avoid real pop-culture IP references.
5. A small visual system can carry a lot
The mascot is not decoration. It changes the emotional weight of the product.
Try it
You can try the current version here:
https://ksaju.piyaklabs.com?ref=devto
The Korean personal build log is here:
https://log.piyaklabs.com/posts/dev/k-saju-project-open/
I will probably write a more technical follow-up later about the engine, result mapping, and OG image generation pipeline.
Top comments (0)