Skip to content

Repository files navigation

SCPAD — 자동차 영업사원(SC)을 위한 견적·CRM SaaS

현장에서 실제로 운영 중인 1인 개발 SaaS입니다. BYD·BMW 두 완성차 브랜드의 영업 현장에서 매일 사용되며, 구독 결제까지 실연동으로 검증했습니다.

실제 운영 중인 서비스의 데모 계정으로 즉시 진입합니다. 가입·로그인 불필요, 데이터는 매일 새벽 초기화됩니다. BYD — PC 견적기 + 고객관리 · BMW — 칸반 파이프라인 + AI 상담 메시지

라이브 서비스https://app.scpadlab.com

전시장 계정 주간 활성 누적 견적
9곳 59개 35명 (리텐션 59%) 1,300건+

2026년 7월 기준

광고 없이 확산됐습니다. 제 개인용 → 팀원 → 지점 → 타 지점 순서로 번졌고, 최근 한 달에 계정이 42 → 59개로 늘었습니다.


무엇을 해결하나

자동차 영업사원(SC)의 업무는 흩어져 있습니다. 견적은 엑셀, 고객은 수첩, 상담 기록은 메모장. 그리고 이직하면 고객 데이터가 사라집니다.

SCPAD는 이를 하나로 묶습니다.

기능 설명
견적 계산기 차량가·부대비용·보조금·할부(PMT/IRR) 실시간 계산, 견적서 출력
고객 CRM 상담 타임라인, 팔로업 캘린더, 상태 파이프라인(신규~출고), 출고 후 케어
AI 어시스턴트 명함 사진 → 고객 자동 등록(OCR), 목적·톤 선택형 상담 메시지 생성
구독 결제 PortOne V2 빌링키 정기결제, 잔여기간 일할 부분환불

만든 계기는 단순합니다. 제가 고객을 잘 놓치는 영업사원이었습니다. 상담을 붙잡는 힘이 부족했고, 지나고 나서야 아까운 고객이 떠올랐습니다. 그 문제를 스스로 해결하려고 만든 도구가 출발점이었습니다.

아키텍처

┌─ 패드앱 (index.html) ──── BYD SC용 PC 견적기 + CRM
├─ 모바일 CRM (crm.html) ── BYD/BMW 공용, PWA (홈화면 설치·웹푸시)
├─ 어드민 (admin.html) ──── 딜러사/전시장/SC 계정·보조금·금융조건 관리
│
├─ Vercel Serverless (api/) ─ AI 프록시, 웹푸시 발송, 결제(발급·자동청구·환불), 크론
└─ Supabase ──────────────── PostgreSQL + Auth(이메일/카카오/구글) + RLS + Storage

설계 원칙

  • 프론트는 UI만, 계산·검증은 서버 기준 — 금융 조건(IRR·이손금)은 DB에서 로드, 어드민에서 코드 수정 없이 월간 갱신
  • 사용자별 데이터 격리 — Supabase RLS로 SC 개인 데이터 소유 (이직해도 본인 고객 유지)
  • 브랜드 멀티테넌시 — 단일 코드베이스 + 런타임 브랜드 분기(?brand=), 데이터는 brand 컬럼으로 완전 격리

기술적 하이라이트

1. 금융 계산 엔진 + 검증 자동화 할부 월납금 계산(PMT/RATE/IRR 이진탐색)을 순수함수(hana-calc.js)로 분리해 앱과 테스트가 단일 소스를 공유. 금융사 엑셀 견적서를 LibreOffice headless로 차종별 순회 재계산하여 전 차종 월납금을 자동 대조하는 회귀 검증 파이프라인 구축 (전 9차종 PASS, 소수점 단위 일치).

2. 실결제 구독 시스템 PortOne V2 빌링키 발급 → 즉시 첫 결제 → 매일 크론 자동청구 → 해지 시 잔여기간 일할 계산 부분환불까지 전체 사이클 실연동. 플랜별 기능 제한(고객 수·AI 호출·견적 저장)은 profiles.features JSON으로 서버에서 검증.

3. PWA + 웹푸시 운영 Service Worker 기반 홈화면 설치(Android/iOS), VAPID 웹푸시로 팔로업 당일 리마인더·출고 30/90일 케어 알림. 브랜드별 아이콘·진입 URL 분기.

4. AI 실무 적용 Claude API로 명함/손글씨 메모 OCR(신뢰도 낮은 필드 하이라이트), 고객 상황 기반 상담 메시지 생성 (목적 4종·톤 3종, 브랜드별 표현 규칙). 이미지 포함 요청만 상위 모델로 라우팅해 비용 최적화. 월별 사용량 서버 카운팅.

5. 소셜 로그인 + 셀프가입 카카오/구글 OAuth(Supabase Auth), 가입 승인제 ON/OFF 런타임 토글, 브랜드 세션 격리(BYD 계정으로 BMW 앱 접근 차단).

실서비스를 굴리며 배운 것

기능보다 이쪽이 실제로 오래 걸렸습니다.

비용은 리포트를 보고서야 알았다 초기엔 모든 AI 요청을 고성능 모델 하나로 처리했습니다. 텍스트 정리조차 정밀 모델로 가고 있다는 걸 비용 리포트를 보고 알아챘고, 요청 성격별로 분리해 모델 라우팅으로 재설계했습니다.

알림은 많을수록 나빴다 팔로업을 놓치지 말라고 알림을 촘촘히 넣었더니, 사용자가 알림 피로로 앱을 꺼버렸습니다. 이후 "놓치면 아까운 것만" 알리도록 규칙을 다시 좁혔습니다. 기능을 빼는 것도 개선이었습니다.

금융 수치는 AI를 믿으면 안 된다 견적 엔진은 숫자 하나가 잘못 나가면 곧 클레임과 손실입니다. 그래서 AI 결과를 그대로 쓰지 않고 수기 계산으로 대조 검증하는 QA 사이클을 반복했고, 결국 위 §1의 자동 회귀 검증 파이프라인으로 옮겼습니다.

매달 코드를 고치는 구조는 오래 못 간다 캐피탈 IRR·이손금·카드 프로모션·수수료율은 매월 바뀝니다. 처음엔 그때마다 코드를 고쳐 재배포했습니다. 지금은 어드민에서 DB로 반영하도록 구조를 바꿔, 배포 없이 운영이 돌아갑니다.

만드는 것보다 쓰게 하는 게 어렵다 직접 시연하면 쓰는데, "써보세요"만 하면 안 씁니다. 제품력이 아니라 전달의 문제였습니다. 이 관찰이 온보딩과 콘텐츠 설계의 기준이 됐습니다.

감이 아니라 숫자로 — 평가 하네스

"이 모델도 이 정도는 읽지 않나?"를 감으로 답하고 싶지 않아 평가 도구를 따로 만들었습니다.

  • 손글씨 인식 — 정답셋을 파일로 두고 같은 사진을 모델별·반복 실행해 필드별 정답률을 표로 출력. 이미지 전처리·리사이즈·추론 강도를 옵션으로 A/B. 이 결과로 추론 강도를 낮춰 응답 30~40% 단축, 정확도 손실 0을 확인하고 반영했습니다.
  • 메시지 생성 — 목적 4종 × 톤 3종 12조합 전수 검증. 자동 검사 7종(글자수·이모지·금지 표현·메모 반영·계절 환각·사실 창작·서명 창작). 이 표를 근거로 메시지 생성만 상위 모델로 승격했습니다.

기술 스택

영역 선택 이유
Frontend Vanilla JS 단일 HTML 빌드 없는 즉시 배포, 현장 태블릿/모바일 호환
Backend Vercel Serverless 크론·API 프록시, 운영비 최소화
DB/Auth Supabase (PostgreSQL) RLS 기반 멀티테넌시, OAuth 내장
결제 PortOne V2 빌링키 정기결제 + 부분취소 API
AI Claude API (Haiku/Sonnet) 비용-품질 라우팅
알림 Web Push (VAPID) 앱스토어 없이 네이티브급 알림

프로젝트 구조

├─ index.html          # BYD PC 견적기 + CRM (패드앱)
├─ crm.html            # 모바일 CRM (BYD/BMW 공용, PWA)
├─ admin.html          # 어드민 (계정·보조금·금융조건 관리)
├─ hana-calc.js        # 금융 계산 순수함수 (PMT/RATE/IRR)
├─ finance.js          # 금융 조건 폴백 데이터
├─ subsidy.js          # 전기차 보조금 (DB 동적 로드)
├─ bmw-data.js         # BMW 차종/색상 데이터
├─ api/
│  ├─ claude.js        # AI 프록시 (사용량 제한)
│  ├─ billing-*.js     # 결제 (발급/자동청구/해지환불)
│  ├─ push-*.js        # 웹푸시 (구독/발송/테스트)
│  └─ cleanup.js       # 소프트삭제 7일 후 완전삭제 크론
├─ sw.js               # Service Worker
└─ manifest*.json      # PWA 매니페스트 (브랜드별)

여기까지 온 과정

시기 저장소 무엇이 달라졌나
2026.04 byd-contact-log 개인용 PWA. localStorage 단독, 사용자가 자기 API 키 입력
2026.05 bmwgb 실시간 다인 협업 실험 (Firebase Realtime DB)
2026.05~ 이 저장소 다중 사용자 SaaS. 서버 프록시·RLS·결제·플랜 제한

"혼자 쓰는 도구"와 "남에게 주는 서비스" 사이의 거리를 그 사이에 넘었습니다. 자세한 대조는 byd-contact-log README에 있습니다.

그 외 공개 저장소ai-daily-digest (LLM 파이프라인 + Actions cron + 피드백 루프) · video-cutter (Python · GPU STT · LLM) · ai-image-factory (생성형 AI 배치 파이프라인)

이 저장소에 대해

운영 저장소에서 내부 문서·금융사 계약 조건·DB 마이그레이션을 제외한 공개용 미러입니다. 모든 시크릿은 환경변수로 관리되며 코드에 포함되어 있지 않습니다. 클라이언트에 포함된 Supabase publishable key는 RLS를 전제로 한 공개용 키입니다.


개발 남광희 — 기획·개발·디자인·운영 전체 1인 문의 chein206@gmail.com


SCPAD을 포함한 전체 케이스 5건은 포트폴리오에 정리돼 있습니다 — chein206.github.io

About

SCPAD - Quotation + CRM SaaS for car sales consultants (public portfolio mirror)

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages