JB/BETA_RUNBOOK.md

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

  1. Tester visits: https://<domain>/register?betaToken=beta_<token_hex>&email=tester@example.com
  2. Form automatically pre-fills email and verifies token validity upon submission.
  3. 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/health to view component statuses (database, redis, storage, queue).