The web app wraps the same scan engine the CLI uses, and adds the parts that don’t make sense in a one-shot binary:Documentation Index
Fetch the complete documentation index at: https://docs.pipefort.com/llms.txt
Use this file to discover all available pages before exploring further.
- Sign in with GitHub. Identity is established via Supabase Auth’s GitHub provider.
- Connect a GitHub account or organization. A separate GitHub App grants the API read-only access to repo workflows.
- Continuous posture across every repo. One scan per repo, orchestrated client-side with bounded concurrency.
- History and trends. Every scan persists to Postgres with row-level security scoped to the signed-in user.
- Deep links back to GitHub. Each finding links to the exact
file:lineon the default branch.
Pages
| Route | What |
|---|---|
/login | GitHub OAuth login via Supabase Auth. |
/connect | Prompts you to install the GitHub App on accounts/orgs. |
/connect/callback | Receives installation_id from GitHub and links it to the signed-in user. |
/dashboard | Aggregate posture, donut by severity, trend chart, “scan all” button. |
/repositories | All connected repos with per-repo severity counts. |
/repositories/:id | Per-repo finding list, plus a card to override rule settings for this repo. |
/rules | Per-user rule settings — disable rules you don’t care about globally or per repository. |
Data flow
git clone happens server-side — the API pulls workflow YAML via the GitHub Git Trees/Blobs API and scans the bytes in memory. Each per-repo request fits comfortably in a serverless time budget.
Read/write split around RLS
The React app reads from Postgres directly through supabase-js. Every table has row-level security scoped to
auth.uid() = user_id, so users can only see their own data even though they’re hitting Postgres directly with their JWT.Next
GitHub setup
Connect a GitHub account or org so the dashboard can scan its workflows.
Rule settings
Disable rules you don’t care about — globally or per repository.
API reference
The HTTP endpoints under
/api/* if you want to drive scans programmatically.