Real Estate Intelligence Platform
Reevl
Summary
A real estate terminal that reads Korean apartments like listed stocks. I designed it, built it, shipped it, and still run it – on my own.
- 5,000+
- 64,817
- 2,054 / 2,380
Overview
Reevl is a real estate terminal for Korean apartments. It treats apartment complexes like listed stocks – each with a price chart, a change rate, and a value – so the market state is readable at a glance.

Figma
- 2,380
GitHub

reevl.co.kr
Research
Reevl's research came less from interviews than from operating data and what users pointed out. After launch, the signals that arrived every day became the reasons for the next decision.
- 366 commits started from a user's remark – 16% of all commits. One-line reports like "the hover effect gets cut off" (its cause changed three times) or "going back drops me on the apartment list" each became a fix.
- Behaviour data (Microsoft Clarity) – 89% of visits came from Naver, 79% of devices were mobile. Those two numbers set the product's priorities: mobile first, Naver search first.
- Eight data sources – MOLIT transactions, K-apt, the Korea Real Estate Board, KOSIS, the Bank of Korea, V-World, SchoolInfo, and Cheongyak Home: 45,695 apartment complexes and 11 million transactions brought into one screen's language.
Key decisions
Four decisions that made the product what it is – what was decided, why, and what came of it.
Show the state of the market, not the price of a home
Where the whole market is moving should read before any one complex's price. So the direction was a Bloomberg terminal's information density with the cleanness of Toss Securities.
One home screen carries the market briefing, the sales and jeonse indices, and the complex rankings.Home screen
Up is red, down is blue – on every screen, no exceptions
It follows the convention Korean market users already read by. Green never means “up”.
Direction colours exist only as design-system tokens (up · down), so no screen drifts.Design system
One screen, three shells
The same information appears as a docked panel on desktop, a full screen on phones, and standalone pages for search.
That one structure produces 64,817 public pages.Information architecture
Rebuild Figma from the code
So the values designers see never drift from the values users get, the Figma library was extracted back from the production tokens.
140 variables · 28 styles · 23 components (v1.0, 2026-09-17).Figma file
The day twelve features shipped at once, the numbers fell – six causes found and fixed
Right after twelve features went live on August 27, the bounce rate went from 24% to 62%, time on site from 226s to 40s, and 36 rage clicks appeared – the only day in the whole observation window with any. The problem was the screens, not the features.
After fixing six causes: 0 rage clicks on August 29; on September 1 the bounce rate went from 70% to 29% and time on site from 36s to 115s.Usage
Don't show forecast prices beyond two years
One-year outlooks ranked with an information coefficient of 0.19, positive in 93% of quarters; beyond two years it was 0.01 at the complex level. A number that can't be right isn't information.
Long-range forecasts show no prices – only the region level that held up (IC 0.16).
A missing value is 'not applicable', not zero
Jeju and Ulleung have no motorways. Filling their 1,047 complexes with zero would read on screen as poor transport. When the validation window moved, indicators whose sign flipped were dropped for the same reason.
Station access is the baseline, with motorways and airports added for how people travel outside the capital; where a measure doesn't apply, it is left empty. A number that appears by chance and reads like evidence is the bigger risk.
Give AI the unit and meaning before the value
With the MCP server open through seven read-only tools, a model read prices stored in units of ₩10,000 as won – a 10,000× error. A person asks when something looks off; a model makes something up.
A describe_fields tool now gives the model each field's unit and meaning before it reads any value.
Design
Information architecture
Three layout shells carry the same screens: a docked panel on desktop, a full-screen view on phones, and standalone routes for search engines.
Design system
The Figma library was rebuilt from production code. Below is the Figma file itself; under it, the same tokens rebuilt as React components.
- 140
- 28
- 23
- 37
These are not images — they are React components rebuilt from the same tokens.
391.2 +10.9%
- AComplex AYongsan-gu₩2.04B+20.6%
- BComplex BGangnam-gu₩1.88B-3.1%
Surface
- app#0e0f11
- bg#16171a
- chip#232529
- line#282a2d
Text
- ink#edeef1
- ink2#c7ccd4
- sub#aab1bc
- dim#79818d
Brand
- brand#4d9fff
- brand-soft#16233a
Direction (up = red, down = blue)
- up#ff5c6c
- up-soft#2b1a1f
- down#4d9fff
- down-soft#14243a
Status
- pos#2dd4a0
- warn#f0b254
Pretendard Variable
- Hero32 → 46Real estate, read in numbers
- Stat36 → 440.4131
- Display30 / 2845,717 apartment complexes
- Title LG22 / 20Market briefing
- Val XL30 / 32₩1.14B
- Body14 / 16Follow price trends based on official transaction data.
- Label13 / 14.5Sales index
- Micro11 / 12.5Updated 3 hours ago
Radius
- sm6px
- md8px
- lg10px
- xl12px
- 2xl16px
- full999px
Spacing
- 4px
- 8px
- 14px
- 20px
- 28px
Easing
- ease-outDefault enter and exit
cubic-bezier(.23,1,.32,1)
- ease-inExit-only acceleration
cubic-bezier(.55,0,.85,.4)
- ease-in-outMoves and morphs on screen
cubic-bezier(.77,0,.175,1)
- ease-draweriOS-style drawer
cubic-bezier(.32,.72,0,1)
Build
Build log
Selected milestones out of 2,380 commits. Each one is a decision that shipped.
Engine and frontend in one push
Set up the data engine and a Next.js + Tailwind frontend — the skeleton of a real estate terminal.
Logo and identity
Applied the wordmark, mark, and mobile logo across header and footer.
Pulling UI into shared components
Built Badge, Popover, and StatRow primitives plus spacing and state tokens, so hierarchy stopped drifting between screens.
Natural language search, redesigned
Separated names from conditions and added a concept lexicon, so every screener filter can be set in plain words.
GA4 and Clarity
The point where real usage data started coming in.
Deploy verification gate
Detects missing JS chunks after each deploy and redeploys automatically.
Reevl AI as its own app
Browsing and asking are different mental models, so the AI moved into its own /ai shell.
First screen stops waiting on 7.8 MB
Fixed endless loading on slow phones by serving a lightweight table first.
From code back to Figma
Rebuilt the Figma design system from code: 140 variables and 23 components extracted from production.
Activity
수요와 공급으로 부동산을 재정의
- TypeScript50.4%
- Python41.5%
- JavaScript4.5%
- CSS2.2%
- Shell1.4%
2,054 of 2,380 commits written together with Claude Code
2,380 contributions since Jul 1, 2026
| Jul | Aug | Sep | ||||||||||
| Mon | ||||||||||||
| Wed | ||||||||||||
| Fri | ||||||||||||
Commits on Sep 17, 2026
- 9d2f5a2
docs(디자인): Figma 디자인 시스템 구축 기록 — 코드에서 추출한 140토큰·23컴포넌트
exclusiveyon-a11y committed
- 82b17e0
chore(통근): 지하철 그래프 공식 경로시간 대조 스크립트·참값 캐시(296+111쌍)
exclusiveyon-a11y committed
- 54fab7e
fix(통근): 신분당·수인분당·공항철도·부산·대구 등 34개 노선을 좌표 근사에서 열차 시간표 실측으로
exclusiveyon-a11y committed
- aaf1caf
fix(통근): 서울 버스가 대전 정류장으로 순간이동했다 — 정류장 ID가 전국 유일이 아니었다
exclusiveyon-a11y committed
Commits on Sep 16, 2026
- 585953a
fix(통근): 강남→서면(부산) 55분 — 동명이역이 순간이동으로 이어져 있었다 · 버스+지하철 통근 신설
exclusiveyon-a11y committed
- 1feb7c8
fix(도보): '역 도보 N분'이 실제보다 중위 3분 짧았다 — 보행망 실경로 + 오르막
exclusiveyon-a11y committed
Stack and infrastructure
Next.js, TypeScript, and Tailwind on the front, with TradingView Lightweight Charts for time series. Behind it, a Python data engine. Hosting runs on Cloudflare Workers with D1 and R2, migrated from Vercel on July 25.
The same data is also exposed as a public MCP server so AI tools can query Korean apartment data directly.
Ship · results
Live product
Usage
- 5,000+
- Jul 2026
- 64,817
Traffic sources
Measured in GA4 and Clarity, as of September 6, 2026. The assumption that "Korean real estate search happens on Naver" held up in numbers.
- 1,122
- 912
- 42
Sessions by channel, and search visibility
GA4 channels: Organic Search 1,199 · Direct 656 · Organic Social 82 · Unassigned 66 · AI Assistant 42 · Referral 16.
The sitemap lists 65,501 URLs. There was also an incident where Google's crawl dropped from 29,514 to 22 requests a day (the cause: detail pages not rendered on the server); after the fix, Google visibility is still recovering.
AI crawlers were slowed down, not blocked. Over 23 hours GPTBot made 34,856 requests (28%) and ClaudeBot 25,161 (21%) – far more than Googlebot's 480 – but a crawl-delay instead of a block kept the chance of being cited by AI. The 42 visits from AI assistants came from that.
Next – ON THE WAY
Site visits start only when you arrive, yet the neighbourhoods and roads you pass on the way are already part of the area. Splitting a visit into nine steps showed that half of its 14.3 hours went to travel and sorting notes. So my graduation exhibition, “REEVL: ON THE WAY”, turns the drive into exploration: Reevl's transaction and indicator data, redesigned for the car, attaches prices to the places you pass, and asking a question changes the route rather than returning an answer. It targets Pleos Connect on AAOS, testing whether exploration works within the visual limits of driving.
Where a person steps in
The operation runs by itself; what needs judgement comes to a person.
- By itself – transaction refreshes, publishing and error watching run as n8n workflows. Not a window to open every morning, but something that speaks up when it should.
- By hand – data from unreliable sources is refreshed manually, and the screen carries the date it is good for. Saying when something is from beats showing it as if it were current.
- Why it changed – the pipeline was green while publishing had been stopped for six weeks, and 11,891 server errors were reported as zero. Since then what is watched is the output, not the success log.
Reflection
A green pipeline doesn't mean the screen is right. Naver blog publishing had silently stopped for six weeks while its runs showed green, and a monitoring filter bug reported 11,891 server errors as zero. Since then twenty operational checks look at the output itself rather than success logs, and eleven build gates – including design-system conformance and a 432 KB first-screen JavaScript budget – block any deploy that fails one.
Crawlers are users too. One SEO tool's crawler was using 90.9% of the server's CPU. Growing visibility comes with an infrastructure bill – so now the first question is whether a metric actually matters to the product.
Still open. A 19.6% quick-back rate, Google visibility that is still recovering, and – because I built it alone – no evidence yet of how I collaborate.


