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,即可验证所有权并自行管理介绍。
一分钟完成验证正在加载完整 README。 以下为已保存的摘录。
A car-rental fleet business dashboard: cars, bookings, earnings, expenses, P&L
reports, invoices/agreements (PDF), and alerts. React frontend, Express + JWT
backend, PostgreSQL database.
Stack
• Frontend: React 18 (Vite), jspdf. Auth via JWT stored in localStorage.
• Backend: Express 5, pg, JWT (jsonwebtoken), bcryptjs.
• Database: PostgreSQL.
Prerequisites
• Node.js 18+
• PostgreSQL installed and running locally
The schema creates the users, cars, bookings, earnings, expenses
tables and seeds 8 demo cars.
(npm run db:init re-runs the schema against the fleetopz database.)查看完整 README ↗A car-rental fleet business dashboard: cars, bookings, earnings, expenses, P&L reports, invoices/agreements (PDF), and alerts. React frontend, Express + JWT backend, PostgreSQL database.
createdb fleetopz
psql -U postgres -d fleetopz -f backend/src/config/schema.sql
The schema creates the users, cars, bookings, earnings, expenses
tables and seeds 8 demo cars.
cd backend
cp .env.example .env # then edit DB credentials + JWT_SECRET
npm install
npm run dev # http://localhost:5000
(npm run db:init re-runs the schema against the fleetopz database.)
cd frontend
npm install
npm run dev # http://localhost:5173
Open the app, click Create one on the login screen to register the first admin account, and sign in. The seeded demo cars appear under Fleet.
All routes are under /api. Everything except register/login requires an
Authorization: Bearer <token> header.
| Method | Route | Auth | Notes |
|---|---|---|---|
| POST | /auth/register | — | name, email, password → returns { token, user } |
| POST | /auth/login | — | email, password → returns { token, user } |
| GET | /auth/me | token | current user |
| GET/POST | /fleet | token | list / create cars (id = plate) |
| PUT/DELETE | /fleet/:plate | token | update / delete a car |
| GET/POST | /bookings | token | list / create bookings (id = BK-xxx) |
| PUT/DELETE | /bookings/:id | token | update / delete |
| GET/POST | /earnings | token | list / create earnings (id = ER-xxx) |
| PUT/DELETE | /earnings/:id | token | update / delete |
| GET/POST | /expenses | token | list / create expenses (id = EX-xxx) |
| PUT/DELETE | /expenses/:id | token | update / delete |
UI action → data hook → HTTP → route → middleware → controller → model → DB, and the response returns along the same path.
frontend/src/*.jsx (Fleet, Booking, Earning, Expenses screens)
│ call add/update/delete from…
frontend/src/useFleetData.js (the single data hook — the whole app's data lives here)
│ via frontend/src/services/api.js (attaches JWT, calls fetch)
▼ HTTP (e.g. POST /api/fleet)
backend/src/routes/*Routes.js maps URL+method → controller
backend/src/middleware/auth.js verifies the JWT (protected routes)
backend/src/controllers/*.js validates input, calls the model
backend/src/models/*.js the ONLY layer that runs SQL
backend/src/config/db.js PostgreSQL connection pool
▼
PostgreSQL (cars / bookings / earnings / expenses / users)
Auth is handled by frontend/src/context/AuthContext.jsx + Login.jsx, gated
in frontend/src/main.jsx (shows Login until a valid session exists).
useFleetData.js; the backend is a
straightforward CRUD + auth API. Record IDs are generated on the frontend and
stored as-is by the backend.