Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻譯準備中
尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證화물차 사용 내역 기록·검수·월 정산·지급 관리 웹앱 (Next.js · PostgreSQL · PWA)
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
기사와 담당자가 같은 사용 내역으로 등록 → 증빙 제출 → 검수 → 월 정산 → 엑셀·PDF 출력 → 지급 확인을 끝내는 단일 회사 웹앱입니다. Next.js 15 / React 19 / TypeScript / Tailwind 4 / Drizzle / PostgreSQL. 설계 기준은 DESIGN입니다.檢視完整 README ↗
기사와 담당자가 같은 사용 내역으로 등록 → 증빙 제출 → 검수 → 월 정산 → 엑셀·PDF 출력 → 지급 확인을 끝내는 단일 회사 웹앱입니다. Next.js 15 / React 19 / TypeScript / Tailwind 4 / Drizzle / PostgreSQL. 설계 기준은 DESIGN입니다.
/m/master/form-fields에서 기사·담당자별 숨김/선택/필수를 지정합니다. 회사 기본값과 현장별 항목 재정의, 미리보기·감사로그·동시 수정 충돌을 지원합니다. 기사 기본 화면은 최소 입력이며 설정은 오프라인에도 보관합니다.Node 24와 npm이 필요합니다. 기본 로컬 실행에는 Docker가 필요하지 않습니다.
npm ci
cp .env.example .env
npm run db:start
npm run db:migrate
npm run seed
npm run dev
기본 로컬 .env 설정 예시:
PG_PORT=54329
DATABASE_URL=postgresql://postgres:[email protected]:54329/vehicle_app
STORAGE_DIR=./storage
APP_URL=http://localhost:3000
PORT=3000
접속: http://localhost:3000. 일반 단독 설치의 .env.example 기본값은 DB 54329, 앱 3000입니다.
db:start는 .data/pg에 embedded PostgreSQL을 초기화하여 백그라운드로 실행하고, 같은 포트가 실행 중이면 재사용합니다. 로그는 .data/postgres.log입니다. 외부 PostgreSQL에서는 DATABASE_URL을 설정하고 db:start를 생략합니다. 운영용 docker-compose.yml은 별도 POSTGRES_PASSWORD 설정이 필요합니다.
프로덕션 실행은 npm run build 후 npm run start -- --port 3000입니다. 운영은 HTTPS와 Secure 세션 쿠키를 사용합니다. .env, .data/, storage/를 저장소에 커밋하지 않습니다.
| 아이디 | 비밀번호 | 역할 |
|---|---|---|
| admin | admin1234 | 관리자 |
| site | demo1234 | 두 현장의 현장 담당자 |
| settlement | demo1234 | 모든 현장의 정산 담당자 |
| driver1 | demo1234 | 김성호 / 한길 운송 / 1톤 |
| driver2 | demo1234 | 이정민 / 동서 운송 / 5톤 |
시드는 서울 현장(사진 필수), 인천 보안 현장(대체증빙 허용), 차량 3대, 기사 2명, 운송사 2곳·기사 사업자·고객, 일대 300,000원·회당 100,000원·고객 청구 일대 350,000원 계약을 생성합니다. 시드 단가는 부가세 별도입니다. admin이 이미 있으면 시드는 데이터를 추가하지 않습니다. 데모 계정은 개발 전용이며 운영 전 계정·비밀번호를 교체하세요.
관리자는 기준정보 → 입력 항목 설정에서 회사 기본값을 정하고 설정 저장합니다. 특정 현장만 다르게 쓰려면 현장을 선택해 항목을 변경합니다. 회사 기본 따름이나 재정의 해제로 되돌릴 수 있습니다. 아래 미리보기는 저장 전 기사에게 보일 항목을 보여줍니다. 기본 기사 폼에는 사용일·현장·차량·출발·도착·운반 내용(선택)·증빙 및 과금 입력이 표시됩니다. 추가비는 필요할 때 버튼으로 추가합니다. 필수 항목이 비어도 임시저장은 가능하지만 제출 전 안내되며 서버에서도 검사합니다.
driver1 로그인 → 운행 등록 → 서울 현장, 사용일, 출발·도착 입력 → 운행 5행 추가. 일대 청구수량은 1, 기본운임은 300,000원입니다. 사진을 첨부하고 담당자에게 제출합니다. 휴대폰 임시저장·서버 작성중·제출 완료·사진 실패를 구분합니다.driver2로 같은 방식으로 입력하고 회당 청구수량 5를 지정합니다. 기본운임은 500,000원입니다. 운행 행 개수만으로 청구수량이 확정되지 않습니다.site → 대리 입력에서 전월 사용일 1건을 입력·제출합니다. 검수함에서 보완 항목·메시지를 보내고, 기사 재제출 후 승인합니다. 추가비 한 줄은 사유를 적고 보류한 뒤 나머지를 승인할 수 있습니다.settlement → 월 정산 → 새 정산 → 거래처·기간 → 후보 조회. 전월 미정산분의 실제 사용일과 전월분 표시를 확인합니다. 보류를 제외하고 초안을 만들고 명세 확정합니다. 금액·증빙·권한·다른 명세 잠금은 서버가 재검사합니다.지급 완료로 표시됩니다.가져오기는 /m/import에서 파일 선택 → 시트·헤더·열 매핑 확인 → 미리보기 검증 → 유효 행 임시저장 순서입니다. 등록은 DRAFT + PROXY이고 자동 승인하지 않습니다. 상세에서 사진을 추가하고 제출·검수합니다. 현장 담당자도 배정 현장에 가져올 수 있습니다. 재저장한 파일도 정규화된 내용이 같으면 건너뛰고 파일 안의 반복 행은 보존합니다. 유사 경로의 중복 의심 행은 경고를 보고 개별 제외할 수 있습니다. 수식은 저장된 결과값을 사용하고 결과 없는 매핑 셀만 행 오류로 처리합니다. UTF-8이 아닌 CSV는 UTF-8 저장 안내와 함께 거부합니다. 자세한 수량·단가 규칙은 업무 가정을 참고하세요.
npm run typecheck
npm run lint
npm test
npm run build
npx playwright install chromium
npm run test:e2e
npm run format:check
TEST_DATABASE_URL을 지정하고 CREATE DATABASE 권한을 부여합니다.npm run test:e2e: Playwright 브라우저 시나리오를 전용 vehicle_e2e DB에서 실행합니다. 아래 E2E 절을 참고하세요.npm run format은 Prettier로 포맷합니다. 커밋 전 format:check를 통과시킵니다.기본 계정·기준정보 시드 이후 실행합니다.
npm run seed
npm run seed:demo
seed:demo는 2026년 9월 사용 15건과 8월 이월 1건을 생성합니다. 기사 2명의 작성중·제출·보완요청·승인 건, 일대 5회 운행, 회당 청구수량, 대기비 보류, 고객 청구와 작은 시연 증빙 이미지가 포함됩니다. 확정 지급명세는 지급완료 1건(660,000원), 미지급 1건(880,000원)입니다. 금액·검수·명세·지급은 실제 서비스 함수를 통해 생성하며, 재실행하면 같은 데이터를 유지합니다.
site 또는 settlement 계정으로 /m에서 검수 대기·보완 대기·증빙 누락·미정산 승인액·미지급액을 확인할 수 있습니다. 처음부터 다시 만들 때는 로컬 데이터를 지우는 npm run db:reset 후 npm run seed && npm run seed:demo를 실행합니다.
npm run test:e2e
Playwright는 .env의 PostgreSQL 호스트·포트를 사용하되 데이터베이스 이름을 vehicle_e2e로 고정합니다. 매 실행의 globalSetup에서 이 전용 DB를 재생성·마이그레이션·기본 seed하고, 증빙은 .data/e2e-storage에 저장합니다. 웹 서버와 스펙의 서비스 호출 모두 같은 전용 DB를 사용합니다. 개발 DB의 사용·명세·지급·증빙·감사로그·가져오기 작업 수는 실행 전후 비교하며 달라지면 실패합니다.
웹 서버 포트는 .env의 PORT, PostgreSQL은 PG_PORT입니다. 기존 개발 서버를 재사용하지 않으므로 E2E 실행 전에 해당 웹 포트를 비워 주세요. 이 설정은 tests/e2e/full-flow.spec.ts를 포함해 모든 E2E 스펙에 적용됩니다.
앱을 중지한 유지보수 시간에 실행합니다. 백업은 비밀번호 해시와 증빙을 포함하므로 접근 권한을 제한하고 별도 매체에 보관합니다.
npm run backup
# 출력된 .data/backups/<시각> 경로를 별도로 보관
# 복구 대상은 빈 DB와 빈 STORAGE_DIR로 준비
npm run restore -- .data/backups/<시각>
npm run restore:verify
npm run db:migrate # 구버전 백업의 적용 이력 보정·후속 마이그레이션
복구는 기존 데이터가 있는 대상에 덮어쓰지 않습니다. npm run db:reset은 로컬 vehicle_app 전체를 삭제하므로 복구 리허설 전용 환경에서만 사용하세요. 복구 후 검증·파일 이동이 실패하면 복구된 업무 DB를 비우고 승격한 파일을 제거합니다. 실제 리허설·주기·담당·실패 대응은 OPERATIONS에 있습니다.
Vercel + 기존 Supabase의 전용 vehicle 스키마 배포는 DEPLOY를 참고하세요. DB 파일 저장과 배포 환경을 설정하며 로컬 기본 실행은 그대로 유지합니다.