Product Requirements · 리버스 엔지니어링

차봄 Chabom

중고차 딜러·상사를 위한 재고·손익·상품화 통합 관리 앱 — “지금 팔면 얼마 남는지”를 5초 안에 보여주는 재고 손익 레이더

버전 v1.0 작성자 SeizyC 작성일 2026-07-13 성숙도 Prototype 화면 11 Stack TanStack·React19
본 문서는 신규 기획서가 아니라 현재 구현된 UI·코드를 리버스 엔지니어링하여 전체 기획 범위를 역으로 정리한 PRD입니다. 앱을 로컬 구동해 11개 화면을 렌더링 확인하고, 라우트 소스 13개 + 도메인 스토어를 정밀 분석한 결과를 근거로 작성했습니다. 모든 데이터는 현재 localStorage 목업이며 서버·인증·실 API는 없습니다.
01

개요Overview

제품 한 줄 정의

중고차 딜러·상사(매매상사)를 위한 모바일 우선 재고·손익·상품화 통합 관리 앱. 홈 화면 타이틀 그대로 “재고 손익 레이더”를 지향하며, 무엇을 먼저 조치해야 하는지를 즉시 드러낸다.

문제 정의

  • 실질 원가 파악의 어려움 — 매입가 외에 탁송·성능·수리·도색·광택·광고비, 그리고 보유 기간에 비례해 쌓이는 금융이자·주차비까지 합쳐야 “진짜 남는 돈”을 알 수 있다.
  • 장기(악성) 재고 방치 — 오래 보유할수록 금융비용이 누적돼 마진을 잠식하는데 위험 신호를 놓치기 쉽다.
  • 상품화 진행 불투명 — 어떤 차가 정비·촬영·광고등록 중 어느 단계에 멈춰 있는지 추적이 안 된다.
  • 대표의 관리 사각지대 — 소속 딜러별 재고 리스크와 월 고정비 수취 현황을 한눈에 볼 수단이 없다.

목표 / 가치 제안

사용자핵심 가치
딜러“지금 팔면 남는 돈”·“먼저 조치할 차” 즉시 파악, 상품화 진행률 관리, 매입~판매 전 과정 기록
상사 대표소속 딜러 전체의 악성재고·비용누락·역마진 리스크와 월 고정비 정산 현황을 대시보드로 관리
관리자딜러 가입 승인, 전체 재고 조회, 보험 제휴 배너·클릭 로그 관리
제휴(수익화)판매 고객·시승 차량을 다이렉트 자동차보험(스마트접수·원데이보험)으로 연결

현재 구현 상태

Data

localStorage 목업

서버·DB·백엔드 API 없음. 시드 차량 15대·딜러 4명. 다중 기기/동시성 미지원.

Auth

인증 없음

단일 고정 사용자(채민주·위드카). “로그아웃”은 토스트만 표시.

Access

권한 게이팅 없음

“대표자 전용·관리자”는 UI 문구뿐, 코드상 접근 제어 부재. → §9 참조.

Integration

외부 연동 목업

카모두는 1.4초 지연 후 하드코딩 3대 추가, 보험은 외부 URL 딥링크만 존재.

02

사용자 & 역할Users & Roles

역할(Dealer.role)은 4종이며 가입 승인 플래그(approved)를 갖는다. me 객체 자체에는 role이 없고 dealers 배열에서 me.id로 역할을 조회한다.

딜러 사무장 상사대표 관리자 + approved (승인 여부)
시드 딜러역할승인소속
채민주 (me)딜러승인위드카
박사무사무장승인위드카
이대표상사대표승인위드카
신입딜러딜러대기위드카

현재 대표자 관리·관리자 화면은 누구나 진입 가능하며, 승인 워크플로우(approved 토글)는 관리자 화면에만 존재한다.

03

핵심 도메인 모델Domain Model

차량 상태 (7종)

매입완료 상품화중 판매중 예약중 판매완료 보류 급매

비용 구조 (costs)

구분항목
일회성탁송 · 성능 · 수리 · 도색 · 광택 · 광고 · 기타
정기 지출금융이자(월 1회분) + 납입일 · 주차비(월 1회분) + 납입일
금융 상세원금 · 이율(%) · 모드(percent / manual)
정기 지출 누적 규칙 — 납입일이 설정되면 매입일 이후 경과한 개월 수(monthsAccrued)만큼 자동 누적, 미설정이면 1회분만 반영된다. 즉 보유 기간이 길수록 실질원가가 자동 증가해 악성 재고의 마진 잠식이 계산에 내장돼 있다.

상품화 체크리스트 (7단계)

성능점검 정비/수리 도색 광택 촬영 광고등록 출고준비

리스크 등급 — 보유일수 기준

등급조건표기
safe< 30일정상
warn≥ 30일주의 30일+
danger≥ 60일위험 60일+
urgent≥ 90일긴급 90일+

리스크 등급은 오직 보유일수로 결정된다(마진 무관). 마진·체크리스트는 홈의 “위험 사유 태그”와 정렬 점수에만 반영된다.

손익 계산 공식

총비용 totalCost
일회성합계 + 주차비×(개월 or 1) + 금융이자×(개월 or 1)
실질원가 realCost
매입가 + totalCost (= 손익분기점)
예상마진 expectedMargin
(currentPrice ?? askingPrice) − realCost
마진율 marginRate
expectedMargin / realCost × 100 (%)
협상 여유 safeNego
마진≤0 → 0, else 예상마진×60% ⌊10만원⌋
권장 방어가 defenseFloor
실질원가×103% ⌈10만원⌉ (최소 3% 마진)

부가 엔티티

  • Dealer{ id, name, phone, sangsa, role, approved }
  • ClickLog{ kind: smart_claim | one_day, vehicleId?, at } · 보험 클릭 로그(최대 200개)
  • Banner — 스마트접수·원데이 CTA의 { title, subtitle, url } · 관리자에서 편집 → 보험연결에서 소비
04

정보구조 & 내비게이션Information Architecture

하단 5탭 고정 내비게이션: 홈 · 내 차량 · 상품화 · 손익 · 더보기

🏠 홈 🚗 내 차량 🔧 상품화 📈 손익 ⋯ 더보기
화면경로진입
홈 대시보드/앱 진입
내 차량 목록/vehicles내 차량
차량 상세/vehicles/$id목록·홈·손익·알림 전방위
차량 등록/vehicles/new목록 +, 빈 상태 CTA
상품화/prep상품화
손익/profit탭, 상세 “전체 손익”손익
대표자 관리/executive더보기 →
보험 연결/insurance홈·상세 유도
알림/notifications홈 벨, 더보기
더보기/프로필/profile더보기
관리자/admin더보기 →
05

기능 요구사항Functional Requirements · FR-1~11

FR-1/

홈 대시보드

앱 진입 즉시 “오늘 먼저 봐야 할 차량·손해 위험 차량·예상 마진”을 5초 안에 파악.

  • 요약 2×2: 판매중·상품화중·60일+·이번달 예상마진
  • 우선 차량 Hero: 리스크·마진·위험사유 + 상세/가격수정/급매검토
  • 오늘 처리할 일 태스크 · 위험순 재고(4정렬)
  • 위험점수 = riskWeight×100 − 마진율
FR-2/vehicles

내 차량 목록

재고 전체를 검색·상태필터·정렬로 훑고 상세로 진입.

  • 검색: 번호판·제조사·모델 부분일치
  • 상태 필터 7옵션 보류 누락
  • 정렬: 최근등록·보유일순·마진율순·장기재고
  • 행: 사진·차명·상태·리스크·예상마진·마진율
FR-3/vehicles/$id

차량 상세

정보 수정·상태 변경·비용 입력·손익·체크리스트·보험·삭제를 모두 처리하는 허브.

  • 7단계 섹션: 매입정보·상태변경·손익요약·일회성비용·정기지출·체크리스트·보험
  • 저장 이원화: 비용·체크·상태=즉시 / 정기지출=드래프트
  • 판매완료 전환 → 보험 업셀 바텀시트
FR-4/vehicles/new

차량 등록

신규 매입 차량을 재고에 추가.

  • 기본·사진(≤8)·매입·판매·초기비용·정기지출·메모
  • 제조사 10종 · 상태 7종(보류 포함)
  • 기본값: 현대·검정·올해·오늘·매입완료
  • 필수: 번호·모델 / 등록 확인 다이얼로그
FR-5/prep

상품화

상품화 진행 중 차량의 체크리스트 진행률과 남은 작업을 한 화면에서 파악.

  • 대상: 상품화중 · 매입완료 (소유 필터 없음)
  • 진행률 %·done/total·미완료 작업 칩
  • 클릭 → 상세(체크는 상세에서 수행)
FR-6/profit

손익

“지금 팔면 얼마 남는지·무엇을 조치할지” 분석. 딜러 소유 재고 기준.

  • 기간(이번달/지난달/전체/직접) + Hero + 미니카드 3
  • 3탭: 요약 · 차량별(5정렬) · 시뮬레이션
  • 확정 순마진(판매완료) vs 예상 순마진(active)
  • 할인 시뮬레이터(−50~−400만) · 방어가
FR-7/executive

대표자 관리

소속 딜러 전체의 운영 리스크와 월 고정비 수취(“받을 돈”)를 관리·정산.

  • 4탭: 요약·딜러별·악성재고·고정비
  • 완납/부분납/면제 · 관리 메모 · 관리주의 토글
  • 자동 flag(관리주의/확인필요) · 수취율 정산
  • 딜러 로스터 데모 미연동
FR-8/insurance

보험 연결

판매 고객·시승 차량을 다이렉트 보험으로 연결하고 클릭 기록.

  • CTA 2: 스마트접수 · 원데이보험(새 탭 + logClick)
  • 차량별 원데이 바로가기(?plate= 딥링크)
  • 최근 클릭 기록 · 배너는 관리자에서 공급
FR-9/notifications

알림

활성 재고를 규칙 기반 5개 그룹으로 자동 분류해 조치 우선순위 제시.

  • 장기재고(30+) · BEP 근접(마진율<5%)
  • 촬영 대기 · 광고등록 필요 · 원데이 유도
  • 각 행 → 차량 상세
FR-10/profile

더보기 / 프로필

프로필·소속·권한 확인 및 앱 설정 허브.

  • 카모두 전산 연동(목업 3대 임포트)
  • 대표자 관리·알림·관리자 진입
  • 데모 초기화 · 로그아웃(토스트만)
FR-11/admin

관리자

회원 승인·전체 차량·배너·클릭 로그 관리 콘솔.

  • 4탭: 회원·차량·배너·로그
  • 미승인 딜러 승인/반려 워크플로우
  • 배너 편집 → 보험연결 화면에 즉시 반영

각 화면의 전체 액션·데이터 필드·규칙은
docs/PRD.md 원문에 상세 수록

06

크로스커팅 비즈니스 규칙Cross-cutting Rules

  • 리스크 등급은 보유일수만으로 결정(30/60/90일). 마진·체크리스트는 위험 사유 태그·정렬 점수에만 반영.
  • 정기 지출(금융·주차)은 납입일 설정 시 매입일 기준 경과 개월 수만큼 누적 → 장기 재고일수록 실질원가 증가.
  • 비용 누락 판정은 성능·광택·광고·금융 4개 항목의 0원 여부(탁송·수리·도색·기타는 0이어도 누락 취급 안 함).
  • 보험 배너·클릭 로그는 단일 소스: 관리자 편집 → 보험연결/상세에서 소비·클릭 발생 → 관리자 로그에서 조회.
07

외부 연동Integrations

연동현황비고
카모두 (경매 전산)목업프로필에서 계정 입력 → 낙찰 차량 자동 임포트(현재 하드코딩 3대). 실 API 연동 필요.
스마트접수 (다이렉트 보험)딥링크smartClaim.url?plate=…&sold=1, 클릭 로그 기록.
원데이보험딥링크oneDay.url?plate=…, 시승·이동 시 1일 단위 가입 유도.
08

비기능 요구사항Non-functional

Mobile-first

단일 컬럼 모바일 UI

최대 폭 max-w-md, 하단 고정 5탭, safe-area 대응. 별도 데스크톱 레이아웃 없음.

Locale

전면 한국어

원화 표기(억/만원), ko-KR 날짜.

UX

낙관적 즉시 저장

SSR + 하이드레이션, 이미지 lazy 로딩, 저장 시 토스트 피드백.

Persistence

localStorage (현재)

다중 기기·동시성·백업 없음 → 실서비스 전 백엔드 필요.

09

구현 갭 & 정합성 이슈Gaps · found in reverse-engineering

G1

백엔드·인증 부재

전부 localStorage 목업, 단일 사용자. 실서비스 불가, 다중 사용자/기기 미지원. 전역

G2

권한 게이팅 없음

대표자/관리자 화면 누구나 접근. 역할 기반 보안 필요. executive · admin

G3

currentPrice 편집 UI 부재

마진 계산 우선 필드인데 수정 불가, 항상 희망가로 계산. “가격수정”도 #price 스크롤만. 전역

G4

대표자 딜러 로스터 미연동

하드코딩 8명 + 해시 분배, store.dealers·dealerId 미연동 → 실 정산 불일치. executive

G5

목록 상태필터에 “보류” 누락

상세·등록엔 존재하나 목록 필터에서 빠짐. vehicles.index

G6

정렬 “장기재고” = “보유일순” 중복

둘 다 보유일 내림차순으로 동일 로직. vehicles.index

G7

실질원가·손익분기점 중복 표시

히어로에서 동일 값(realCost)을 라벨만 달리해 두 번 노출. vehicles.$id

G8

로그아웃·카모두 목업

실제 세션/실 API 없음. profile

G9

알림 “신청→” 수익화 동선 누락

보험 링크·logClick 없이 차량 상세로만 이동. notifications

10

향후 로드맵 제안Roadmap

P0기반 · 반드시 선행
  • 백엔드 & 인증 — 서버 DB + 계정/세션, localStorage → API 전환 G1
  • 역할 기반 권한 게이팅 — 딜러/사무장/상사대표/관리자 접근·기능 차등, 가입 승인 게이트 실동작 G2
P1핵심 가치 완성
  • 대표자 정산 실데이터 연동 — dealerId 기반 실 딜러/재고 집계, 고정비 서버 저장 G4
  • 가격 관리 강화 — currentPrice 편집 UI, 가격 변경 이력, 시세 연동 G3
  • 카모두 실 API 연동 — 낙찰 차량 자동 임포트 G8
P2확장 · 고도화
  • 알림 고도화 — 푸시 알림, 보험 수익화 동선 정비 G9
  • 다중 상사/멀티테넌시, 데이터 정합성 정리 G5~G7
  • 이미지·문서 업로드 스토리지
11

성공 지표 (KPI)Success Metrics

재고 회전

평균 보유일수 ↓

60일+·90일+ 악성재고 비율 감소.

수익성

대당 실현 마진 ↑

비용 누락 차량 비율 ↓ (입력 완성도 ↑).

상품화

리드타임 단축

매입→판매등록 소요, 체크리스트 완료율.

정산

고정비 수취율 ↑

미납 딜러 수 감소(대표자).

수익화

보험 CTA 전환

스마트접수·원데이 클릭·전환, 차량당 유도율.

참여

DAU / WAU

등록 차량 수, 세션당 조치 완료 건수.

12

용어집Glossary

실질원가
매입가 + 모든 비용(일회성 + 누적 금융·주차). 손익분기점과 동일.
예상마진
현재가(없으면 희망가) − 실질원가. “팔면 남는 돈”.
악성재고
60일+ 장기 보유 또는 손실위험 차량.
상품화
매입 후 정비·도색·광택·촬영·광고등록 등 판매 준비 과정.
고정비(자릿세)
상사가 소속 딜러에게 매월 수취하는 운영 분담금.
스마트접수
판매 고객 대상 다이렉트 자동차보험 비교·접수 연결.
원데이보험
시승·이동 시 1일 단위 즉시 가입 자동차보험.
카모두
중고차 경매 전산 시스템(낙찰 차량 임포트 연동 대상).