Auksion bitimlarini tahlil qilish platformasi · 2026
CarFlip
AQSh salvage / auksion mashinalari uchun determinatsiyalangan foyda-tahlil platformasi — har bir lot uchun to‘liq investitsiya, qayta sotuv narxi, foyda, ROI va 0–100 Deal Score.
Muhandislik ko‘rsatkichlari
- ~12.5k Lines of TypeScript
- 12 Prisma Models
- 9 Deal-Score Factors
- 3 Business Engines
- ~88% API Test Coverage
- 17 Build Phases
Texnologiyalar
- npm workspaces
- packages/shared
- packages/api
- packages/web
- NestJS 10
- TypeScript
- Prisma 5
- PostgreSQL 16
- JWT + Passport
- argon2
- Helmet
- Per-IP rate limiting
- Next.js 14 (App Router)
- React 18
- Tailwind CSS
- TanStack Query
- Recharts
- Framework-free TypeScript
- Profit
- Deal Score
- Market Price
- VIN decoder
- Jest
- Unit + e2e
- Real PostgreSQL test DB
- ~88% API coverage
- Docker (multi-stage)
- Docker Compose
- nginx / Caddy
- Let's Encrypt
- Hetzner VPS
Muammo
Diler AQSh auksionida (Copart, IAA) shikastlangan mashinani ko‘radi, lekin uni sotib olib, tashib, ta’mirlab, qayta sotgach foyda chiqadimi yoki yo‘qmi — buni bilmaydi.
Xarajat o‘zgaruvchilari juda ko‘p, qayta sotuv narxi noaniq, risk esa title kodi va shikast surati orqali baholash qiyin. Qaror odatda sezgiga tayanadi.
Yechim
CarFlip har bir auksion lotini aniq “ha / yo‘q” ga aylantiradi.
Har bir lot uchun u to‘liq investitsiyani (narx + komissiyalar + tashish + ta’mirlash + qo‘shimchalar), o‘xshash sotuvlar asosidagi qayta sotuv narxini, kutilayotgan foyda va ROI ni, hamda 9 omilli tortilgan 0–100 Deal Score va risk darajasini hisoblab beradi — title turi, shikast turi, probeg, yosh, bozor talabi va boshqalar.
Har bir hisob determinatsiyalangan va tushuntiriladi. Bir xil kirish har doim bir xil natija beradi, har bir raqam ortida sababi ko‘rsatiladi — hech qanday AI qora quti yo‘q.
Mening rolim
CarFlip’ni monorepo tuzilishidan ishlab chiqarishgacha yakka o‘zim qurdim.
Bu NestJS API va uning Prisma sxemasi, uchta framework’siz biznes-engine, to‘liq Next.js frontend — landing, auth, filtrlanadigan ro‘yxat, Deal-Score vizualizatsiyasi va grafiklar bilan tahlil sahifasi, real-time “what-if” kalkulyator, dashboard, sevimlilar va admin panel — seed ma’lumotlar bazasi, multi-stage Docker build’lar, ikkita deploy stack va umumiy Hetzner VPS’ga joylashtirishni o‘z ichiga oldi.
Arxitektura
TypeScript monorepo (npm workspaces), uchta paket bilan: shared, api va web.
Backend — NestJS 10 + Prisma 5 + PostgreSQL 16: DTO whitelist bilan global validation pipe, global exception filter, CORS, trust-proxy va body-size cheklovlari. Butun biznes-logika packages/shared ichida sof, framework’siz TypeScript sifatida yashaydi — shuning uchun oson sinaladi va ham API, ham standalone seed skripti tomonidan qayta ishlatiladi.
Bozor narxi tahlili qimmat, shuning uchun u input-hash + TTL bo‘yicha keshlanadi va yangi o‘xshash ma’lumot import qilinganda avtomatik invalidatsiya qilinadi.
- Mijoz Next.js 14 · App Router
- Transport REST /api/* · yagona origin
- Ilova NestJS 10 · 11 modul
- Engine’lar ProfitDeal ScoreMarket Price
- Ma’lumotlar PostgreSQL 16 · Prisma 5Hash + TTL kesh
O‘xshashlikka tortilgan median, outlier’larni rad etish bilan
Qayta sotuv narxi bitta taxmin emas, o‘xshash sotuvlardan baholanadi. Har bir “comparable” maqsadli mashinaga qanchalik o‘xshashligiga qarab tortiladi; baho — o‘sha to‘plamning tortilgan medianasi.
Median olinishidan oldin outlier’lar MAD (Median Absolute Deviation) orqali rad etiladi, har bir natija esa ishonch darajasi bilan keladi — foydalanuvchi unga qanchalik ishonishni biladi.
- 01 O‘xshashlikka tortilgan median
- 02 MAD orqali outlier’larni rad etish
- 03 5 ishonch darajasi — VERY_LOW → VERY_HIGH
- 04 Input-hash + TTL bo‘yicha keshlanadi
Seed ma’lumotlarida 558 ta bozor “comparable”; baho asta-sekin pasayadi — kamroq / kuchsizroq comparable’lar ishonchni kamaytiradi, raqamni buzmaydi.
To‘qqiz tortilgan omil, 0–100
Deal Score to‘qqizta tortilgan omilni — title turi, shikast turi, probeg, mashina yoshi, bozor talabi va boshqalar — bitta 0–100 ball va reytingga birlashtiradi.
Bu model emas, oddiy tortilgan yig‘indi. Har bir omilning hissasi ko‘rinadi — past ball har doim sabab bilan keladi.
Determinatsiyalangan va tushuntiriladigan — bir xil lot har doim bir xil ball oladi, ball hech qachon qora quti emas.
Yadroда AI yo‘q
Har bir narx, ball va foyda raqami sof funksiya tomonidan ishlab chiqariladi. ML model yo‘q, “vaziyatga bog‘liq” yo‘q — bir xil kirish bir xil chiqish beradi, har bir chiqish uni yaratgan kirishlar bilan keladi.
AI ish oqimida o‘z o‘rniga ega; diler pul tikadigan raqamlar bu o‘rin emas.
Muhandislik qarorlari
Yagona origin deploy — CORS umuman yo‘q
Brauzer faqat bitta domen bilan ishlaydi. /api/* Next.js frontend bilan bir xil origin orqasida NestJS backend’ga reverse-proxy qilinadi.
Bu CORS’ni butunlay olib tashlaydi — preflight yo‘q, header o‘yinlari yo‘q, cookie-domen chekka holatlari yo‘q — va himoya qilinishi kerak bo‘lgan yuzani kichraytiradi.
Tamoyil Eng oddiy arxitektura — himoya qilinadigan qismlari eng kam bo‘lgani.
Biznes-logika framework’dan tashqarida
Profit, Deal-Score va bozor-narxi engine’lari packages/shared ichidagi oddiy TypeScript — bironta NestJS import’isiz. Ularni API chaqiradi; seed skripti ham; unit-testlar ham to‘g‘ridan-to‘g‘ri chaqiradi.
Qoidalarda so‘rov qanday kelishiga bog‘liq hech narsa yo‘q.
Tamoyil Qoidalarni framework yeta olmaydigan joyda saqla.
Qiyinchiliklar
- 01
Jonli va seed ma’lumot uchun bitta kod yo‘li
Import pipeline’lari
PrismaClientqabul qiluvchi sof funksiyalar. API import endpoint’i ham, standalone seed skripti ham aynan bir xil mantiqni chaqiradi — “seeder’da ishlaydi, ishlab chiqarishda buziladi” farqi yo‘q. - 02
Import paytida keshni invalidatsiya qilish
Bozor narxi tahlili qimmat bo‘lgani uchun input-hash + TTL bo‘yicha keshlanadi. Yangi comparable’lar import qilinganda ular ta’sir qilgan yozuvlar avtomatik invalidatsiya qilinadi — yangi ma’lumotdan keyin eski baho hech qachon berilmaydi.
- 03
Scraping yo‘q
Copart va IAA qattiq anti-bot himoyaga ega. U bilan kurashish o‘rniga CarFlip provayder interfeysi orqasidagi mock auksion provayderdan o‘qiydi — keyinroq real ma’lumot manbasiga o‘tish qayta yozish emas, cheklangan o‘zgarish.
- 04
Tushuntirish orqali ishonch
Determinatsiyalangan engine faqat foydalanuvchi unga ishonsa foydali. Har bir ball va narx faqat yakuniy raqam emas, o‘z kirishlari va sababi bilan ko‘rsatiladi — natijani harakatga yaroqli qiladigan narsa shu.
Natija
CarFlip — ishlaydigan full-stack mahsulot: NestJS API, uchta sinovdan o‘tgan biznes-engine, va real-time “what-if” kalkulyator hamda admin panel bilan Next.js frontend, PostgreSQL’da.
U 152 ta mashina, 558 ta bozor “comparable” va 120 ta mock auksion import bilan to‘ldirilgan — har biri avtomatik narxlanadi va baholanadi. Taxminan 12 500 satr TypeScript, 17 bosqichda, alohida engine hujjatlari bilan (docs/market-price-engine.md, docs/auction-data.md).
Umumiy Hetzner VPS’ga, umumiy reverse proxy orqasida, alohida Docker stack sifatida joylashtirilgan — non-root konteyner, healthcheck’lar, bootda migratsiya va to‘la bazani hech qachon o‘chirmaydigan seed.
- Auksion loti
- Xarajat taqsimoti
- O‘xshash sotuvlar
- Bozor narxi
- Deal Score
- Foyda + ROI
- Sotib olish / o‘tkazib yuborish
Asosiy funksiyalar
- To‘liq investitsiya taqsimoti
- Comparable’lardan qayta sotuv bahosi
- Foyda va ROI
- Deal Score (0–100)
- Risk darajasi
- Real-time what-if kalkulyator
- Filtrlanadigan ro‘yxat (URL bilan sinxron holat)
- Tahlil detali sahifasi
- Deal-Score vizualizatsiyasi
- Grafiklar (Recharts)
- Ro‘yxatdan o‘tish / kirish / profil
- JWT + argon2
- Rol guardlar (USER / ADMIN)
- Per-IP rate limiting
- Helmet · DTO validatsiya
- Mashina qo‘shish
- Auksion import
- Bozor ma’lumotlarini boshqarish
- Dashboard
- Sevimlilar
- Profit engine
- Deal Score engine
- Market Price engine
- VIN dekoder
Overview
CarFlip is a profit-analysis platform for US salvage / auction cars (Copart / IAA style). For any auction lot it computes the total investment, an estimated resale price from comparable sales, projected profit and ROI, and a 0–100 Deal Score with a risk rating — all deterministic and explainable, no AI black box.
It is built as a TypeScript monorepo: a NestJS + Prisma + PostgreSQL backend, framework-free business engines with full unit-test coverage, and a Next.js 14 frontend with a real-time what-if calculator and an admin panel.