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 inAGENTS.md.
Phone & Discovery
- Phone input:
packages/app/src/utils/korean-phone.ts(wrapslibphonenumber-js) - Discovery filters:
REGION_LABELSfor 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
Messaging & Consent
- Alimtalk: always server-side via Solapi — never from client
- PIPA: every user-identifying event gated on consent (see
signal_consent_logfor push-category preferences anduser_consentfor 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.
- Consent-row honesty: a
user_consentrow must correspond to an actual user action on an item the user was actually shown — never fabricated from matrix metadata.getRequiredConsentsForJurisdiction()(packages/app/src/domain/utils/consent-matrix.ts) returns the FULL per-jurisdiction matrix, includingshowAtSignup: falseitems (settings-only, e.g.marketing_push_night); the purebuildConsentGrants(matrix, values)in the same file is the single place that decides which items get a row —showAtSignup && checked, full stop, with noitem.requiredshortcut. Service-essential processing (contract-basis, PIPA Art. 15(1)(4)) that is never shown as a checkbox needs disclosure in the terms/privacy policy, not a consent row — recording one anyway would be a fabricated grant for a purpose the user never saw or acted on. Marketing consent stays a separate, always-optional, actively-checked opt-in with the(광고)prefix above.
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 소상공인.