Skip to content

Owner credential run-sheet — the accounts only you can open

Status: Active · Last reviewed: 2026-09-17 · Audience: the owner, one sitting per section, browser and phone in hand. Everything else in the External Blockers Register is routed to Claude, counsel or a vendor; this page is the part that needs your identity, your card, or your admin seat.

Each row says what to open, what to copy, and where to paste it. Once a value is in the place named in the last column, Claude takes it from there (deploy, build, smoke, evidence) and closes the register entry. Never paste a secret into chat, a commit or the QA board — the "where it goes" column is always a secret store.

Two secret stores, two commands

  • App-side public config (EXPO_PUBLIC_*): apps/mobile/.env locally, and the EAS environment for builds/OTAs (eas env:create --environment preview --name NAME --value VALUE from apps/mobile, then the same for production when we go live).
  • Server-side secrets (edge functions): npx supabase secrets set NAME=VALUE from the repo root (hosted project only — never needed for local).

A. Kakao — login, sharing, support channel (EXT-11, EXT-14, EXT-15)

#OpenDoCopyWhere it goes
A1developers.kakao.com → 내 애플리케이션 → 애플리케이션 추가하기Name "투마", company "TwoMore"; upload the 1024px icon from apps/mobile/assets/icon.png앱 키 → 네이티브 앱 키 and REST API 키native key → EAS env EXPO_PUBLIC_KAKAO_APP_KEY (preview); REST key → Supabase Auth Kakao provider
A2same app → 플랫폼Android: package com.ivorybridge.twomore + the release key hash Claude prints from the EAS keystore (ask); iOS: bundle com.ivorybridge.twomore once C1 exists
A3same app → 카카오 로그인 → 활성화 ON → Redirect URIAdd https://<supabase-project-ref>.supabase.co/auth/v1/callback (Claude gives the exact URL)
A4same app → 카카오 로그인 → 동의항목닉네임, 프로필 사진: 필수; 카카오계정(이메일): 필수 (needs 비즈 앱 전환 — see A5)
A5same app → 앱 설정 → 비즈니스 → 비즈 앱 전환Requires 사업자등록번호 — do this once the business registration exists; until then email consent stays 선택
A6same app → 제품 설정 → 보안 → Client Secret생성 → 활성화 ONClient SecretSupabase Dashboard → Authentication → Providers → Kakao (Client ID = REST API 키, Secret = this)
A7same app → 카카오톡 공유 → 메시지 템플릿Create six custom templates from packages/app/src/config/kakao-share-templates.json (Claude drafts each field for you)six 템플릿 IDsEAS env TWOMORE_KAKAO_TEMPLATE_* — the six names are printed by yarn check:r1-kakao-share:credentials
A8business.kakao.com → 카카오톡 채널 → 새 채널 만들기Name "투마 고객센터"; 공개 ON; 검색 허용 ONthe pf.kakao.com/_xxxx URLEAS env + .env EXPO_PUBLIC_SUPPORT_KAKAO_CHANNEL_URL — the 문의하기 screen adds the row itself

After A1–A6 Claude flips the Supabase Kakao provider on, ships a preview OTA, and you tap 카카오로 시작하기 once on the phone. After A7 Claude runs the credentials gate and a preview build (templates need the native key at build time). After A8 no build is needed — an OTA.

B. PortOne — real card payments (EXT-12)

#OpenDoCopyWhere it goes
B1admin.portone.io → 회원가입 → 사업자 정보Needs 사업자등록번호 and a settlement bank account
B2결제 연동 → 채널 관리 → 채널 추가PG: 토스페이먼츠 (or KG이니시스); start with the 테스트 channelStore ID, Channel Keytell Claude — public values; they go into the PortOne adapter config when it is built (guide §3)
B3결제 연동 → API Keys → V2 API Secret 발급GenerateV2 API Secretnpx supabase secrets set PORTONE_V2_API_SECRET=…
B4결제 연동 → 웹훅 → 웹훅 추가URL https://<project-ref>.supabase.co/functions/v1/portone-webhook (Claude gives it); version 2025-01-01Webhook Secretnpx supabase secrets set PORTONE_WEBHOOK_SECRET=…
B5(after test smoke) 채널 관리 → 실연동 전환Only after the test-channel checklist in portone-payments.md is greennew Store ID / Channel Keysame as B2, production only

Claude deploys verify-portone-payment and portone-webhook (both answer 503 not_configured until B3/B4 are set), builds the native adapter, runs the TEST-channel checklist with a 100원 hold, and records the evidence.

C. Apple — iOS builds and Sign in with Apple (EXT-4, EXT-13)

#OpenDoCopyWhere it goes
C1developer.apple.com → enroll (organization needs a D-U-N-S number; individual is faster)Pay the annual feeTeam ID (Membership page)tell Claude — it goes into apps/mobile/app.config.js (public)
C2App Store Connect → Users and Access → Integrations → App Store Connect API → Generate keyRole AdminIssuer ID, Key ID, the downloaded .p8eas credentials prompt on Claude's machine (ASC key), never the repo
C3Certificates, Identifiers & Profiles → Identifiers → App IDsBundle com.ivorybridge.twomore; enable Sign in with Apple, Push Notifications, Associated Domains
C4same → Keys → new key with Sign in with AppleDownloadKey ID + .p8Supabase Dashboard → Authentication → Providers → Apple
C5Xcode / eas build -p ios --profile preview on Claude's machineThe first run asks for your Apple ID login interactively — sit with Claude for that one build

D. GitHub — billing, protection, CI secrets (EXT-5, EXT-6)

#OpenDoCopyWhere it goes
D1github.com → org ivorybridge-2025 → Settings → Billing → ActionsAdd a payment method or a spending limit so Actions minutes run (they are paused today)
D2repo → Settings → Branches → Add rule for mainRequire status checks check, pgtap, drift, knip (the four jobs in .github/workflows/ci.yml); require branches up to date; no force-push
D3supabase.com → Account → Access Tokens → GenerateName "twomore-ci"tokenrepo → Settings → Secrets → Actions → SUPABASE_ACCESS_TOKEN

D1 is the one that unblocks everything else here — CI has been running only on the pre-push hook.

E. Registrations that gate public launch (EXT-1, EXT-3)

#OpenDoCopyWhere it goes
E1Decide who the 개인정보 보호책임자 is (you, until a company exists) and a real phone/email for themname · phone · emailpackages/app/src/config/legal/documents/privacy.ko.ts §11 and the placeholders in packages/features/profile/src/privacy-screen.tsx (Claude edits; public — printed in the policy)
E2lbsc.kr → 위치기반서비스사업자 신고Needs 사업자등록번호; file before the GPS check-in feature is public신고번호the 위치기반서비스 이용약관 document under packages/app/src/config/legal/documents/ (public)

When a row is done

Reply on the QA board with the row id (for example "A8 done") — Claude picks it up from there, ships, verifies on the hosted bed, and moves the register entry. Rows that need a native build (A7, C5) take longer than an OTA; everything else is minutes.

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