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。 以下为已保存的摘录。
AI-assisted job board connecting skilled-trades workers with employers: a
worker "Skill Passport" (verified profile, projects, certifications,
references), employer job postings + applicant management, and an admin CMS.
Stack: React 19 + TypeScript + Vite, Supabase
(Postgres + Auth + Storage, Row Level Security throughout), Vercel
(static hosting + serverless functions for anything that must stay
server-side, e.g. the Gemini API key), deployed on Vercel.
2. Create a Supabase project at supabase.com (free tier is fine).查看完整 README ↗AI-assisted job board connecting skilled-trades workers with employers: a worker "Skill Passport" (verified profile, projects, certifications, references), employer job postings + applicant management, and an admin CMS.
Stack: React 19 + TypeScript + Vite, Supabase (Postgres + Auth + Storage, Row Level Security throughout), Vercel (static hosting + serverless functions for anything that must stay server-side, e.g. the Gemini API key), deployed on Vercel.
Install dependencies
npm install
Create a Supabase project at supabase.com (free tier is fine).
Apply the database schema. Either:
supabase link --project-ref <your-project-ref> then supabase db push (applies supabase/migrations/*.sql in order), orsupabase/apply_all.sql (a one-shot concatenation of the same migrations, for convenience).Copy env vars
cp .env.local.example .env.local
Fill in from your Supabase project's Settings → API:
VITE_SUPABASE_URL, VITE_SUPABASE_ANON_KEY — safe to expose client-side; Postgres RLS is the actual access-control boundary.SUPABASE_SERVICE_ROLE_KEY — server-only, used by api/admin/delete-user.ts. Never prefix a secret with VITE_ — Vite ships anything with that prefix straight into the client bundle.GEMINI_API_KEY — from aistudio.google.com, server-only, used by api/ai/generate-job-details.ts.Run it
npm run dev # Vite dev server (frontend only)
npm run typecheck # tsc --noEmit
npm run build # production build
To exercise the /api/* serverless functions locally too, use the Vercel CLI instead of plain vite: vercel dev (reads the same .env.local).
npm install -g vercel # if you don't have it
vercel link # first time: creates/links a Vercel project
vercel env add VITE_SUPABASE_URL
vercel env add VITE_SUPABASE_ANON_KEY
vercel env add SUPABASE_SERVICE_ROLE_KEY
vercel env add GEMINI_API_KEY
vercel --prod
vercel.json sets the Vite framework preset and a SPA rewrite (all
non-/api routes serve index.html, since this is a client-side-routed
React Router app).
pages/, components/, contexts/ — the React app.services/db.ts — the entire Postgres/Supabase data-access layer (auth stays in contexts/AuthContext.tsx).services/geminiService.ts — thin client for the AI endpoints below; no API key here.api/ — Vercel serverless functions: ai/generate-job-details.ts (Gemini proxy), admin/delete-user.ts (privileged, service-role-key account deletion, re-verifies the caller is an admin server-side).supabase/migrations/ — the database schema, RLS policies, storage buckets, and seed data, in apply order.instructions/ — the original product/architecture notes this app was scaffolded from (Firebase-era; superseded by the above where they conflict).Every table has Row Level Security enabled — there is no client code path
that can read or write data it isn't entitled to; the database enforces it,
not the frontend. Admin status lives in profiles.role, checked via a
SECURITY DEFINER is_admin() helper, never via a client-settable flag.