commit 9fbc7d6f81a2a313cfa6617a6c93dc055a32a2d0 Author: opensourcecheemsburgers Date: Fri Mar 7 16:59:01 2025 +0200 Initial CV lib commit diff --git a/.cargo/config.toml b/.cargo/config.toml new file mode 100644 index 0000000..3e64538 --- /dev/null +++ b/.cargo/config.toml @@ -0,0 +1,11 @@ +[unstable] +codegen-backend = true +build-std = ["std", "panic_abort", "core", "alloc"] +build-std-features = ["panic_immediate_abort"] + +[profile.server-dev] +codegen-backend = "cranelift" + +[build] +rustflags = ["--cfg=has_std", "-Z", "threads=8"] +target = "x86_64-unknown-linux-gnu" diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..1cab286 --- /dev/null +++ b/.gitignore @@ -0,0 +1,103 @@ +# Rust / Leptos +target/ +dist/ +debug/ +Cargo.lock +**/*.rs.bk +*.pdb + +# Ides +.idea +.vscode/settings.json +*.sublime* + +# runtime data +pids +*.pid +*.seed +*.pid.lock + +# miscellaneous +/.vs +.DS_Store +.Thumbs.db +debug.log +TODO.md + +### Javascript +.npm/ +.yarn/ +package-lock.json +node_modules +yarn.lock +bun.lockb +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +*.tgz + +# dotenv environment variables file +.env + +# Android + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Log/OS Files +*.log + +# Android Studio generated files and folders +captures/ +.externalNativeBuild/ +.cxx/ +*.apk +output.json + +# IntelliJ +*.iml +.idea/ +misc.xml +deploymentTargetDropDown.xml +render.experimental.xml + +# Keystore files +*.jks +*.keystore + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Android Profiling +*.hprof + +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +replay_pid* diff --git a/.ignore b/.ignore new file mode 100644 index 0000000..97a09f5 --- /dev/null +++ b/.ignore @@ -0,0 +1,4 @@ +frontend/assets/fonts/* +src-tauri/icons/* +src-tauri/gen/* +target/* diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..9b1f763 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,45 @@ +[package] +name = "portfolio_website" +version = "0.1.0" +authors = ["Stephen Power"] +categories = ["wasm", "web-programming"] +edition = "2021" +keywords = ["leptos", "cv", "portfolio"] +license = "AGPL-3.0" +readme = "README.md" +repository = "https://github.com/opensourcecheemsburgers/portfolio-website" +rust-version = "1.75" +description = "My CV built with Leptos and Tailwind." + +[lints.rust] +unsafe_code = "forbid" + +[lints.clippy] +all = "warn" +pedantic = "warn" +nursery = "warn" +cargo = "warn" + +[profile.release] +panic = "abort" +codegen-units = 1 +lto = "fat" +opt-level = "z" +strip = true + +[profile.dev] +panic = "abort" +opt-level = 0 +codegen-units = 256 +lto = "off" +incremental = true +debug = false # Enable if debugging is necessary. + +[target.x86_64-unknown-linux-gnu] +linker = "clang" +rustflags = ["-C", "link-arg=-fuse-ld=/usr/bin/mold"] + +[dependencies] +leptos = { version = "0.6.12", features = ["csr", "nightly"] } +leptos_router = { version = "0.6.12", features = ["csr", "nightly"] } +phosphor-leptos = "0.5.0" diff --git a/Trunk.toml b/Trunk.toml new file mode 100644 index 0000000..cd36052 --- /dev/null +++ b/Trunk.toml @@ -0,0 +1,25 @@ +[build] +release = false +dist = "./dist" +filehash = true +target = "./index.html" + +# [watch] +# watch = ["./src", "./index.html", "./assets"] +# ignore = ["../target", "./dist", "../src-tauri"] + +[serve] +addresses = ["127.0.0.1"] +port = 42069 +open = false +no_autoreload = false +ws_protocol = "ws" + +[clean] +dist = "./dist" +cargo = false + +[tools] +wasm_bindgen = "0.2.99" +wasm_opt = "version_118" +tailwindcss = "3.4.10" diff --git a/css/input.css b/css/input.css new file mode 100644 index 0000000..27d6370 --- /dev/null +++ b/css/input.css @@ -0,0 +1,342 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + .crisp-edges { + image-rendering: -webkit-optimize-contrast; + image-rendering: -moz-crisp-edges; + } + /* comfortaa-300 - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Comfortaa"; + font-style: normal; + font-weight: 300; + src: url("../../fonts/comfortaa/comfortaa-v45-latin-300.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* comfortaa-regular - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Comfortaa"; + font-style: normal; + font-weight: 400; + src: url("../../fonts/comfortaa/comfortaa-v45-latin-regular.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* comfortaa-500 - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Comfortaa"; + font-style: normal; + font-weight: 500; + src: url("../../fonts/comfortaa/comfortaa-v45-latin-500.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* comfortaa-600 - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Comfortaa"; + font-style: normal; + font-weight: 600; + src: url("../../fonts/comfortaa/comfortaa-v45-latin-600.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* comfortaa-700 - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Comfortaa"; + font-style: normal; + font-weight: 700; + src: url("../../fonts/comfortaa/comfortaa-v45-latin-700.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* figtree-300 - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Figtree"; + font-style: normal; + font-weight: 300; + src: url("../../fonts/figtree/figtree-v5-latin-300.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* figtree-300italic - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Figtree"; + font-style: italic; + font-weight: 300; + src: url("../../fonts/figtree/figtree-v5-latin-300italic.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* figtree-regular - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Figtree"; + font-style: normal; + font-weight: 400; + src: url("../../fonts/figtree/figtree-v5-latin-regular.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* figtree-italic - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Figtree"; + font-style: italic; + font-weight: 400; + src: url("../../fonts/figtree/figtree-v5-latin-italic.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* figtree-500 - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Figtree"; + font-style: normal; + font-weight: 500; + src: url("../../fonts/figtree/figtree-v5-latin-500.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* figtree-500italic - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Figtree"; + font-style: italic; + font-weight: 500; + src: url("../../fonts/figtree/figtree-v5-latin-500italic.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* figtree-600 - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Figtree"; + font-style: normal; + font-weight: 600; + src: url("../../fonts/figtree/figtree-v5-latin-600.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* figtree-600italic - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Figtree"; + font-style: italic; + font-weight: 600; + src: url("../../fonts/figtree/figtree-v5-latin-600italic.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* figtree-700 - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Figtree"; + font-style: normal; + font-weight: 700; + src: url("../../fonts/figtree/figtree-v5-latin-700.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* figtree-700italic - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Figtree"; + font-style: italic; + font-weight: 700; + src: url("../../fonts/figtree/figtree-v5-latin-700italic.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* figtree-800 - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Figtree"; + font-style: normal; + font-weight: 800; + src: url("../../fonts/figtree/figtree-v5-latin-800.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* figtree-800italic - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Figtree"; + font-style: italic; + font-weight: 800; + src: url("../../fonts/figtree/figtree-v5-latin-800italic.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* figtree-900 - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Figtree"; + font-style: normal; + font-weight: 900; + src: url("../../fonts/figtree/figtree-v5-latin-900.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* figtree-900italic - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Figtree"; + font-style: italic; + font-weight: 900; + src: url("../../fonts/figtree/figtree-v5-latin-900italic.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* cousine-regular - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Cousine"; + font-style: normal; + font-weight: 400; + src: url("../../fonts/cousine/cousine-v27-latin-regular.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* cousine-italic - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Cousine"; + font-style: italic; + font-weight: 400; + src: url("../../fonts/cousine/cousine-v27-latin-italic.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* cousine-700 - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Cousine"; + font-style: normal; + font-weight: 700; + src: url("../../fonts/cousine/cousine-v27-latin-700.woff2") format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* cousine-700italic - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Cousine"; + font-style: italic; + font-weight: 700; + src: url("../../fonts/cousine/cousine-v27-latin-700italic.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* open-sans-300 - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Open Sans"; + font-style: normal; + font-weight: 300; + src: url("../../fonts/open-sans/open-sans-v40-latin-300.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* open-sans-300italic - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Open Sans"; + font-style: italic; + font-weight: 300; + src: url("../../fonts/open-sans/open-sans-v40-latin-300italic.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* open-sans-regular - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Open Sans"; + font-style: normal; + font-weight: 400; + src: url("../../fonts/open-sans/open-sans-v40-latin-regular.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* open-sans-italic - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Open Sans"; + font-style: italic; + font-weight: 400; + src: url("../../fonts/open-sans/open-sans-v40-latin-italic.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* open-sans-500 - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Open Sans"; + font-style: normal; + font-weight: 500; + src: url("../../fonts/open-sans/open-sans-v40-latin-500.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* open-sans-500italic - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Open Sans"; + font-style: italic; + font-weight: 500; + src: url("../../fonts/open-sans/open-sans-v40-latin-500italic.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* open-sans-600 - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Open Sans"; + font-style: normal; + font-weight: 600; + src: url("../../fonts/open-sans/open-sans-v40-latin-600.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* open-sans-600italic - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Open Sans"; + font-style: italic; + font-weight: 600; + src: url("../../fonts/open-sans/open-sans-v40-latin-600italic.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* open-sans-700italic - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Open Sans"; + font-style: italic; + font-weight: 700; + src: url("../../fonts/open-sans/open-sans-v40-latin-700italic.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* open-sans-800 - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Open Sans"; + font-style: normal; + font-weight: 800; + src: url("../../fonts/open-sans/open-sans-v40-latin-800.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } + + /* open-sans-800italic - latin */ + @font-face { + font-display: swap; /* Check https://developer.mozilla.org/en-US/docs/Web/CSS/@font-face/font-display for other options. */ + font-family: "Open Sans"; + font-style: italic; + font-weight: 800; + src: url("../../fonts/open-sans/open-sans-v40-latin-800italic.woff2") + format("woff2"); /* Chrome 36+, Opera 23+, Firefox 39+, Safari 12+, iOS 10+ */ + } +} diff --git a/fonts/comfortaa/comfortaa-v45-latin-300.woff2 b/fonts/comfortaa/comfortaa-v45-latin-300.woff2 new file mode 100644 index 0000000..7fb6941 Binary files /dev/null and b/fonts/comfortaa/comfortaa-v45-latin-300.woff2 differ diff --git a/fonts/comfortaa/comfortaa-v45-latin-500.woff2 b/fonts/comfortaa/comfortaa-v45-latin-500.woff2 new file mode 100644 index 0000000..ed2adf8 Binary files /dev/null and b/fonts/comfortaa/comfortaa-v45-latin-500.woff2 differ diff --git a/fonts/comfortaa/comfortaa-v45-latin-600.woff2 b/fonts/comfortaa/comfortaa-v45-latin-600.woff2 new file mode 100644 index 0000000..25c1d63 Binary files /dev/null and b/fonts/comfortaa/comfortaa-v45-latin-600.woff2 differ diff --git a/fonts/comfortaa/comfortaa-v45-latin-700.woff2 b/fonts/comfortaa/comfortaa-v45-latin-700.woff2 new file mode 100644 index 0000000..8cb8b14 Binary files /dev/null and b/fonts/comfortaa/comfortaa-v45-latin-700.woff2 differ diff --git a/fonts/comfortaa/comfortaa-v45-latin-regular.woff2 b/fonts/comfortaa/comfortaa-v45-latin-regular.woff2 new file mode 100644 index 0000000..7740306 Binary files /dev/null and b/fonts/comfortaa/comfortaa-v45-latin-regular.woff2 differ diff --git a/fonts/cousine/cousine-v27-latin-700.woff2 b/fonts/cousine/cousine-v27-latin-700.woff2 new file mode 100644 index 0000000..4862c1f Binary files /dev/null and b/fonts/cousine/cousine-v27-latin-700.woff2 differ diff --git a/fonts/cousine/cousine-v27-latin-700italic.woff2 b/fonts/cousine/cousine-v27-latin-700italic.woff2 new file mode 100644 index 0000000..ad3ced5 Binary files /dev/null and b/fonts/cousine/cousine-v27-latin-700italic.woff2 differ diff --git a/fonts/cousine/cousine-v27-latin-italic.woff2 b/fonts/cousine/cousine-v27-latin-italic.woff2 new file mode 100644 index 0000000..128b155 Binary files /dev/null and b/fonts/cousine/cousine-v27-latin-italic.woff2 differ diff --git a/fonts/cousine/cousine-v27-latin-regular.woff2 b/fonts/cousine/cousine-v27-latin-regular.woff2 new file mode 100644 index 0000000..2ef9467 Binary files /dev/null and b/fonts/cousine/cousine-v27-latin-regular.woff2 differ diff --git a/fonts/figtree/figtree-v5-latin-300.woff2 b/fonts/figtree/figtree-v5-latin-300.woff2 new file mode 100644 index 0000000..ff1fa4d Binary files /dev/null and b/fonts/figtree/figtree-v5-latin-300.woff2 differ diff --git a/fonts/figtree/figtree-v5-latin-300italic.woff2 b/fonts/figtree/figtree-v5-latin-300italic.woff2 new file mode 100644 index 0000000..edea917 Binary files /dev/null and b/fonts/figtree/figtree-v5-latin-300italic.woff2 differ diff --git a/fonts/figtree/figtree-v5-latin-500.woff2 b/fonts/figtree/figtree-v5-latin-500.woff2 new file mode 100644 index 0000000..43944b1 Binary files /dev/null and b/fonts/figtree/figtree-v5-latin-500.woff2 differ diff --git a/fonts/figtree/figtree-v5-latin-500italic.woff2 b/fonts/figtree/figtree-v5-latin-500italic.woff2 new file mode 100644 index 0000000..b96899a Binary files /dev/null and b/fonts/figtree/figtree-v5-latin-500italic.woff2 differ diff --git a/fonts/figtree/figtree-v5-latin-600.woff2 b/fonts/figtree/figtree-v5-latin-600.woff2 new file mode 100644 index 0000000..5ad11a8 Binary files /dev/null and b/fonts/figtree/figtree-v5-latin-600.woff2 differ diff --git a/fonts/figtree/figtree-v5-latin-600italic.woff2 b/fonts/figtree/figtree-v5-latin-600italic.woff2 new file mode 100644 index 0000000..59af821 Binary files /dev/null and b/fonts/figtree/figtree-v5-latin-600italic.woff2 differ diff --git a/fonts/figtree/figtree-v5-latin-700.woff2 b/fonts/figtree/figtree-v5-latin-700.woff2 new file mode 100644 index 0000000..6039759 Binary files /dev/null and b/fonts/figtree/figtree-v5-latin-700.woff2 differ diff --git a/fonts/figtree/figtree-v5-latin-700italic.woff2 b/fonts/figtree/figtree-v5-latin-700italic.woff2 new file mode 100644 index 0000000..8e16837 Binary files /dev/null and b/fonts/figtree/figtree-v5-latin-700italic.woff2 differ diff --git a/fonts/figtree/figtree-v5-latin-800.woff2 b/fonts/figtree/figtree-v5-latin-800.woff2 new file mode 100644 index 0000000..a9bb876 Binary files /dev/null and b/fonts/figtree/figtree-v5-latin-800.woff2 differ diff --git a/fonts/figtree/figtree-v5-latin-800italic.woff2 b/fonts/figtree/figtree-v5-latin-800italic.woff2 new file mode 100644 index 0000000..2c700dc Binary files /dev/null and b/fonts/figtree/figtree-v5-latin-800italic.woff2 differ diff --git a/fonts/figtree/figtree-v5-latin-900.woff2 b/fonts/figtree/figtree-v5-latin-900.woff2 new file mode 100644 index 0000000..e60de1d Binary files /dev/null and b/fonts/figtree/figtree-v5-latin-900.woff2 differ diff --git a/fonts/figtree/figtree-v5-latin-900italic.woff2 b/fonts/figtree/figtree-v5-latin-900italic.woff2 new file mode 100644 index 0000000..d55405c Binary files /dev/null and b/fonts/figtree/figtree-v5-latin-900italic.woff2 differ diff --git a/fonts/figtree/figtree-v5-latin-italic.woff2 b/fonts/figtree/figtree-v5-latin-italic.woff2 new file mode 100644 index 0000000..36378a6 Binary files /dev/null and b/fonts/figtree/figtree-v5-latin-italic.woff2 differ diff --git a/fonts/figtree/figtree-v5-latin-regular.woff2 b/fonts/figtree/figtree-v5-latin-regular.woff2 new file mode 100644 index 0000000..c359928 Binary files /dev/null and b/fonts/figtree/figtree-v5-latin-regular.woff2 differ diff --git a/fonts/open-sans/open-sans-v40-latin-300.woff2 b/fonts/open-sans/open-sans-v40-latin-300.woff2 new file mode 100644 index 0000000..e000fcb Binary files /dev/null and b/fonts/open-sans/open-sans-v40-latin-300.woff2 differ diff --git a/fonts/open-sans/open-sans-v40-latin-300italic.woff2 b/fonts/open-sans/open-sans-v40-latin-300italic.woff2 new file mode 100644 index 0000000..5167821 Binary files /dev/null and b/fonts/open-sans/open-sans-v40-latin-300italic.woff2 differ diff --git a/fonts/open-sans/open-sans-v40-latin-500.woff2 b/fonts/open-sans/open-sans-v40-latin-500.woff2 new file mode 100644 index 0000000..a35be30 Binary files /dev/null and b/fonts/open-sans/open-sans-v40-latin-500.woff2 differ diff --git a/fonts/open-sans/open-sans-v40-latin-500italic.woff2 b/fonts/open-sans/open-sans-v40-latin-500italic.woff2 new file mode 100644 index 0000000..039e72f Binary files /dev/null and b/fonts/open-sans/open-sans-v40-latin-500italic.woff2 differ diff --git a/fonts/open-sans/open-sans-v40-latin-600.woff2 b/fonts/open-sans/open-sans-v40-latin-600.woff2 new file mode 100644 index 0000000..f67ef00 Binary files /dev/null and b/fonts/open-sans/open-sans-v40-latin-600.woff2 differ diff --git a/fonts/open-sans/open-sans-v40-latin-600italic.woff2 b/fonts/open-sans/open-sans-v40-latin-600italic.woff2 new file mode 100644 index 0000000..bd6a4d1 Binary files /dev/null and b/fonts/open-sans/open-sans-v40-latin-600italic.woff2 differ diff --git a/fonts/open-sans/open-sans-v40-latin-700italic.woff2 b/fonts/open-sans/open-sans-v40-latin-700italic.woff2 new file mode 100644 index 0000000..2c96334 Binary files /dev/null and b/fonts/open-sans/open-sans-v40-latin-700italic.woff2 differ diff --git a/fonts/open-sans/open-sans-v40-latin-800.woff2 b/fonts/open-sans/open-sans-v40-latin-800.woff2 new file mode 100644 index 0000000..cf65114 Binary files /dev/null and b/fonts/open-sans/open-sans-v40-latin-800.woff2 differ diff --git a/fonts/open-sans/open-sans-v40-latin-800italic.woff2 b/fonts/open-sans/open-sans-v40-latin-800italic.woff2 new file mode 100644 index 0000000..17bc073 Binary files /dev/null and b/fonts/open-sans/open-sans-v40-latin-800italic.woff2 differ diff --git a/fonts/open-sans/open-sans-v40-latin-italic.woff2 b/fonts/open-sans/open-sans-v40-latin-italic.woff2 new file mode 100644 index 0000000..84ee197 Binary files /dev/null and b/fonts/open-sans/open-sans-v40-latin-italic.woff2 differ diff --git a/fonts/open-sans/open-sans-v40-latin-regular.woff2 b/fonts/open-sans/open-sans-v40-latin-regular.woff2 new file mode 100644 index 0000000..eaae942 Binary files /dev/null and b/fonts/open-sans/open-sans-v40-latin-regular.woff2 differ diff --git a/fonts/rufina/rufina-v15-latin-700.woff2 b/fonts/rufina/rufina-v15-latin-700.woff2 new file mode 100644 index 0000000..200b938 Binary files /dev/null and b/fonts/rufina/rufina-v15-latin-700.woff2 differ diff --git a/fonts/rufina/rufina-v15-latin-regular.woff2 b/fonts/rufina/rufina-v15-latin-regular.woff2 new file mode 100644 index 0000000..5b9f813 Binary files /dev/null and b/fonts/rufina/rufina-v15-latin-regular.woff2 differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..c54e1c6 --- /dev/null +++ b/index.html @@ -0,0 +1,12 @@ + + + + + + CV + + + + + + diff --git a/package.json b/package.json new file mode 100644 index 0000000..3fb2a38 --- /dev/null +++ b/package.json @@ -0,0 +1,7 @@ +{ + "dependencies": { + "daisyui": "^4.12.23", + "picocolors": "^1.1.1", + "tailwindcss": "3.4.10" + } +} diff --git a/src/education.rs b/src/education.rs new file mode 100644 index 0000000..5d59ff1 --- /dev/null +++ b/src/education.rs @@ -0,0 +1,29 @@ +use crate::section::Section; +use leptos::{component, view, Children, IntoView}; + +#[component] +#[must_use] +pub fn EducationExperience(children: Children) -> impl IntoView { + view! {
{children()}
} +} + +#[component] +#[must_use] +pub fn Education( + institution: &'static str, + degree: &'static str, + time_period: &'static str, +) -> impl IntoView { + view! { +
+
+
+

{institution} {" - "} {degree}

+
+
+

{time_period}

+
+
+
+ } +} diff --git a/src/header.rs b/src/header.rs new file mode 100644 index 0000000..6cda10a --- /dev/null +++ b/src/header.rs @@ -0,0 +1,67 @@ +use leptos::{component, view, IntoView}; +use phosphor_leptos::{Browser, IconWeight, Mailbox, MapPin, Phone}; + +#[component] +#[must_use] +pub fn Header( + name: &'static str, + job_title: &'static str, + location: &'static str, + location_osm_link: &'static str, + phone_number: &'static str, + email: &'static str, + website: &'static str, +) -> impl IntoView { + view! { +
+ + +
+ } +} + +#[component] +fn HeaderLeft(name: &'static str, job_title: &'static str) -> impl IntoView { + view! { +
+

{name}

+

{job_title}

+
+ } +} + +#[component] +fn HeaderRight( + location: &'static str, + location_osm_link: &'static str, + phone_number: &'static str, + email: &'static str, + website: &'static str, +) -> impl IntoView { + view! { +
+
+ + {location} +
+ +
+ + {email} +
+
+ + {website} +
+
+ } +} diff --git a/src/lib.rs b/src/lib.rs new file mode 100644 index 0000000..02800dc --- /dev/null +++ b/src/lib.rs @@ -0,0 +1,8 @@ +pub mod education; +pub mod header; +pub mod page; +pub mod projects; +pub mod section; +pub mod skills; +pub mod summary; +pub mod work; diff --git a/src/page.rs b/src/page.rs new file mode 100644 index 0000000..faa9459 --- /dev/null +++ b/src/page.rs @@ -0,0 +1,13 @@ +use leptos::{component, view, Children, IntoView}; + +#[component] +#[must_use] +pub fn Page(children: Children) -> impl IntoView { + view! { +
+
+
{children()}
+
+
+ } +} diff --git a/src/projects.rs b/src/projects.rs new file mode 100644 index 0000000..510ed2a --- /dev/null +++ b/src/projects.rs @@ -0,0 +1,27 @@ +use crate::section::Section; +use leptos::{component, view, Children, For, IntoView}; + +#[component] +#[must_use] +pub fn PersonalExperience(children: Children) -> impl IntoView { + view! {
{children()}
} +} + +#[component] +#[must_use] +pub fn Project(title: &'static str, achievements: Vec<&'static str>) -> impl IntoView { + view! { +
+
+
+

{title}

+
+
+ +
+ } +} diff --git a/src/section.rs b/src/section.rs new file mode 100644 index 0000000..d26025c --- /dev/null +++ b/src/section.rs @@ -0,0 +1,14 @@ +use leptos::{component, view, Children, IntoView}; + +#[component] +#[must_use] +pub fn Section(children: Children, title: &'static str) -> impl IntoView { + view! { +
+
+

{title}

+
+
{children()}
+
+ } +} diff --git a/src/skills.rs b/src/skills.rs new file mode 100644 index 0000000..d4cd154 --- /dev/null +++ b/src/skills.rs @@ -0,0 +1,34 @@ +use leptos::{component, view, Children, For, IntoView}; + +use crate::section::Section; + +#[component] +#[must_use] +pub fn Skills(children: Children) -> impl IntoView { + view! { +
+
{children()}
+
+ } +} + +#[component] +#[must_use] +pub fn Skill(title: &'static str, items: Vec<&'static str>) -> impl IntoView { + view! { +
+
+
+

{title}

+
+
+ +
+ } +} diff --git a/src/summary.rs b/src/summary.rs new file mode 100644 index 0000000..4073806 --- /dev/null +++ b/src/summary.rs @@ -0,0 +1,9 @@ +use leptos::{component, view, IntoView}; + +#[component] +#[must_use] +pub fn Summary(summary: &'static str) -> impl IntoView { + view! { +
{summary}
+ } +} diff --git a/src/work.rs b/src/work.rs new file mode 100644 index 0000000..3037aae --- /dev/null +++ b/src/work.rs @@ -0,0 +1,35 @@ +use crate::section::Section; +use leptos::{component, view, Children, For, IntoView}; + +#[component] +#[must_use] +pub fn WorkExperience(children: Children) -> impl IntoView { + view! {
{children()}
} +} + +#[component] +#[must_use] +pub fn Job( + company: &'static str, + title: &'static str, + time_period: &'static str, + achievements: Vec<&'static str>, +) -> impl IntoView { + view! { +
+
+
+

{company} {" - "} {title}

+
+
+

{time_period}

+
+
+ +
+ } +} diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..97543d6 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,27 @@ +/** @type {import('tailwindcss').Config} */ +module.exports = { + mode: "jit", + content: [ + "./css/*.{js,ts,jsx,tsx,css,scss,html}", + "./css/**/*.{js,ts,jsx,tsx}", + "./src/**/*.{js,ts,jsx,tsx,rs,scss,css,html}", + "./index.html", + "./src/main.rs", + ], + plugins: [require("daisyui"), require("@tailwindcss/typography")], + theme: { + extend: { + fontFamily: { + sans: ["Figtree"], + serif: ["Rufina"], + mono: ["Cousine"], + }, + width: { + a4: "210mm", + }, + height: { + a4: "297mm", + }, + }, + }, +};