Daesin Logistics Dispatch Bot
2026-01-01 — present
Logistics dispatch data service crawling with Cheerio, queryable via KakaoTalk chatbot skill server and Next.js mobile web — Clean Architecture + TSyringe DI, Express 5, Prisma SQLite, Traefik Blue-Green zero-downtime deployment
Project Description
A service that automatically collects logistics dispatch data for real-time querying via KakaoTalk chatbot and mobile web. The backend separates domain, application, and infrastructure layers using Clean Architecture with TSyringe-based dependency injection, crawling dispatch data with Cheerio + Axios and storing in Prisma SQLite. Auto-syncs via node-cron every hour from 6 AM to 8 PM (Mon-Sat), and provides route code, vehicle number, and destination search with daily statistics through a Kakao i Open Builder skill server. The frontend is a Next.js mobile web with TanStack Query-based data fetching and Recharts statistics visualization. Designed a Blue-Green zero-downtime deployment architecture using Traefik reverse proxy in Docker, automating the full cycle from build to health check to traffic switching to rollback via deployment scripts.
Highlights
- Clean Architecture + TSyringe DI layer separation
- Cheerio crawling + node-cron auto-sync (hourly)
- KakaoTalk chatbot skill server (route/vehicle)
- Traefik Blue-Green zero-downtime deploy + auto
- Next.js mobile web + Recharts statistics dashboard
Features
- Auto crawling — Cheerio + Axios dispatch data collection, node-cron auto-sync Mon-Sat 06:00-20:00 hourly
- KakaoTalk chatbot skill server — Kakao i Open Builder integration, route code/vehicle number/destination search, daily statistics
- REST API — route/vehicle/date search endpoints, statistics API, manual sync trigger
- Mobile web — Next.js responsive mobile UI, TanStack Query server state management, Recharts statistics visualization
- Blue-Green zero-downtime deployment — Traefik reverse proxy, automated deploy script (build→health check→traffic switch→rollback)
- Clean Architecture — domain/application/infrastructure layer separation, TSyringe DI container, Value Object (LineCode, SearchDate) pattern
Lessons Learned
- 💡 Learned decoupling business logic from external dependencies (crawler, DB, Kakao API) by applying Clean Architecture layer separation with TSyringe DI container
- 💡 Understood chatbot platform request/response protocols and scenario block integration by directly implementing Kakao i Open Builder skill server
- 💡 Experienced zero-downtime deployment traffic switching, health checking, and rollback strategies by designing Traefik-based Blue-Green deployment with automated deploy scripts
- 💡 Learned domain modeling techniques preventing primitive type abuse by enforcing domain rules at type level through Value Object pattern (LineCode, SearchDate)