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,即可驗證所有權並自行管理介紹。
一分鐘完成驗證s
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Multi-tenant SaaS ERP for Elite Innovation Solutions — sales documents, purchasing, accounting/ledger, banking, HR/payroll, and projects, with Saudi Arabia (ZATCA) e-invoicing fields on invoices.
Next.js (App Router) full-stack app, PostgreSQL via Drizzle ORM, custom JWT-cookie auth. No external services required to run it — everything (including this README's setup) is self-contained and portable to any server that can run Node.js and Postgres.
• Node.js 20 or later
• PostgreSQL 16 or later
2. Create a database and a role for the app (adjust names/password as you like):檢視完整 README ↗Multi-tenant SaaS ERP for Elite Innovation Solutions — sales documents, purchasing, accounting/ledger, banking, HR/payroll, and projects, with Saudi Arabia (ZATCA) e-invoicing fields on invoices.
Next.js (App Router) full-stack app, PostgreSQL via Drizzle ORM, custom JWT-cookie auth. No external services required to run it — everything (including this README's setup) is self-contained and portable to any server that can run Node.js and Postgres.
Install dependencies:
npm install
Create a database and a role for the app (adjust names/password as you like):
sudo -u postgres psql -c "CREATE ROLE erp_app WITH LOGIN PASSWORD 'choose-a-strong-password';"
sudo -u postgres psql -c "CREATE DATABASE elite_erp OWNER erp_app;"
Copy the env template and fill it in:
cp .env.example .env
DATABASE_URL — point this at the database you just created, e.g. postgresql://erp_app:choose-a-strong-password@localhost:5432/elite_erp.
AUTH_SECRET — required. The app refuses to start (and every request fails) if it's unset — there is no insecure fallback. Generate a fresh one, don't reuse any value that shipped in this repo's history:
openssl rand -hex 32
Changing AUTH_SECRET later invalidates every existing session (all users get logged out) — expected the first time you deploy, worth knowing if you ever rotate it afterward.
Uploaded branding (logos, seals, signatures) is stored under an uploads/ directory in the project root (gitignored) and served through an authenticated, org-scoped route — keep that directory writable and persistent across deploys, or move it to object storage for a multi-instance setup.
Push the schema to your database:
npm run db:push
(db:generate and db:studio are also available if you want versioned migration files or a DB browser UI — day-to-day setup only needs db:push.)
Build and start:
npm run build
npm start
The app listens on port 3000 by default (PORT=3000 env var to change it).
Visit /register in your browser. The first person to register creates the organization and becomes its owner — there's no separate seed script to run; chart of accounts, document numbering, and starter presets are seeded automatically for every new organization.
Keep the Node process alive and restart it on crash/reboot with a process manager. Either of these works:
pm2
npm install -g pm2
pm2 start npm --name elite-erp -- start
pm2 save
pm2 startup
systemd — /etc/systemd/system/elite-erp.service:
[Unit]
Description=Elite ERP
After=network.target postgresql.service
[Service]
WorkingDirectory=/path/to/elite-erp
ExecStart=/usr/bin/npm start
Restart=always
User=www-data
EnvironmentFile=/path/to/elite-erp/.env
[Install]
WantedBy=multi-user.target
Then systemctl enable --now elite-erp.
Put a reverse proxy in front of it for TLS and a normal domain. Nginx example:
server {
listen 80;
server_name erp.yourdomain.com;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
(Add TLS with certbot/Let's Encrypt or your own certificates as usual.)
npm run dev
Open http://localhost:3000.