Exhibit views
Exhibit views
Overview
Lebenslauf AI treats the CV as a structured system rather than a static file. One Master Profile holds a person's complete career data; from it, the platform generates job-targeted CVs and cover letters oriented toward ATS (applicant tracking systems). Documents are edited in a true A4 editor, exported as PDF, versioned, and tracked through a Kanban application workflow with KPI views.
What it does
- Master Profile as the single structured source for all application documents
- Job-targeted CV and cover-letter generation oriented toward ATS systems
- A4 editor with PDF generation and document version history
- Application workflow as a Kanban board with KPI views
Key decisions
- Modeled the CV as structured data, not a document: the Master Profile (personal info, experience, projects, skills, education, certifications) is the single source of truth, and every tailored version stores both the profile snapshot and the AI overrides — making each version self-contained and re-renderable at any time.
- Built the A4 editor around a measure-then-paginate pipeline: content is measured on a hidden canvas, greedily packed into true 210 × 297 mm pages with section atomicity, and rendered through a thin UnitRenderer dispatcher — the same pipeline powers the admin CV viewer, so staff see pixel-identical output.
- Separated session state from document state with two Zustand stores (auth/session vs. CV document), keeping the editor resettable and the tailor → edit → export flow explicit.
- Treated auth and auditability as first-class features: rotating JWT, brute-force lockout, optional TOTP two-factor auth, social login via django-allauth, per-device session management with revocation, and a staff-only admin API (metrics, user management, full CV inspection) guarded by IsAdminUser.
Difficult problem
The hardest problem was truthful A4 pagination in the browser: CSS alone cannot guarantee page breaks that respect section boundaries across templates, zoom levels, and content lengths. I solved it with a hidden measuring canvas that records real block heights, then a greedy packer that fills fixed-height A4 pages while keeping sections atomic — with template-specific height budgets for split-column layouts. The same renderer feeds the admin viewer and the print stylesheet, so the screen editor, the staff view, and the exported PDF always agree.
Lessons learned
- Snapshot inputs at decision time: storing the profile snapshot alongside the AI overrides made every CV version reproducible without touching live data.
- A thin dispatcher plus small render units scales better than one giant editor component — the remaining oversized orchestrator is honest technical debt I would partition next.
- Security is a feature list, not a checkbox: lockout, 2FA, session revocation, and audit logs each arrived from thinking about abuse cases, not happy paths.
- Designing for print from day one (exact A4 sizing, print CSS, zoom-to-fit) avoided a painful retrofit at export time.