@anja.codes/create-vitakit 0.0.0-stage → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +47 -2
- package/deployments.mjs +178 -0
- package/index.mjs +99 -0
- package/package.json +40 -4
- package/scaffold.mjs +124 -0
- package/template/.gitignore.template +19 -0
- package/template/_forgejo/workflows/codeberg.yml +37 -0
- package/template/_forgejo/workflows/deploy.yml +31 -0
- package/template/_github/workflows/cloudflare.yml +33 -0
- package/template/_github/workflows/cv.yml +36 -0
- package/template/_github/workflows/deploy.yml +53 -0
- package/template/_github/workflows/workers.yml +39 -0
- package/template/app/app.vue +5 -0
- package/template/app/assets/css/main.css +129 -0
- package/template/app/layouts/default.vue +39 -0
- package/template/app/pages/[...slug].vue +30 -0
- package/template/app/pages/cv.vue +34 -0
- package/template/app/pages/index.vue +62 -0
- package/template/app/pages/publications.vue +27 -0
- package/template/content/education.yml +18 -0
- package/template/content/employment.yml +18 -0
- package/template/content/pages/cv.md +9 -0
- package/template/content/pages/index.md +11 -0
- package/template/content/pages/publications.md +8 -0
- package/template/content/pages/research.md +32 -0
- package/template/content/profile.yml +33 -0
- package/template/content/publications.bib +43 -0
- package/template/content/supervision.yml +12 -0
- package/template/content/talks.yml +17 -0
- package/template/content/teaching.yml +17 -0
- package/template/cv-tex/cv.tex +39 -0
- package/template/cv-tex/cv.yml +7 -0
- package/template/cv-tex/latexmkrc +5 -0
- package/template/cv-tex/preamble.tex +7 -0
- package/template/cv-tex/prose/research-statement.tex +17 -0
- package/template/gitlab-ci.yml.template +28 -0
- package/template/nuxt.config.ts +32 -0
- package/template/package.json.template +33 -0
- package/template/public/img/portrait.svg +6 -0
- package/template/public/img/tree.svg +10 -0
- package/template/tsconfig.json +9 -0
- package/template/wrangler.json.template +10 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
- date: 2025
|
|
2
|
+
title: Analytic Combinatorics
|
|
3
|
+
role: Lecturer
|
|
4
|
+
term: 2025S
|
|
5
|
+
institution: University of Graz
|
|
6
|
+
|
|
7
|
+
- date: 2024
|
|
8
|
+
title: Discrete Mathematics
|
|
9
|
+
role: Lecturer
|
|
10
|
+
term: 2024W
|
|
11
|
+
institution: University of Graz
|
|
12
|
+
|
|
13
|
+
- date: 2023
|
|
14
|
+
title: Calculus I
|
|
15
|
+
role: Teaching Assistant
|
|
16
|
+
term: 2023W
|
|
17
|
+
institution: University of Klagenfurt
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
% Your CV. This file decides the ORDER of things and their headings; cv.yml
|
|
2
|
+
% decides what goes in. app/pages/cv.vue does the same for the website.
|
|
3
|
+
%
|
|
4
|
+
% Styling: redefine the macros in preamble.tex. For deeper changes run
|
|
5
|
+
% pnpm vitakit eject vitakit-cv.cls
|
|
6
|
+
% which copies the document class into cv-tex/, where it is yours to edit and
|
|
7
|
+
% takes precedence. Do not edit the copy in cv-tex/generated/ -- every build
|
|
8
|
+
% overwrites it.
|
|
9
|
+
%
|
|
10
|
+
% A variant (say, for one application) is just a copy of this file:
|
|
11
|
+
% cp cv-tex/cv.tex cv-tex/application-xyz.tex and change \vitadocument below.
|
|
12
|
+
\documentclass{vitakit-cv}
|
|
13
|
+
\vitadocument{cv}
|
|
14
|
+
|
|
15
|
+
% The class already loads biblatex; just point it at your .bib file.
|
|
16
|
+
\addbibresource{../content/publications.bib}
|
|
17
|
+
|
|
18
|
+
\input{preamble.tex}
|
|
19
|
+
\vitainput{profile}
|
|
20
|
+
|
|
21
|
+
\begin{document}
|
|
22
|
+
\vitaheader
|
|
23
|
+
|
|
24
|
+
% Prose (cover letters, statements) lives in cv-tex/prose/ as plain LaTeX and
|
|
25
|
+
% is included with \input, not \vitasection -- \vitasection is only for
|
|
26
|
+
% sections vitakit generates from content/.
|
|
27
|
+
% \input{prose/research-statement.tex}
|
|
28
|
+
|
|
29
|
+
\vitasection[Employment]{employment}
|
|
30
|
+
\vitasection[Education]{education}
|
|
31
|
+
\vitasection[Teaching]{teaching}
|
|
32
|
+
|
|
33
|
+
\section{Publications}
|
|
34
|
+
\vitainput{publications}
|
|
35
|
+
|
|
36
|
+
\vitasection[Supervised theses]{supervision}
|
|
37
|
+
\vitasection[Selected talks]{talks}
|
|
38
|
+
|
|
39
|
+
\end{document}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
# Lets a plain `latexmk cv.tex` (in CI, or from an editor) find the document
|
|
2
|
+
# class, which `pnpm pdf` writes to generated/<document>/. A copy in this
|
|
3
|
+
# directory (`pnpm vitakit eject vitakit-cv.cls`) still wins: `.` comes first.
|
|
4
|
+
# The trailing separator keeps TeX's default search path.
|
|
5
|
+
$ENV{'TEXINPUTS'} = join($search_path_separator, '.', './generated//', $ENV{'TEXINPUTS'} // '');
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
% Your styling lives here. The generated files only use the macros from
|
|
2
|
+
% vitakit-cv.cls, so redefining them changes the design without touching
|
|
3
|
+
% anything vitakit produces.
|
|
4
|
+
|
|
5
|
+
% Headings are written where a section is included, \vitasection[Talks]{talks}.
|
|
6
|
+
% For one wording shared by every document that includes this preamble:
|
|
7
|
+
% \vitasectiontitle{talks}{Selected talks}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
% Prose for your CV and applications: plain LaTeX, written by you.
|
|
2
|
+
%
|
|
3
|
+
% Files in this directory are never read by the website build, which makes them
|
|
4
|
+
% the right place for a cover letter, a research or teaching statement, or
|
|
5
|
+
% anything else that should not end up online.
|
|
6
|
+
%
|
|
7
|
+
% Include one wherever you want it in a document:
|
|
8
|
+
%
|
|
9
|
+
% \input{prose/research-statement.tex}
|
|
10
|
+
%
|
|
11
|
+
% (\vitasection is only for sections vitakit generates from content/.)
|
|
12
|
+
|
|
13
|
+
\section{Research statement}
|
|
14
|
+
|
|
15
|
+
Replace this text. Because it is ordinary LaTeX, anything you would normally
|
|
16
|
+
write works here --- environments, figures, citations such as
|
|
17
|
+
\cite{example-published}, and mathematics like $\zeta(s) = \sum_{n \ge 1} n^{-s}$.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Builds and checks the site, then publishes only the static output.
|
|
2
|
+
# Requires GitLab 17.10+ with Pages and a Docker-compatible CI runner enabled.
|
|
3
|
+
# Private source projects are supported; set Pages access to Everyone for a
|
|
4
|
+
# public website (Settings -> General -> Visibility, project features, permissions).
|
|
5
|
+
# For a root-level custom domain, set NUXT_APP_BASE_URL=/ in CI/CD variables.
|
|
6
|
+
image: node:22-bookworm
|
|
7
|
+
|
|
8
|
+
stages: [deploy]
|
|
9
|
+
|
|
10
|
+
deploy-pages:
|
|
11
|
+
stage: deploy
|
|
12
|
+
before_script:
|
|
13
|
+
- corepack enable
|
|
14
|
+
- corepack install
|
|
15
|
+
- pnpm install --frozen-lockfile
|
|
16
|
+
script:
|
|
17
|
+
# CI_PAGES_URL handles unique domains, project paths and subgroup paths.
|
|
18
|
+
# An explicit CI/CD variable can override it for a custom domain.
|
|
19
|
+
- |
|
|
20
|
+
if [ -z "${NUXT_APP_BASE_URL:-}" ]; then
|
|
21
|
+
NUXT_APP_BASE_URL="$(node -e 'const path = new URL(process.env.CI_PAGES_URL).pathname; process.stdout.write(path.endsWith("/") ? path : path + "/")')"
|
|
22
|
+
export NUXT_APP_BASE_URL
|
|
23
|
+
fi
|
|
24
|
+
- pnpm check
|
|
25
|
+
pages:
|
|
26
|
+
publish: .output/public
|
|
27
|
+
rules:
|
|
28
|
+
- if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import tailwindcss from '@tailwindcss/vite'
|
|
2
|
+
|
|
3
|
+
const baseURL = process.env.NUXT_APP_BASE_URL || '/'
|
|
4
|
+
if (!baseURL.startsWith('/') || !baseURL.endsWith('/') || baseURL.includes('//')) {
|
|
5
|
+
throw new Error('NUXT_APP_BASE_URL must be a path with leading and trailing slashes, e.g. /my-site/')
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
export default defineNuxtConfig({
|
|
9
|
+
compatibilityDate: '2026-09-06',
|
|
10
|
+
devtools: { enabled: false },
|
|
11
|
+
|
|
12
|
+
modules: ['@nuxt/fonts', '@anja.codes/vitakit/nuxt'],
|
|
13
|
+
|
|
14
|
+
// Formulas are rendered at build time; vitakit adds the matching KaTeX
|
|
15
|
+
// stylesheet itself, so no KaTeX is installed here.
|
|
16
|
+
css: ['~/assets/css/main.css'],
|
|
17
|
+
|
|
18
|
+
vite: { plugins: [tailwindcss()] },
|
|
19
|
+
|
|
20
|
+
app: {
|
|
21
|
+
baseURL,
|
|
22
|
+
head: { htmlAttrs: { lang: 'en' } },
|
|
23
|
+
},
|
|
24
|
+
|
|
25
|
+
nitro: {
|
|
26
|
+
prerender: {
|
|
27
|
+
failOnError: true,
|
|
28
|
+
// Routes come from vitakit, so an unlinked page is still generated.
|
|
29
|
+
crawlLinks: false,
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
})
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "__SLUG__",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"packageManager": "pnpm@10.29.1",
|
|
6
|
+
"engines": {
|
|
7
|
+
"node": ">=22.18"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"dev": "nuxt dev",
|
|
11
|
+
"generate": "nuxt generate",
|
|
12
|
+
"preview": "nuxt preview",
|
|
13
|
+
"postinstall": "nuxt prepare",
|
|
14
|
+
"typecheck": "nuxt typecheck",
|
|
15
|
+
"check": "pnpm typecheck && pnpm generate && vitakit verify",
|
|
16
|
+
"pdf": "vitakit pdf"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": {
|
|
19
|
+
"@anja.codes/vitakit": "^0.2.0",
|
|
20
|
+
"@nuxt/fonts": "^0.14.0",
|
|
21
|
+
"@tailwindcss/vite": "^4.3.3",
|
|
22
|
+
"nuxt": "^4.5.2",
|
|
23
|
+
"tailwindcss": "^4.3.3",
|
|
24
|
+
"vue": "^3.5.43",
|
|
25
|
+
"vue-router": "^5.3.1"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@types/node": "^26.6.2",
|
|
29
|
+
"typescript": "^5.9.3",
|
|
30
|
+
"vue-tsc": "^3.3.11",
|
|
31
|
+
"zod": "^4.6.5"
|
|
32
|
+
}
|
|
33
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 128 128" width="128" height="128" role="img" aria-label="Placeholder portrait">
|
|
2
|
+
<rect width="128" height="128" fill="#e2e8f0"/>
|
|
3
|
+
<circle cx="64" cy="50" r="23" fill="#94a3b8"/>
|
|
4
|
+
<path d="M20 128c0-27 20-44 44-44s44 17 44 44z" fill="#94a3b8"/>
|
|
5
|
+
<text x="64" y="120" font-family="system-ui, sans-serif" font-size="9" fill="#475569" text-anchor="middle">replace me</text>
|
|
6
|
+
</svg>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 240 140" width="240" height="140">
|
|
2
|
+
<g stroke="#475569" stroke-width="2" fill="none">
|
|
3
|
+
<path d="M120 130 V100 M120 100 L80 70 M120 100 L160 70 M80 70 L60 40 M80 70 L100 40 M160 70 L150 40 M150 40 L140 15 M150 40 L165 15"/>
|
|
4
|
+
</g>
|
|
5
|
+
<g fill="#1d4ed8">
|
|
6
|
+
<circle cx="120" cy="100" r="4"/><circle cx="80" cy="70" r="4"/><circle cx="160" cy="70" r="4"/>
|
|
7
|
+
<circle cx="60" cy="40" r="4"/><circle cx="100" cy="40" r="4"/><circle cx="150" cy="40" r="4"/>
|
|
8
|
+
<circle cx="140" cy="15" r="4"/><circle cx="165" cy="15" r="4"/>
|
|
9
|
+
</g>
|
|
10
|
+
</svg>
|