Javis OS
Javis OS는 기업가를 돕는 에이전시 AI로, 업무를 지원하고 함께 성장합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.