ovlach_frontend/templates/default.html.tera

322 lines
18 KiB
Plaintext
Raw Normal View History

2023-11-26 16:31:20 +00:00
{% extends "base" %}
{% block content %}
<div class="page-content">
<div class="container">
<div class="resume-container">
2023-11-26 20:16:35 +00:00
2023-11-26 16:31:20 +00:00
<div class="shadow-1-strong bg-white my-5" id="intro">
2023-11-26 20:16:35 +00:00
<div class="bg-info text-white">
<div class="cover bg-image"><img src="{{ "images/header-background.jpg" | static(static_host = static_host) }}" />
<div class="mask" style="background-color: rgba(0, 0, 0, 0.7);backdrop-filter: blur(2px);">
<div class="text-center p-5">
2023-11-26 21:20:55 +00:00
<div class="avatar p-1"><img class="img-thumbnail shadow-2-strong" src="{{ cv.person.email | gravatar_link }}" width="160" height="160"/></div>
2023-11-26 20:16:35 +00:00
<div class="header-bio mt-3">
<div data-aos="zoom-in" data-aos-delay="0">
<h2 class="h1"> {{ cv.person.name }} {{ cv.person.surname }} </h2>
2023-12-07 21:57:14 +00:00
<p>{{ cv.person.job_title | lang_entity(lang=lang) }}</p>
2023-11-26 20:16:35 +00:00
</div>
<div class="header-social mb-3 d-print-none" data-aos="zoom-in" data-aos-delay="200">
<nav role="navigation">
<ul class="nav justify-content-center">
2023-11-26 21:20:55 +00:00
{% block navlinks %}
2023-12-03 14:46:05 +00:00
{% if cv.person.social.facebook %}
2023-11-26 21:20:55 +00:00
<li class="nav-item">
2023-12-03 14:46:05 +00:00
<a class="nav-link" href="{{ cv.person.social.facebook }}" title="Facebook"><i class="fab fa-facebook"></i><span class="menu-title sr-only">Facebook</span></a>
2023-11-26 21:20:55 +00:00
</li>
{% endif %}
2023-12-03 14:46:05 +00:00
{% if cv.person.social.github %}
2023-11-26 21:20:55 +00:00
<li class="nav-item">
2023-12-03 14:46:05 +00:00
<a class="nav-link" href="{{ cv.person.social.github }}" title="github"><i class="fab fa-github"></i><span class="menu-title sr-only">Github</span></a>
2023-11-26 21:20:55 +00:00
</li>
{% endif %}
2023-12-03 14:46:05 +00:00
{% if cv.person.social.linkedin %}
2023-11-26 21:20:55 +00:00
<li class="nav-item">
2023-12-03 14:46:05 +00:00
<a class="nav-link" href="{{ cv.person.social.linkedin }}" title="github"><i class="fab fa-linkedin"></i><span class="menu-title sr-only">Linkedin</span></a>
2023-11-26 21:20:55 +00:00
</li>
{% endif %}
2023-12-03 14:46:05 +00:00
{% if cv.person.social.instagram %}
2023-11-26 21:20:55 +00:00
<li class="nav-item">
2023-12-03 14:46:05 +00:00
<a class="nav-link" href="{{ cv.person.social.instagram }}" title="github"><i class="fab fa-instagram"></i><span class="menu-title sr-only">Instagram</span></a>
2023-11-26 21:20:55 +00:00
</li>
2023-12-03 14:46:05 +00:00
{% endif %}
{% if cv.person.social.mastodon %}
2023-11-26 21:20:55 +00:00
<li class="nav-item">
2023-12-03 14:46:05 +00:00
<a class="nav-link" href="{{ cv.person.social.mastodon }}" title="github"><i class="fab fa-mastodon"></i><span class="menu-title sr-only">Mastodon</span></a>
2023-11-26 21:20:55 +00:00
</li>
{% endif %}
{% endblock navlinks %}
2023-11-26 20:16:35 +00:00
</ul>
</nav>
</div>
<div class="d-print-none">
2023-12-03 16:30:27 +00:00
<a class="btn btn-outline-light btn-lg shadow-sm mt-1 me-3" href="{{ pdf_download_url }}" data-aos="fade-right" data-aos-delay="700">{{ "download-cv" | translate(lang=lang) }}</a>
2023-11-26 22:53:31 +00:00
<a class="btn btn-info btn-lg shadow-sm mt-1" href="#contact" data-aos="fade-left" data-aos-delay="700"> {{ "hire-me" | translate(lang=lang) }} </a></div>
2023-11-26 15:36:39 +00:00
</div>
</div>
</div>
</div>
</div>
2023-11-26 16:31:20 +00:00
</div>
<div class="shadow-1-strong bg-white my-5 p-5" id="about">
2023-11-26 20:16:35 +00:00
<div class="about-section">
<div class="row">
<div class="col-md-6">
2023-11-26 22:53:31 +00:00
<h2 class="h2 fw-light mb-4">{{ "about-me" | translate(lang=lang) }} </h2>
2023-11-27 08:30:21 +00:00
<p>{{ cv.person.about | lang_entity(lang=lang) }}</p>
2023-11-26 20:16:35 +00:00
</div>
<div class="col-md-5 offset-lg-1">
<div class="row mt-2">
2023-11-26 22:53:31 +00:00
<h2 class="h2 fw-light mb-4">{{ "bio" | translate(lang=lang) }}</h2>
2023-11-26 20:16:35 +00:00
<div class="col-sm-5">
2023-11-26 22:53:31 +00:00
<div class="pb-2 fw-bolder"><i class="far fa-calendar-alt pe-2 text-muted" style="width:24px;opacity:0.85;"></i> {{ "age" | translate(lang=lang) }}</div>
2023-11-26 20:16:35 +00:00
</div>
<div class="col-sm-7">
<div class="pb-2">{{ cv.person.birthday | calculate_age }}</div>
</div>
2023-11-26 19:32:45 +00:00
<div class="col-sm-5">
2023-11-26 22:53:31 +00:00
<div class="pb-2 fw-bolder"><i class="far fa-envelope pe-2 text-muted" style="width:24px;opacity:0.85;"></i> {{"email" | translate(lang=lang) }}</div>
2023-11-26 19:32:45 +00:00
</div>
<div class="col-sm-7">
2023-11-26 20:16:35 +00:00
<div class="pb-2"> {{ cv.person.email }} </div>
2023-11-26 19:32:45 +00:00
</div>
2023-11-26 20:16:35 +00:00
<div class="col-sm-5">
2023-11-26 22:53:31 +00:00
<div class="pb-2 fw-bolder"><i class="fas fa-phone pe-2 text-muted" style="width:24px;opacity:0.85;"></i> {{ "phone" | translate(lang=lang) }}</div>
2023-11-26 20:16:35 +00:00
</div>
<div class="col-sm-7">
<div class="pb-2">+ {{cv.person.phone | insert_space_every(times=3) }}</div>
</div>
{% if cv.person.address %}
<div class="col-sm-5">
2023-11-26 22:53:31 +00:00
<div class="pb-2 fw-bolder"><i class="fas fa-map-marker-alt pe-2 text-muted" style="width:24px;opacity:0.85;"></i> {{"address" | translate(lang=lang) }}</div>
2023-11-26 20:16:35 +00:00
</div>
<div class="col-sm-7">
<div class="pb-2">{{ cv.person.address }} </div>
</div>
{% endif %}
2023-12-03 14:46:05 +00:00
<div class="col-sm-10">
{% if cv.person.social.facebook %}
<a class="nav-link" href="{{ cv.person.social.facebook }}" title="facebook"><i class="pe-2 fab fa-facebook"></i>&nbsp;{{ cv.person.social.github }}</a>
{% endif %}
{% if cv.person.social.github %}
<a class="nav-link" href="{{ cv.person.social.github }}" title="github"><i class="pe-2 fab fa-github"></i>&nbsp;{{ cv.person.social.github }}</a>
{% endif %}
{% if cv.person.social.linkedin %}
<a class="nav-link" href="{{ cv.person.social.linkedin }}" title="linkedin"><i class="pe-2 fab fa-linkedin"></i>&nbsp;{{ cv.person.social.linkedin }}</a>
{% endif %}
{% if cv.person.social.instagram %}
<a class="nav-link" href="{{ cv.person.social.instagram }}" title="instagram"><i class="pe-2 fab fa-instagram"></i>&nbsp;{{ cv.person.social.instagram }}</a>
{% endif %}
{% if cv.person.social.mastodon %}
<a class="nav-link" href="{{ cv.person.social.mastodon }}" title="mastodon"><i class="pe-2 fab fa-mastodon"></i>&nbsp;{{ cv.person.social.mastodon }}</a>
{% endif %}
</div>
2023-11-26 20:16:35 +00:00
</div>
2023-11-26 15:36:39 +00:00
</div>
</div>
</div>
2023-11-26 16:31:20 +00:00
</div>
<div class="shadow-1-strong bg-white my-5 p-5" id="skills">
2023-11-26 20:16:35 +00:00
<div class="skills-section">
2023-11-26 22:53:31 +00:00
<h2 class="h2 fw-light mb-4">{{ "professional-skills" | translate(lang=lang) }}</h2>
2023-11-26 20:16:35 +00:00
<div class="row">
<div class="col-md-6">
2023-12-03 14:46:05 +00:00
{% for skill in cv.skills | filter(attribute="techtype",value="Language") %}
2023-11-26 20:16:35 +00:00
<div class="mb-3"><span class="fw-bolder">{{ skill.name }}</span>
<div class="progress my-2 rounded" style="height: 20px">
<div class="progress-bar bg-info" role="progressbar" data-aos="zoom-in-right" data-aos-delay="100"
2023-12-03 14:46:05 +00:00
data-aos-anchor=".skills-section" style="width: {% if skill.skill == "Master" %}100%{% endif %}{% if skill.skill == "Expert" %}75%{% endif %}{% if skill.skill == "Intermediate" %}50%{% endif %}{% if skill.skill == "Beginer" %}25%{% endif %};"
2023-11-26 20:16:35 +00:00
aria-valuenow="95" aria-valuemin="0" aria-valuemax="100">
{{ skill.skill}}
</div>
</div>
</div>
{% endfor %}
2023-12-03 16:30:27 +00:00
{% for skill in cv.skills | filter(attribute="techtype",value="Language") | advanced_filter(attribute="skill", include_null="only") %}
<span class="fw-bolder">{{ skill.name }}</span>{% if not loop.last %},{% endif %}
{% endfor %}
2023-11-26 20:16:35 +00:00
</div>
<div class="col-md-6">
2023-12-03 14:46:05 +00:00
{% for skill in cv.skills | filter(attribute="techtype",value="Technology") | advanced_filter(attribute="skill", include_null="none") %}
<div class="mb-3"><span class="fw-bolder">{{ skill.name }}</span>
<div class="progress my-2 rounded" style="height: 20px">
<div class="progress-bar bg-info" role="progressbar" data-aos="zoom-in-right" data-aos-delay="100"
data-aos-anchor=".skills-section" style="width: {% if skill.skill == "Master" %}100%{% endif %}{% if skill.skill == "Expert" %}75%{% endif %}{% if skill.skill == "Intermediate" %}50%{% endif %}{% if skill.skill == "Beginer" %}25%{% endif %};"
aria-valuenow="95" aria-valuemin="0" aria-valuemax="100">
{{ skill.skill}}
</div>
2023-11-26 20:16:35 +00:00
</div>
</div>
2023-12-03 14:46:05 +00:00
{% endfor %}
2023-12-03 16:30:27 +00:00
{% for skill in cv.skills | filter(attribute="techtype",value="Technology") | advanced_filter(attribute="skill", include_null="only") %}
<span class="fw-bolder">{{ skill.name }}</span>{% if not loop.last %},{% endif %}
{% endfor %}
</div>
</div>
<h2 class="h2 fw-light mb-4">{{ "frameworks-and-databases" | translate(lang=lang) }}</h2>
<div class="row">
<div class="col-md-6">
2023-12-03 14:46:05 +00:00
{% for skill in cv.skills | filter(attribute="techtype",value="Framework") | advanced_filter(attribute="skill", include_null="none") %}
<div class="mb-3"><span class="fw-bolder">{{ skill.name }}</span>
<div class="progress my-2 rounded" style="height: 20px">
<div class="progress-bar bg-info" role="progressbar" data-aos="zoom-in-right" data-aos-delay="100"
data-aos-anchor=".skills-section" style="width: {% if skill.skill == "Master" %}100%{% endif %}{% if skill.skill == "Expert" %}75%{% endif %}{% if skill.skill == "Intermediate" %}50%{% endif %}{% if skill.skill == "Beginer" %}25%{% endif %};"
aria-valuenow="95" aria-valuemin="0" aria-valuemax="100">
{{ skill.skill}}
</div>
</div>
</div>
{% endfor %}
2023-12-03 16:30:27 +00:00
{% for skill in cv.skills | filter(attribute="techtype",value="Framework") | advanced_filter(attribute="skill", include_null="only") %}
<span class="fw-bolder">{{ skill.name }}</span>{% if not loop.last %},{% endif %}
{% endfor %}
</div>
<div class="col-md-6">
{% for skill in cv.skills | filter(attribute="techtype",value="Database") | advanced_filter(attribute="skill", include_null="none") %}
<div class="mb-3"><span class="fw-bolder">{{ skill.name }}</span>
<div class="progress my-2 rounded" style="height: 20px">
<div class="progress-bar bg-info" role="progressbar" data-aos="zoom-in-right" data-aos-delay="100"
data-aos-anchor=".skills-section" style="width: {% if skill.skill == "Master" %}100%{% endif %}{% if skill.skill == "Expert" %}75%{% endif %}{% if skill.skill == "Intermediate" %}50%{% endif %}{% if skill.skill == "Beginer" %}25%{% endif %};"
aria-valuenow="95" aria-valuemin="0" aria-valuemax="100">
{{ skill.skill}}
</div>
</div>
</div>
{% endfor %}
{% for skill in cv.skills | filter(attribute="techtype",value="Database") | advanced_filter(attribute="skill", include_null="only") %}
<span class="fw-bolder">{{ skill.name }}</span>{% if not loop.last %},{% endif %}
2023-12-03 14:46:05 +00:00
{% endfor %}
2023-11-26 15:36:39 +00:00
</div>
</div>
2023-12-03 16:30:27 +00:00
<div>
<span class="fw-bolder">{{"tools" | translate(lang=lang)}}:</span> {% for skill in cv.skills | filter(attribute="techtype",value="Tool") | advanced_filter(attribute="skill", include_null="all") %}
{{ skill.name }}{% if skill.skill %} - {{skill.skill}}{% endif %},<!-- TODO: fix-me (empty "," if operating system empty) %-->
{% endfor %}
<span class="fw-bolder">{{"operating-systems" | translate(lang=lang)}}:</span> {% for skill in cv.skills | filter(attribute="techtype",value="OperatingSystem") | advanced_filter(attribute="skill", include_null="all") %}
{{ skill.name }}</span>{% if skill.skill %} - {{skill.skill}}{% endif %}{% if not loop.last %},{% endif %}
{% endfor %}
</div>
<span class="fw-bolder">{{"languages" | translate(lang=lang)}}:</span>
{% for language in cv.languages %}
{{language.lang}} - {{language.level|translate(lang=lang)}}
{% if not loop.last %},{% endif %}
{% endfor %}
2023-11-26 15:36:39 +00:00
</div>
2023-11-26 16:31:20 +00:00
</div>
2023-11-26 20:16:35 +00:00
2023-11-26 16:31:20 +00:00
<div class="shadow-1-strong bg-white my-5 p-5" id="experience">
2023-11-26 20:16:35 +00:00
<div class="work-experience-section">
2023-11-26 22:53:31 +00:00
<h2 class="h2 fw-light mb-4">{{ "work-experience" | translate(lang=lang) }}</h2>
2023-11-26 20:16:35 +00:00
<div class="timeline">
2023-12-03 16:30:27 +00:00
{% for job in cv.jobs | filter(attribute="jobtype", value="Contract") %}
<div class="timeline-card timeline-card-info" data-aos="fade-in" data-aos-delay="{{ loop.index * 10 }}">
<div class="timeline-head px-4 pt-3">
<div class="h5">{{ job.title }} <span class="text-muted h6">at {{ job.company }}</span></div>
</div>
<div class="timeline-body px-4 pb-4">
{% if job.languages and job.technologies %}
{{ job.languages | concat(with=job.technologies) }}
{% elif job.languages %}
{{job.languages}}
{% elif job.technologies %}
{{job.technologies}}
{% endif %}
{% if job.from | format_date(type="job") != job.to | format_date(type="job") %}
<div class="text-muted text-small mb-3">{{ job.from | format_date(type="job") }} - {{ job.to | format_date(type="job") }}</div>
{% else %}
<div class="text-muted text-small mb-3">{{ job.from | format_date(type="job") }}</div>
{% endif %}
<div>{{ job.description | lang_entity(lang=lang) }} </div>
</div>
</div>
{% endfor %}
</div>
<h2 class="h2 fw-light mb-4">{{ "work-freelance" | translate(lang=lang) }}</h2>
<div class="timeline">
{% for job in cv.jobs | filter(attribute="jobtype", value="Freelance") %}
2023-11-26 20:16:35 +00:00
<div class="timeline-card timeline-card-info" data-aos="fade-in" data-aos-delay="{{ loop.index * 100 }}">
<div class="timeline-head px-4 pt-3">
2023-11-26 21:20:55 +00:00
<div class="h5">{{ job.title }} <span class="text-muted h6">at {{ job.company }}</span></div>
2023-11-26 20:16:35 +00:00
</div>
<div class="timeline-body px-4 pb-4">
2023-12-03 16:30:27 +00:00
{% if job.languages and job.technologies %}
{{ job.languages | concat(with=job.technologies) }}
{% elif job.languages %}
{{job.languages}}
{% elif job.technologies %}
{{job.technologies}}
{% endif %}
{% if job.from | format_date(type="job") != job.to | format_date(type="job") %}
2023-11-27 08:30:21 +00:00
<div class="text-muted text-small mb-3">{{ job.from | format_date(type="job") }} - {{ job.to | format_date(type="job") }}</div>
{% else %}
<div class="text-muted text-small mb-3">{{ job.from | format_date(type="job") }}</div>
{% endif %}
<div>{{ job.description | lang_entity(lang=lang) }} </div>
2023-11-26 20:16:35 +00:00
</div>
</div>
{% endfor %}
2023-11-26 16:31:20 +00:00
</div>
2023-11-26 15:36:39 +00:00
</div>
2023-11-26 16:31:20 +00:00
</div>
<div class="shadow-1-strong bg-white my-5 p-5" id="education">
<div class="education-section">
2023-11-26 22:53:31 +00:00
<h2 class="h2 fw-light mb-4">{{ "education" | translate(lang=lang) }}</h2>
2023-11-26 16:31:20 +00:00
<div class="timeline">
2023-11-26 21:20:55 +00:00
{% for education in cv.education %}
2023-11-26 16:31:20 +00:00
<div class="timeline-card timeline-card-success" data-aos="fade-in" data-aos-delay="0">
<div class="timeline-head px-4 pt-3">
2023-11-26 21:20:55 +00:00
{% if education.degree %}
2023-11-27 08:30:21 +00:00
<div class="h5">{{ education.degree | lang_entity(lang=lang) }} <span class="text-muted h6">{{ education.school }}</span> </div>
2023-11-26 21:20:55 +00:00
{% else %}
<div class="h5">{{ education.school }}</div>
{% endif %}
2023-11-26 16:31:20 +00:00
</div>
<div class="timeline-body px-4 pb-4">
2023-12-03 14:46:05 +00:00
2023-11-26 21:20:55 +00:00
{% if education.description %}
2023-11-27 08:30:21 +00:00
<div class="text-muted text-small mb-3">{{ education.from | format_date(type="job") }} - {{ education.to | format_date(type="job") }}</div>
<div>{{ education.description | lang_entity(lang=lang) }}</div>
2023-11-26 21:20:55 +00:00
{% else %}
2023-12-01 23:59:31 +00:00
{{ education.from | format_date(type="job") }}
2023-11-26 21:20:55 +00:00
{% endif %}
2023-11-26 16:31:20 +00:00
</div>
</div>
2023-11-26 21:20:55 +00:00
{% endfor %}
2023-11-26 15:36:39 +00:00
</div>
2023-11-26 16:31:20 +00:00
</div>
</div>
<div class="shadow-1-strong bg-white my-5 p-5" id="contact">
2023-11-26 21:20:55 +00:00
<div class="contant-section">
2023-11-26 22:53:31 +00:00
<h2 class="h2 fw-light text mb-4">{{ "contact" | translate(lang=lang) }}</h2>
2023-11-26 21:20:55 +00:00
<div class="row mb-4">
<div class="col-md-5" data-aos="fade-left" data-aos-delay="200">
<div class="d-print-none">
2023-12-07 21:57:14 +00:00
<!-- <form action="{{ contact_svc }}" method="POST">
2023-11-26 21:20:55 +00:00
<div class="form-outline mb-4">
<input type="text" id="name" class="form-control" required/>
<label class="form-label" for="name">Name</label>
</div>
<div class="form-outline mb-4">
<input type="email" id="email" class="form-control" required/>
<label class="form-label" for="email">Email address</label>
</div>
<div class="form-outline mb-4">
<textarea class="form-control" style="resize: none;" id="message" rows="4" required></textarea>
<label class="form-label" for="message">Message</label>
</div>
<button class="btn btn-info btn-block mb-4" type="submit">Send</button>
2023-12-07 21:57:14 +00:00
</form> -->
2023-11-26 21:20:55 +00:00
</div>
2023-11-26 16:31:20 +00:00
</div>
2023-11-26 21:20:55 +00:00
<div class="col-md-7 d-print-none" data-aos="zoom-in" data-aos-delay="100">
2023-12-09 20:34:54 +00:00
<div class="h6"><i class="fas fa-phone pe-2 text-muted" style="width:24px;opacity:0.85;"></i>+{{ cv.person.phone | insert_space_every(times=3) }}</div>
2023-11-26 21:20:55 +00:00
<div class="h6"><i class="far fa-envelope pe-2 text-muted" style="width:24px;opacity:0.85;"></i>{{ cv.person.email }}</div>
2023-11-26 16:31:20 +00:00
</div>
</div>
</div>
2023-11-26 21:20:55 +00:00
</div>
2023-11-26 16:31:20 +00:00
</div></div>
</div>
2023-12-03 14:46:05 +00:00
{% endblock content %}