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,即可驗證所有權並自行管理介紹。
一分鐘完成驗證LAURUS — EP Plenary Companion for group advisors
翻譯準備中
取自儲存庫 README
正在載入完整 README。 以下為已儲存的摘錄。
Less paperwork. More wins. / Meno scartoffie, più voti vinti. A tool for European Parliament political-group advisors: it auto-collects reports, amendments and voting lists from the EP across 24 languages, consolidates them, extracts split/separate votes, emails advisors when a voting list changes, and auto-fills a voting list's Remarks column with the referenced amendment text.檢視完整 README ↗
Less paperwork. More wins. / Meno scartoffie, più voti vinti.
A tool for European Parliament political-group advisors: it auto-collects reports, amendments and voting lists from the EP across 24 languages, consolidates them, extracts split/separate votes, emails advisors when a voting list changes, and auto-fills a voting list's Remarks column with the referenced amendment text.
apps/web Next.js (App Router) dashboard — Vercel
packages/ingest EP Open Data API v2 client + polling
packages/parser DOCX/PDF parsers + deterministic amendment-reference matcher
supabase/migrations Postgres schema + RLS
https://data.europarl.europa.eu/api/v2):
open, no auth, JSON-LD. Documents use the ELI/FRBR model
(Work → Expression per language → Manifestation per format), so per-language
DOCX/PDF file references come straight from the API. Poll /{resource}/feed
(~30-day window) for change detection.www.europarl.europa.eu/doceo/document/...):
bot-gated (HTTP 202, empty body to non-browser clients). Resolve through the
API manifestation paths where possible; otherwise fetch with a real browser
context, identifiable User-Agent, and backoff.packages/parser is for.nvm use # Node 24 (see .nvmrc)
cp .env.example .env # no key needed for the EP API dry-run
npm run ingest -- 2026 # lists sittings + a sample report's file manifestations
node --test --experimental-strip-types packages/parser/src/*.test.ts
The flagship Remarks matcher (packages/parser/src/matchAmendmentRef.ts) is
deterministic — regex + number normalisation only. It never invents text;
unresolved rows (paragraph refs, withdrawn/oral/compromise amendments, missing
numbers) become anomalies for human review.
The web app reads these at runtime (local: apps/web/.env.local; production:
Vercel → Settings → Environment Variables). Never commit any of them.
| Variable | What it unlocks | Without it |
|---|---|---|
NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY | the app | nothing works |
SUPABASE_SERVICE_ROLE_KEY | server-side writes (invites, inbox, live sync) | admin flows fail |
NEXT_PUBLIC_SITE_URL | absolute links in emails | invite links come out relative |
RESEND_API_KEY | sending mail (alerts, verified VLs) | notifications disabled |
EMAIL_FROM | the From address, e.g. LAURUS <[email protected]> | falls back to [email protected], which only reaches the account owner |
RESEND_ADMIN_KEY | reading received mail (the send-only key cannot) | /api/inbound 500s |
RESEND_WEBHOOK_SECRET | the email.received signature check | every inbound call is rejected (fails closed) |
ANTHROPIC_API_KEY | inbox triage + Italian rendering of split parts | mail queues untriaged; split rows keep the official notation |
INBOX_ADDRESS, HELLO_ADDRESS | the two addresses shown on /admin/inbox | defaults to inbox@/[email protected] |
TWILIO_* | WhatsApp alerts | email only |
Three ways in, all of them behind the same invite gate — a Google account is not an invitation:
| Method | What it needs |
|---|---|
| Email + password | nothing; the invite flow sets it |
the Google provider enabled in Supabase → Authentication → Providers, with an OAuth client whose Authorized redirect URI is https://<project>.supabase.co/auth/v1/callback | |
| Magic link | nothing to configure, but Supabase's built-in mailer is capped at a few messages an hour — set a custom SMTP sender before real use |
NEXT_PUBLIC_SITE_URL must be the deployed origin: it is the base of the
/auth/callback URL that Google and the magic-link email come back to, and a
wrong value sends members to the wrong host after a successful sign-in.
/auth/callback decides membership, not identity: a person with no LAURUS
profile gets in only while carrying a valid invite (the token cookie set
before the redirect, or an open invite addressed to the same email), and is
signed straight back out otherwise.
supabase start
supabase db reset # applies supabase/migrations/0001_init.sql
All tables have Row Level Security. Plenary data is read-only to authenticated advisors; writes happen server-side via the service-role key. Users see only their own profile, subscriptions and notifications.