우벨 설계 문서 · 페이블

사람이 자기 방을 여는 길

로그인해서 → 자기가 누구인지 밝히고 → 자기 방을 열고 → 값을 내는 길 전체. 복도를 걷는 네 사람 중 ②(로그인·방도 소속도 없음, 8명)와 ④(방 주인, 가게 6)에 화면이 없다 — 우벨이 돈을 버는 두 순간이 비어 있다. 이 문서가 그 길의 다섯 화면을 세운다.

2026-08-12 · 확정본 문서: docs/design/open-your-room.md · 실측: org_kinds 9종 · trade_kinds 20종 · plan_kind_availability 0행 · individual 조직 0개

한 문장

묻는 것은 두 번이다 — "무슨 일을 하며 지내세요?"(렌즈)와 "그 방에서는 무슨 일을 하세요?"(성격). 층은 성격에서 추론한다.

그리고 값은 표보다 원칙이 먼저 온다: 여는 것은 무료, 사람 몫의 일을 대신하는 손(AI)만 유료. 방은 태어날 때부터 청구서의 주소(과금 주체)를 가진다 — 첫 달 청구액이 0원일 뿐이다.

A · 여섯 판정

물음은 둘, 추론은 하나, 값은 늦게

판정 1 · 세 축의 관계

직군은 사람의 것, 직종은 방의 것, 유형은 묻지 않는다

직군(6종)=렌즈·직종(20종)=가구·유형(9종)=과금의 층. 유형은 직종에서 추론한다 — trade_kinds의 church→church, school→school, 나머지 열여덟 전부 shop. 노회·교단·협의회는 셀프서브로 열리는 층이 아니라(개통 각본) 추론이 안전하다. 직군→직종 추론은 안 한다 — 직군은 칩의 순서만 바꾼다.

판정 2 · 첫 물음

버려지지 않는 물음이 첫 물음이다 — 조직이 아니라 자기 자신

"어떤 조직을 만드시겠습니까"는 ② 여덟 명 대부분에게 남의 얘기다. "무슨 일을 하며 지내세요"는 방을 영영 안 여는 사람에게도 렌즈로 남는다. 오너 문장 "어떤 조직을 만들 것인지가 먼저"는 과금 축의 순서(유형>플랜)이지 화면 물음의 순서가 아니다 — 두 문장은 충돌 없이 겹쳐 선다.

판정 3 · 값의 때

원칙은 먼저, 표는 늦게

마지막에 처음 보이면 배신, 처음에 표를 보이면 문턱. 문패 폼 머리에 원칙 한 줄("여는 데는 값이 없습니다")이 서고, 표(티어·금액)는 방이 선 뒤 방 안에서만 편다 — 유형이 정해진 뒤라야 유형별 값(000218)을 정직하게 말할 수 있다. 결제가 잠긴 지금 요금 화면은 청구서의 예행연습이다.

판정 4 · 무료 방

방의 뼈대는 통째로 무료 — 첫 청구액이 0원일 뿐

문패·명부·초대는 사람 사이의 일이라 영구 무료(확정본). "과금해서 방이다"와의 화해: 방을 방으로 만드는 것은 이체된 돈이 아니라 과금 주체라는 신분이다. 그래서 개설 즉시 조직 연결이 이 판정의 실체다 — 지금 가게 10곳 중 8곳이 조직 없이 떠 있어 과금 자체가 불가능하다.

판정 5 · ④의 화면

대시보드가 아니라 주인의 책상

방금 연 방의 숫자는 전부 0이다 — 0을 크게 그리는 대시보드는 첫날부터 실패의 화면이다. 도착지는 자기 방 곁의 책상: 손님 눈(미리보기) · 채울 칸(빈 칸의 이중 얼굴) · 요금 한 줄 · 부를 사람. 경로는 신설이 아니라 /shop/mine 재건이다.

판정 6 · 층 판정

얼굴 둘, 폼 하나, 답 하나, 하나 하나

A 복도의 집=1차 얼굴(주인공: 나) · B 문패 폼=(층 아님 — 도착지 층에 얹힘) · C 섰습니다=(제출 응답) · D 책상=1차 얼굴(주인공: 내 방) · E 요금=3차 하나(주인공: 이 방의 청구서). 데스크탑: A·D는 창 420+책상 720, B·C·E는 단일 680.

B · 화면 흐름

다섯 장 — 복도에서 책상까지

어느 화면도 로고가 유일한 귀로가 아니다. B→A("← 복도로"), C→D(제출 도착지), D→미니홈피·E, E→D("← 책상으로").

A

/onboarding 재건 — ②(8명)의 얼굴

복도의 집 1차 얼굴

물음 ① 직군(렌즈 — 누르는 즉시 저장, 건너뛰기 OK) + 문 넷: 문패 걸기 / 초대 링크 / 다닐 곳 찾기 / 그냥 걷기.

B

/shop/open 보강

문패 폼 폼 — 층 아님

물음 ② "무슨 일을 하세요?"(자유 글 + 칩). 값의 원칙 한 줄이 머리에. 별칭이 알아들으면 직종 미리보기 카드 — 못 알아들어도 입주는 통과.

C

/shop/open/done — 버튼 하나만 교체

문패가 섰습니다

진짜 문패 실물 + DRAFT면 할 일 하나만(현행이 옳다). 주 버튼을 "내 책상으로 →"로 — 라벨은 목적지의 이름이다.

D

/shop/mine 재건 — ④(가게 6)의 얼굴

주인의 책상 1차 얼굴

손님 눈에는 지금 / 채울 칸(빈 칸의 이중 얼굴) / 이 방의 요금 한 줄 / 부를 사람. 오늘 도착 절은 도착이 생긴 뒤에만 선다.

E

/admin/o/[slug]/billing — 유형 축 접속

이 방의 요금 3차 하나

유형별 이름·값(room_plan_menu). 물려받은 값(is_inherited)은 값처럼 보여주지 않는다 — "아직 정해지지 않았어요"가 정직이다.

C · 화면 A

복도의 집 — ②의 얼굴

기존 문장 "어디에도 속하지 않아도 괜찮아요"는 검증된 앵커라 지킨다. 더하는 것은 직군 절과 방 여는 문뿐. 직군 칩은 TasteForm의 여섯을 그대로 쓴다 — 재발명 없음.

폰 · 375 — 자영업·농업을 고른 순간 (곁말이 갈린 상태)

어디에도 속하지 않아도
괜찮아요

우벨은 소속이 없어도 그냥 씁니다. 이 복도의 모든 것 — 소식·보기·장터·광장 — 이 이미 당신 것이에요.

무슨 일을 하며 지내세요?

고르면 소식·보기·일거리가 이 일에 맞춰져요 · 여럿 골라도, 안 골라도 돼요

학생진로·취업·장학
직장인이직·업계·일상
자영업·농업장터·손님·공동구매
공직·교사정책·사회
사역자청빙·목양·설교
살림·돌봄생활·건강·돌봄

맞춰지고 있어요 — 근거는 추천 카드에 그대로 보여드려요

내 일의 방

문패 하나면 손님이 찾아옵니다

가게·농장·일터 — 상호와 한 줄이면 3분 안에 서요. 여는 데는 값이 없습니다.
이미 하는 일이라면, 문패는 오늘 세울 수 있어요.

아는 곳이 있다면

초대 링크를 받았어요

받은 주소를 그대로 붙여넣어 주세요

붙여넣기

다닐 곳 찾아보기

교회·학교·모임 — 이름으로 찾아요

찾기

그냥 둘러볼래요

장터·동네·광장 — 소속 없이도 전부

걷기 →
ubell.net/onboarding

창 420 — 나의 것 (고정)

어디에도 속하지 않아도 괜찮아요

우벨은 소속이 없어도 그냥 씁니다. 이 복도의 모든 것이 이미 당신 것이에요.

무슨 일을 하며 지내세요?

여럿 골라도, 안 골라도 돼요

학생
직장인
자영업·농업
공직·교사
사역자
살림·돌봄

책상 720 — 문들 (스크롤)

내 일의 방

문패 하나면 손님이 찾아옵니다

상호와 한 줄이면 3분 안에 서요. 여는 데는 값이 없습니다.

아는 곳이 있다면

초대 링크를 받았어요

붙여넣기

다닐 곳 찾아보기

찾기

그냥 둘러볼래요 — 장터·동네·광장

걷기 →
D · 화면 B

문패 폼 — 물음 ②와 값의 원칙

현행 OpenForm이 이미 옳다(한 장·자유 글·문턱 없음). 더하는 것 셋: 값의 원칙 줄 · 직종 미리보기 카드(알아들었을 때만) · 교회·학교의 다른 문. 왼쪽은 보험(규제 직종), 오른쪽은 교회라고 답한 경우.

폰 · 375 — "보험"이라 답한 사람

← 복도로

상호와 한 줄이면
문패가 섭니다.

여는 데는 값이 없습니다. 문패·명부·초대 — 사람 사이의 일은 언제까지나 무료예요. 값이 붙는 건 사람 몫의 일을 대신하는 손(AI)을 들일 때뿐이고, 그때도 값을 먼저 말씀드립니다.

늘푸른 보험상담실
예: 양림동에서 9년째 커피 볶는
광주 남구 봉선동
보험
카페음식점농장보험공방미용실

이 말이면 이렇게 꾸며드려요

보험설계의 방 — 점포가 없어도 됩니다. 손님은 '고객', 첫 단추는 '상담 요청'. 보험업법에 따라 보험료·조건 칸은 만들지 않아요.

직종은 나중에 책상에서 정하거나 바꿀 수 있어요.

폰 · 375 — "교회"라 답한 사람 (다른 문)

← 복도로

상호와 한 줄이면
문패가 섭니다.

봉선중앙교회
교회

교회의 방은 혼자 열지 않습니다. 명부와 초대가 함께 서야 방이 살아요. 우벨이 개통을 도와드립니다.

교회 개통 문의하기 →

골목에 예배 시간과 가는 길만 알리고 싶다면, 문패만으로도 충분해요.

E · 화면 C · D

문패가 섰습니다 → 주인의 책상

C는 현행 유지 — 주 버튼 라벨만 목적지의 이름으로. D는 /shop/mine 재건: 방금 연 방의 숫자는 전부 0이라 "오늘" 절이 아예 없다 — 대신 채울 칸이 문으로 선다. 아래 D는 방금 연 카페의 첫날 상태다.

폰 · 375 — C 답 화면 (버튼만 교체)

이도

문패가 섰습니다

카페 이도

광주 남구 양림동

지금 골목에서 보입니다. 손님이 이 문패를 보고 찾아올 수 있어요.

폰 · 375 — D 주인의 책상 (첫날 · 도착 0 = 오늘 절 없음)

이도

카페 이도

광주 남구 양림동 · 골목에 서 있어요

손님 눈에는 지금

카페 이도 — 양림동

문패와 동네만 보여요. 아직 사진도 인사말도 없어요.

그대로 보기 →

채울 칸

빈 칸은 손님에게는 보이지 않아요 — 당신에게만 문으로 서 있습니다.

사진 한 장 걸기

걸기

여는 시간 적기

적기

오늘 한마디 남기기

쓰기

가게 내력 한 편 쓰기

쓰기

이 방의 요금

지금 — 문패·명부·초대, 전부

0원/월

사람 사이의 일은 언제까지나 무료예요. 사람 몫의 일을 대신하는 손(AI)을 들이면 그때부터 유료입니다.

요금 보기 →

부를 사람

첫 손님은 아는 얼굴이에요.

인스타를 하신다면 — 프로필 링크에 이 방 주소를 걸어두세요. 주소 복사

ubell.net/shop/mine

창 420 — 손님 눈 (고정)

이도

카페 이도

광주 남구 양림동 · 골목에 서 있어요

손님 눈에는 지금

카페 이도 — 양림동

문패와 동네만 보여요. 아직 사진도 인사말도 없어요.

그대로 보기 →

책상 720 — 채울 칸 · 요금 · 부를 사람 (스크롤)

채울 칸

빈 칸은 손님에게는 보이지 않아요 — 당신에게만 문으로 서 있습니다.

사진 한 장 걸기

걸기

여는 시간 적기

적기

오늘 한마디 남기기

쓰기

이 방의 요금

지금 — 문패·명부·초대, 전부

0원/월

요금 보기 →

부를 사람

첫 손님은 아는 얼굴이에요. 초대 링크 복사

F · 화면 E

이 방의 요금 — 유형이 값을 정한다

왼쪽은 가게(유형 밴드 0행 — 물려받은 값을 값처럼 비추지 않는다), 오른쪽은 교회(확정된 문장·값 그대로). 결제가 잠긴 지금, 두 화면 다 청구서의 예행연습이다.

폰 · 375 — 가게의 요금 (값 미정 = 정직)

← 내 책상으로

이 방의 요금

값은 방의 성격을 따릅니다 — 가게의 방은 가게의 값으로.

베이직 · 지금 이 방

0원/월

문패·명부·초대 — 사람 사이의 모든 일. 언제까지나 무료.

가게 몫의 유료

가게 몫의 값은 아직 정해지지 않았어요. 정해지기 전에는 어떤 요금도 청구되지 않습니다 — 값이 정해지면 이 화면이 가장 먼저 바뀝니다.

온라인 결제는 아직 잠가 두었습니다. 준비가 되면 이 화면이 가장 먼저 바뀝니다 — 그 전까지 어떤 요금도 청구되지 않습니다.

폰 · 375 — 교회의 요금 (확정 문장·값)

← 내 책상으로

이 방의 요금

값은 방의 성격을 따릅니다 — 교회의 방은 교회의 값으로.

베이직 · 지금 이 방

0원/월

교회가 서고, 모이고, 알리는 일 — 사람 사이의 모든 일에는 돈을 받지 않습니다.

스탠다드

70,000원/월·전원

성도 전원에게 AI 일손이 붙습니다 — 설교 초안은 교회의 몫으로 월 4편, 서재 비서는 한 사람 한 사람의 몫으로.

9,900원 × 8명 = 79,200원 > 70,000원

여덟 사람만 써도 남는 계산입니다 — 교인이 여덟보다 많다면, 전원 요금 중 가장 싼 길입니다.

원가 실측: 설교 초안 1편 약 49원. 7만원이 사는 것은 편수가 아니라 전원에게 열려 있는 상태입니다.

G · DB 계약

아키텍트에게 — 요청 다섯 + 확인 하나

요청계약
① room_kind_preview(p_q)최대 1행: (trade_kind, trade_label, org_kind, org_kind_label, trade_form, price_visible, primary_action, member_word, notice) — 폼 B 미리보기. 0건이면 빈 결과(카드 안 그림). authenticated만.
② 개설 즉시 조직 연결create_market 성공 트랜잭션에서 market_ensure_org — 또는 둘을 감싼 open_room(p_name, p_intro, p_region, p_trade) 하나로. 반환 (market_id, org_id, slug). 기존 고아 가게 8곳 소급 연결(1회 backfill) 포함. 판정 4의 실체.
③ my_rooms()내가 주인인 방 전부: (org_id, market_id, name, slug, kind, kind_label, trade_kind_label, status, plan_code, plan_name, plan_price, member_count, footsteps_today) — plan_price는 plan_price_for 경유(화면 재계산 금지). ②는 0행.
④ room_plan_menu(p_org)plan_visible_for_kind로 거른 플랜: (plan_id, code, name, kind_label, price, is_inherited, is_current, description)is_inherited = 유형 밴드 없이 org 밴드/base_price로 폴백된 값인가. E가 이 값으로 "아직 정해지지 않았어요"를 그린다. 000218 축의 첫 화면 소비자.
⑤ room_desk(p_org) (선택)책상 한 판: 빈 칸 목록 missing: text[] — photo|hours|note|story|trade_kind + 오늘 (footsteps_today, new_regulars_today) + 요금 줄. "비었는가"의 판단은 DB가 한다 — 화면이 다섯 컬럼을 각자 검사하면 규칙이 다섯 곳으로 갈린다.
⑥ 확인set_my_segments / my_segments는 이미 profile 기준 — 소속 무관. 막힌 것은 화면(/my/taste가 /my 게이트 안)뿐이라 새 표·새 함수 불필요. A의 직군 절이 같은 RPC를 게이트 밖에서 부른다.
H · 문장 원장

값을 말하는 문장들 — 그대로 옮겨 쓸 것

조사가 이름 뒤에 서는 자리는 전부 particle()·ro() — 아래 고정 문장은 이름 뒤에 줄표·마침표가 오게 써서 조사 자체를 피했다.

자리문장
값의 원칙 (B 머리)"여는 데는 값이 없습니다. 문패·명부·초대 — 사람 사이의 일은 언제까지나 무료예요. 값이 붙는 건 사람 몫의 일을 대신하는 손(AI)을 들일 때뿐이고, 그때도 값을 먼저 말씀드립니다."
요금 한 줄 (D)"지금 — 문패·명부·초대, 전부 · 0원/월" + "사람 사이의 일은 언제까지나 무료예요. 사람 몫의 일을 대신하는 손(AI)을 들이면 그때부터 유료입니다."
값 미정 유형 (E)"가게 몫의 값은 아직 정해지지 않았어요. 정해지기 전에는 어떤 요금도 청구되지 않습니다 — 값이 정해지면 이 화면이 가장 먼저 바뀝니다." — 물려받은 org 밴드 값(70,000원)을 가게에 값처럼 비추면 지어낸 주장이다.
유형 상인방 (E)"값은 방의 성격을 따릅니다 — {유형 라벨}의 방은 {유형 라벨}의 값으로."
빈 칸의 이중 얼굴 (D)"빈 칸은 손님에게는 보이지 않아요 — 당신에게만 문으로 서 있습니다."
교회의 다른 문 (B)"교회의 방은 혼자 열지 않습니다 — 명부와 초대가 함께 서야 방이 살아요. 우벨이 개통을 도와드립니다." + 곁문 "그래도 문패만 걸기"
직군 물음 (A)"무슨 일을 하며 지내세요?" · 메타 "고르면 소식·보기·일거리가 이 일에 맞춰져요 · 여럿 골라도, 안 골라도 돼요"
방 여는 문 (A)"문패 하나면 손님이 찾아옵니다. 가게·농장·일터 — 상호와 한 줄이면 3분 안에 서요. 여는 데는 값이 없습니다." · 버튼 "문패 걸기 — 3분"
결제 잠금 (E 발치)"온라인 결제는 아직 잠가 두었습니다. 준비가 되면 이 화면이 가장 먼저 바뀝니다 — 그 전까지 어떤 요금도 청구되지 않습니다." (기존 LOCK_LINE 그대로)