Skip to content

Kail-Fu/InterviewOS

Repository files navigation

InterviewOS

Create an assessment

Replace coding puzzles with real-work simulations.
Open infrastructure for production-grade technical assessments.

License Docker Version


What is InterviewOS?

InterviewOS helps teams evaluate candidates through job-relevant tasks instead of algorithm puzzles.

Candidates complete realistic assignments using their normal tools. InterviewOS records the full workflow and generates structured evaluation reports so reviewers can see:

  • what the candidate shipped
  • how they approached the work
  • how they debugged, used tools, and made tradeoffs
  • how they explained decisions along the way

Not just output. The process.


How it works

1) Create an assessment

Set up an assessment

Define the task, add follow-up questions, and configure reporting requirements.

2) Invite a candidate

Invite and accept

Send a secure link. No account setup required.

3) Candidate completes the work end-to-end

Candidate completes assessment with recording

Candidates work normally using their preferred tools. InterviewOS captures the workflow and responses.

4) Review a structured report

Generated report

Reviewers get a high-signal summary plus the underlying evidence needed for calibration.


Why InterviewOS exists

Hiring is still optimized for puzzle performance. Modern engineering is not.

Real work involves:

  • debugging unfamiliar code
  • reading and applying documentation
  • using AI tools responsibly
  • working through ambiguity
  • communicating tradeoffs and decisions

Short algorithm challenges rarely measure these skills. InterviewOS is opinionated: real work beats rehearsed tricks.


InterviewOS vs traditional coding interviews

Traditional puzzle interviews InterviewOS
tests memorization and prep tests job-relevant execution
output-focused workflow and decision-focused
easy to game harder to fake
no realistic context realistic tasks and constraints
weak reviewer calibration evidence-rich review (recording + report)

Run locally in one command

Prerequisite: Docker Desktop running.

make dev

This starts:

A bundled sample assessment is included so you can test the full flow immediately.

For full executable report generation, start the optional grader worker:

make dev-full

This keeps the default local stack light while enabling heavier assessment evaluators for report generation.


What works today

  • end-to-end invite flow with frontend + backend
  • POST /assessments/start plus legacy POST /start-assessment
  • invite lifecycle APIs: bulk send, resend, verify token, and mark-taken
  • local out-of-box mode (no AWS account required)
  • bundled sample assessment archive for immediate testing
  • local SMTP inbox via Mailpit in Docker Compose
  • admin dashboard foundation at /dashboard backed by:
    • GET /api/assessments
    • GET /api/candidates?assessmentId=<id>
  • assessment creation flow foundation:
    • /new-assessment (title + context)
    • /selection-questions (question pick + create)
    • GET /api/questions, GET /api/assessments/check-title, POST /api/new-assessments
  • assessment result + invite-management foundation:
    • /assessment_result/:id
    • GET /api/assessments/{id}
    • POST /api/invite/bulk and POST /api/invite/resend now support assessmentId / candidateId
    • resend UX polish: success toast + status label rendered as resent at <timestamp>
  • candidate flow baseline at /take-assessment?token=... using copied Assessment.js recording pipeline with compatibility endpoints:
    • GET /api/public/assessment/{id}
    • GET /api/reflection/sections
    • POST /get-presigned-upload-url, PUT /local-upload/{key}, POST /notify-recording-upload
    • POST /api/recording/start-multipart-upload, POST /api/recording/upload-part, POST /api/recording/complete-multipart-upload
    • POST /upload-zip, POST /download-assessment
  • report experience baseline:
    • report route at /report/:id backed by persisted canonical candidate report payloads
    • report API compatibility endpoint: GET /report/{id}
    • assessment-result action now includes View Report
    • POST /upload-zip now triggers assessment-linked background scoring dispatch and persists report records in local SQLite
    • optional grader worker mode via make dev-full for executable evaluators across supported assessment types
    • local artifact endpoints support submission downloads and report video playback without AWS
    • local screen-time analyzer hook is enabled for uploaded workflow recordings (duration baseline, richer worker path when enabled)
    • candidate completion now lands on a loading screen that polls report readiness and auto-redirects to /report/:id
    • assessment4 dual-artifact upload path is supported via POST /upload-assessment4 (submission zip + notebook)
    • report scoring now uses candidate-scoped submission and reflection artifacts instead of assessment-wide latest files
    • report UI now renders score, test evidence, assessment overview, app usage, code diffs, code-quality findings, NER metrics, videos, and submission download actions when present
  • reliability and security hardening:
    • invite supersession and resend behavior are scoped by assessment
    • invalid/missing assessments are rejected before invite or candidate-row creation
    • multipart recording uploads validate part numbers, reject empty completion, expire abandoned sessions, and clean up stale temp files
    • local reflection uploads require a short-lived invite-validated upload token bound to the generated recording key
    • default local assessment starts resolve to a real assessment id, preventing /report/default loading loops
  • frontend build reproducibility:
    • frontend/package-lock.json is committed
    • frontend Docker builds use npm ci
    • Vite dependencies are upgraded and npm audit reports zero vulnerabilities

Architecture (high level)

InterviewOS is split into:

  • frontend/: candidate and admin UI
  • backend/: API, invite lifecycle, local SQLite state, assessment packaging, and report scoring pipeline
  • grader/: optional full-report worker with heavier evaluator runtimes and starter fixtures
  • docker-compose.yml: local end-to-end dev environment (including Mailpit)

For development details, see CONTRIBUTING.md.


Roadmap

Planned next steps:

  • expand the grader worker with more fixture submissions and CI coverage
  • add optional S3-backed recording/submission artifact providers for production deployments
  • add richer deterministic rubric scoring controls per assessment type
  • ATS and webhook integrations

Version log

v1.2.0

Adds the optional full-report generation path:

  • added make dev-full and an optional grader Docker service for executable report evaluators
  • added backend worker dispatch config while keeping make dev on the lightweight local evaluator
  • added canonical report payload persistence with compatibility for existing report columns
  • added local artifact endpoints for submission download and assessment/reflection video playback
  • added evaluator paths for the four supported assessments: Users API, Insurance Document Processor, Supreme Court RAG, and NER Product Attributes
  • upgraded the report UI to render richer test evidence, diffs, code-quality findings, app usage, video artifacts, NER metrics, and submission downloads

v1.1.0

Released after the original v1.0.0 README status. This release focuses on making the local open-source workflow safer and more deterministic:

  • tightened invite lifecycle behavior so resend/supersession is assessment-scoped
  • fixed invalid-assessment edge cases across invite, resend, and upload paths
  • hardened multipart recording uploads with malformed-part validation, empty-completion rejection, abandoned-session expiry, and temp-file cleanup
  • protected local reflection uploads with invite-validated, short-lived, one-use upload tokens
  • fixed candidate artifact attribution so reports use the correct candidate ZIP/reflection files rather than assessment-wide latest files
  • fixed the default assessment loading loop by resolving default starts to a real assessment id and guarding invalid report ids
  • improved SES reminder email parity with HTML invite emails
  • added reproducible frontend dependency installs with package-lock.json, npm ci, upgraded Vite dependencies, and a clean frontend audit/build path

v1.0.0

Initial production-ready open-source local workflow: Docker Compose setup, Mailpit email flow, admin dashboard, assessment creation/result views, invite management, candidate recording flow, artifact upload, background report generation, and report readiness polling.


Status

InterviewOS v1.2.0 is production-ready for the open-source local workflow. The default stack remains lightweight and local-first; the optional full grader worker enables deeper executable report generation when you need assessment-specific grading.

If you try it and hit sharp edges, please open an issue. Feature requests and PRs are welcome.


Contributing

See CONTRIBUTING.md.


Security

See SECURITY.md. Please report sensitive issues responsibly.


License

MIT. See LICENSE.

About

Replace coding puzzles with real-work simulations.

Resources

License

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors