Skip to content

Commit f333bb2

Browse files
authored
Merge pull request #3 from Lissy93/v2
V2
2 parents 9049f2b + 293f987 commit f333bb2

35 files changed

+3103
-2079
lines changed

.github/CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* @lissy93

.github/FUNDING.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
github: lissy93

.github/README.md

Lines changed: 73 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,62 @@
11
<h1 align="center">Alicia Sykes - CV</h1>
22
<p align="center">
3-
<!-- <a href="https://github.com/Lissy93/cv"><img src="https://i.ibb.co/8BV5p7L/CV-Logo-Alicia-Sykes.png" width="128" /><br /></a> -->
3+
<a href="https://github.com/Lissy93/cv"><img src="https://i.ibb.co/G4vGDwtD/cv-logo.png?" width="48" /><br /></a>
44
<i>This repo contains the source for my personal CV</i>
55
<br />
6+
<i>A website (Svelte) and PDF (LaTeX) auto-built from jsonresume data</i>
7+
<br />
68
<b>🌐 <a href="https://cv.aliciasykes.com/">cv.aliciasykes.com</a> | 📄 <a href="https://cv.aliciasykes.com/download"><code>Alicia-Sykes-CV.pdf</code></a></b> <br />
79
</p>
8-
<br />
910

1011

1112

13+
## Motive
14+
To automate my CV generation, and make it easier to maintain.
15+
All content defined in YAML, then a script generates a LaTeX PDF and deploy a web version.
16+
I did it this way so that I don't need to f\*\*k around with Microsoft Word.
17+
18+
<details>
19+
<summary>Motive (legacy)</summary>
20+
1221

1322
> **Backstory**<br>
14-
> I've just been made redundant 😢 (Aug '24), which I am gutted about. I've never been laid off before, and I loved my job and the people I worked with. So I'm now on the market, looking for a new role!
23+
> I'm just about to be made redundant 😢 (Aug '24), which I am gutted about. I've never been laid off before, and I loved my job and the people I worked with. So I'm now on the market, looking for a new role!
1524
>
1625
> I've kept my CV/resume **very** brief, in an attempt respect the hiring manager's time. But in short, I'm an experienced, Principle-level full stack engineer with a love for quality, performance, mentoring, tech and open source. The best judge of a developer is their code, and while I cannot share what I've done professional or for private clients, I have got many open source projects on my [GitHub](https://github.com/lissy93) and at [apps.aliciasykes.com](https://apps.aliciasykes.com).
1726
27+
28+
</details>
29+
1830
---
1931

2032
## About
2133

2234
The resume content is defined in [`resume.yml`](/resume.yml) following the [jsonresume.org](https://jsonresume.org/) standard, and validated against [`schema.json`](/schema.json).
23-
A LaTex document is then generated from [`template.jinja`](/template.jinja) formated with [`resume-format.cls`](/tex/resume-format.cls), which is then compiled into a PDF by GitHub Actions, and published under the [Releases](https://github.com/Lissy93/cv/releases) tab.
24-
A markdown version is also generated by [`lib/markdown.py`](/lib/markdown.py), as well as a CV website which is built as a static Svelte site and deployed to GitHub Pages at [cv.aliciasykes.com](https://aliciasykes.com).<br>
25-
...Because why spend 30 minutes writing your CV, when you could spend 30 hours automating it?
35+
A LaTex document is then generated from [`template.jinja`](/template.jinja) formated with [`resume-format.cls`](/tex/resume-format.cls), which is then [compiled into a PDF](https://github.com/Lissy93/cv/actions/workflows/compile.yml) by GitHub Actions, and published under the [Releases](https://github.com/Lissy93/cv/releases) tab.
36+
A markdown version is also generated by [`lib/markdown.py`](/lib/markdown.py), as well as a CV website which is built as a static site with SvelteKit, and deployed to GitHub Pages and Vercel, at [cv.aliciasykes.com](https://aliciasykes.com).
37+
38+
Why? ...Because why spend 30 minutes writing your CV, when you could spend 30 hours automating it, obviously!
2639

2740

2841
---
2942

3043
## Usage
3144

3245
### Option #1 - GitHub
33-
Upon creating a tag (by triggering the [Tag Workflow](/.github/workflows/tag.yml)), a new Release will be drafted with your compiled CV PDF attatched
34-
3546
1. Fork the repo
3647
2. Update resume.json with your own content
37-
3. Trigger the GitHub Action to compile the PDF
48+
3. Create [a tag](/.github/workflows/tag.yml), or trigger the GH actions workflow
49+
4. ....and a PDF and website gets magically generated
3850

3951

4052
<details><summary>Workflows</summary>
4153

42-
- `tag` - Creates a new Git tag. Optionally specify the tag name and description, or by default it will just bump the sem ver patch number by 1
43-
- `generate` - Generates your resume in PDF form as an artifact. If triggered by a tag, then a new release will be created, with the PDF attatched
44-
- `validate` - Validates your resume data against the schema. This will also run whenever a new PR is opened, to ensure it's valid and working
54+
| Workflow | Description | Status |
55+
| :----------- | :--------------- | :------------------------: |
56+
| `tag` | Creates a new Git tag. Optionally specify the tag name and description, or by default it will just bump the sem ver patch number by 1 | [![Tag](https://github.com/Lissy93/cv/actions/workflows/tag.yml/badge.svg)](https://github.com/Lissy93/cv/actions/workflows/tag.yml) |
57+
| `generate` | Generates your resume in PDF form as an artifact. If triggered by a tag, then a new release will be created, with the PDF attatched | [![Generate PDF](https://github.com/Lissy93/cv/actions/workflows/compile.yml/badge.svg)](https://github.com/Lissy93/cv/actions/workflows/compile.yml) |
58+
| `validate` | Validates your resume data against the schema. This will also run whenever a new PR is opened, to ensure it's valid and working | st |
59+
4560
</details>
4661

4762
---
@@ -51,7 +66,12 @@ See the [`Makefile`](/Makefile) for all the available commands. Or, just run `ma
5166

5267
1. Clone the repo
5368
2. Update resume.json with your own content
54-
3. Run `make` from the root, to install deps, validate content, generate LaTex, and compile PDF
69+
1. Run `make` from the root, to install deps, validate content, generate LaTex, and compile PDF
70+
71+
Or, to deploy the web version
72+
1. Follow steps above (clone, edit, validate)
73+
2. Run `make web` to generate `dist/`
74+
3. upload to any CDN, web server or static hosting provider (I use Vercel)
5575

5676
<details><summary>Commands</summary>
5777

@@ -64,9 +84,31 @@ See the [`Makefile`](/Makefile) for all the available commands. Or, just run `ma
6484
- `make web` - Launches web version, installs NPM deps, builds and serves the site
6585
</details>
6686

87+
```mermaid
88+
flowchart LR
89+
GA([🤖 GitHub Actions<br><sup>Triggered on <code>resume.yml</code> change</sup>]) --> A3
90+
91+
A1([🚀 Start<br><sup>Clone repo & cd into it</sup>]) --> A2[✏️ Update <code>resume.yml</code><br><sub>Your resume content goes here</sub>]
92+
A2 --> A3[✅ make validate<br><sub>Check for content or schema issues</sub>]
93+
94+
%% PDF PATH
95+
A3 --> PDF[📄 PDF Output]
96+
PDF --> B1[📦 make install<br><sub>Install all dependencies</sub>]
97+
B1 --> B2[🛠 make generate<br><sub>Generate LaTeX from resume.yml</sub>]
98+
B2 --> B3[📄 make compile<br><sub>Compile LaTeX to PDF</sub>]
99+
B3 --> B4([✅ View at <code>out/resume.pdf</code>])
100+
101+
%% WEB PATH
102+
A3 --> Web[🌐 Website Output]
103+
Web --> C1[🌐 make web<br><sub>Build static site into <code>./dist</code></sub>]
104+
Web --> C2[🧪 make web_dev<br><sub>Start local dev server at <code>localhost:5173</code></sub>]
105+
C1 --> C3([🚀 Deploy <code>./dist</code> to your host])
106+
C2 --> C4([🔍 View site locally in browser])
107+
```
108+
67109
---
68110

69-
### Editing
111+
## Editing
70112
Modify data by editing [`resume.yml`](/resume.yml)<br>
71113
If you need to customize the layout, edit [`template.jinja`](/template.jinja)<br>
72114
Or to change the styles and formatting, edit [`resume-format.cls`](/tex/resume-format.cls)<br>
@@ -78,7 +120,21 @@ The source for the website version is located in [`web/`](/web)
78120

79121
## Screenshot
80122

81-
<p align="center"><a href="https://cv.aliciasykes.com"><img width="650" src="https://i.ibb.co/7NjgmHC/alicia-sykes-cv-mockup.png?" /></a></p>
123+
<h3 align="center">Web 🌐</h3>
124+
<p align="center"><a href="https://cv.aliciasykes.com"><img width="650" src="https://i.ibb.co/7NjgmHC/alicia-sykes-cv-mockup.png" /></a></p>
125+
126+
<h3 align="center">PDF 📄</h3>
127+
<p align="center"><a href="https://cv.aliciasykes.com"><img width="650" src="https://i.ibb.co/ycsHkjdF/screenshot-pdf.png?" /></a></p>
128+
129+
---
130+
131+
## Contributing
132+
133+
### Pull Requests
134+
No point contributing. Just fork the repo and do whatever changes you like there.
135+
136+
### Issues
137+
No point in raising issues here. It works on my machine. Therefore I see no issue, lol
82138

83139
---
84140

@@ -97,7 +153,7 @@ The source for the website version is located in [`web/`](/web)
97153

98154
## License
99155

100-
> _**[Lissy93/CV](https://github.com/Lissy93/cv)** is licensed under [MIT](https://github.com/Lissy93/cv/blob/HEAD/LICENSE) © [Alicia Sykes](https://aliciasykes.com) 2024._<br>
156+
> _**[Lissy93/CV](https://github.com/Lissy93/cv)** is licensed under [MIT](https://github.com/Lissy93/cv/blob/HEAD/LICENSE) © [Alicia Sykes](https://aliciasykes.com) 2025._<br>
101157
> <sup align="right">For information, see <a href="https://tldrlegal.com/license/mit-license">TLDR Legal > MIT</a></sup>
102158
103159
<details>
@@ -129,7 +185,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
129185

130186
<!-- License + Copyright -->
131187
<p align="center">
132-
<i>© <a href="https://aliciasykes.com">Alicia Sykes</a> 2024</i><br>
188+
<i>© <a href="https://aliciasykes.com">Alicia Sykes</a> 2025</i><br>
133189
<i>Licensed under <a href="https://gist.github.com/Lissy93/143d2ee01ccc5c052a17">MIT</a></i><br>
134190
<a href="https://github.com/lissy93"><img src="https://i.ibb.co/4KtpYxb/octocat-clean-mini.png" /></a><br>
135191
<sup>Thanks for visiting :)</sup>

.github/logo.png

308 KB
Loading
368 KB
Loading
3.57 MB
Loading

.github/workflows/compile.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Generate PDF
1+
name: 🔨 Compile and Generate PDF
22

33
on:
44
workflow_dispatch:

.github/workflows/mirror.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# Pushes the contents of the repo to the Codeberg mirror
2+
name: 🪞 Mirror to Codeberg
3+
on:
4+
workflow_dispatch:
5+
schedule:
6+
- cron: '30 0 * * 0'
7+
push:
8+
tags: [ 'v*' ]
9+
jobs:
10+
codeberg:
11+
runs-on: ubuntu-latest
12+
steps:
13+
- uses: actions/checkout@v4
14+
with: { fetch-depth: 0 }
15+
- uses: pixta-dev/repository-mirroring-action@v1
16+
with:
17+
target_repo_url: [email protected]:alicia/cv.git
18+
ssh_private_key: ${{ secrets.CODEBERG_SSH }}

.github/workflows/tag.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Tag
1+
name: 🏷️ Tag
22

33
on:
44
workflow_dispatch:

.github/workflows/validate.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
name: Validate Resume
1+
name: ☑️ Validate Resume
22
on:
33
pull_request:
44
branches:

lib/generate.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -87,8 +87,8 @@ def render_template(template_path: str, resume_data: dict) -> str:
8787
str: The rendered LaTeX resume.
8888
"""
8989
env = Environment(
90-
loader=FileSystemLoader(os.path.dirname(template_path)),
91-
autoescape=select_autoescape(['html', 'xml', 'tex', 'jinja2'])
90+
loader=FileSystemLoader(os.path.dirname(template_path)),
91+
autoescape=select_autoescape(['html', 'xml'])
9292
)
9393
env.filters['latex_escape'] = latex_escape
9494
env.filters['format_date'] = format_date
@@ -101,7 +101,8 @@ def render_template(template_path: str, resume_data: dict) -> str:
101101
education=resume_data.get('education', []),
102102
skills=resume_data.get('skills', []),
103103
awards=resume_data.get('awards', []),
104-
achivments=resume_data.get('achivments', []),
104+
achievements=resume_data.get('achievements', []),
105+
projects=resume_data.get('projects', []),
105106
extra_links=resume_data.get('extra-links', {})
106107
)
107108

lib/markdown.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ def generate_markdown(resume: Dict[str, Any]) -> str:
138138
skill_items.append(f"See example projects built with each technology at <a href=\"{extra_links_projects['link']}\">{extra_links_projects['link']}</a>")
139139
md_content.append(format_section('Skills', skill_items))
140140

141-
achievements = resume.get('achivments', [])
141+
achievements = resume.get('achievements', [])
142142
achievement_items = [f"{achievement}\n" for achievement in achievements]
143143
md_content.append(format_section('Achievements', achievement_items))
144144

out/Alicia-Sykes-CV.pdf

44.3 KB
Binary file not shown.

0 commit comments

Comments
 (0)