Skip to content

Repository files navigation

FairScreen

Local-first interview practice with privacy-preserving coaching and optional on-device media analysis.

FairScreen is a browser-based interview practice application built to help candidates improve the substance of their answers without treating facial expressions, gaze, movement, speaking style, or other behavioural signals as evidence of confidence, honesty, personality, or job competence.

Users can prepare from role and job context, practise with typed or recorded answers, review transcripts before analysis, receive question-aware content coaching, save sessions locally, and revisit reports without creating an account or sending practice data to a FairScreen application server.

Open the live demo · Privacy & responsible AI · Technical architecture

Screenshots

FairScreen home

Home — the product explains what it measures, what remains optional, and which inferences FairScreen deliberately refuses to make.

FairScreen practice setup

Practice setup — configure role and company context, question count, optional résumé input, timing, and media preferences before an interview begins.

FairScreen coaching review

Answer review and coaching — review the transcript first, then receive evidence-based feedback focused on the content of the answer rather than appearance or inferred traits.

FairScreen saved sessions

Saved sessions — completed and unfinished practice sessions persist locally and can be searched, resumed, reviewed, renamed, exported, or deleted by the user.

Product workflow

Role / job context + optional résumé
                 ↓
      Question selection
                 ↓
       Optional device check
                 ↓
          Practice answer
                 ↓
       Review the transcript
                 ↓
  Deterministic content coaching
                 ↓
 Save locally / review / practise again

What FairScreen includes

Interview practice

  • Role- and context-aware practice setup
  • Local question generation from a deterministic template catalogue
  • Optional résumé import with local PDF, DOCX, and text extraction
  • Typed-answer mode with no microphone or camera required
  • Optional microphone and camera workflows with explicit user control
  • Preparation and answer timers with accessibility alternatives
  • Multiple attempts and answer review before continuing

Transcript and content coaching

FairScreen keeps the reviewed transcript at the centre of coaching. Users can correct recognition errors before analysis, and manual text remains available when speech recognition is unavailable or unwanted.

The deterministic answer-analysis layer looks for useful interview-answer evidence such as structure, specificity, supporting detail, outcomes, role relevance, and missing context. It does not use video observations to change the content assessment.

Saved practice

Sessions are persisted in browser storage through IndexedDB. The saved-session workflow supports completed and unfinished sessions, search and filtering, resuming, reviewing, renaming, export, and deletion. Recordings are saved only when the user explicitly chooses to retain them.

Optional media observations

When enabled, FairScreen can use browser media APIs and an on-device MediaPipe Face Landmarker worker to describe limited video-call conditions, such as broad framing, brightness, face presence, and near-camera orientation.

Those observations are deliberately separate from answer-content coaching. Raw frames and face landmarks are transient and are not part of the persistence model.

Browser speech recognition is also optional. Depending on the browser, recognition may use a browser-vendor service, so FairScreen discloses that boundary before use and always provides a manual alternative.

Responsible analysis boundaries

FairScreen is a personal practice tool, not a hiring assessment system. It does not rank candidates or make employment decisions.

The product deliberately refuses to infer:

  • emotion or personality
  • honesty, deception, or integrity
  • confidence or enthusiasm
  • employability or job competence
  • identity or demographic characteristics

This separation is enforced in both product copy and architecture: answer-content analysis cannot receive video metrics, optional capabilities fail independently, and media data is kept out of the persisted domain model.

Privacy-first architecture

React UI
   ↓
Feature workflows / interview state machine
   ↓
Domain services + typed ports
   ↓
Browser and storage adapters
   ├── IndexedDB
   ├── MediaDevices / MediaRecorder
   ├── Web Speech, when explicitly enabled
   └── Web Worker → MediaPipe, when explicitly enabled

The MVP is a static application with no FairScreen application server. Practice sessions, reviewed transcripts, preferences, and explicitly saved recordings remain under the user's browser profile by default.

Key architectural constraints include:

  • no video metrics in answer-content analysis
  • no raw frames, audio buffers, or face landmarks in persistence models
  • browser APIs isolated behind typed ports
  • recording persistence requires a separate user action
  • static and camera-free routes do not request media
  • optional media capabilities degrade without blocking text-based practice

Accessibility

Camera and microphone use are optional rather than prerequisites. The application includes keyboard-accessible flows, visible focus handling, skip navigation, responsive reflow, reduced-motion support, forced-colour compatibility, print presentation, adjustable text/timing preferences, and manual transcript alternatives.

Browser smoke tests include axe accessibility scans and 320px viewport coverage for core workflows.

Tech stack

Area Implementation
UI React 19 · TypeScript · React Router
Build Vite 8 · Tailwind CSS 4
Validation Zod
Persistence IndexedDB
Local document import PDF.js · Mammoth
Optional video analysis MediaPipe Tasks Vision · Web Worker
Browser media MediaDevices · MediaRecorder · Web Audio · Web Speech
Unit/component testing Vitest · React Testing Library
Browser/accessibility testing Playwright · axe-core
Delivery GitHub Actions · GitHub Pages

Quality and CI

The main GitHub Actions workflow runs the repository's quality gates on pushes and pull requests:

Format check
    ↓
Lint
    ↓
Type check
    ↓
Unit + component tests
    ↓
Prohibited-language scan
    ↓
Secret scan
    ↓
Dependency + source audit
    ↓
Production build
    ↓
Playwright browser smoke + accessibility checks

The browser suite exercises production routes, focus management, responsive layouts, local résumé import, interview state transitions, transcript coaching, IndexedDB behaviour, and the production video-analysis worker.

Run locally

Use the Node version pinned in .nvmrc.

npm ci
npm run dev

For the full repository quality gate:

npm run check

For production browser tests:

npm run browser

Build the static production bundle with:

npm run build

Project structure

src/
├── app/             routing and application composition
├── domain/          models, ports, interview logic, analysis rules
├── features/        setup, practice, reports, saved sessions, settings
├── infrastructure/ browser, media, analysis, persistence, import adapters
├── pages/           top-level education and policy pages
├── shared/          shared UI and utilities
└── styles/          application styling

tests/
└── browser/         Playwright + accessibility workflows

docs/
└── spec/            product, UX, architecture, privacy, QA, and decision docs

Engineering documentation

FairScreen includes a deliberately detailed specification set for the product and its safety boundaries:

Current scope

FairScreen is a portfolio-scale personal interview-practice application. It demonstrates client-side application architecture, deterministic analysis, privacy-aware media handling, local persistence, document processing, accessibility, browser testing, and responsible boundaries around computer-vision-assisted features.

It is intentionally not an employer screening tool, candidate-ranking system, emotion detector, deception detector, or covert real-time interview assistant.

About

A local-first, AI-assisted interview practice application with transcript coaching, optional recording, and private browser storage.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages