schema.json (in project root) defines the structured output format for AI-generated job applications. It is passed to OpenAI as response_format (strict mode). The JSON output is then fed to document_generator.py.
Root object properties:• cv - Object containing CV structure• cover_letter - Object containing cover letter structure
cv.filename: Output filename for DOCX (string, must end .docx)cv.header: Object with name, title, email, mobile, linkedin_url, github_urlcv.summary: Object with title (e.g., 'Professional Summary') and content (string)cv.sections: Array of typed section objects (see below)
Each section in cv.sections has title, type, and items:type='jobs' - Work experience entries: items[].role, items[].company, items[].dates, items[].bullets[]type='bullets' - Simple bullet lists (skills, projects, achievements): items[] - Array of stringstype='education' - Education entries: items[].degree, items[].institution, items[].details[]Unknown section types cause ValueError in document_generator.py.
cover_letter.filename: Output filename for DOCX (string)cover_letter.header: Object with title, subtitle, headline (all required)cover_letter.salutation: Opening greeting (e.g., 'Dear Hiring Manager,')cover_letter.opening: Array of opening paragraphscover_letter.sections: Array of content sections: Each section has title + either bullets[] or content[] (not both)cover_letter.sign_off: Object with closing, name, contact (strings)cover_letter.contact: Object with email, phone, github, linkedin
bold text - Supported via Markdown-style parsing in document_generator.pyNo other Markdown formatting - structure is defined by schema typesASCII only - no emoji or special Unicode (enforced by system prompt, not schema)Hyperlinks - GitHub and LinkedIn URLs rendered as clickable links in DOCX
document_generator.py has smart contact line rendering:• Assembles email, mobile, LinkedIn, GitHub from header fields• Estimates line width; if too long, splits across two lines balanced by width• LinkedIn and GitHub rendered as clickable hyperlinks• Pipe-separated: Email: x | Mobile: y | LinkedIn: url | GitHub: url