Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
47 changes: 40 additions & 7 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
GEMINI_API_KEY=
GEMINI_TEXT_MODEL=gemini-2.5-flash
GEMINI_LIVE_MODEL=gemini-3.1-flash-live-preview
GEMINI_TTS_MODEL=gemini-2.5-flash-preview-tts
# Interviewer voice — Gemini HD prebuilt voice (same voices as the Live API
# native audio). Options: Aoede, Kore, Leda, Zephyr, Callirrhoe, Puck, Charon, ...
GEMINI_TTS_VOICE=Aoede
Expand All @@ -26,16 +27,30 @@ DNLA_QUESTION_API_URL=
DNLA_QUESTION_API_KEY=

# --- DNLA Partner API (real psychometric assessment) -------------------------
# Release controls fail closed. Keep all three false until the platform owner
# explicitly authorizes a licensed DNLA rollout.
DNLA_ENABLED=false
NEXT_PUBLIC_DNLA_ENABLED=false
DNLA_TEST_MODE_ENABLED=false
# Server-only partner key for backend.dnla.com. Powers: create TAN -> DNLA-hosted
# questionnaire -> completion webhook -> results -> Fit Score. Empty = "pending" mode.
DNLA_API_KEY=
DNLA_API_BASE=https://backend.dnla.com
DNLA_AREA=ESK
# Shared secret for DNLA's completion webhook: /api/dnla/webhook?secret=<value>
DNLA_WEBHOOK_SECRET=
# Result-scale calibration — CONFIRM WITH DNLA (max raw value + polarity).
DNLA_SCALE_MAX=9
# TEMPORARY TEST ONLY: comma/space-separated pre-issued TANs. The server
# reads this pool only when BOTH DNLA_ENABLED=true and
# DNLA_TEST_MODE_ENABLED=true. Store real TANs only in Secret Manager.
DNLA_TEST_TANS=
DNLA_TEST_START_BASE=https://next.dnla.com/
# Supplied DNLA reports display the core Social Competence scale from 1–7,
# with the optimum range beginning at 4. Leadership balance factors are handled
# separately in code (50%–150%, optimum 90%–110%). Override only if the Partner
# API contract for your account returns a different raw scale.
DNLA_SCALE_MAX=7
DNLA_SCALE_HIGHER_IS_BETTER=true
DNLA_BENCHMARK_RAW=4

# --- Email (off-campus candidate invites, PRD §4.5) --------------------------
# OPT-IN: when RESEND_API_KEY is set, recruiter off-campus invite links are
Expand All @@ -46,6 +61,10 @@ RESEND_API_KEY=
EMAIL_FROM=Taledge <[email protected]>

# --- Authentication enforcement ----------------------------------------------
# Emergency production pause. When true, all pages and API routes return 503;
# only /api/health remains available. Keep false for normal local development.
MAINTENANCE_MODE=false

# false (default): demo/dev mode. Routes resolve a stable non-authoritative
# "demo-user" principal so the seeded personas stay browsable without login.
# true: production mode. Every API route and protected page REQUIRES a verified
Expand All @@ -56,6 +75,10 @@ AUTH_ENFORCED=false
# at their OWN uid-keyed workspace instead of the shared seeded persona id.
# Keep this in sync with AUTH_ENFORCED.
NEXT_PUBLIC_AUTH_ENFORCED=false
# Showcase data is never auto-inserted into a configured Firebase project.
# Set true only for a disposable Firebase demo project. The no-credential local
# file demo keeps its historical sample data unless this is explicitly false.
TALEDGE_SEED_DEMO_DATA=false

# Off-campus recruiter invites payment gate. OFF (default) ⇒ invites send FREE
# (pilot); each completed invite still runs a Gemini-billed assessment, so you
Expand All @@ -64,13 +87,23 @@ NEXT_PUBLIC_AUTH_ENFORCED=false
# NEXT_PUBLIC_PAYMENTS_ENABLED is the client mirror (button/price copy). Keep in sync.
PAYMENTS_ENABLED=false
NEXT_PUBLIC_PAYMENTS_ENABLED=false
# Optional institute-company onboarding checkout/quote URL. When empty, the
# institute UI opens an addressed request to [email protected]. After the
# provider is selected, set this to the hosted checkout/quote page and connect
# its verified webhook before enforcing paid company-slot limits.
NEXT_PUBLIC_COMPANY_ONBOARDING_CHECKOUT_URL=

# Live AI interview in an ENFORCED (production) deployment. Off by default: the
# Live path hands the raw GEMINI_API_KEY to the browser, so it's normally refused
# when AUTH_ENFORCED=true. Set to "true" to opt in for a controlled pilot — the
# key becomes visible to LOGGED-IN users (route is auth + rate-limited). In demo
# mode (AUTH_ENFORCED=false) Live is always on regardless of this flag.
# Live AI interview in an ENFORCED (production) deployment. The authenticated
# server mints a short-lived, constrained Gemini credential only after the paid,
# face-verified session checks pass; the raw GEMINI_API_KEY stays server-side.
# Keep this opt-in false locally unless Live runtime testing is intentional.
LIVE_INTERVIEW_ENABLED=false
# Optional controlled QA identities. Every exact Firebase email must ALSO have
# the Admin-only `qaUnlimitedCredits: true` custom claim. Use a comma-separated
# list; leave blank to fall back to the legacy single address or disable.
# This never unlocks or pays for DNLA.
QA_UNLIMITED_INTERVIEW_EMAILS=
QA_UNLIMITED_INTERVIEW_EMAIL=

# --- Firebase Admin (server-side token verification + privileged Firestore) --
# Required when AUTH_ENFORCED=true. Provide EITHER:
Expand Down
7 changes: 6 additions & 1 deletion .env.local.example
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ DNLA_QUESTION_API_URL=""
DNLA_QUESTION_API_KEY=""

# --- DNLA Partner API (real psychometric assessment) -------------------------
# Fail-closed master switches. Do not enable without explicit product-owner
# authorization; a configured provider key/TAN is insufficient by itself.
DNLA_ENABLED="false"
NEXT_PUBLIC_DNLA_ENABLED="false"
DNLA_TEST_MODE_ENABLED="false"
# Server-only partner key for backend.dnla.com (the `api_key` shown as required
# on every endpoint). Powers the real flow: create TAN -> DNLA-hosted
# questionnaire -> completion webhook -> results -> Fit Score. Leave empty to
Expand All @@ -34,4 +39,4 @@ DNLA_SCALE_HIGHER_IS_BETTER="true"
# To upgrade to Google Cloud Chirp 3 HD voices, enable the Cloud Text-to-Speech
# API and set a key here; leave empty to keep the default Gemini voice.
GOOGLE_TTS_API_KEY=""
GOOGLE_TTS_VOICE="en-US-Chirp3-HD-Leda"
GOOGLE_TTS_VOICE="en-US-Chirp3-HD-Leda"
22 changes: 22 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,8 @@ node_modules/

# Local env files
.env
/.env.*
!/.env.example
/*.local

# OS
Expand All @@ -31,8 +33,28 @@ node_modules/

# Firebase service account key (local only - never commit)
serviceAccount.json
*firebase-adminsdk*.json
*service-account*.json
# Generated interview evaluation PDFs (contain candidate data)
/reports/

# k6 load-test artifacts
loadtest/summary*.json

# Local QA, analysis and recovery workspaces (never deploy)
/.qa-artifacts/
/qa/
/playwright.config.ts
/graphify-out/
/self/
/.codex-*
/playwright-report/
/test-results/

# Internal meeting/QA material; the GitHub repository is public
/docs/ADMIN_INSTITUTE_QA_TRACEABILITY_*.md
/docs/ENTERPRISE_MVP_IMPLEMENTATION_STATUS.md
/docs/ENTERPRISE_WORKSPACE_ARCHITECTURE.md
/docs/QA_RELEASE_CANDIDATE_REPORT_*.md
/docs/RECRUITER_ENTERPRISE_QA_AUDIT_*.md
/docs/TalEdge_PRD_Gap_Analysis_Meeting_*
Loading