Skip to content

Korean Market Conventions

Status: Active Last reviewed: 2026-06-30

How TwoMore handles Korea-specific market requirements across phone input, discovery, KakaoTalk sharing, payments, Alimtalk, PIPA consent, marketing push, and location-based services. These are the canonical team-readable conventions extracted from CLAUDE.md; the machine-enforced subset remains in AGENTS.md.

Phone & Discovery

  • Phone input: packages/app/src/utils/korean-phone.ts (wraps libphonenumber-js)
  • Discovery filters: REGION_LABELS for 17 시/도. Real addresses via Daum Postcode

Sharing & Payments

  • KakaoTalk share: template messages only (pre-approved on Kakao Developers console)
  • Payments: always Portone v2 WebView — never per-PG SDKs directly
  • Alimtalk: always server-side via Solapi — never from client
  • PIPA: every user-identifying event gated on consent (see signal_consent_log for push-category preferences and user_consent for primary PIPA legal consent — two separate, non-overlapping tables)
  • Push title prefix for marketing → "(광고) [브랜드명] {body}" format. Sender contact (email or phone) + 1-tap unsubscribe link required in body per 정통망법 §50(4). Annual re-confirmation of marketing consent enforced by migration 00171 cron at 02:00 KST.

Location-Based Services

  • 위치기반서비스사업자 신고 → if the app uses GPS for any user-visible feature (GPS check-in, "find nearby clubs"), KCC business report at lbsc.kr is mandatory before launch. 1-month grace period for 소상공인.

See also

  • AGENTS.md — KR-1..KR-5 (machine-enforced Korean Market subset).
  • CLAUDE.md — orchestration core + the pointer index back to this doc.

Markdown remains the source of truth. Run yarn docs:check before handoff.