// Home/// Automation lab/// MAYA interview prep
MAYA interview prep
One question per screen for designers prepping interviews. Paste a resume and target role, Gemini returns a plan, practice scores, and a salary ask.
Part of a case studySee this build with the rest of the system, the deck and the screens.Open →
A one-question-per-screen web page for designers preparing for their next interview. You paste your resume, current role, target role and company, and Gemini reads it all and returns an interview plan: where your story is strong, where it's thin, and the questions you should expect. It also works out the salary hike you're asking for, so the number is on the table early.
Then you practise. Each answer you type is scored and you get feedback on what worked and what was missing. Candidates are saved to an n8n Data Table and mirrored to Google Sheets, and I get a Discord ping when someone new builds a plan.
The interesting part for me was the page itself. The HTML, the API and the AI logic all sit in one workflow behind two webhooks, so there's no separate front end to host.
The actual n8n workflow
// Technical overview
One n8n workflow of 26 nodes that acts as the web app, the API and the AI back end at the same time. A GET webhook returns a single page HTML app, and a POST webhook receives two kinds of requests: analyze (JD plus resume to a prep plan) and evaluate (one practice answer to feedback). Everything the visitor sees is produced by the workflow, so there is no separate front end to deploy.
// Trigger
Two webhooks. GET /maya answers with the HTML page (pdf.js and mammoth are loaded from a CDN so the browser can read PDF and DOCX uploads locally). POST /maya/api carries a JSON body with an action field, and a Switch node routes it to analyze, evaluate or a 400 response for anything unknown.
// How it works, step by step
- 01
Validate and calculate hike
A Code node checks consent, name length, email format and that the job description and resume are at least 100 characters each. It also parses CTC text such as 18 lakh, 1.2 crore or a monthly figure into LPA and computes the hike amount and percentage in plain JavaScript, so the model never does arithmetic.
- 02
Find or create the candidate
A Data Table lookup by email returns an existing record. If none exists, a Code node issues the next ID (MAYA-INT-year-number) from a counter kept in workflow static data.
- 03
Analysis with Gemini
A chain LLM node with a structured output parser. The prompt asks for every requirement in the JD, each tagged with category, importance (must or nice), status (strong, partial, missing) and a quote of the resume evidence. It also returns strengths, gaps, eight likely questions with answer advice, a 24 hour plan and a 7 day plan.
- 04
Deterministic match score
The score is not asked from the model. A Code node maps strong to 1, partial to 0.5 and missing to 0, doubles the weight of must-have items, and combines categories with fixed weights (skills 40, experience 25, domain 15, leadership 15, other 5). Empty categories are dropped and the rest are renormalised. If the evidence says Not in resume, the status is forced to missing.
- 05
Fan out to storage
Three parallel branches save the full result to a Data Table (upsert by email), append a row to Google Sheets, and post a new plan message to Discord. All three continue on error, so a failed write never blocks the visitor.
- 06
Practice and feedback
The evaluate path validates the answer (15 characters minimum, fields truncated), asks Gemini to act as a fair interviewer and score relevance, structure, evidence, clarity and impact from 1 to 10 with a reason each, then averages them in code. The response includes what worked, what was missing, an improved answer and a follow-up question. Each attempt is logged to a Mock_Interview sheet tab.
// AI design
Gemini Flash through chain LLM nodes. Analysis runs at temperature 0.15 with a large output budget for the full structured plan. Feedback runs at 0.1. Both prompts say to use only facts found in the resume, and the improved answer may only rephrase the candidate's own facts, with gaps shown as bracketed instructions for the candidate to fill.
// What you can do with it
Prepare for a specific role
Paste a real JD and your resume, and get a requirement by requirement map of where you are strong, partial or missing, with the evidence quoted.
Negotiate with a number
The hike calculator turns a current and expected CTC into LPA and a percentage before the interview, so the salary conversation starts with facts.
Mock interview loop
Answer one of the eight predicted questions, read the five dimension scores, rewrite, and try again. Every attempt is stored so progress can be compared.
Coaching at scale
A mentor or college placement cell can use the sheet as a dashboard of candidates, their match scores and their practice history.
// Guardrails
- Input validation returns HTTP 400 with a clear message instead of calling the model.
- Both LLM nodes retry, then route their error output to a friendly 503 response.
- Scoring and salary maths live in code, so results are repeatable.
- Storage nodes continue on error so the visitor still gets the plan.
- Text fields are truncated before they reach the prompt to control cost and prompt size.
// Where it can go next
- Add a PDF export of the prep plan through a document node.
- Send a follow-up email with the 7 day plan on a schedule.
- Add token or rate limiting on the webhook before wider sharing.
- Compare two JDs against one resume to pick the better fit.
Hiring a design leader for an AI product?
I'm open to design leadership roles. Send me a note and I'll reply within two working days.



