Skip to content

Commit d400d7e

Browse files
authored
feat: add latex_serif export template and fonts (#5)
1 parent 28f3cf0 commit d400d7e

29 files changed

Lines changed: 2473 additions & 46 deletions

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ StackResume turns minimal input into a polished, interview-ready software-develo
4949
- **Generates** a complete resume JSON with STAR-format bullets and quantified metrics.
5050
- **Reviews & enhances** in a loop — a Reviewer agent scores ATS compatibility, writing quality, impact, and completeness (0–100 each), then an Enhancer rewrites weak bullets and injects missing keywords. Loops until the score crosses `MIN_QUALITY_SCORE` (default 82) or hits `MAX_REVIEW_ITERATIONS` (default 3).
5151
- **Tailors** — paste a job description to unlock a cover letter and a library of outreach email templates alongside the resume.
52-
- **Exports** to PDF, Word (`.docx`), or OpenDocument (`.odt`) across four visual templates.
52+
- **Exports** to PDF, Word (`.docx`), or OpenDocument (`.odt`) across five visual templates.
5353

5454
Everything is wrapped in a chat-style web UI with persistent sessions, search, favourites, an application tracker, and a live LLM activity log.
5555

@@ -249,7 +249,7 @@ Every resume has an **✏ Edit** tab for inline editing of every section — sum
249249
| **Word (`.docx`)** | Editable in Word / Google Docs / Pages. |
250250
| **OpenDocument (`.odt`)** | Editable in LibreOffice / OpenOffice. |
251251

252-
Four templates: **Classic ATS** (max ATS compatibility), **Modern Clean** (blue accents), **Executive** (dark slate), **Dark Theme** (deep navy). Font size (9 / 10 / 11pt) and page cap (auto / 1 / 2) configurable per export. The Export modal includes a **live side-by-side PDF preview** that updates as you change options.
252+
Five templates: **Classic ATS** (max ATS compatibility), **Modern Clean** (blue accents), **Executive** (dark slate), **Dark Theme** (deep navy), and **LaTeX** (serif, academic — Computer Modern with Font Awesome icons). Font size (9 / 10 / 11pt) and page cap (auto / 1 / 2) configurable per export. The Export modal includes a **live side-by-side PDF preview** that updates as you change options.
253253

254254
### Application tracker
255255

backend/app/api/document_routes.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class CoverLetterPDFRequest(BaseModel):
3636
inline: bool = False # true → render inline (preview iframe), false → download
3737

3838

39-
ALLOWED_TEMPLATES = {"classic_ats", "modern_clean", "executive_dark", "dark_theme"}
39+
ALLOWED_TEMPLATES = {"classic_ats", "modern_clean", "executive_dark", "dark_theme", "latex_serif"}
4040
# Presets stay for the UI labels; numeric strings in [8.0, 13.0] also accepted
4141
# (see is_valid_font_size). The slider sends e.g. "10.3".
4242
ALLOWED_FONT_PRESETS = {"small", "normal", "large"}

backend/app/documents/docx_generator.py

Lines changed: 632 additions & 1 deletion
Large diffs are not rendered by default.
462 KB
Binary file not shown.
438 KB
Binary file not shown.
449 KB
Binary file not shown.
506 KB
Binary file not shown.
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
Computer Modern Unicode (CMU Serif) — bundled with StackResume
2+
==============================================================
3+
4+
These TrueType files —
5+
6+
CMUSerif-Roman.ttf
7+
CMUSerif-Bold.ttf
8+
CMUSerif-Italic.ttf
9+
CMUSerif-BoldItalic.ttf
10+
11+
— were generated by converting the OpenType (CFF) "cm-unicode" fonts to
12+
TrueType outlines (ReportLab cannot embed CFF/PostScript outlines). The glyph
13+
shapes are unchanged; only the outline format was converted (cubic → quadratic
14+
Béziers via fontTools/cu2qu).
15+
16+
They are used by the `latex_serif` ("LaTeX") résumé template so the generated
17+
PDF is typographically identical to a pdfLaTeX-compiled document.
18+
19+
Original work
20+
-------------
21+
Computer Modern Unicode fonts, by Andrey V. Panov, derived from the METAFONT
22+
sources of Computer Modern by Donald E. Knuth.
23+
Project: https://cm-unicode.sourceforge.io/ (CTAN: fonts/cm-unicode)
24+
25+
License
26+
-------
27+
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
28+
29+
PREAMBLE
30+
The goals of the Open Font License (OFL) are to stimulate worldwide
31+
development of collaborative font projects, to support the font creation
32+
efforts of academic and linguistic communities, and to provide a free and
33+
open framework in which fonts may be shared and improved in partnership
34+
with others.
35+
36+
The OFL allows the licensed fonts to be used, studied, modified and
37+
redistributed freely as long as they are not sold by themselves. The
38+
fonts, including any derivative works, can be bundled, embedded,
39+
redistributed and/or sold with any software provided that any reserved
40+
names are not used by derivative works. The fonts and derivatives,
41+
however, cannot be released under any other type of license. The
42+
requirement for fonts to remain under this license does not apply to any
43+
document created using the fonts or their derivatives.
44+
45+
DEFINITIONS
46+
"Font Software" refers to the set of files released by the Copyright
47+
Holder(s) under this license and clearly marked as such. This may include
48+
source files, build scripts and documentation.
49+
50+
"Reserved Font Name" refers to any names specified as such after the
51+
copyright statement(s).
52+
53+
"Original Version" refers to the collection of Font Software components as
54+
distributed by the Copyright Holder(s).
55+
56+
"Modified Version" refers to any derivative made by adding to, deleting,
57+
or substituting -- in part or in whole -- any of the components of the
58+
Original Version, by changing formats or by porting the Font Software to a
59+
new environment.
60+
61+
"Author" refers to any designer, engineer, programmer, technical writer or
62+
other person who contributed to the Font Software.
63+
64+
PERMISSION & CONDITIONS
65+
Permission is hereby granted, free of charge, to any person obtaining a
66+
copy of the Font Software, to use, study, copy, merge, embed, modify,
67+
redistribute, and sell modified and unmodified copies of the Font
68+
Software, subject to the following conditions:
69+
70+
1) Neither the Font Software nor any of its individual components, in
71+
Original or Modified Versions, may be sold by itself.
72+
73+
2) Original or Modified Versions of the Font Software may be bundled,
74+
redistributed and/or sold with any software, provided that each copy
75+
contains the above copyright notice and this license. These can be
76+
included either as stand-alone text files, human-readable headers or in
77+
the appropriate machine-readable metadata fields within text or binary
78+
files as long as those fields can be easily viewed by the user.
79+
80+
3) No Modified Version of the Font Software may use the Reserved Font
81+
Name(s) unless explicit written permission is granted by the corresponding
82+
Copyright Holder. This restriction only applies to the primary font name
83+
as presented to the users.
84+
85+
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
86+
Software shall not be used to promote, endorse or advertise any Modified
87+
Version, except to acknowledge the contribution(s) of the Copyright
88+
Holder(s) and the Author(s) or with their explicit written permission.
89+
90+
5) The Font Software, modified or unmodified, in part or in whole, must be
91+
distributed entirely under this license, and must not be distributed under
92+
any other license. The requirement for fonts to remain under this license
93+
does not apply to any document created using the Font Software.
94+
95+
TERMINATION
96+
This license becomes null and void if any of the above conditions are not
97+
met.
98+
99+
DISCLAIMER
100+
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
101+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
102+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF
103+
COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
104+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
105+
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
106+
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
107+
OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS
108+
IN THE FONT SOFTWARE.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
Font Awesome Free — bundled with StackResume
2+
============================================
3+
4+
Files:
5+
fa-solid-900.ttf (Font Awesome 6 Free, Solid style)
6+
fa-brands-400.ttf (Font Awesome 6 Free, Brands style)
7+
8+
Used by the `latex_serif` ("LaTeX") résumé template to render contact icons
9+
(phone, envelope, map-marker, globe, LinkedIn, GitHub) as real glyphs — the same
10+
icons the LaTeX `fontawesome5` package emits — so the output matches a
11+
pdfLaTeX-compiled résumé exactly.
12+
13+
Source: https://fontawesome.com / https://github.com/FortAwesome/Font-Awesome
14+
Version: 6.x (Free)
15+
16+
License (Font Awesome Free):
17+
- Icons (the glyph artwork): CC BY 4.0
18+
https://creativecommons.org/licenses/by/4.0/
19+
- Fonts (the .ttf/.woff files): SIL OFL 1.1
20+
https://scripts.sil.org/OFL
21+
- Code (not bundled here): MIT
22+
23+
Attribution: "Font Awesome Free by @fontawesome - https://fontawesome.com".
24+
25+
The fonts are redistributed unmodified under the SIL Open Font License v1.1.
26+
A full copy of the OFL 1.1 text is included in LICENSE-CMU.txt in this directory
27+
and applies equally to these font files.
205 KB
Binary file not shown.

0 commit comments

Comments
 (0)