Skip to content

Commit 922a58d

Browse files
committed
feat: add templates
1 parent 4dd03e1 commit 922a58d

File tree

4 files changed

+274
-3
lines changed

4 files changed

+274
-3
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,13 +49,13 @@ Instead of relying on TOML metadata, you compose pages directly in Typst using a
4949

5050
## Templates
5151

52-
- `template/advanced.typ`two-column layout mirroring the project’s intended usage.
53-
- `template/main.typ`single-column example with the same component vocabulary.
52+
- `template/letter.typ`Motivation letter template in German style.
53+
- `template/cv_en.typ`Two-column CV example with the same component vocabulary.
5454

5555
Compile templates (note the root flag because the template lives in a subdirectory):
5656

5757
```bash
58-
typst compile --root . template/advanced.typ
58+
typst compile --root . template/cv_en.typ
5959
```
6060

6161
## Developing

template/assets/photo.jpeg

102 KB
Loading

template/cv_en.typ

Lines changed: 180 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,180 @@
1+
#import "../src/lib.typ": *
2+
3+
#let theme = themes.professional
4+
5+
#show link: underline
6+
7+
#show: cv-page.with(
8+
paper: "a4",
9+
margin: (x: 1.5cm, y: 1cm),
10+
font: "Helvetica Neue",
11+
font-size: 10pt,
12+
lang: "en",
13+
theme: theme,
14+
)
15+
16+
#cv-two-columns(
17+
[
18+
#set text(size: 9pt)
19+
#v(1em)
20+
21+
#cv-photo(
22+
"../template/assets/photo.jpeg",
23+
theme: theme,
24+
radius: 999pt,
25+
width: 3.5cm,
26+
height: 3.5cm,
27+
border-width: 0pt,
28+
fit: "cover",
29+
)
30+
#v(1em)
31+
32+
#cv-header(
33+
name: "Alex Placeholder",
34+
theme: theme,
35+
)
36+
== Contact
37+
#cv-sidebar-contact(
38+
39+
phone: "+49 170 0000000",
40+
location: "Sample City, Germany",
41+
links: (
42+
github: "github.com/placeholder",
43+
website: "https://www.example.com",
44+
),
45+
theme: theme,
46+
)
47+
48+
#v(1em)
49+
50+
== Skills
51+
#cv-skills(
52+
skills: (
53+
"Programming": ("TypeScript", "Python", "Go", "Rust"),
54+
"Frontend": ("React", "Next.js", "Astro", "Tailwind CSS"),
55+
"Backend & APIs": (
56+
"Node.js",
57+
"Express",
58+
"NestJS",
59+
"GraphQL",
60+
"REST",
61+
"WebSocket",
62+
),
63+
"Databases": ("PostgreSQL", "MongoDB", "SQLite"),
64+
"Tools": ("Docker", "GitHub Actions", "Figma"),
65+
"Practices": ("Agile", "DevOps"),
66+
),
67+
theme: theme,
68+
compact: true,
69+
)
70+
71+
#v(1em)
72+
73+
== Languages
74+
#cv-languages(
75+
languages: (
76+
(name: "English", level: "Fluent"),
77+
(name: "German", level: "Professional"),
78+
(name: "Spanish", level: "Intermediate"),
79+
),
80+
theme: theme,
81+
compact: true,
82+
)
83+
84+
#v(1em)
85+
86+
== Interests & Hobbies
87+
#text(size: 9pt)[
88+
Open-source, technical writing, hiking, photography, community meetups
89+
]
90+
],
91+
[
92+
#cv-section("Work Experience", theme: theme)[
93+
#cv-entry(
94+
title: "Senior Software Engineer",
95+
subtitle: "Example Energy GmbH",
96+
location: "Full-time",
97+
date: "02/2023 - Present",
98+
description: (
99+
"When energy dashboards crashed under a surge of new solar clients, led the redesign into containerized microservices to restore 99.9% uptime within two sprints",
100+
"Faced with a manual partner-onboarding backlog, mapped workflows with operations and automated them via Convex plus Slack bots, shrinking onboarding time from 10 to 3 days",
101+
"To raise engineering rigor, launched GitHub Actions testing and mentored four juniors on TDD, cutting regression bugs per release by 30%",
102+
),
103+
theme: theme,
104+
)
105+
#cv-entry(
106+
title: "Frontend Developer",
107+
subtitle: "Sample Retail AG",
108+
location: "Full-time",
109+
date: "07/2020 - 01/2023",
110+
description: (
111+
"During a nationwide rebrand, partnered with design to convert the atomic library into React + Tailwind components, letting six teams ship landing pages twice as fast",
112+
"Because executives lacked live KPIs, integrated analytics dashboards with internal APIs and charts, enabling 25% more data-driven campaign adjustments",
113+
"With Black Friday risk rising, coordinated Playwright end-to-end coverage and CI gating, preventing 15 critical bugs from reaching production",
114+
),
115+
theme: theme,
116+
)
117+
118+
#cv-entry(
119+
title: "Full-Stack Developer",
120+
subtitle: "Startup Studio Limited",
121+
location: "Part-time",
122+
date: "09/2017 - 06/2020",
123+
description: (
124+
"When founders needed revenue validation, led discovery and built a NestJS + Next.js MVP commerce stack with Stripe sandbox, enabling 50 pilot orders in six weeks",
125+
"Support teams lacked visibility, so I delivered Flutter dashboards aggregating inventory and campaign metrics, trimming ticket resolution time by 35%",
126+
),
127+
theme: theme,
128+
)
129+
]
130+
131+
#cv-section("Projects", theme: theme)[
132+
#cv-project(
133+
name: "Community Hub",
134+
url: "https://community-hub.example.com",
135+
date: "08/2024 - present",
136+
description: "Portal connecting local volunteer chapters with shared tooling",
137+
theme: theme,
138+
)
139+
#cv-project(
140+
name: "Acme Dashboard",
141+
url: "https://dashboard.example.com",
142+
date: "04/2024",
143+
description: "Analytics dashboard with role-based access control",
144+
theme: theme,
145+
)
146+
]
147+
148+
#cv-section("Education", theme: theme)[
149+
#cv-education(
150+
degree: "M.Sc. Computer Science",
151+
institution: "Technische Universität Musterstadt",
152+
date: "10/2018 - 09/2020",
153+
descriptionTwo: "Focus: distributed systems and cloud computing",
154+
theme: theme,
155+
)
156+
157+
#cv-education(
158+
degree: "B.Eng. Electrical Engineering",
159+
institution: "Hochschule Beispiel",
160+
date: "10/2013 - 07/2017",
161+
descriptionOne: "Graduated with merit scholarship",
162+
theme: theme,
163+
)
164+
165+
#cv-education(
166+
degree: "Exchange Semester",
167+
institution: "University of Example (USA)",
168+
date: "01/2016 - 06/2016",
169+
descriptionTwo: "Coursework in human-computer interaction",
170+
theme: theme,
171+
)
172+
]
173+
174+
175+
],
176+
// Use fractional units so the gutter doesn't reduce the right margin.
177+
sidebar-width: 3fr,
178+
main-width: 7fr,
179+
gutter: 1cm,
180+
)

template/letter.typ

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
// Example motivation letter (Anschreiben) using the lebenslauf package
2+
3+
#import "../src/lib.typ": *
4+
5+
#let theme = themes.professional
6+
7+
#cv-page(
8+
theme: theme,
9+
paper: "a4",
10+
margin: (x: 2.5cm, y: 2.5cm),
11+
font: "Helvetica Neue",
12+
lang: "de",
13+
)[
14+
// Sender block (top left)
15+
#letter-sender(
16+
name: "Sophie Matik",
17+
street: "Mathweg 42",
18+
postal-code: "31415",
19+
city: "Pi-Stadt",
20+
21+
phone: "0101 / 10 10 01 11",
22+
theme: theme,
23+
)
24+
25+
// Date (top right)
26+
#letter-date(
27+
place-and-date: "Hamburg, 3. März 2023",
28+
theme: theme,
29+
)
30+
31+
// Recipient address
32+
#letter-recipient(
33+
company: "Zielfirma GmbH",
34+
person: "Herr Peter Personaler",
35+
street: "Fantastr. 1",
36+
postal-code: "12345",
37+
city: "Nachbarstadt",
38+
theme: theme,
39+
)
40+
41+
// Subject line
42+
#letter-subject(
43+
title: "Bewerbung für / als ...",
44+
theme: theme,
45+
)
46+
47+
// Letter body
48+
#letter-body[
49+
Sehr geehrter Herr Personaler,
50+
51+
#v(0.8em)
52+
53+
es wird Sie nicht überraschen: Als gelernte Bilanzbuchhalterin ist der Schwerpunkt
54+
meines BWL-Studiums „Rechnungswesen“. Natürlich! Dort fühle ich mich wohl,
55+
Zahlen sind meine Welt. Und zwar so richtig. So kann ich meine erworbenen
56+
Kenntnisse auch gleich in der Rechnungsabteilung unseres elterlichen Betriebs
57+
praktisch nebenbei erproben und ausbauen.
58+
59+
#v(0.8em)
60+
61+
Aber: Das Unternehmen meiner Eltern – so schön es dort auch ist –, ist eben nicht
62+
die große weite Welt. Daher möchte ich mein Praktikum im Sommersemester dazu
63+
nutzen, in der Buchhaltung und im Rechnungswesen eines internationalen
64+
Konzerns mein Wissen auszubauen und zu vertiefen.
65+
66+
#v(0.8em)
67+
68+
Wie ich dabei auf Sie komme? Ist doch klar: Sie genießen in der Branche einen
69+
hervorragenden Ruf, auch Ihre Welt sind die Zahlen und mir gefällt die strategische
70+
Ausrichtung Ihres Unternehmens hervorragend!
71+
72+
#v(0.8em)
73+
74+
Außerdem habe ich gehört, dass Sie im Zeitraum meines Praktikums die
75+
Einführung der Software XY planen. Da ich damit während meines
76+
Auslandssemesters in den USA schon ausführlich gearbeitet habe, kann ich mir gut
77+
vorstellen, Ihnen dabei das eine oder andere Mal behilflich sein zu können …
78+
79+
#v(0.8em)
80+
81+
Was halten Sie davon? Bei Interesse freue ich mich über Ihre Rückmeldung.
82+
]
83+
84+
// Signature
85+
#letter-signature(
86+
closing: "Mit den besten Grüßen nach Nachbarstadt",
87+
name: "Sophie Matik",
88+
signature-image: none,
89+
theme: theme,
90+
)
91+
]

0 commit comments

Comments
 (0)