별점을 안 쓰겠다는 것은 고르지 않겠다는 뜻이 아니라 고르는 자를 바꾸겠다는 뜻이다. 네이버는 낯선 다수의 평균으로 고르고, 우벨은 국가가 도장 찍은 날짜로 고른다. 한쪽은 하룻밤에 500개를 살 수 있고, 다른 쪽은 1998년을 아무도 살 수 없다.
1차 안의 이정표 — 고정 6줄. 정문에 시간 축의 절이 하나도 없다는 것이 이 절의 자리다. 소식은 오늘, 시세는 값, 골목은 사람, 단지는 사는 곳 — 한자리만이 “여기 무엇이 오래 있었나”에 답한다.
폰 — 정문 안 (기둥 600 축소)
우벨은 맛을 매기지 않습니다. 한자리에서 오래 연 순서로.
지방행정인허가데이터 ○○○○년 ○분기 기준.
우벨의 가게가 아니라 행정 기록입니다.
데스크탑 — 1차 규범의 책상 720 안 (창 420은 왼쪽에 따로 선다)
우벨은 맛을 매기지 않습니다. 한자리에서 오래 연 순서로 — 별점도, 후기도, 등수도 없습니다.
지방행정인허가데이터 ○○○○년 ○분기 기준. 우벨의 가게가 아니라 행정 기록입니다.
⚠ 번호를 붙이지 않는다. 1·2·3이 붙는 순간 사실이 등수가 되고, 등수가 되는 순간 우리는 네이버가 이미 이긴 판에 다시 들어간다.
/tastes/광주-남구 — 주소가 곧 검색어다 새것목록형 2차 — 데스크탑은 단일 720~840(신문형 3기둥 아님. 고르는 것이 목적인 화면은 기둥이 갈리면 시선이 갈린다). 제목은 사람들이 치는 말로 쓰고, 바로 다음 줄이 우리 축을 자백한다 — 낚시는 밝히지 않는 것이다.
폰 — 2차
우벨은 별점을 매기지 않습니다.
한자리에서 오래 연 순서로 보여드려요.
남구에 문 연 밥집 ○곳. 그중 20년을 넘긴 곳 ○곳.
지방행정인허가데이터 ○○○○년 ○분기 기준. 우벨의 가게가 아니라 행정 기록입니다.
데스크탑 — 목록형 단일 780
우벨은 별점을 매기지 않습니다. 한자리에서 오래 연 순서로 보여드려요 — 순서를 정하는 것은 돈이 아니라 날짜입니다.
남구에 문 연 밥집 ○곳. 그중 20년을 넘긴 곳 ○곳.
지방행정인허가데이터 ○○○○년 ○분기 기준. 우벨의 가게가 아니라 행정 기록입니다. 기록은 분기마다 갱신됩니다.
명부의 행과 골목의 가게는 한눈에 달라야 한다. 안 그러면 우벨이 “이 가게가 우리 회원”이라고
거짓말하는 화면이 되고, 그것이 ubell-window-strategy §13이 말한 신뢰 파산이다.
★ 그리고 이것은 취향이 아니라 제약이다 — markets.owner_profile_id가 not null이라
주인 없는 가게는 표에 들어갈 수조차 없다.
활자 한 줄. 무채색(--ms-ink/--ms-ink2)만 쓴다.
도장 없음 · 색 없음 · 사진 자리 없음 · 3차 없음.
우벨이 하는 말은 딱 하나 — “행정 기록에 이렇게 있습니다”.
문패(도장)가 켜진다 — 상호 2~3글자, --ac-market.
주인이 제 손으로 건 것이라 색을 가질 자격이 있다.
/madang/market/[slug] 미니홈피 — 이미 있는 과금 화면8차(단지)의 판정은 “열리지 않은 단지에도 같은 얼굴”이었다. 여기서도 통하는지 실제로 재 보면, 통하는 절반은 “주인이 없어도 얼굴이 선다”이고, 안 통하는 절반은 “그 얼굴의 단위”다.
| 아파트 단지 | 밥집 | |
|---|---|---|
| 명부 한 행이 가진 사실 | 이름 · 자리 · 주소 · 세대수 · 동수 (+ 실거래가) | 상호 · 주소 · 업태 · 인허가일 — 넷 |
| 못 쓰는 것 | — | ⚠ 전화(개인 010 위험) · 사진 0 · 메뉴 0 · 가격 0 · 영업시간 0 |
| 한 화면이 서나 | 선다 — 절 여럿이 찬다 | 안 선다 — 넉 줄짜리 막다른 길 |
| 그래서 얼굴의 단위는 | 단지 하나 — /o/[slug] |
지역 하나 — /tastes/[region] |
★ 그러므로 행은 그 자체로 완결이고 열리지 않는다. 대신 행마다 작은 문 둘 —
「길찾기」(⚠밖으로 나가는 문임을 밝힌다)와 「여기 사장님이세요?」.
뒤엣것은 이미 라이브인 씨앗 문법을 그대로 쓴다:
/shop/open?trade=…&name=…®ion=… (단지의 「여기 사세요?」와 같은 꼴) + 개업일 한 칸.
⚠ 오늘 0인 신호에 기대는 설계는 기각이므로, 아래는 정렬을 건드리지 않는 계단이다.
햇수 · 자리 · 갈래 · 닫힌 곳. 전부 공공데이터. 오늘 전국이 동시에 찬다.
1998년부터 — 28년째 · 한식 · 양림동★ 수가 아니라 반복만 센다. 문턱 아래면 아예 안 그린다.
여러 번 다시 간 이웃이 있어요있음/없음만. 숫자를 적으면 그게 랭킹이 된다.
단골이 생긴 집
“양림교회 사람들이 자주 가는 곳”은 네이버가 못 만드는 문장이 맞다.
그러나 가게 쪽 지면에는 절대 못 쓴다 — 가게→교회 역링크 금지(ubell-doors §2),
그리고 종교는 PIPA §23 민감정보다. 공개 지면에 적으면 드나드는 사람의 종교를 추론하게 만든다.
| 안 짓는 것 | 왜 |
|---|---|
| 별점 | ① 조작이 싸다 — 500개를 하룻밤에 산다 ② 비교의 언어라 골목을 서로 겨루게 한다 ③ 이미 진 판이다 |
| 후기 · 리뷰 | 위 셋 + 운영비(신고 · 명예훼손) + 사람 0명이라 리뷰 0인 죽은 절이 된다 |
| 순위 · 번호 | ⚠ 정렬은 하되 번호를 안 붙인다. 1·2·3이 붙는 순간 사실이 등수가 된다 |
| 「최고 · 베스트 · 인기 · 추천」 | 우리가 안 가본 집이다. 안 가보고 하는 칭찬이 곧 광고다 |
| AI가 쓴 맛집 소개 | ★ 가장 위험한 것. 안 가본 집을 그럴듯하게 소개하면 그게 조작이다 |
| 메뉴 · 가격 | 공공데이터에 없다. 지어내면 즉사. 골목도 가게 카드에 가격을 안 넣는다 |
| 전화번호 | 일반음식점 인허가의 전화는 상당수가 개인 010이다 — 목사 개인 010 46곳을 차단한 그 함정 |
| 폐업한 곳을 목록에 | 산 곳만 싣는다. 단 닫힌 곳의 수는 센다 |
| 빈 사진 프레임 | 사진이 없는 것은 결함이 아니라 장르다 — 문패가 0장에서 완성형 |
| 명부 행의 미니홈피 | 넉 줄은 지면이 아니다(④) |
| 광고 · 상위 노출 | ★ 이걸 안 파는 것이 “닫힌 곳을 셀” 자격이다 |
네이버 안에서 이기는 게 아니라 검색 결과에 한 줄 서는 일이다. 「담양군 맛집」을 치는 사람에게 필요한 건 앱이 아니라 지면 하나다.
별점 4.5는 흔하고 28년은 그 동네에 몇 곳뿐이다. 부모님을 모시고 갈 때 사람이 원하는 건 “제일 맛있는 집”이 아니라 “실패 안 할 집”이다.
네이버 목록의 위쪽은 돈이 정한다. 우리 순서는 날짜가 정하고, 우리는 그 규칙을 첫 줄에 적는다. 그 자체가 상품이다.
리뷰를 읽고 진위를 가릴 필요가 없다. 읽을 것이 한 줄이다.
| 함정 | 실측 | 처방 |
|---|---|---|
| 「걸어서 8분」을 적을 뻔했다 | estates에 lat/lng가 없다(000310). 단지의 「걸어서 가는 골목」도 거리 계산이 아니라 지역 문자열 맞춤이다 |
걸음은 사실 셋에서 빠지고 조건부가 된다 — 사용자가 「내 위치로 정확히 찾기」를 눌렀을 때만. 모르면 안 그린다(동 이름이 대신한다) |
| 새 절이 아무에게도 안 보인다 | normalize()가 쿠키의 order를 먼저 담고 빠진 것을 뒤에 push 한다 — SEEDS 어디에 넣든 기존 사용자에겐 맨 마지막 절 |
구현 전에 정한다: v를 올려 다시 씨앗을 심거나, 삽입 자리를 존중하는 병합으로. 안 정하면 죽은 화면이다 |
| 지역 알갱이가 두 벌로 갈린다 | estates.region은 ‘광주 남구’(시군구)인데 markets.region은 ‘광주 남구 양림동’(동까지) |
명부는 estates 쪽에 맞춘다 — region으로 거르고 dong은 따로 담아 화면에만 적는다. ubell_region_key()를 반드시 통과(광주·전남 통합 처리가 그 안에 있다) |
| 인자 순서가 이미 어긋나 있다 | front_door_shops(p_limit, p_region) vs front_door_estates(p_region, p_limit) |
새것은 estates 쪽에 맞춘다. 셋째가 또 다른 순서로 서면 그다음이 반드시 틀린다 |
설계 문서: docs/design/ubell-tastes.md · 형제:
ubell-estate-homepage.md(8차) · ubell-front-custom.md(6차) ·
ubell-window-strategy.md(§12 · §13)