Fable · 산토끼의 정문 재설계 · 2026-08-07
비로그인 산토끼가 보는 정문(/)과 그 너머의 2차 화면(골목·가게·물건)을 다시 설계한다. 원칙은 하나 — 채우는 것이 아니라, 칸마다 일어나는 일을 만든다. 거짓 활기는 0.
① 첫 화면의 주인은 물건이 아니라 물음이다.
지금 히어로("동네 가게의 물건, 오늘의 이야기")는 당근의 문장이다. 당근에 이미 있는 문장으로는 "여긴 뭔가 다르다"가 안 나온다. 오늘의 물음 한 개를 히어로로 올린다 — 큰 글씨의 질문 하나, 우벨의 서명, 그리고 "들어가면 이름 없이 답할 수 있다"는 문 하나. 판게아 물음 15개는 종교 어휘가 0이라 정문에 그대로 걸 수 있고, 날짜로 돌리면 매일 정문이 달라진다 — 어제 온 사람이 오늘 또 올 이유가 정문 자체에 생긴다.
② "누구에게서"는 각주가 아니라 상인방(문 위의 가로대)이다.
"이 골목은 호남신학대학교가 이웃을 위해 엽니다"는 이 제품에서 가장 힘 있는 한 줄인데 화면 맨 아래 각주에 있었다. 골목 섹션의 머리로 올린다 — 문패 줄 위에 금색 가로대(상인방)로 얹는다. 쿠팡과 다른 근거는 알고리즘이 아니라 여는 주체가 실명의 조직이라는 사실이고, 이건 PIPA 경계 안이다(여는 주체는 공개 가능).
③ 빈 상태의 문법을 "조용해요"에서 "자리를 내어드립니다"로 바꾼다.
"지금은 골목이 조용해요"는 정직하지만 죽어 있다 — 결핍을 보고한다. 같은 사실을 약속의 방향으로 말한다: "첫 열 자리는 본보기로 세웠어요. 진짜 가게가 올 때마다 한 자리씩 내어드립니다." 이 문장은 코드가 실제로 하는 일이다(진짜 가게가 서면 본보기가 목록에서 물러나는 규칙이 이미 구현되어 있다). 본보기 문패에는 "본보기" 도장을 찍는다 — 숨기는 대신 공사 중인 골목의 조감도로 정직하게 세운다.
④ 2차 화면의 막다른 길은 세 군데였고, 세 개의 문으로 뚫는다.
골목 목록의 끝 → 빈 터 카드("여기는 다음 가게의 자리예요" → 가게 주인의 문). 본보기 가게의 단면 → "이 자리에 내 가게 세우기"(본보기 가게에서 전화·발걸음은 거짓이 되므로 그 자리를 개설 문으로 바꾼다). 물건 카드 → 바텀시트(가격·수확일·"이 물건은 어느 좌판에 있는가" → 가게 앞으로). 전부 로그인 0·개인정보 0·거짓 0으로 가능하다.
⑤ 산토끼 셋의 갈림은 링크 두 줄이 아니라 "세 개의 문" 섹션이다.
주민은 정문의 본문 전체가 자기 것이니 문이 필요 없다. 목사·노회장(→ /org, ?k= 칩이 이미 가른다)과 가게 주인(→ /shop)에게는 문 모양의 카드 두 개를 준다 — 골목 섹션 바로 아래, 상인방 모티프를 이어받은 자리. 지금처럼 히어로 밑 마이크로 텍스트로 두면 매일 오는 주민에게는 소음이고 어쩌다 오는 관리자에게는 안 보인다. 스크롤 아래 한 번, 제대로 된 문으로.
스크롤 없이 보이는 것: 오늘의 물음(심장) + 상인방을 얹은 골목의 첫 줄. 물건 그리드는 한 스크롤 아래에서 그대로 산다 — 당근 공식(재화 공개)은 버리지 않는다, 순서만 바꾼다.
우벨이 묻습니다 · 8월 7일의 물음
요즘 누구의 안부가
궁금한가요.
이 물음은 광장에 걸려 있어요. 들어가면 이름 없이 한 줄로 답할 수 있어요. 아직 첫 답을 기다리고 있어요.
첫 열 자리는 본보기로 세웠어요. 진짜 가게가 올 때마다 한 자리씩 내어드립니다.
왜 물음이 히어로인가. 물건 목록으로 여는 정문은 "당근보다 작은 당근"으로 읽힌다. 물음으로 여는 정문은 비교 대상이 없다 — 첫 3초의 판정이 "장터네"에서 "나한테 말을 거네"로 바뀐다.
왜 답 개수를 안 보여주나. 오늘 답은 0건이다. "0명이 답했어요"는 죽은 숫자, 지어낸 숫자는 금지. "아직 첫 답을 기다리고 있어요"는 0건이라는 같은 사실을 자리의 문법으로 말한다 — 그리고 첫 답이 생기는 날 이 줄이 자연히 "답 N개가 도착했어요"로 자란다.
왜 "우벨의 서명" 한 줄을 넣나. 씨앗 글 192건을 지운 이유와 같은 이유로, 이 물음이 사람인 척하지 않는다는 것을 화면이 스스로 밝힌다. 정직이 이 카드의 힘이다.
물음은 판게아 15개만 쓴다. 날짜 인덱스로 돌린다(오늘 = day-of-year mod 15). 기도 물음 17개는 정문에 오지 않는다 — 종교 어휘 0 경계.
오늘의 직거래
더 보기 →물건 사진은 시연용 샘플이에요 · 사진 제공 Pexels. 물건을 누르면 어느 좌판인지부터 보여드려요.
어제까지의 물음
다른 문으로 들어오실 분
물건 그리드는 살리고 좌판 이름을 단다. 각 물건에 "○○ 좌판" 한 줄 — "누구에게서" 축을 카드 단위까지 내려보낸다(상호는 간판이 이미 공개한 사실, PIPA 경계 안).
"어제까지의 물음"이 비워진 "오늘의 이야기" 칸을 잇는다. 씨앗 글 삭제로 빈 자리를, 실제 DB에 있는 물음 행들로 채운다 — 지어낸 이야기 0, 그리고 "매일 달라지는 정문"의 증거가 된다.
세 개의 문. 주민에겐 본문 전체가 자기 문이라 따로 만들지 않는다. 관리자·가게 주인 문은 상인방 모티프(문틀 위 금색 가로대)를 이어받아 "문"으로 보이게 — 텍스트 링크 두 줄이 아니라.
데스크톱(1180px) — 같은 재료의 2단 배치. 물음이 좌상단(시선 시작점), 골목 상인방이 전폭으로 그 아래를 받친다.
골목 목록의 끝, 본보기 가게의 안, 물건 카드의 탭 — 지금은 셋 다 벽이다. 셋 다 로그인 없이 열리는 문으로 바꾼다.
목록 다음에 오는 것 = 빈 터. 지금은 목록이 끝나면 각주 한 줄로 끝난다. 빈 터 카드는 목록의 마지막 항목으로 서서, 골목을 "다 지어진 곳"이 아니라 "자리가 나는 곳"으로 읽게 한다. 막다른 길이 /shop 으로 가는 문이 된다.
"지금은 닫혀 있어요"를 문패에서 뗀다. 본보기 가게의 영업시간은 실제 사건이 아니다 — 닫힘/열림을 개별 문패에 다는 대신 "본보기" 도장 하나로 정직을 다한다. 열림 배지는 hours 데이터가 계산되는 동안만 보조로 남긴다.
본보기 가게에서 전화·길찾기·발걸음을 전부 걷는다. 없는 번호로 "전화로 물어보기"를 두는 것도, 본보기 가게에 "다녀왔어요"를 받는 것도 그 순간 화면이 거짓이 된다. 본보기 단면의 유일한 행동은 개설의 문 하나 — 이 화면의 손님은 사실상 가게 주인 후보다.
진짜 가게 단면(is_demo=false)은 지금 구조를 유지하고 한 가지만 더한다: [전화로 물어보기] [길 찾기] 옆에 [가게 명함 보내기] — 상호·주소·시간·링크를 복사/공유하는 버튼. 로그인 0·개인정보 0·서버 0으로 되는, 비로그인 손님이 골목을 넓히는 첫 행동이다. 다녀왔어요(발걸음)는 이미 비로그인도 누를 수 있게 구현되어 있으니("이 폰이 기억하는 중") 그대로 둔다.
이 물건은 소망상회 좌판에 있어요. 값을 치르는 건 가게 앞에서 — 이 화면이 하는 일은 발걸음이에요.
왜 상세 페이지가 아니라 시트인가. 물건의 목적지는 물건이 아니라 가게다("장바구니 담기"가 아니라 "문을 열게 하기" — 가게 단면의 설계 원칙 그대로). 시트는 골목의 흐름을 끊지 않고 한 손가락으로 "누구에게서 → 가게 앞으로"를 잇는다. 새 라우트도, 새 테이블도 필요 없다 — market_listings.market_id 가 이미 있다.
결제 버튼이 없는 이유를 화면이 스스로 말한다. "값을 치르는 건 가게 앞에서" — 기능의 부재를 숨기는 대신 오프라인 골목의 원칙으로 선언한다.
검사법: "이 문장이 말하는 사건을, 오늘 DB에서 한 행이라도 보여줄 수 있는가." 통과 못 하는 문장은 지우지 않고 아직 못 쓰는 문장으로 표시해 두었다 — 쓸 수 있게 되는 날을 함께 적었다.
| 화면 | 문장 | 이 문장이 말하는 사건 | 오늘 DB | X면 언제 쓸 수 있나 |
|---|---|---|---|---|
| 정문 히어로 | 우벨이 묻습니다 · 8월 7일의 물음 | plaza_questions 에 오늘 걸 물음 행이 있다 (판게아 15) | O | — |
| 정문 히어로 | 요즘 누구의 안부가 궁금한가요. | 000202 로 심은 물음 원문 그대로 (판게아만 사용) | O | — |
| 정문 히어로 | 우벨이 매일 하나씩 묻습니다 — 사람이 아니라 우벨의 서명입니다 | 물음의 저자가 우벨이라는 사실 (씨앗 글 아님) | O | — |
| 정문 히어로 | 이 물음은 광장에 걸려 있어요. 들어가면 이름 없이 한 줄로 답할 수 있어요. | 광장 방(판게아)이 존재하고 익명 답이 기능으로 열려 있다 (000201) | O | — |
| 정문 히어로 | 아직 첫 답을 기다리고 있어요. | 이 물음에 달린 답이 0건이라는 사실 그 자체 | O | 답이 생기면 자동으로 아래 줄로 교체 |
| 정문 히어로 | 이 물음에 답 N개가 도착했어요. | plaza_posts 에 이 물음의 답 행이 1건 이상 | X | 광장에 첫 답이 달리는 날 — 위 "기다리고 있어요" 줄과 자동 교대 |
| 정문 골목 | 이 골목은 호남신학대학교가 이웃을 위해 엽니다 | markets.church_id → churches 행 (resolveHost 가 이미 계산) | O | — |
| 정문 골목 | 첫 열 자리는 본보기로 세웠어요. 진짜 가게가 올 때마다 한 자리씩 내어드립니다. | is_demo=true 10행 + 진짜가 서면 본보기가 물러나는 목록 규칙(코드에 구현됨) | O | — |
| 문패 도장 | 본보기 | markets.is_demo = true | O | — |
| 골목 목록 | 지금 3곳이 문 열었어요 | hours 시간표와 현재 시각의 계산 (기존 문장 유지) | O | — |
| 골목 목록 | 여기는 다음 가게의 자리예요 | 골목 정원(10) 대비 진짜 가게 0 — 빈 자리가 실재한다 | O | — |
| 골목 목록 | 가게나 농장을 하시면 이 골목에 문패를 걸 수 있어요. | 가게 개설 흐름(/shop)이 실제로 존재 | O | — |
| 가게(본보기) | 이 가게는 본보기예요. 진짜 가게가 오면 이 자리를 내어줍니다. | is_demo=true + 물갈이 규칙 | O | — |
| 가게(본보기) | 이 자리에 내 가게 세우기 → | /shop 개설 문 존재 | O | — |
| 가게(진짜) | 가게 명함 보내기 | 상호·주소·시간·링크 — 전부 markets 공개 컬럼, 복사/공유는 클라이언트 | O | 구현과 동시에 (서버 작업 0) |
| 물건 시트 | 이 물건은 소망상회 좌판에 있어요. | market_listings.market_id → markets.name | O | — |
| 물건 시트 | 값을 치르는 건 가게 앞에서 — 이 화면이 하는 일은 발걸음이에요. | 온라인 결제가 이 화면에 없다는 사실의 선언 | O | — |
| 물건 시트 | 사진은 시연용 샘플 (Pexels) | Pexels 표기 의무 + 시연 사실 (기존 유지) | O | — |
| 정문 물건 | 소망상회 좌판 (물건 카드의 출처 줄) | market_listings.market_id 연결 | O | — |
| 세 개의 문 | 가게나 농장을 하시나요 — 이 골목의 다음 문패는 비어 있어요 | 진짜 가게 0 = 빈 문패가 실재 | O | — |
| 정문 골목 | 이번 주 이 골목에 발걸음 N번이 닿았어요. | shop_visits 주간 합계 N ≥ 1 | X | 진짜 가게에 첫 발걸음들이 쌓이면 — 본보기 가게의 발걸음은 세지 않는다 |
| 가게(진짜) | 단골 N명이 이 가게를 기억해요. | 발걸음 3번 이상 손님 N ≥ 1 | X | 단골 1호가 태어나는 날 |
| 정문 히어로 | 오늘 N명이 광장을 다녀갔어요. | 비로그인 방문 계측 — 지금 계측 자체가 없다 | X | 퍼널 계측을 되살리기로 결정한 뒤에도, 켤지는 별도 판단(숫자 자랑은 밀도가 낮을 때 역효과) |
lib/korean.ts 의 particle() 로 — 이 표의 문장은 조사 분기가 필요 없는 형태로 썼지만, 가게 이름이 변수로 들어가는 자리("소망상회 좌판에")는 {`${name} 좌판`} 처럼 조사가 안 붙는 구조를 유지했다. 이름 뒤에 조사가 필요해지면 반드시 particle().
| 자리 | 지금 (정직하지만 죽은) | 제안 (정직하고 살아 있는) |
|---|---|---|
| 정문 히어로 | 동네 가게의 물건, 오늘의 이야기 | 오늘의 물음 카드가 히어로 자체가 된다 (문장 교체가 아니라 구조 교체) |
| 골목 부제 | 지금은 골목이 조용해요 | 첫 열 자리는 본보기로 세웠어요. 진짜 가게가 올 때마다 한 자리씩 내어드립니다. |
| 문패 상태 | 지금은 닫혀 있어요 (본보기 가게에) | 본보기 (도장) — 열림/닫힘은 진짜 가게에만 단다 |
| 골목 각주 | 이 골목은 호남신학대학교가 이웃을 위해 엽니다. (맨 아래) | 같은 문장, 자리만 상인방(섹션 머리)으로 — 문장은 이미 옳았다 |
| 목록의 끝 | (없음 — 막다른 길) | 여기는 다음 가게의 자리예요 (빈 터 카드) |
Fable · 산토끼의 정문 · 우벨 디자인 시스템(ms-* 토큰, 밝음/어둠 두 세계) 기준으로 그림