93 lines
3.6 KiB
Markdown
93 lines
3.6 KiB
Markdown
# 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:
|
|
|
|
```bash
|
|
# 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"}'
|
|
```
|
|
|
|
```javascript
|
|
// 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:
|
|
```sql
|
|
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):
|
|
```bash
|
|
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:
|
|
```bash
|
|
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`).
|