3.6 KiB
3.6 KiB
JobsBoard — Phase 10: Private Beta Operations Runbook
Overview
This runbook provides step-by-step procedures for platform operators during the Private Beta of JobsBoard. It covers user onboarding, invitation lifecycle management, feedback triaging, scraper operations, and emergency procedures.
1. Beta Invitation Management
Creating Invitations
Administrators can issue single-use cryptographic invitation tokens via the API or CLI:
# Via API (Admin Session Required)
curl -X POST http://localhost:3000/api/beta/invite \
-H "Content-Type: application/json" \
-H "Cookie: next-auth.session-token=<ADMIN_TOKEN>" \
-d '{"email": "tester@example.com", "role": "SEEKER"}'
// Via Node script / REPL
const crypto = require("crypto");
const { PrismaClient } = require("@prisma/client");
const prisma = new PrismaClient();
async function issueInvite(email, role = "SEEKER") {
const token = "beta_" + crypto.randomBytes(16).toString("hex");
const expiresAt = new Date(Date.now() + 14 * 24 * 60 * 60 * 1000); // 14 days
return await prisma.betaInvitation.create({
data: { email: email.toLowerCase(), token, role, expiresAt }
});
}
Tester Registration Flow
- Tester visits:
https://<domain>/register?betaToken=beta_<token_hex>&email=tester@example.com - Form automatically pre-fills email and verifies token validity upon submission.
- Once registered, token is stamped with
usedAt: new Date()and cannot be re-used.
2. Beta Feedback Triaging
Viewing Tester Submissions
All user reports (Bug, UI Problem, Search Problem, Job Data Problem, Feature Request) submitted via the floating "Beta Feedback" button are stored in the BetaFeedback table with diagnostic client metadata (pageUrl, viewport, browserInfo).
Query recent feedback:
SELECT id, category, description, "pageUrl", viewport, "createdAt"
FROM "BetaFeedback"
ORDER BY "createdAt" DESC
LIMIT 20;
Triage Matrix
| Category | Priority | Action Item |
|---|---|---|
| BUG | P1/P2 | Inspect logs via grep -i "error" server.log with correlation ID. Reproduce in staging. |
| JOB_DATA_PROBLEM | P2 | Check JobSource and SourceExecutionLog for the job URL. Invalidate or mark stale. |
| SEARCH_PROBLEM | P3 | Review search query tokens against normalized skills dictionary. |
| UI_PROBLEM | P3 | Check tester's recorded viewport to reproduce responsive layout breakpoint. |
| FEATURE_REQUEST | P4 | Log in product backlog for post-beta release planning. |
3. Scraper & Acquisition Operations
Manual Job Pipeline Trigger
To trigger an immediate ingest scan for a verified company (e.g. Greenhouse, Lever, Ashby):
curl -X POST http://localhost:3000/api/admin/sources \
-H "Content-Type: application/json" \
-H "Cookie: next-auth.session-token=<ADMIN_TOKEN>" \
-d '{"action": "TRIGGER", "sourceId": "<SOURCE_ID>"}'
Monitoring Scraper Health
Inspect recent execution logs:
curl -s http://localhost:3000/api/admin/sources \
-H "Cookie: next-auth.session-token=<ADMIN_TOKEN>" | jq .
- Job Expiration Safeguard: Ensure consecutive missing scan count equals 3 before active jobs transition to
EXPIRED.
4. Emergency Procedures
Degraded Infrastructure Mode
- If Redis fails: JobsBoard automatically falls back to in-memory sliding rate limiting and in-process background task queue.
- If S3 is unreachable: Uploads fall back to container local filesystem storage (
/uploads/resumes). - Check
/api/healthto view component statuses (database,redis,storage,queue).