feat: build website

This commit is contained in:
Urko 2023-06-13 20:13:00 +02:00
commit 61a07ad6dd
86 changed files with 14915 additions and 0 deletions

19
.gitignore vendored Normal file
View File

@ -0,0 +1,19 @@
/config.yaml
/content
/static/images
.vscode
### Hugo ###
# Generated files by hugo
/public/
/resources/_gen/
/assets/jsconfig.json
hugo_stats.json
# Executable may be added to repository
hugo.exe
hugo.darwin
hugo.linux
# Temporary lock file while building
.hugo_build.lock

1
LICENSE Normal file
View File

@ -0,0 +1 @@
YAHWEH's License

10
archetypes/default.md Normal file
View File

@ -0,0 +1,10 @@
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
draft: true
author:
tags:
image:
description:
toc:
---

14
layouts/404.html Normal file
View File

@ -0,0 +1,14 @@
{{ define "head" }}
<meta name="description" content={{ .Site.Params.description }}>
{{ end }}
{{ define "title" }}
{{ .Site.Title }} | {{ .Site.Params.terms.pageNotFound | default "404 page not found" }}
{{ end }}
{{ define "main" }}
<div class="container py-5 text-center">
<img src="{{ .Site.Params.staticPath }}/404.png" alt='{{ .Site.Params.terms.pageNotFound | default "404 page not found" }}' class="img-fluid" width="40%">
<h1>{{ .Site.Params.terms.pageNotFound | default "404 page not found" }}</h1>
</div>
{{ end }}

View File

@ -0,0 +1,86 @@
{{ define "head" }}
<meta name="description" content="{{ .Params.description }}">
<link rel="stylesheet" href="{{.Site.Params.staticPath}}/css/about.css">
<!-- fontawesome -->
<script defer src="{{.Site.Params.staticPath}}/fontawesome-5/all-5.15.4.js"></script>
{{ end }}
{{ define "title" }}
{{.Title }} | {{ .Site.Title }}
{{ end }}
{{ define "main" }}
<section id="single">
<div class="container">
<div class="title mb-3">
<h1 class="text-center mb-4">{{ .Title }}</h1>
</div>
<div class="row justify-content-center">
{{ if .Params.image }}
<div class="col-sm-12 col-md-12 col-lg-3 px-3">
<div class="sticky-sidebar">
<aside class="aboutImg">
<div class="text-center">
<img src="{{ .Params.image }}" class="mx-auto rounded" alt="">
</div>
<h2 class="text-center pt-3">
{{ .Params.name }}
</h2>
<div class="aboutImg-content">
<ul class="list-inline pt-3 text-center">
{{ range .Params.socialLinks.fontAwesomeIcons }}
<li class="list-inline-item text-center">
<a href="{{ .url }}" target="_blank">
<i class="{{ .icon }}"></i>
</a>
</li>
{{ end }}
{{ range .Params.socialLinks.customIcons }}
<li class="list-inline-item text-center">
<a href="{{ .url }}" target="_blank" class="img-icon">
<img src="{{ .icon }}">
</a>
</li>
{{ end }}
</ul>
</div>
</aside>
</div>
</div>
{{ end }}
<div class="col-sm-12 col-md-12 col-lg-6 pt-4 p-2">
<div class="pr-lg-4">
<article class="page-content p-2">
{{ .Content | emojify }}
</article>
</div>
</div>
</div>
</div>
<button class="p-2 px-3" onclick="topFunction()" id="topScroll">
<i class="fas fa-angle-up"></i>
</button>
</section>
<script>
var topScroll = document.getElementById("topScroll");
window.onscroll = function () { scrollFunction() };
function scrollFunction() {
if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) {
topScroll.style.display = "block";
} else {
topScroll.style.display = "none";
}
}
function topFunction() {
document.body.scrollTop = 0;
document.documentElement.scrollTop = 0;
}
</script>
{{ end }}

View File

@ -0,0 +1,36 @@
<!DOCTYPE html>
<html>
<head>
{{- partial "head.html" . -}}
{{- block "head" . }} {{- end }}
<title>
{{- block "title" . }} {{- end }}
</title>
</head>
<body class="light">
<!-- javascripts -->
<!-- <script src="/js/jquery-3.6.0.min.js"></script> -->
{{- partial "sections/header.html" . -}}
<div id="content">
{{- block "main" . }}{{- end }}
</div>
{{- partial "sections/footer/index.html" . -}}
{{- if (or (eq .Site.Params.UseBootstrapCDN true) (eq .Site.Params.UseBootstrapCDN "js")) -}}
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.min.js" integrity="sha384-QJHtvGhmr9XOIpI6YVutG+2QOK9T+ZnN4kzFN1RtK3zEFEIsxhlmWl5/YESvpZ13" crossorigin="anonymous"></script>
{{- else -}}
<script src="{{ .Site.Params.staticPath }}/bootstrap-5/js/bootstrap.bundle.min.js"></script>
{{- end -}}
{{- partial "scripts.html" . -}}
<!-- for search -->
<section id="search-content" class="py-2">
<div class="container" id="search-results"></div>
</section>
</body>
</html>

View File

@ -0,0 +1,29 @@
{{ define "head" }}
<meta name="description" content="{{ .Title }} of {{ .Site.Title }}">
<!-- <link rel="stylesheet" href="{{ .Site.Params.staticPath }}/css/list.css" media="all"> -->
{{ end }}
{{ define "title" }}
{{.Title }} | {{ .Site.Title }}
{{ end }}
{{ define "main" }}
<div class="container pt-5" id="list-page">
<h2 class="text-center pb-2">{{.Title}}</h2>
<h6 class="text-center">{{ .Params.description | emojify }}</h6>
<div class="row p-4">
{{ .Content | emojify }}
</div>
<div class="card-group p-4">
<div class="row justify-content-center">
{{ range .Params.images }}
<div class="col-md-4 p-0 m-0">
<div class="card p-0 m-0 border-0">
<img class="w-100" height="280px" src="{{ .src }}">
</div>
</div>
{{ end }}
</div>
</div>
</div>
{{ end }}

View File

@ -0,0 +1,5 @@
{{- $.Scratch.Add "index" slice -}}
{{- range .Site.RegularPages -}}
{{- $.Scratch.Add "index" (dict "title" .Title "description" .Params.description "content" .Content "image" .Params.image "permalink" .Permalink) -}}
{{- end -}}
{{- $.Scratch.Get "index" | jsonify -}}

View File

@ -0,0 +1,48 @@
{{ define "head" }}
<meta name="description" content="{{ .Title }} of {{ .Site.Title }}">
<link rel="stylesheet" href="{{ .Site.Params.staticPath }}/css/list.css" media="all">
{{ end }}
{{ define "title" }}
{{.Title }} | {{ .Site.Title }}
{{ end }}
{{ define "main" }}
<div class="container pt-5" id="list-page">
<h2 class="text-center pb-2">{{.Title}}</h2>
<div class="row">
{{ range .Paginator.Pages }}
<div class="col-lg-4 col-md-6 my-3">
<div class="card-columns">
<div class="card h-100">
{{ if and (not (.Site.Params.listPages.disableFeaturedImage | default false)) (.Params.image) }}
<div class="card-header">
<a href="{{ .RelPermalink }}">
<img src="{{ .Params.image }}" class="card-img-top" alt="{{ .Title }}">
</a>
</div>
{{ end }}
<div class="card-body bg-transparent p-4 shadow-sm">
<a href="{{ .RelPermalink }}" class="primary-font card-title">
<h5 class="card-title bg-transparent" title="{{ .Title }}">{{ .Title | truncate 25 }}</h5>
</a>
<div class="card-text secondary-font">
<p>{{ .Summary | truncate 300}}</p>
</div>
</div>
<div class="mt-auto post-footer bg-transparent py-3">
<span class="float-start bg-transparent">{{ .Date.Format (.Site.Params.datesFormat.articleList | default "January 2, 2006") }}</span>
<a href="{{ .RelPermalink }}" class="float-end btn btn-outline-info btn-sm">{{ .Site.Params.terms.read | default "Read" }}</a>
</div>
</div>
</div>
</div>
{{ end }}
<div class="row justify-content-center">
<div class="col-auto m-3">
{{template "_internal/pagination.html" . }}
</div>
</div>
</div>
</div>
{{ end }}

View File

@ -0,0 +1,134 @@
{{ define "head" }}
<meta name="description" content="{{ .Params.description }}">
<link rel="stylesheet" href="{{.Site.Params.staticPath}}/css/single.css">
<!-- fontawesome -->
<script defer src="{{.Site.Params.staticPath}}/fontawesome-5/all-5.15.4.js"></script>
{{ end }}
{{ define "title" }}
{{.Title }} | {{ .Site.Title }}
{{ end }}
{{ define "main" }}
<section id="single">
<div class="container">
<div class="row justify-content-center">
<div class="col-sm-12 col-md-12 col-lg-9">
<div class="pr-lg-4">
<div class="title mb-5">
<h1 class="text-center mb-4">{{ .Title }}</h1>
<div class="text-center">
{{ .Params.author }}
<small>|</small>
{{ .Date.Format (.Site.Params.datesFormat.article | default "Jan 2, 2006") }}
{{ if or (.Site.Params.singlePages.readTime.enable | default true) (.Params.enableReadingTime) }}
<span id="readingTime">
{{ .Site.Params.singlePages.readTime.content | default "min read" }}
</span>
{{ end }}
</div>
</div>
{{ if .Params.image }}
<div class="featured-image">
<img class="img-fluid" src="{{ .Params.image }}" alt="{{ .Title }}">
</div>
{{ end }}
<article class="page-content p-2">
{{ .Content | emojify }}
</article>
</div>
</div>
<div class="col-sm-12 col-md-12 col-lg-3">
<div class="sticky-sidebar">
{{ if .Params.toc | default true}}
<aside class="toc">
<h5>
{{ .Site.Params.terms.toc | default "Table Of Contents" }}
</h5>
<div class="toc-content">
{{.TableOfContents}}
</div>
</aside>
{{ end }}
{{ if .Params.tags }}
<aside class="tags">
<h5>{{ .Site.Params.terms.tags | default "Tags" }}</h5>
<ul class="tags-ul list-unstyled list-inline">
{{range .Params.tags}}
<li class="list-inline-item"><a href="{{`tags` | absURL}}/{{.| urlize}}" target="_blank">{{.}}</a></li>
{{end}}
</ul>
</aside>
{{end}}
{{ if .Params.socialShare | default true }}
<aside class="social">
<h5>{{ .Site.Params.terms.social | default "Social" }}</h5>
<div class="social-content">
<ul class="list-inline">
<li class="list-inline-item text-center">
<a target="_blank" href="https://twitter.com/share?text={{ .Title }}&url={{ .Site.Params.hostName }}{{ .Permalink | absURL }}">
<i class="fab fa-twitter"></i>
</a>
</li>
<li class="list-inline-item text-center">
<a target="_blank" href="https://api.whatsapp.com/send?text={{ .Title }}: {{ .Site.Params.hostName }}{{ .Permalink | absURL }}">
<i class="fab fa-whatsapp"></i>
</a>
</li>
<li class="list-inline-item text-center">
<a target="_blank" href='mailto:?subject={{ .Title }}&amp;body={{ .Site.Params.terms.emailText | default "Check out this site" }} {{ .Site.Params.hostName }}{{ .Permalink | absURL }}'>
<i class="fa fa-envelope"></i>
</a>
</li>
</ul>
</div>
</aside>
{{ end }}
</div>
</div>
</div>
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-9 p-4">
{{ template "_internal/disqus.html" . }}
</div>
</div>
</div>
<button class="p-2 px-3" onclick="topFunction()" id="topScroll">
<i class="fas fa-angle-up"></i>
</button>
</section>
{{ if or (.Site.Params.singlePages.scrollprogress.enable | default true) (.Params.enableScrollProgress) }}
<div class="progress">
<div id="scroll-progress-bar" class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<Script src="{{.Site.Params.staticPath}}/js/scrollProgressBar.js"></script>
{{ end }}
<script>
var topScroll = document.getElementById("topScroll");
window.onscroll = function() {scrollFunction()};
function scrollFunction() {
if (document.body.scrollTop > 20 || document.documentElement.scrollTop > 20) {
topScroll.style.display = "block";
} else {
topScroll.style.display = "none";
}
}
function topFunction() {
document.body.scrollTop = 0;
document.documentElement.scrollTop = 0;
}
</script>
{{ if or (.Site.Params.singlePages.readTime.enable | default true) (.Params.enableReadingTime) }}
<script src="{{.Site.Params.staticPath}}/js/readingTime.js"></script>
{{end}}
{{ end }}

22
layouts/index.html Normal file
View File

@ -0,0 +1,22 @@
{{ define "head" }}
<meta name="description" content={{ .Site.Params.description }}>
<link rel="stylesheet" href="{{ .Site.Params.staticPath }}/css/index.css" media="all">
<link rel="stylesheet" href="{{ .Site.Params.staticPath }}/css/projects.css" media="all">
<!-- fontawesome -->
<script defer src="{{ .Site.Params.staticPath }}/fontawesome-5/all-5.15.4.js"></script>
{{ end }}
{{ define "title" }}
{{ .Site.Title }}
{{ end }}
{{ define "main" }}
{{- partial "sections/hero/index.html" . -}}
{{- partial "sections/about.html" . -}}
{{- partial "sections/experience.html" . -}}
{{- partial "sections/education.html" . -}}
{{- partial "sections/projects.html" . -}}
{{- partial "sections/achievements.html" . -}}
{{- partial "sections/contact.html" . -}}
{{ end }}

View File

@ -0,0 +1,98 @@
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<meta http-equiv="Accept-CH" content="DPR, Viewport-Width, Width">
<link rel="icon" href={{ .Site.Params.favicon | default "/fav.png" }} type="image/gif">
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload"
as="style"
href="https://fonts.googleapis.com/css2?family=Alata&family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"
>
<link rel="stylesheet"
href="https://fonts.googleapis.com/css2?family=Alata&family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"
media="print" onload="this.media='all'" />
<noscript>
<link
href="https://fonts.googleapis.com/css2?family=Alata&family=Lora:ital,wght@0,400;0,500;0,600;0,700;1,400;1,500;1,600;1,700&family=Roboto:ital,wght@0,100;0,300;0,400;0,500;0,700;0,900;1,100;1,300;1,400;1,500;1,700;1,900&display=swap"
rel="stylesheet">
</noscript>
<!-- font configuration -->
<link rel="stylesheet" href="{{ .Site.Params.staticPath }}/css/font.css" media="all">
<!-- Internal templates -->
{{ template "_internal/google_analytics.html" . }}
{{ template "_internal/opengraph.html" . }}
{{ template "_internal/twitter_cards.html" . }}
<!-- stylesheets -->
{{- if (or (eq .Site.Params.UseBootstrapCDN true) (eq .Site.Params.UseBootstrapCDN "css")) -}}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
{{- else -}}
<link rel="stylesheet" href="{{ .Site.Params.staticPath }}/bootstrap-5/css/bootstrap.min.css" media="all">
{{- end -}}
<link rel="stylesheet" href="{{ .Site.Params.staticPath }}/css/header.css" media="all">
<link rel="stylesheet" href="{{ .Site.Params.staticPath }}/css/footer.css" media="all">
<!-- theme -->
<link rel="stylesheet" href="{{ .Site.Params.staticPath }}/css/theme.css" media="all">
<!-- Custom Styles -->
{{ if .Site.Params.customCSS }}
<link rel="stylesheet" href="{{ .Site.Params.staticPath }}/style.css">
{{ end }}
<style>
:root {
--text-color: {{ .Site.Params.color.textColor | default "#343a40" }};
--text-secondary-color: {{ .Site.Params.color.secondaryTextColor | default "#6c757d" }};
--background-color: {{ .Site.Params.color.backgroundColor | default "#eaedf0" }};
--secondary-background-color: {{ .Site.Params.color.secondaryBackgroundColor | default "#64ffda1a" }};
--primary-color: {{ .Site.Params.color.primaryColor | default "#007bff" }};
--secondary-color: {{ .Site.Params.color.secondaryColor | default "#f8f9fa" }};
/* dark mode colors */
--text-color-dark: {{ .Site.Params.color.darkmode.textColor | default "#e4e6eb" }};
--text-secondary-color-dark: {{ .Site.Params.color.darkmode.secondaryTextColor | default "#b0b3b8" }};
--background-color-dark: {{ .Site.Params.color.darkmode.backgroundColor | default "#18191a" }};
--secondary-background-color-dark: {{ .Site.Params.color.darkmode.secondaryBackgroundColor | default "#212529" }};
--primary-color-dark: {{ .Site.Params.color.darkmode.primaryColor | default "#ffffff" }};
--secondary-color-dark: {{ .Site.Params.color.darkmode.secondaryColor | default "#212529" }};
}
body {
font-size: {{ .Site.Params.font.fontSize | default "1rem" }};
font-weight: {{ .Site.Params.font.fontWeight | default "400" }};
line-height: {{ .Site.Params.font.lineHeight | default "1.5" }};
text-align: {{ .Site.Params.font.textAlign | default "left" }};
}
html {
background-color: var(--background-color) !important;
}
body::-webkit-scrollbar {
width: .5em;
height: .5em;
background-color: var(--background-color);
}
::-webkit-scrollbar-track {
box-shadow: inset 0 0 6px var(--background-color);
border-radius: 1rem;
}
::-webkit-scrollbar-thumb {
border-radius: 1rem;
background-color: var(--secondary-color);
outline: 1px solid var(--background-color);
}
#search-content::-webkit-scrollbar {
width: .5em;
height: .1em;
background-color: var(--background-color);
}
</style>

View File

@ -0,0 +1,90 @@
{{- if (eq .Site.Params.theme.defaultTheme "light") }}
<script>
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
}
</script>
{{ else if (eq .Site.Params.theme.defaultTheme "dark") }}
{{- /* theme is dark */}}
<script>
if (document.body.className.includes("light")) {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
</script>
{{- else }}
{{- /* theme is auto */}}
<script>
if (localStorage.getItem("pref-theme") === "dark") {
document.body.classList.add('dark');
} else if (localStorage.getItem("pref-theme") === "light") {
document.body.classList.remove('dark')
} else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
document.body.classList.add('dark');
}
</script>
{{- end }}
{{- if (not .Site.Params.theme.disableThemeToggle) }}
<script>
document.getElementById("theme-toggle").addEventListener("click", () => {
if (document.body.className.includes("dark")) {
document.body.classList.remove('dark');
localStorage.setItem("pref-theme", 'light');
} else {
document.body.classList.add('dark');
localStorage.setItem("pref-theme", 'dark');
}
})
var tooltipTriggerList = [].slice.call(document.querySelectorAll('[data-bs-toggle="tooltip"]'))
var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
return new bootstrap.Tooltip(tooltipTriggerEl)
})
</script>
{{- end }}
{{ if not (.Site.Params.navbar.disableSearch | default false) }}
<script src="{{ .Site.Params.staticPath }}/js/search.js"></script>
{{ end }}
{{ if (.Params.mathjax | default false) }}
{{ "<!-- MathJax -->" | safeHTML }}
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/3.2.2/es5/tex-mml-chtml.min.js" integrity="sha384-M5jmNxKC9EVnuqeMwRHvFuYUE8Hhp0TgBruj/GZRkYtiMrCRgH7yvv5KY+Owi7TW" crossorigin="anonymous"></script>
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [['\\(','\\)']],
displayMath: [['$$','$$'], ['\[','\]']],
processEscapes: true,
processEnvironments: true,
skipTags: ['script', 'noscript', 'style', 'textarea', 'pre'],
TeX: { equationNumbers: { autoNumber: "AMS" },
extensions: ["AMSmath.js", "AMSsymbols.js"] }
}
});
</script>
{{ end }}
{{ if (.Site.Params.cloudinary_cloud_name | default false) }}
{{ "<!-- cloudinary -->" | safeHTML }}
<script src="https://unpkg.com/cloudinary-core@2.13.0/cloudinary-core-shrinkwrap.js" integrity="sha384-0bQduxVhZMs6xfvcPH9osdUIw44hjF8EahHuQBdyN6Rryk8tgyFO80Yz5d14F+5d" crossorigin="anonymous"></script>
<script type="text/javascript">
var cl = cloudinary.Cloudinary.new({cloud_name: "{{- .Site.Params.cloudinary_cloud_name }}"});
cl.responsive();
</script>
{{ end }}
{{ if (.Site.Params.contact.formspree.enable | default false) }}
<script src="{{ .Site.Params.staticPath }}/js/contact.js"></script>
{{ end }}

View File

@ -0,0 +1,28 @@
{{ if .Site.Params.about.enable | default false }}
<section id="about" class="py-0 py-sm-5">
<div class="container bg-transparent">
<h3 class="text-center bg-transparent">{{ .Site.Params.about.title }}</h3>
<div class="bg-transparent row justify-content-center px-3 py-5">
{{ if .Site.Params.about.image }}
<div class="col-sm-12 col-md-8 col-lg-4 mb-5 mb-sm-0 mb-md-5 mb-lg-0 d-none d-sm-none d-md-block">
<div class="image d-flex px-5">
<img src="{{ .Site.Params.about.image }}" class="img-thumbnail mx-auto rounded-circle" alt="">
</div>
</div>
{{ end }}
<div class="col-sm-12 col-md-12 col-lg-8 content">
{{ .Site.Params.about.content | markdownify }}
{{ if .Site.Params.about.skills.enable }}
{{ .Site.Params.about.skills.title }}
<ul>
{{ range .Site.Params.about.skills.items }}
<li>{{ . | markdownify }}</li>
{{ end }}
</ul>
{{ end }}
</div>
</div>
</div>
</section>
{{ end }}

View File

@ -0,0 +1,36 @@
{{ if .Site.Params.achievements.enable | default false }}
<section id="achievements" class="py-5">
<div class="container">
<h3 class="text-center">{{ .Site.Params.achievements.title | default "Achievements" }}</h3>
<div class="px-0 px-md-5 px-lg-5">
<div class="row justify-content-center px-3 px-md-5 px-lg-5">
{{ range .Site.Params.achievements.items }}
{{ if .url }}
<div class="col-lg-4 col-md-6 my-3">
<a class="card my-3 h-100 p-3" href="{{ .url }}" title="{{ .title }}" target="_blank">
<div class="card-body bg-transparent">
<h5 class="card-title bg-transparent">{{ .title }}</h5>
<div class="card-text secondary-font">
{{ .content }}
</div>
</div>
</a>
</div>
{{ else }}
<div class="col-lg-4 col-md-6 my-3">
<div class="card my-3 h-100 p-3" title="{{ .title }}">
<div class="card-body bg-transparent">
<h5 class="card-title bg-transparent">{{ .title }}</h5>
<div class="card-text secondary-font">
{{ .content }}
</div>
</div>
</div>
</div>
{{ end }}
{{ end }}
</div>
</div>
</div>
</section>
{{ end }}

View File

@ -0,0 +1,50 @@
{{ if .Site.Params.contact.enable | default false }}
<section id="contact" class="py-5">
<div class="container">
<h3 class="text-center">{{ .Site.Params.contact.title | default "Get in Touch" }}</h3>
<div class="px-0 px-md-5 px-lg-5">
<div class="row justify-content-center px-md-5">
<div class="col-md-8 py-3">
<div class="text-center">
{{ .Site.Params.contact.content | emojify | markdownify }}
</div>
{{ if .Site.Params.contact.formspree.enable | default false }}
<div class="row justify-content-center">
<form id="contact-form" action="https://formspree.io/f/{{ .Site.Params.contact.formspree.formId }}" onsubmit="handleFormspreeSubmit(event)" method="POST" class="col-md-7">
<div class="form-group pt-3">
<input type="email" class="form-control" name="email" required="true" placeholder='{{ .Site.Params.contact.formspree.emailCaption | emojify | default "Enter your email" }}'>
</div>
<div class="form-group pt-3">
<textarea class="form-control" name="message" required="true" placeholder='{{ .Site.Params.contact.formspree.messageCaption | emojify | default "Enter your message" }}' rows="3"></textarea>
</div>
<div class="form-group text-center pt-3">
<button type="submit" class="btn">{{ .Site.Params.contact.btnName | default "Get in Touch" }}</button>
</div>
</form>
</div>
{{ else if .Site.Params.contact.email }}
<div class="text-center pt-3">
<a href="mailto:{{ .Site.Params.contact.email }}" class="btn">
{{ .Site.Params.contact.btnName | default "Get in Touch" }}
</a>
</div>
{{ end }}
</div>
</div>
</div>
</div>
<div id="contact-form-status"></div>
</section>
{{ end }}
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
<symbol id="check-circle-fill" viewBox="0 0 16 16">
<path d="M16 8A8 8 0 1 1 0 8a8 8 0 0 1 16 0zm-3.97-3.03a.75.75 0 0 0-1.08.022L7.477 9.417 5.384 7.323a.75.75 0 0 0-1.06 1.06L6.97 11.03a.75.75 0 0 0 1.079-.02l3.992-4.99a.75.75 0 0 0-.01-1.05z"/>
</symbol>
<symbol id="info-fill" viewBox="0 0 16 16">
<path d="M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16zm.93-9.412-1 4.705c-.07.34.029.533.304.533.194 0 .487-.07.686-.246l-.088.416c-.287.346-.92.598-1.465.598-.703 0-1.002-.422-.808-1.319l.738-3.468c.064-.293.006-.399-.287-.47l-.451-.081.082-.381 2.29-.287zM8 5.5a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/>
</symbol>
<symbol id="exclamation-triangle-fill" viewBox="0 0 16 16">
<path d="M8.982 1.566a1.13 1.13 0 0 0-1.96 0L.165 13.233c-.457.778.091 1.767.98 1.767h13.713c.889 0 1.438-.99.98-1.767L8.982 1.566zM8 5c.535 0 .954.462.9.995l-.35 3.507a.552.552 0 0 1-1.1 0L7.1 5.995A.905.905 0 0 1 8 5zm.002 6a1 1 0 1 1 0 2 1 1 0 0 1 0-2z"/>
</symbol>
</svg>

View File

@ -0,0 +1,66 @@
{{ if .Site.Params.education.enable | default false }}
<section id="education" class="py-5">
<div class="container">
<h3 class="text-center">{{ .Site.Params.education.title | default "Education" }}</h3>
<div class="row justify-content-center py-5">
{{ $indexMenu := .Site.Params.education.index }}
{{ range $index, $element := .Site.Params.education.items }}
<div class="col-12 p-0">
<div class="row row align-items-center justify-content-center m-1 mb-4">
{{ if $indexMenu }}
<div class="col-md-1 text-center me-2 p-0 d-none d-md-block">
<div class="py-2">
<span class="index shadow-lg">
{{ add $index 1 }}
</span>
</div>
</div>
{{ end }}
<div class="col-md-9">
<div class="card">
<div class="card-body">
<div class="float-end">
<small>{{ .date }}</small>
</div>
<h5 class="card-title">{{ .title }}</h5>
{{ if .school.url }}
<a href="{{ .school.url }}" target="_blank">
<h6>
{{ .school.name }}
</h6>
</a>
{{ else }}
{{ .school.name }}
{{ end }}
{{ if .GPA }}
<div class="py-1">
GPA:
<i>
<small>{{ .GPA }}</small>
</i>
</div>
{{ end }}
<div class="py-1 education-content">
{{ .content | markdownify}}
</div>
{{ if .featuredLink.enable }}
<div class="py-1">
<a href="{{ .featuredLink.url }}" class="btn">
{{ .featuredLink.name | default "Featured" }}
</a>
</div>
{{ end }}
</div>
</div>
</div>
</div>
</div>
{{ end }}
</div>
</div>
</section>
{{ end }}

View File

@ -0,0 +1,130 @@
{{ if .Site.Params.experience.enable | default false }}
<section id="experience" class="py-5">
<div class="container">
<h3 class="text-center">{{ .Site.Params.experience.title | default "Experience" }}</h3>
<div class="row justify-content-center">
<div class="col-sm-12 col-md-8 col-lg-8 py-5">
<div class="experience-container px-3 pt-2">
<ul class="nav nav-pills mb-3 bg-transparent primary-font" id="pills-tab" role="tablist">
{{ range $index, $element := .Site.Params.experience.items }}
{{ if (eq $index 0) }}
<li class="nav-item px-1 bg-transparent" role="presentation">
<div
class="nav-link active bg-transparent"
aria-selected="true"
role="tab"
data-bs-toggle="pill"
id='{{ replace .company " " "-" }}-{{ replace .date " " "-" }}-tab'
data-bs-target='#pills-{{ replace .company " " "-" }}-{{ replace .date " " "-" }}'
aria-controls='{{ replace .company " " "-" }}-{{ replace .date " " "-" }}'
>
{{ .company }}
</div>
</li>
{{ else }}
<li class="nav-item px-1 bg-transparent" role="presentation">
<div
class="nav-link bg-transparent"
aria-selected="true"
role="tab"
data-bs-toggle="pill"
id='{{ replace .company " " "-" }}-{{ replace .date " " "-" }}-tab'
data-bs-target='#pills-{{ replace .company " " "-" }}-{{ replace .date " " "-" }}'
aria-controls='{{ replace .company " " "-" }}-{{ replace .date " " "-" }}'
>
{{ .company }}
</div>
</li>
{{ end }}
{{ end }}
</ul>
<div class="tab-content pb-5 pt-2 bg-transparent primary-font" id="pills-tabContent">
{{ range $index, $element := .Site.Params.experience.items }}
{{ if (eq $index 0) }}
<div
class="tab-pane fade show active bg-transparent"
role="tabpanel"
id='pills-{{ replace .company " " "-" }}-{{ replace .date " " "-" }}'
aria-labelledby='pills-{{ replace .company " " "-" }}-{{ replace .date " " "-" }}-tab'
>
<div>
<span class="h4">{{ .job }}</span>
<small>-</small>
<a href="{{ .companyUrl }}" target="_blank">{{ .company }}</a>
<div class="pb-1">
<small>{{ .date }}</small>
{{ if .info.enable | default true }}
<span class="p-2">
<span
style="cursor: pointer;"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title={{ .info.content | default (print "Working as a " .job " at " .company ) }}
>
<i class="fas fa-info-circle fa-xs"></i>
</span>
</span>
{{ end }}
</div>
{{ if .featuredLink.enable | default false }}
<div class="py-2 featuredLink">
<a class="p-2 px-4 btn btn-outline-primary btn-sm" href={{ .featuredLink.url | default "#" }} target="_blank">
{{ .featuredLink.name | default "Featured Link" }}
</a>
</div>
{{ end }}
</div>
{{ .content | markdownify}}
</div>
{{ else }}
<div
class="tab-pane fade bg-transparent"
role="tabpanel"
id='pills-{{ replace .company " " "-" }}-{{ replace .date " " "-" }}'
aria-labelledby='pills-{{ replace .company " " "-" }}-{{ replace .date " " "-" }}-tab'
>
<div>
<span class="h4">{{ .job }}</span>
<small>-</small>
<a href="{{ .companyUrl }}" target="_blank">{{ .company }}</a>
<div class="pb-1">
<small>{{ .date }}</small>
{{ if .info.enable | default true }}
<span class="p-2">
<span
style="cursor: pointer;"
data-bs-toggle="tooltip"
data-bs-placement="top"
data-bs-original-title={{ .info.content | default (print "Worked as a " .job " at " .company ) }}
>
<i class="fas fa-info-circle fa-xs"></i>
</span>
</span>
{{ end }}
</div>
{{ if .featuredLink.enable | default false }}
<div class="py-2 featuredLink">
<a class="p-2 px-4 btn btn-outline-primary btn-sm" href={{ .featuredLink.url | default "#" }} target="_blank">
{{ .featuredLink.name | default "Featured Link" }}
</a>
</div>
{{ end }}
</div>
<div class="pt-2">
{{ .content | markdownify}}
</div>
</div>
{{ end }}
{{ end }}
</div>
</div>
</div>
</div>
</div>
</section>
{{ end }}

View File

@ -0,0 +1,24 @@
<div class="container py-4">
<div class="row justify-content-center">
<div class="col-md-4 text-center">
<div class="pb-2">
<a href="{{ .Site.BaseURL }}" title="{{ .Site.Title }}">
<img alt="Footer logo" src="{{ .Site.Params.navbar.brandLogo | default .Site.Params.favicon }}"
height="40px" width="40px">
</a>
</div>
&copy; {{ now.Format "2006"}} {{ .Site.Params.copyright }} {{ .Site.Params.terms.copyright | default "All Rights Reserved" }}
<div class="text-secondary">
Made with
<span class="text-danger">
&#10084;
</span>
and
<a href="https://gitea.urkob.com/urko/website" target="_blank"
title="Designed and developed by Urko">
Urko Portfolio
</a>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,10 @@
<footer>
<!-- Recent blog posts -->
{{- partial "sections/footer/recentBlogPosts.html" . -}}
<!-- Social Icons -->
{{- partial "sections/footer/socialNetwork.html" . -}}
<!-- Copyright -->
{{- partial "sections/footer/copyright.html" . -}}
</footer>

View File

@ -0,0 +1,37 @@
<div class="container py-3" id="recent-posts">
{{ if .Site.Params.footer.recentPosts.enable | default false }}
{{ $recentPostsPath := .Site.Params.footer.recentPosts.path | default "blogs" }}
{{ $recentPostsCount := .Site.Params.footer.recentPosts.count | default 3 }}
{{ $recentPosts := where .Site.RegularPages "Section" $recentPostsPath | first $recentPostsCount }}
<div class="h3 text-center text-secondary py-3">
{{ .Site.Params.footer.recentPosts.title | default "Recent Posts" }}
</div>
<div class="row justify-content-center">
{{ range $recentPosts }}
<div class="col-lg-4 col-md-6 pt-2">
<div class="card h-100">
{{ if and (not (.Site.Params.footer.recentPosts.disableFeaturedImage | default false)) (.Params.image) }}
<div class="card-header">
<a href="{{ .RelPermalink }}">
<img src="{{ .Params.image }}" class="card-img-top" alt="{{ .Title }}">
</a>
</div>
{{ end }}
<div class="card-body bg-transparent p-3 shadow-sm">
<a href="{{ .RelPermalink }}" class="primary-font card-title">
<h5 class="card-title bg-transparent" title="{{ .Title }}">{{ .Title | truncate 25 }}</h5>
</a>
<div class="card-text secondary-font">
<p>{{ .Summary | truncate 300}}</p>
</div>
</div>
<div class="mt-auto card-footer">
<span class="float-start">{{ .Date.Format (.Site.Params.datesFormat.articleRecent | default "January 2, 2006") }}</span>
<a href="{{ .RelPermalink }}" class="float-end btn btn-outline-info btn-sm">{{ .Site.Params.terms.read | default "Read" }}</a>
</div>
</div>
</div>
{{ end }}
</div>
{{ end }}
</div>

View File

@ -0,0 +1,95 @@
<div class="text-center pt-2">
{{ if .Site.Params.footer.socialNetworks.github }}
<span class="px-1">
<a href="{{ .Site.Params.footer.socialNetworks.github }}" aria-label="github">
<svg xmlns="http://www.w3.org/2000/svg" width="2.7em" height="2.7em" viewBox="0 0 1792 1792">
<path
d="M522 1352q-8 9-20-3-13-11-4-19 8-9 20 3 12 11 4 19zm-42-61q9 12 0 19-8 6-17-7t0-18q9-7 17 6zm-61-60q-5 7-13 2-10-5-7-12 3-5 13-2 10 5 7 12zm31 34q-6 7-16-3-9-11-2-16 6-6 16 3 9 11 2 16zm129 112q-4 12-19 6-17-4-13-15t19-7q16 5 13 16zm63 5q0 11-16 11-17 2-17-11 0-11 16-11 17-2 17 11zm58-10q2 10-14 14t-18-8 14-15q16-2 18 9zm964-956v960q0 119-84.5 203.5t-203.5 84.5h-224q-16 0-24.5-1t-19.5-5-16-14.5-5-27.5v-239q0-97-52-142 57-6 102.5-18t94-39 81-66.5 53-105 20.5-150.5q0-121-79-206 37-91-8-204-28-9-81 11t-92 44l-38 24q-93-26-192-26t-192 26q-16-11-42.5-27t-83.5-38.5-86-13.5q-44 113-7 204-79 85-79 206 0 85 20.5 150t52.5 105 80.5 67 94 39 102.5 18q-40 36-49 103-21 10-45 15t-57 5-65.5-21.5-55.5-62.5q-19-32-48.5-52t-49.5-24l-20-3q-21 0-29 4.5t-5 11.5 9 14 13 12l7 5q22 10 43.5 38t31.5 51l10 23q13 38 44 61.5t67 30 69.5 7 55.5-3.5l23-4q0 38 .5 103t.5 68q0 22-11 33.5t-22 13-33 1.5h-224q-119 0-203.5-84.5t-84.5-203.5v-960q0-119 84.5-203.5t203.5-84.5h960q119 0 203.5 84.5t84.5 203.5z" />
<metadata>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:dc="http://purl.org/dc/elements/1.1/">
<rdf:Description about="https://iconscout.com/legal#licenses"
dc:title="Github, Online, Project, Hosting, Square"
dc:description="Github, Online, Project, Hosting, Square" dc:publisher="Iconscout"
dc:date="2016-12-14" dc:format="image/svg+xml" dc:language="en">
<dc:creator>
<rdf:Bag>
<rdf:li>Font Awesome</rdf:li>
</rdf:Bag>
</dc:creator>
</rdf:Description>
</rdf:RDF>
</metadata>
</svg>
</a>
</span>
{{ end }}
{{ if .Site.Params.footer.socialNetworks.linkedin }}
<span class="px-1">
<a href="{{ .Site.Params.footer.socialNetworks.linkedin }}" aria-label="linkedin">
<svg xmlns="http://www.w3.org/2000/svg" width='2.4em' height='2.4em' fill="#fff" aria-label="LinkedIn"
viewBox="0 0 512 512">
<rect width="512" height="512" fill="#0077b5" rx="15%" />
<circle cx="142" cy="138" r="37" />
<path stroke="#fff" stroke-width="66" d="M244 194v198M142 194v198" />
<path d="M276 282c0-20 13-40 36-40 24 0 33 18 33 45v105h66V279c0-61-32-89-76-89-34 0-51 19-59 32" />
</svg>
</a>
</span>
{{ end }}
{{ if .Site.Params.footer.socialNetworks.twitter }}
<a href="{{ .Site.Params.footer.socialNetworks.twitter }}" aria-label="twitter">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px">
<path fill="#03a9f4"
d="M42,37c0,2.762-2.239,5-5,5H11c-2.762,0-5-2.238-5-5V11c0-2.762,2.238-5,5-5h26c2.761,0,5,2.238,5,5 V37z" />
<path fill="#fff"
d="M36,17.12c-0.882,0.391-1.999,0.758-3,0.88c1.018-0.604,2.633-1.862,3-3 c-0.951,0.559-2.671,1.156-3.793,1.372C31.311,15.422,30.033,15,28.617,15C25.897,15,24,17.305,24,20v2c-4,0-7.9-3.047-10.327-6 c-0.427,0.721-0.667,1.565-0.667,2.457c0,1.819,1.671,3.665,2.994,4.543c-0.807-0.025-2.335-0.641-3-1c0,0.016,0,0.036,0,0.057 c0,2.367,1.661,3.974,3.912,4.422C16.501,26.592,16,27,14.072,27c0.626,1.935,3.773,2.958,5.928,3c-1.686,1.307-4.692,2-7,2 c-0.399,0-0.615,0.022-1-0.023C14.178,33.357,17.22,34,20,34c9.057,0,14-6.918,14-13.37c0-0.212-0.007-0.922-0.018-1.13 C34.95,18.818,35.342,18.104,36,17.12" />
</svg>
</a>
{{ end }}
{{ if .Site.Params.footer.socialNetworks.instagram }}
<a href="{{ .Site.Params.footer.socialNetworks.instagram }}" aria-label="instagram">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px">
<radialGradient id="yOrnnhliCrdS2gy~4tD8ma" cx="19.38" cy="42.035" r="44.899"
gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#fd5" />
<stop offset=".328" stop-color="#ff543f" />
<stop offset=".348" stop-color="#fc5245" />
<stop offset=".504" stop-color="#e64771" />
<stop offset=".643" stop-color="#d53e91" />
<stop offset=".761" stop-color="#cc39a4" />
<stop offset=".841" stop-color="#c837ab" />
</radialGradient>
<path fill="url(#yOrnnhliCrdS2gy~4tD8ma)"
d="M34.017,41.99l-20,0.019c-4.4,0.004-8.003-3.592-8.008-7.992l-0.019-20 c-0.004-4.4,3.592-8.003,7.992-8.008l20-0.019c4.4-0.004,8.003,3.592,8.008,7.992l0.019,20 C42.014,38.383,38.417,41.986,34.017,41.99z" />
<radialGradient id="yOrnnhliCrdS2gy~4tD8mb" cx="11.786" cy="5.54" r="29.813"
gradientTransform="matrix(1 0 0 .6663 0 1.849)" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#4168c9" />
<stop offset=".999" stop-color="#4168c9" stop-opacity="0" />
</radialGradient>
<path fill="url(#yOrnnhliCrdS2gy~4tD8mb)"
d="M34.017,41.99l-20,0.019c-4.4,0.004-8.003-3.592-8.008-7.992l-0.019-20 c-0.004-4.4,3.592-8.003,7.992-8.008l20-0.019c4.4-0.004,8.003,3.592,8.008,7.992l0.019,20 C42.014,38.383,38.417,41.986,34.017,41.99z" />
<path fill="#fff"
d="M24,31c-3.859,0-7-3.14-7-7s3.141-7,7-7s7,3.14,7,7S27.859,31,24,31z M24,19c-2.757,0-5,2.243-5,5 s2.243,5,5,5s5-2.243,5-5S26.757,19,24,19z" />
<circle cx="31.5" cy="16.5" r="1.5" fill="#fff" />
<path fill="#fff"
d="M30,37H18c-3.859,0-7-3.14-7-7V18c0-3.86,3.141-7,7-7h12c3.859,0,7,3.14,7,7v12 C37,33.86,33.859,37,30,37z M18,13c-2.757,0-5,2.243-5,5v12c0,2.757,2.243,5,5,5h12c2.757,0,5-2.243,5-5V18c0-2.757-2.243-5-5-5H18z" />
</svg>
</a>
{{ end }}
{{ if .Site.Params.footer.socialNetworks.facebook }}
<a href="{{ .Site.Params.footer.socialNetworks.facebook }}" aria-label="facebook">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48px" height="48px">
<path fill="#3F51B5"
d="M42,37c0,2.762-2.238,5-5,5H11c-2.761,0-5-2.238-5-5V11c0-2.762,2.239-5,5-5h26c2.762,0,5,2.238,5,5V37z" />
<path fill="#FFF"
d="M34.368,25H31v13h-5V25h-3v-4h3v-2.41c0.002-3.508,1.459-5.59,5.592-5.59H35v4h-2.287C31.104,17,31,17.6,31,18.723V21h4L34.368,25z" />
</svg>
</a>
{{ end }}
</div>

View File

@ -0,0 +1,174 @@
{{- /* theme is auto */}}
<script>
let localStorageValue = localStorage.getItem("pref-theme");
let mediaQuery = window.matchMedia('(prefers-color-scheme: dark)').matches;
switch (localStorageValue) {
case "dark":
document.body.classList.add('dark');
break;
case "light":
document.body.classList.remove('dark');
break;
default:
if (mediaQuery) {
document.body.classList.add('dark');
}
break;
}
</script>
<!-- Navbar -->
<header>
<nav class="pt-3 navbar navbar-expand-lg {{ if .Site.Params.animate }}animate{{ end }}">
<div class="container-fluid mx-xs-2 mx-sm-5 mx-md-5 mx-lg-5">
<!-- navbar brand -->
<a class="navbar-brand primary-font text-wrap" href="{{ .Site.BaseURL | relURL }}">
{{ if and (or (.Site.Params.favicon) (.Site.Params.navbar.brandLogo)) .Site.Params.navbar.showBrandLogo | default true }}
<img src="{{ .Site.Params.navbar.brandLogo | default .Site.Params.favicon }}" width="30" height="30"
class="d-inline-block align-top">
{{ .Site.Params.navbar.brandName | default .Site.Params.title }}
{{ else }}
{{ .Site.Params.navbar.brandName | default .Site.Params.title }}
{{ end }}
</a>
{{ if not (.Site.Params.navbar.disableSearch | default false) }}
<div>
<input id="search" autocomplete="off" class="form-control mr-sm-2 d-none d-md-block" placeholder='{{ .Site.Params.navbar.searchPlaceholder | default "Ctrl + k to Search..."}}'
aria-label="Search" oninput="searchOnChange(event)">
</div>
{{ end }}
<!-- navbar toggler -->
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarContent"
aria-controls="navbarContent" aria-expanded="false" aria-label="Toggle navigation">
<svg aria-hidden="true" height="24" viewBox="0 0 16 16" version="1.1" width="24" data-view-component="true">
<path fill-rule="evenodd" d="M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"></path>
</svg>
</button>
<!-- navbar content -->
<div class="collapse navbar-collapse text-wrap primary-font" id="navbarContent">
<ul class="navbar-nav {{ .Site.Params.navbar.align | default "ms-auto"}} text-center">
{{ if not (.Site.Params.navbar.disableSearch | default false) }}
<li class="nav-item navbar-text d-block d-md-none">
<div class="nav-link">
<input id="search" autocomplete="off" class="form-control mr-sm-2" placeholder='{{ .Site.Params.navbar.searchPlaceholder | default "Ctrl + k to Search..."}}' aria-label="Search" oninput="searchOnChange(event)">
</div>
</li>
{{ end }}
{{ if and (.Site.Params.about.enable | default false) (not (.Site.Params.navbar.menus.disableAbout | default false)) }}
<li class="nav-item navbar-text">
<a class="nav-link" href="{{ .Site.BaseURL | relURL }}#about" aria-label="about">
{{ .Site.Params.about.title | default "About" }}
</a>
</li>
{{ end }}
{{ if and (.Site.Params.experience.enable | default false) (not (.Site.Params.navbar.menus.disableExperience | default false)) }}
<li class="nav-item navbar-text">
<a class="nav-link" href="{{ .Site.BaseURL | relURL }}#experience"
aria-label="experience">
{{ .Site.Params.experience.title | default "Experience" }}
</a>
</li>
{{ end }}
{{ if and (.Site.Params.education.enable | default false) (not (.Site.Params.navbar.menus.disableEducation | default false)) }}
<li class="nav-item navbar-text">
<a class="nav-link" href="{{ .Site.BaseURL | relURL }}#education"
aria-label="education">
{{ .Site.Params.education.title | default "Education" }}
</a>
</li>
{{ end }}
{{ if and (.Site.Params.projects.enable | default false) (not (.Site.Params.navbar.menus.disableProjects | default false)) }}
<li class="nav-item navbar-text">
<a class="nav-link" href="{{ .Site.BaseURL | relURL }}#projects"
aria-label="projects">
{{ .Site.Params.projects.title | default "Projects" }}
</a>
</li>
{{ end }}
{{ if and (.Site.Params.achievements.enable | default false) (not (.Site.Params.navbar.menus.disableAchievements | default false)) }}
<li class="nav-item navbar-text">
<a class="nav-link" href="{{ .Site.BaseURL | relURL }}#achievements"
aria-label="achievements">
{{ .Site.Params.achievements.title | default "Achievements" }}
</a>
</li>
{{ end }}
{{ if and (.Site.Params.contact.enable | default false) (not (.Site.Params.navbar.menus.disableContact | default false)) }}
<li class="nav-item navbar-text">
<a class="nav-link" href="{{ .Site.BaseURL | relURL }}#contact"
aria-label="contact">
{{ .Site.Params.contact.title | default "Contact" }}
</a>
</li>
{{ end }}
<!-- custom menus from the user -->
{{ range .Site.Menus.main }}
{{ if .HasChildren }}
<!-- Dropdown menu -->
<li class="nav-item navbar-text dropdown">
<a class="nav-link dropdown-toggle" href="{{ .URL }}" id="navbarDropdown" role="button"
data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="{{ .Title }}">
{{ .Name }}
</a>
<div class="dropdown-menu shadow-lg rounded" aria-labelledby="navbarDropdown">
{{ range .Children }}
<a class="dropdown-item text-center nav-link" href="{{ .URL }}"
title="{{ .Title }}">
{{ .Name }}
</a>
{{ end }}
</div>
</li>
{{else}}
<!-- Single menu item -->
<li class="nav-item navbar-text">
<a class="nav-link" href="{{.URL}}" title="{{ .Title }}">
{{ .Pre }}
{{ .Name }}
</a>
</li>
{{end}}
{{end}}
{{ if (not .Site.Params.theme.disableThemeToggle | default false) }}
<li class="nav-item navbar-text">
<!-- darkmode mode toggle -->
<div class="text-center">
<button id="theme-toggle">
<svg id="moon" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"></path>
</svg>
<svg id="sun" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="5"></circle>
<line x1="12" y1="1" x2="12" y2="3"></line>
<line x1="12" y1="21" x2="12" y2="23"></line>
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
<line x1="1" y1="12" x2="3" y2="12"></line>
<line x1="21" y1="12" x2="23" y2="12"></line>
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
</svg>
</button>
</div>
</li>
{{ end }}
</ul>
</div>
</div>
</nav>
</header>

View File

@ -0,0 +1,311 @@
{{ if .Site.Params.hero.enable | default false }}
<section id="hero" class="py-5 align-middle">
<div class="container px-3 px-sm-5 px-md-5 px-lg-5 pt-lg-3">
<div class="row">
<div class="col-sm-12 col-md-12 col-lg-8 content {{ if .Site.Params.animate }}animate{{ end }}" id="primary-font">
<span class="subtitle">
{{ .Site.Params.hero.intro }}
</span>
<h2>
{{ .Site.Params.hero.title }}
</h2>
<h3>
{{ .Site.Params.hero.subtitle }}
</h3>
<p class="hero-content">
{{ .Site.Params.hero.content | markdownify }}
</p>
<div class="row">
<div class="col-auto h-100">
{{ if .Site.Params.hero.button.enable }}
<a href="{{ .Site.Params.hero.button.url }}" class="btn" {{ cond .Site.Params.hero.button.download "download" "" }}
{{ if .Site.Params.hero.button.newPage | default true }}
target="_blank"
{{ end }}>
{{ .Site.Params.hero.button.name }}
</a>
{{ end }}
</div>
<div class="col-auto px-0 h-100">
{{- partial "sections/hero/social.html" . -}}
</div>
</div>
</div>
<div class="col-sm-12 col-md-12 col-lg-4">
<div class="row justify-content-center">
<div class="col-sm-12 col-md-9 pt-5 image {{ if .Site.Params.animate }}animate{{ end }} px-5 px-md-5 px-lg-0 text-center">
<img src="{{ .Site.Params.hero.image }}"
class="img-thumbnail mx-auto{{ if .Site.Params.hero.roundImage }} rounded-circle{{ end }}"
alt=""
>
</div>
</div>
</div>
</div>
</div>
{{ if .Site.Params.hero.bottomImage.enable | default true }}
<div class="hero-bottom-svg d-md-block d-lg-block d-none">
<svg xmlns="http://www.w3.org/2000/svg" width="201" height="201" viewBox="0 0 201 201">
<g id="Group_1168" data-name="Group 1168" transform="translate(-384 -1392)">
<rect id="Rectangle_2206" data-name="Rectangle 2206" width="12" height="2" rx="1"
transform="translate(391 1392) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2271" data-name="Rectangle 2271" width="12" height="2" rx="1"
transform="translate(391 1500) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2238" data-name="Rectangle 2238" width="12" height="2" rx="1"
transform="translate(391 1446) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2278" data-name="Rectangle 2278" width="12" height="2" rx="1"
transform="translate(391 1554) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2222" data-name="Rectangle 2222" width="12" height="2" rx="1"
transform="translate(391 1419) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2272" data-name="Rectangle 2272" width="12" height="2" rx="1"
transform="translate(391 1527) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2241" data-name="Rectangle 2241" width="12" height="2" rx="1"
transform="translate(391 1473) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2288" data-name="Rectangle 2288" width="12" height="2" rx="1"
transform="translate(391 1581) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2214" data-name="Rectangle 2214" width="12" height="2" rx="1"
transform="translate(499 1392) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2289" data-name="Rectangle 2289" width="12" height="2" rx="1"
transform="translate(499 1500) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2256" data-name="Rectangle 2256" width="12" height="2" rx="1"
transform="translate(499 1446) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2290" data-name="Rectangle 2290" width="12" height="2" rx="1"
transform="translate(499 1554) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2231" data-name="Rectangle 2231" width="12" height="2" rx="1"
transform="translate(499 1419) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2291" data-name="Rectangle 2291" width="12" height="2" rx="1"
transform="translate(499 1527) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2257" data-name="Rectangle 2257" width="12" height="2" rx="1"
transform="translate(499 1473) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2292" data-name="Rectangle 2292" width="12" height="2" rx="1"
transform="translate(499 1581) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2210" data-name="Rectangle 2210" width="12" height="2" rx="1"
transform="translate(445 1392) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2279" data-name="Rectangle 2279" width="12" height="2" rx="1"
transform="translate(445 1500) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2248" data-name="Rectangle 2248" width="12" height="2" rx="1"
transform="translate(445 1446) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2280" data-name="Rectangle 2280" width="12" height="2" rx="1"
transform="translate(445 1554) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2226" data-name="Rectangle 2226" width="12" height="2" rx="1"
transform="translate(445 1419) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2281" data-name="Rectangle 2281" width="12" height="2" rx="1"
transform="translate(445 1527) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2249" data-name="Rectangle 2249" width="12" height="2" rx="1"
transform="translate(445 1473) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2293" data-name="Rectangle 2293" width="12" height="2" rx="1"
transform="translate(445 1581) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2219" data-name="Rectangle 2219" width="12" height="2" rx="1"
transform="translate(553 1392) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2310" data-name="Rectangle 2310" width="12" height="2" rx="1"
transform="translate(553 1500) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2262" data-name="Rectangle 2262" width="12" height="2" rx="1"
transform="translate(553 1446) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2311" data-name="Rectangle 2311" width="12" height="2" rx="1"
transform="translate(553 1554) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2232" data-name="Rectangle 2232" width="12" height="2" rx="1"
transform="translate(553 1419) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2312" data-name="Rectangle 2312" width="12" height="2" rx="1"
transform="translate(553 1527) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2263" data-name="Rectangle 2263" width="12" height="2" rx="1"
transform="translate(553 1473) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2313" data-name="Rectangle 2313" width="12" height="2" rx="1"
transform="translate(553 1581) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2209" data-name="Rectangle 2209" width="12" height="2" rx="1"
transform="translate(418 1392) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2273" data-name="Rectangle 2273" width="12" height="2" rx="1"
transform="translate(418 1500) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2242" data-name="Rectangle 2242" width="12" height="2" rx="1"
transform="translate(418 1446) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2282" data-name="Rectangle 2282" width="12" height="2" rx="1"
transform="translate(418 1554) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2223" data-name="Rectangle 2223" width="12" height="2" rx="1"
transform="translate(418 1419) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2274" data-name="Rectangle 2274" width="12" height="2" rx="1"
transform="translate(418 1527) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2243" data-name="Rectangle 2243" width="12" height="2" rx="1"
transform="translate(418 1473) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2294" data-name="Rectangle 2294" width="12" height="2" rx="1"
transform="translate(418 1581) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2217" data-name="Rectangle 2217" width="12" height="2" rx="1"
transform="translate(526 1392) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2314" data-name="Rectangle 2314" width="12" height="2" rx="1"
transform="translate(526 1500) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2258" data-name="Rectangle 2258" width="12" height="2" rx="1"
transform="translate(526 1446) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2315" data-name="Rectangle 2315" width="12" height="2" rx="1"
transform="translate(526 1554) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2233" data-name="Rectangle 2233" width="12" height="2" rx="1"
transform="translate(526 1419) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2316" data-name="Rectangle 2316" width="12" height="2" rx="1"
transform="translate(526 1527) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2259" data-name="Rectangle 2259" width="12" height="2" rx="1"
transform="translate(526 1473) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2317" data-name="Rectangle 2317" width="12" height="2" rx="1"
transform="translate(526 1581) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2211" data-name="Rectangle 2211" width="12" height="2" rx="1"
transform="translate(472 1392) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2295" data-name="Rectangle 2295" width="12" height="2" rx="1"
transform="translate(472 1500) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2250" data-name="Rectangle 2250" width="12" height="2" rx="1"
transform="translate(472 1446) rotate(90)" fill="#282f49" />
<rect id="Rectangle_2296" data-name="Rectangle 2296" width="12" height="2" rx="1"
transform="trans