尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
A Next.js (App Router, TypeScript) foundation for searching, retrieving, and
displaying U.S. federal class action case data via the
CourtListener REST API.檢視完整 README ↗A Next.js (App Router, TypeScript) foundation for searching, retrieving, and displaying U.S. federal class action case data via the CourtListener REST API.
src/lib/courtlistener.ts — server-only CourtListener API client
(searchClassActionCases, getDocketById, getDocketEntries). Reads the
API token from the environment and is never imported from client
components. Search pagination cursors are extracted from CourtListener's
next/previous URLs so only an opaque cursor string is ever exposed
outside this module.src/app/api/courtlistener/search/route.ts — Route Handler that proxies
search requests to CourtListener. This is the only place the API token is
used at request time; the browser never sees it.src/app/page.tsx — client-side search UI (query, court, and filed-date
filters, plus cursor-based pagination) that calls the route handler above.src/app/case/[id]/page.tsx — server-rendered case detail page: docket
facts (court, cause, nature of suit, assigned judge, etc.) and the full
docket entry / filing history, calling the CourtListener client directly
since it never needs to run in the browser.Copy .env.example to .env.local:
cp .env.example .env.local
Set COURTLISTENER_API_TOKEN in .env.local to your CourtListener API
token. Get one from your account at
https://www.courtlistener.com/help/api/rest/#authentication.
.env.local is git-ignored — the token is never committed.
Install dependencies and run the dev server:
npm install
npm run dev
Open http://localhost:3000 and search for a case (e.g. "data breach").
With the dev server running:
curl "http://localhost:3000/api/courtlistener/search?q=data+breach"
A successful response returns JSON with count, nextCursor,
previousCursor, and results (an array of matching federal dockets). A
500 with a config error means COURTLISTENER_API_TOKEN isn't set; a 502
means CourtListener rejected or failed the request.
Visiting /case/<docket_id> (e.g. /case/72031934) renders that docket's
detail page directly from the CourtListener client.
type=r), which is where class action lawsuits filed in federal court
live. searchClassActionCases also accepts courtId, cause,
filedAfter, filedBefore, and a pagination cursor for narrowing
results.429 instead of
crashing. Search responses are also cached for 5 minutes
(next: { revalidate: 300 } in src/lib/courtlistener.ts) to reduce how
often that shared budget gets hit.What works
src/lib/members/, src/lib/settlements/).src/app/api/saved- searches/, src/lib/accountSavedSearches.ts), synced across devices,
replacing the earlier browser-local-only version
(src/lib/savedSearches.ts, still used for a signed-out visitor).worker/
settlement-discovery service (worker/src/savedSearchAlerts.ts). A
search's first check only seeds a "seen" baseline — it never emails the
member's entire existing match history the moment alerts are turned on.worker/README.md for the full design rationale and known
limitations of both paths).What's left
npm run build /
npm run lint (main app) and npm run build / npm run typecheck
(worker) are the only checks run today.SAVED_SEARCH_ALERTS_PER_RUN), not real-time — see the "Real
limitations" section of worker/README.md.worker/README.md.How to run
npm install && npm run dev).
Requires DATABASE_URL (shared with the worker), SESSION_SECRET, and
BLOB_READ_WRITE_TOKEN in addition to COURTLISTENER_API_TOKEN for the
member-account features to work; see .env.example for the full list
and which ones degrade gracefully when unset.worker/README.md (cd worker && npm install && npm run build && npm start). It's a one-shot script, not a server — an external
scheduler (Railway, in production) triggers each run.Where it's deployed
worker/README.md).