TL;DR
I just launched Cheonmyeongdang (sajuapp.app) — a global, plain-language take on Korean Saju (Four Pillars of Destiny), a 1,200-year-old East Asian reading system. Web + Android, 9 languages, transparent pricing, 24h refund. This is the story of how a single developer shipped a globally-localized fortune SaaS, and a tour of the stack and the lessons.
- Web: https://sajuapp.app
- Android: https://play.google.com/store/apps/details?id=com.cheonmyeongdang.app
What is Korean Saju?
Saju (사주, 四柱) literally means "Four Pillars." Each pillar is a pair of characters representing a person's year, month, day, and hour of birth, mapped onto the East Asian sexagenary cycle (10 Heavenly Stems × 12 Earthly Branches = 60 combinations). The result is an eight-character (Bazi / 八字) chart that practitioners have used for over 1,200 years to talk about personality, relationships, timing, and life direction.
If you've heard of Bazi in Chinese culture, Saju is the Korean tradition of the same system, with its own schools of interpretation (Jaseop Saju, Shinsal, Yong-shin theory, etc.) and a deep modern literature in Korea.
In the West, the closest cultural analog is Western astrology, but Saju is structurally different:
- It uses your lunar/solar birth time mapped to stems and branches, not zodiac signs.
- It analyzes five elements (Wood, Fire, Earth, Metal, Water) flowing through your chart.
- It tracks 10-year "Great Luck" (Daewoon) cycles and yearly luck (Sewoon).
For tens of millions of Koreans, asking a Saju master before a big decision — marriage, a career move, a child's name — is still completely normal. And with the global K-culture wave, more and more non-Korean users are curious.
Why I built this
When I dug into the existing landscape, I found a strange gap:
- Korean-only services: Beautiful, deeply traditional, but completely impenetrable if you don't read Korean and don't already know the jargon.
- Western "Bazi calculators": Often surface-level, generic, and miss a lot of the structure modern Korean practitioners actually use.
- Random astrology apps: Branded as "Eastern" but mostly stitched together from generic horoscope content.
So the bet for Cheonmyeongdang was simple:
Take serious, modern Korean Saju, render the output in plain language, and ship it globally with proper localization and honest pricing.
No mystical voice. No "you are a chosen one." Just: "Here's your chart. Here's what each pillar means. Here's what the next 10 years look like in this tradition."
The product, in one screen
Each reading produces:
- Your Four Pillars chart (year / month / day / hour), with stems and branches and Korean + romanized labels.
- Five Elements balance (which of Wood / Fire / Earth / Metal / Water dominate, which are missing).
- Day Master interpretation — the central character that anchors the whole reading.
- 10-year Daewoon cycles with a plain-language summary for each decade.
- This year and next year quick read.
- Optional deep dives: love compatibility, career direction, name analysis.
Everything is written so a first-time reader can follow along without a glossary tab open.
Tech stack
This is a one-person product, so every choice was about leverage and avoiding ops time.
Frontend / app shell
- Next.js (App Router) for the marketing site, blog, and web app.
- Capacitor to wrap the same web codebase into the Android app. One codebase, one design system, two distribution channels.
- Hosted on Vercel for instant rollbacks and zero-config previews.
Localization
- 9 languages at launch: Korean, English, Japanese, Chinese (Simplified), Chinese (Traditional), Vietnamese, Thai, Indonesian, Spanish.
- Translation pipeline scripted, so adding a new language is a config change, not a refactor.
- Region-aware pricing presentation (KRW first for Korean, USD for global routes).
Payments
- KG Inicis V2 for domestic Korean cards — table stakes for the Korean market.
- PayPal Subscriptions for the global side — recurring billing in dozens of currencies, no Stripe required.
- One-time Daily Pass + Monthly subscription + Annual plan, all wired through the same
confirm-paymentendpoint to stay under Vercel's Hobby function limits.
Saju engine
- Custom calculation core that handles solar/lunar conversion, true-solar-time correction, and timezone math.
- A long table of stem/branch interactions, Yong-shin (favorable element) logic, and Shinsal (special star) flags.
- Output passes through a plain-language renderer so the reading doesn't read like a 19th-century manuscript.
Distribution
- Web at sajuapp.app.
- Android via Play Store: https://play.google.com/store/apps/details?id=com.cheonmyeongdang.app
- Blog + SEO at sajuapp.app/blog (the canonical for this very post).
Pricing — transparent on purpose
I wanted no dark patterns, no fake "first reading free" that buries the actual cost. Here is the full price list:
| Plan | Price | Notes |
|---|---|---|
| Daily Pass | ₩1,500 | One day of access. No subscription. |
| Monthly | ₩29,900 / mo | 3-day free trial, cancel anytime. |
| Annual | ₩287,040 / yr | 20% off vs. monthly. |
And — important — a 24-hour refund guarantee on any plan. If the reading isn't what you expected, you can refund yourself directly from the account page within 24 hours. No "contact support, wait 5 business days" loop.
For global users, those KRW prices localize to USD / JPY / EUR / VND / THB / IDR / etc. at checkout.
Lessons learned building a one-person global Saju SaaS
Some of these are obvious in retrospect. They were not obvious while I was writing the code.
1. Localization is a product feature, not a translation task
Shipping 9 languages is not "run the strings through a translator." Korean Saju vocabulary doesn't have a clean 1:1 mapping in most languages. "천간 (Heavenly Stem)" needed a different metaphor for an English reader than a Japanese reader (who already has cultural context for 天干). I ended up writing two layers: a translation layer (literal), and a localization layer (cultural rewording). Skipping the second layer makes you sound like a bad horoscope app, fast.
2. The web + Android via Capacitor combo is underrated
I considered React Native, Flutter, native Android, and TWA / Bubblewrap. Capacitor + Next.js won because:
- One codebase ships to both web and Play Store.
- The blog, the marketing pages, and the app share the same components and styles.
- Updates to non-native logic don't require a Play Store review.
For a one-person SaaS where the core value is content, not platform-specific UX, this combo is hard to beat.
3. Payment plumbing is the longest tail
The Saju engine took weeks. Wiring up KG Inicis V2 + PayPal + receipts + refunds + tax flags + subscription lifecycle webhooks + dunning took longer. If you're considering a paid global product as a solo dev, budget more time for payments than for the core feature. PayPal Subscriptions for global recurring revenue removed an enormous category of work compared to chasing Stripe coverage in markets where it isn't fully available.
4. "AI-generated horoscope" is a race to the bottom
Plenty of competitors are clearly piping prompts at a generic LLM and shipping the output. The market is already saturated with that. I went the opposite direction: a deterministic Saju engine + a writing layer that explains the result in plain language. The product is reproducible: the same birth data produces the same chart, every time. That matters for trust, and it matters for the 1,200-year tradition the system is built on.
5. Transparent pricing is a marketing channel
When I switched the landing page from "Try free" (with a hidden monthly bill) to a hard table of Daily / Monthly / Annual + a visible 24h refund line, conversion improved and chargebacks dropped. Telling people exactly what they'll be charged before they enter card details is, apparently, a feature.
6. K-culture is global, but the back-end is still Korean
A Vietnamese user who wants a Saju reading is paying in VND, reading in Vietnamese, and expecting global UX — but the calculation, the names, the lineage of the system are all Korean. I leaned into that. The product is Korean. The presentation is global. That framing is honest, and it's how the K-wave actually works: people are explicitly seeking out Korean things, not generic "Asian-flavored" things.
Try it
If your friends keep asking about Korean Saju after watching K-dramas, or if you just want to see what the Four Pillars say about you:
- Web: https://sajuapp.app
- Android: https://play.google.com/store/apps/details?id=com.cheonmyeongdang.app
Daily Pass is ₩1,500 (about $1.10), Monthly is ₩29,900 with a 3-day free trial, Annual is ₩287,040 (20% off). Every plan ships with the same 24-hour refund guarantee.
I'd love feedback from this community in particular — webdev, indie hackers, and SaaS folks. Especially:
- Anyone else shipping content-heavy SaaS in 9+ languages — how are you handling cultural localization vs. raw translation?
- Anyone else using Capacitor + Next.js to dual-ship web + Android — what's your hot-take after a year?
- Anyone in the global fortune / wellness space — what conversion benchmarks are you seeing on transparent pricing vs. hidden trials?
Happy to answer questions about the Saju engine, the payment stack, the localization pipeline, or the one-person workflow that made this shippable.
— Built solo, shipped global. v1.4.9 is live.
Top comments (0)