This article summarizes the major changes across version tags from early-to-mid April 2026, compiled to help team members and users follow the development trajectory.
v2026.04.02 — PDF Printing Strategy & Internationalization Foundation
PDF Output Strategy Refactoring (print pdf strategy)
We introduced a dual-engine architecture, running the existing Playwright-based browser PDF rendering alongside a new WeasyPrint server-side renderer:
- pdfprinter (Playwright): Handles scenarios requiring full CSS rendering, triggered via
resume_id + access_token - pdf_weasy_printer (WeasyPrint): Generates PDFs directly from structured JSON without a browser process—faster and lower resource usage
This version also enabled a CI flow with auto-deploy triggered by tag name, so pushing a tag automatically triggers a production release.
Backend Internationalization Architecture (PR #33)
Merged a unified backend i18n strategy:
- Extracted hardcoded Chinese strings scattered across modules into an
app/i18n/package with 5 JSON locale files (zh-cn,zh-tw,en,ja,ko) app/i18n/loader.pyprovides unified interfaces:get_i18n(),get_labels(),normalize_locale()- PDF and DOCX template builders now retrieve labels through this unified interface, enabling multilingual resume export
v2026.04.02 (3rd Tag) — PDF Templates & Job Intent Field
- Improved Jinja2 templates (
resume.css.j2/resume.html.j2) for PDF output, adding support for Markdown rich text rendering in PDFs - Added a job intent input field to the workspace for users to specify target role direction, used as context for subsequent JD matching
v2026.04.03 — Full Frontend i18n Coverage
Complete Multilingual Frontend Refactor (PR #34, #35)
- Replaced all hardcoded Chinese strings across the frontend with
t()calls, covering workspace, payment, resume forms, and resume view components - Split i18n message files from a single file into 8 business domain namespaces (
common,home,auth,workspace,form,resume,error,price), organized by language directory - Added
useLocalePath()hook so all internal links automatically adapt to the current language prefix (/en/,/ja/, etc.)
Mobile Header Responsive Design (PR #36)
- Added a hamburger menu to the Header; when expanded on mobile, it shows Workspace, Pricing, Login/Register, language switcher, and share button
- Changed the Footer to
flex-wrapto prevent overflow on small screens
v2026.04.05 — Mobile Header Fine-Tuning
- Split desktop and mobile auth areas into independent rendering branches, fully resolving layout issues on smartphones
- Changed the language switcher (LanguageSwitcher) and share button (ShareButton) to full-width text row style on mobile
v2026.04.06 — Enhanced Resume Diagnosis & Payment Timeout Fix
Content Completeness Diagnosis
- Added a content completeness dimension to resume diagnosis: automatically detects missing key sections (project experience, skills, self-evaluation)
- Generates a content completeness score with specific improvement suggestions
Payment Model Timeout Fix
- Fixed a frontend timeout error that occurred when model response times were long
- Added 301 HTTPS redirect enforcement at the nginx layer
PDF i18n
- PDF exports now automatically switch resume section headings based on the user's selected language (e.g., "Work Experience" vs. "職務経歴" vs. "职业经历")
v2026.04.07 — Full Prompt Rewrite for Diagnosis and Rewriting
- Parsing prompt optimization: Fully preserves the original experience entries during diagnosis, preventing the LLM from losing context mid-analysis
- Complete rewrite of rewriting prompts: Rewrote improvement prompts from scratch, strengthening three directions: quantified achievements, keyword alignment, and ATS compatibility
v2026.04.10 — Job Confirmation Step (PR #44)
Added a job intent confirmation step to the workspace flow:
- Before pasting a JD, users confirm their current target role title and domain
- Based on the existing resume and entered role, the system presents a preliminary role-match assessment
- Prevents rewrite direction misalignment caused by "pasting a JD without a clear resume target"
Also merged PR #43 (mobile header display fixes) and PR #42 (added gender: male/female/unknown field to resume basic information).
v2026.04.11 — Targeted Invitations
- Added a targeted invitation code generation feature in the admin panel, enabling manual grant of beta access to specific users
v2026.04.12 — i18n Patches & Workflow Bug Fixes
- Filled in several missing i18n translation keys (some fields displayed untranslated on frontend pages)
- Fixed an exception thrown by the confirm job step in certain scenarios
- Fixed user answers being lost (user answer lost) during the Q&A flow
- Adjusted skill proficiency fields to support level-based display (Beginner/Intermediate/Advanced/Expert)
- Optimized the resume skills section to provide more accurate keyword coverage hints
v2026.04.13 — Resume Confirmation Order Swap
- Swapped the order of "resume content confirmation" and "JD input" in the workflow: users now review parsed results first, then input the JD. This prevents JD matching errors caused by resume parsing inaccuracies.
v2026.04.15 — Self-Evaluation Field
- Added a self-evaluation field to the resume structure, displayed as a standalone section during diagnosis and export
- Added company name selector (format company name select) and start/end month (period to start/end month) fields to project experience, standardizing field formatting
Summary
April's iteration focused on three directions:
- Full multilingual rollout: Unified i18n system across frontend and backend, supporting Simplified Chinese, Traditional Chinese, English, Japanese, and Korean
- Resume workflow refinement: The flow from job intent confirmation → resume review → JD input → rewriting is now clearer and more mistake-resistant
- Diagnosis and rewrite quality improvements: Prompts rewritten from scratch, content completeness diagnosis implemented, skills and self-evaluation structure established
For usage details on each feature, see the Full Feature Guide.