Local authoring → private plan → completed public prep
Prepare an interview
Send the job description, company and interview stage to your coding assistant. These commands make that workflow repeatable. The static website displays completed preparations; creating new AI-authored content happens in the local assistant session.
- Refresh sources and create the plan. Supply the actual full job description. Every prepare/update request retrieves the CV again with cache bypass, validates the PDF, extracts its text, and records the time and SHA-256. A failed download stops preparation instead of silently using stale text.
- Review and execute the tailored plan. The assistant reads the entire JD/CV and private PLAN.md/ROLE_ANALYSIS.md/AGENT_BRIEF.md. The automatic term matcher is an aid, not proof of experience or a substitute for full analysis.
- Author and review the real prep. Write final topic Markdown under the interview's private pages folder. Include explanations, examples, trade-offs, Q&A and true career evidence suited to this stage.
- Publish completed content. Publish validates and renders the authored pages, adds the interview to the catalog, and builds clean company/stage directories. Empty plans never appear as finished interviews.
Local commands
python -m pip install -r tools/requirements-build.txt
python tools/interviews.py prepare --company Azry --stage First --role "QA Engineer" --job "path/to/job-description.txt"
# Review the generated plan; have the assistant author the actual pages.
python tools/interviews.py publish --company Azry --stage First
python tools/interviews.py build
python tools/interviews.py validate
Azry/First is a command example, not an invented job or existing preparation. Repeat with --stage Tech for a separate technical interview. Company/stage names use letters, numbers, underscores or hyphens; names and URL paths are case-sensitive.
python tools/interviews.py prepare --company Azry --stage First --role "QA Engineer" --job "updated-job.txt" --update
Updates retain previous source revisions and authored pages, refresh the CV, and regenerate the private plan. Review the new sources and update the authored content before publishing again.
Folders and privacy
| Path | Purpose | Git / deploy |
|---|---|---|
| Interview/Company/Stage/Content/ | CV PDF/text, job source, revision hashes, plans, analysis, authored Markdown and audits | Ignored; never deployed |
| .env | Local paths and public CV URL; no browser keys | Ignored; never deployed |
| .env.example | Safe local configuration template | Tracked; never deployed |
| prepared/Company/Stage/ | Reviewed compiled HTML/assets for new interviews | Tracked public build input; contains no Markdown/private inputs |
| public/Company/Stage/ | Complete deployable preparation | Tracked public website |
| interviews.json | Public catalog metadata and build sources | Tracked; metadata appears in public catalog |
The original EPAM handbook remains available in epam-interview-cheatsheets/ and is packaged at /EPAM/Tech/. Its factual CV baseline comes from the supplied specification; this migration does not claim that its content has been revised from a newer CV.
Cloudflare hosting
Pages: deploy only the public/ directory. Use no build command when serving the committed ready-made output. If using a build command, python tools/interviews.py build regenerates the catalog from committed compiled sites and needs the build dependencies. Do not deploy the repository root or Interview/.
Directory index files produce routes such as /Company/First/ and /Company/Tech/. A real 404.html prevents unknown paths from being treated as a single-page app. Pages route matching documentation.
R2: upload the contents of public/ preserving keys. Raw object storage needs a serving layer for clean directory routes. The included optional deploy/r2-worker.mjs resolves extensionless routes and directory indexes, serves MIME types and returns proper 404s. Bind your R2 bucket as INTERVIEW_BUCKET and use deploy/wrangler.r2.jsonc. Deployment and credentials remain your choice; no deployment command runs automatically.
The site and every preparation use explicit index.html links for local-file compatibility while hosted directory routes resolve naturally.
Environment
CV_SOURCE_URL=https://skartsivadze.site/output/pdf/Sulkhan-Kartsivadze-CV.pdf?v=5
PUBLIC_SITE_DIR=public
Opening HTML requires neither Python nor .env. The CV is rechecked when you prepare/update a job, not whenever a visitor opens a static page. Do not put API secrets in public JavaScript. Inspect final authored content before publication: automatic structural checks cannot verify every factual claim.
Basic fix-it practice tasks
Ask the coding assistant for “10 TypeScript tasks”, “10 SQL tasks”, “10 Playwright tasks” or a mixed set. It can generate a private local codebase with deliberately broken functions/queries/tests and runnable checks. The working files contain task requirements and tests; hints and reference fixes stay separately under review/ until you explicitly request them.
node --experimental-strip-types tools/practice.ts generate --topic typescript --count 10
node --experimental-strip-types tools/practice.ts generate --topic sql --count 10
node --experimental-strip-types tools/practice.ts generate --topic playwright --count 10
node --experimental-strip-types tools/practice.ts generate --topic mixed --count 10
node --experimental-strip-types tools/practice.ts check --session "GENERATED_SESSION_PATH"
node --experimental-strip-types tools/practice.ts hint --session "GENERATED_SESSION_PATH" --task task03
Sessions live under ignored Interview/_Practice/<session>/Content/; open TASKS.md and edit workspace/src/. All exercise generators and test runners use TypeScript on Node 24+. Workspaces declare their npm dev dependencies; no Python is required. Playwright fixtures are local synthetic HTML, with no payment provider or remote app. SQL uses Node's built-in SQLite through a TypeScript runner for portable basic syntax; PostgreSQL-only features require a different environment. Each topic has ten distinct starter patterns with randomized order/data where applicable; mixed sets combine the banks. Exercises are not deployed or advertised as finished interview pages.