Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Self-service U.S. business compliance filings, starting with Pennsylvania annual reports. Customers find their business, see what's required, when it's due and what it costs (state fee and service fee shown separately), authorize us, pay through hosted checkout, and track the filing to completion. Operators fulfil each order from a generated filing packet.
Filewell is a private filing service. It is not affiliated with or endorsed by any government agency, and customers can always file directly with their state.
Requirements: Node 24, Docker Desktop (for the local Supabase stack).
npm install
cp .env.example .env.local # then fill in values
npx supabase start # local Postgres, Auth, Storage, Mailpit (emails at http://127.0.0.1:54324)
npx supabase db reset # applies supabase/migrations
npm run seed # states, agencies, PA rules, provisional price, templates
npm run dev
npx supabase status prints the local URL and keys for .env.local
(NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_PUBLISHABLE_KEY, SUPABASE_SECRET_KEY).
.env.local only ever points at local or staging; production credentials never go there.
Brand, support address, legal entity and postal address come from NEXT_PUBLIC_*
variables read in src/config/site.ts (see .env.example); change them in Vercel and
redeploy, not in code. Production links always use https://www.getfilewell.com.
Create an operator: sign up through the app, then
npm run grant-staff -- [email protected] admin
| Command | What it does |
|---|---|
npm run dev | Next.js dev server |
npm run build / npm start | Production build / serve |
npm run typecheck | tsc --noEmit |
npm run lint | ESLint |
npm test | Unit + database tests (Vitest; database tests run the real migrations in PGlite, no Docker needed) |
npm run test:e2e | Playwright end-to-end journey (needs a running app + Supabase) |
npm run seed | Idempotent reference-data seed (refuses to alter a published rule version) |
npm run grant-staff -- <email> <admin|operator|revoke> | Staff access |
The Playwright suite drives the full Pennsylvania journey (visitor → lookup → account
→ intake → authorization → sandbox payment → operator queue → packet → submitted →
receipt → accepted → customer notified → reminders stop) plus cross-account attacks
and webhook forgery. It needs NEXT_PUBLIC_SUPABASE_URL and SUPABASE_SECRET_KEY in
.env.local (test users are created with the service role).
npm run build && npm run test:e2e # local production build
E2E_BASE_URL=https://<deployment>.vercel.app \
E2E_SHARE_URL="https://<deployment>.vercel.app/?_vercel_share=<token>" \
npm run test:e2e # a protected Vercel deployment
E2E_SHARE_URL is a temporary Vercel share link (Vercel MCP get_access_to_vercel_url
or the dashboard's "Share" button); the global setup visits it once and reuses the
access cookie. VERCEL_AUTOMATION_BYPASS_SECRET, if set, is sent as the protection-bypass
header instead. Playwright loads .env.local, then .env.e2e (overriding it). E2E never
uses the production Supabase project, and against a production host only
tests/e2e/public.spec.ts runs.
PAYMENTS_PROVIDER=sandbox (default) uses the built-in hosted-checkout simulator:
no card fields, no money, signed webhooks through the same processing path as Stripe.
PAYMENTS_PROVIDER=stripe uses Stripe Checkout. Live keys are refused unless
PAYMENTS_LIVE_ENABLED=true, and live checkout refuses service prices an admin has not
approved in /admin/pricing.
The production deployment refuses the sandbox and Stripe test keys. Nothing stops a
Preview given live keys and PAYMENTS_LIVE_ENABLED=true from charging cards, so those
go on the Vercel Production target only, never "All environments".
Stripe webhook endpoint: POST /api/webhooks/payments/stripe (events:
checkout.session.completed, checkout.session.async_payment_succeeded,
checkout.session.async_payment_failed, checkout.session.expired,
refund.created, refund.updated; payment_intent.payment_failed is ignored).
EMAIL_PROVIDER=outbox records every email in the notifications table (visible at
/admin/notifications) without sending. EMAIL_PROVIDER=resend sends through Resend
from EMAIL_FROM (default Filewell <[email protected]>, a Resend-verified domain).
Resend delivers only on the production deployment; set RESEND_API_KEY on the Vercel
Production target only. Previews and local runs stay on the outbox unless
EMAIL_PROVIDER=resend and EMAIL_DELIVERY_OUTSIDE_PRODUCTION=true (a deliberate staging
deliverability check); tests always do.
vercel.json schedules GET /api/cron/reminders daily at 13:00 UTC with
Authorization: Bearer $CRON_SECRET. Operators can also run a cycle from
/admin/reminders.
src/lib/compliance/states/<state>.ts exporting ComplianceRuleDef[] with
verificationStatus: "verified" only after independent verification.src/lib/compliance/registry.ts, set supportLevel and
filingEnabled in jurisdictions.ts, add a service price, run npm run seed.version with a new effectiveFrom.
Published versions are immutable; existing orders keep the version they used.