尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗티머니 단말기 A/S 기사님이 차고지에서 수리 대상 차량을 기다리는 시간을 줄이기 위한 프로토타입. 차량번호 끝 4자리 → 종점까지 남은 정류장 수 & 예상 도착 시간(ETA)을 보여줍니다.
Next.js(App Router) · TypeScript · Tailwind CSS · Supabase · Vercel
/api/bus/search?q=1234vehicles 테이블에서 끝자리 일치 차량(노선ID, 종점순번) 조회getBusPosByRtid) 호출 → 해당 차량의 현재 구간순번(sectOrd) 추출ETA = (종점순번 - 현재순번) × 정류장당 평균시간(1.5분) 계산 → 대시보드 표시공공 API는 노선ID 기준이라 차량번호만으로는 위치를 못 찾습니다. 그래서 Supabase가
차량번호 → 노선ID매핑을 담당합니다.
npm install
supabase/schema.sql 실행routes ← supabase/routes.csv (노선 658개)vehicles ← supabase/vehicles.csv (차량 9,575대)node scripts/fill-last-seq.mjs (노선별 종점순번을 Supabase routes.last_seq 에 직접 기록)npm run dev → http://localhost:3000CSV는 사내
차량단말기버전-*.xls에서 추출한 실데이터입니다. (표준노선ID=busRouteId, 차량번호=plainNo 로 공공 API와 매칭)last_seq가 비어있는 노선은 ETA 대신 현재 위치만 표시됩니다.
| 변수 | Vercel 등록 | 설명 |
|---|---|---|
PUBLIC_DATA_API_KEY | ✅ 필수 | 공공데이터포털 버스위치 API 인증키 |
NEXT_PUBLIC_SUPABASE_URL | ✅ 필수 | Supabase 프로젝트 URL |
NEXT_PUBLIC_SUPABASE_ANON_KEY | ✅ 필수 | Supabase anon 키 |
SUPABASE_SERVICE_ROLE_KEY | 선택 | RLS 우회 읽기용 service_role 키 |
SUPABASE_DB_HOST/PORT/USER/PASSWORD | ❌ 불필요 | 로컬 스크립트(적재·last_seq) 전용. 앱 런타임 미사용 |
로컬은 .env.local, 배포는 Vercel > Project > Settings > Environment Variables 에 위 ✅ 3개만 등록하면 됩니다.
https 실패 시 http 자동 폴백).# 이미 git init + 최초 커밋은 되어 있음. 원격만 연결:
git remote add origin https://github.com/<계정>/<레포>.git
git branch -M main
git push -u origin main
⚠️ 회사 차량 데이터(
supabase/vehicles.csv,routes.csv)와.env.local은.gitignore로 푸시 제외됩니다. 데이터는 이미 Supabase에 있으니 배포엔 불필요합니다. (다른 PC에서 재적재하려면 원본.xls에서 CSV 재생성)
lib/eta.ts 의 AVG_MIN_PER_STOP (정류장당 평균 분) — 시간대/노선별로 보정 가능last_seq(종점순번)는 노선마다 다름 → 정확도를 위해 노선별 실제 정류장 수로 채워야 함