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.