Inspiration

A résumé lists what someone has worked on, but an interview asks them to explain their contribution, decisions and results. Candidates can have meaningful experience yet struggle to communicate it clearly.

We built Shadowtrace to bridge that gap. Our idea was to connect interview practice to a candidate’s own experience and make the feedback traceable to their actual answers. We wanted candidates to understand why a suggestion was made and have a practical way to improve.

What it does

Shadowtrace guides candidates through a complete interview preparation workflow:

  • Personalised setup: Candidates provide their target role, profession, seniority, job description and company context, alongside a résumé and an optional public repository.
  • Source review: Extracted statements appear beside their source excerpts and are labelled unverified, allowing candidates to review the context before proceeding.
  • Interview practice: Candidates can speak or type. Voice mode transcribes their answers and supports a spoken conversation with the interviewer.
  • Traceable feedback: Findings connect the question, the candidate’s words, the interpretation and a suggested next step.
  • Focused improvement: Candidates can challenge findings, practise a specific gap and compare their original and revised answers.
  • History and controls: Candidates can revisit sessions, download results and request deletion of their stored data.

Shadowtrace is a coaching tool. Its interpretations can be wrong, so supporting evidence and the ability to dispute findings are part of the experience.

How we built it

We built the frontend with React and TypeScript, using a shared design system to keep the setup, interview, feedback and practice pages consistent. We added responsive layouts, keyboard navigation, reduced-motion support and clear loading and failure states.

The backend uses Python and FastAPI. Groq powers the language tasks, while Deepgram provides speech recognition and text-to-speech. Interview packs organise the questions and evaluation criteria across role families and rounds.

The evaluation pipeline validates model output against the report format and checks references to rubrics, claims and transcript evidence. Failed evaluations have a bounded repair attempt, and candidates can retry an individual failed round.

We deployed the application on AWS EC2, with Caddy serving the frontend and providing HTTPS and secure WebSocket connections. Amazon RDS PostgreSQL stores the report index used by history, comparisons and practice planning. Other interview records remain as files on an encrypted data volume. Database migrations use a separate role from the application’s runtime access.

Challenges we ran into

One major challenge was making AI output dependable. An evaluator returned content that could not be parsed as a single JSON report, and its repair attempt failed too. We improved parsing, made repair messages explain the specific failure and added strict schema output for configured models. Live synthetic probes passed for the main and fallback evaluation models.

Deployment revealed issues that local development had hidden. Interview-pack YAML files were missing from the installed Python package, Git was absent from the server and file permissions initially prevented Caddy from starting correctly. These problems reinforced the importance of testing the installed release in its actual environment.

Voice also required more than a microphone button. We needed to communicate whether the backend was reachable, providers were configured, recording was supported and microphone permission was available. We kept typing available as another way to participate.

Accomplishments that we're proud of

We connected setup, source review, interviewing, feedback and focused practice into one working application and deployed it on AWS.

We are particularly proud of making feedback inspectable: candidates can see the words behind a finding and challenge the interpretation. We also built a consistent interface with accessible interaction states and tested the browser journey across multiple screen sizes.

Our deployment work included a production rehearsal covering HTTPS, secure database connections, persistence, maintenance, backups and rollback scenarios. We also added safeguards such as session limits, evaluation queue limits and diagnostics that avoid recording raw model replies or credentials.

What we learned

We learned that integrating AI means taking responsibility for the surrounding workflow: context, validation, failure handling and the user’s ability to understand the result.

We also learned that passing local tests does not guarantee a successful deployment. Packaging, permissions, database roles and runtime dependencies all affect whether users can complete the journey.

Most importantly, traceable feedback is not automatically correct feedback. Human review and real-user testing are still necessary to establish whether the coaching is useful and fair.

What's next for Shadowtrace

Our next priority is validating feedback with human reviewers and a small candidate pilot. We want to measure whether users understand the suggestions and improve their answers through focused practice.

We also plan to measure real voice and feedback latency, test HTTPS voice sessions on physical mobile devices and expand evaluation coverage beyond the professions reviewed most closely so far.

Further development will focus on permanent deployment fixes, verified operational backups, account recovery and a broader set of role-specific interview packs.

Share this project:

Updates