diff --git a/_pages/portfolio.md b/_pages/portfolio.md
index 8b6eb7c..f50eb5a 100644
--- a/_pages/portfolio.md
+++ b/_pages/portfolio.md
@@ -1,20 +1,16 @@
---
title: Portfolio - Michal Vanko
work_history:
+ - displayed: true
+ name: Freelancer
+ thumbnail: /images/uploads/m-logo.svg
+ description: Since 2022, I have worked as a self-employed freelancer. I provide
+ consultations and build safe and robust web applications for clients.
- description: >-
- _sudolabs_ is a company focused on building products and software
+ *sudolabs* is a company focused on building products and software
solutions for start-ups & other clients.
- The company has its own product lab focused on product research and product discovery and an engineering lab focused on the development of high-quality software solutions.
-
- At _sudolabs_, I've managed to proceed from senior software engineer to **tech lead and an Engineering manager**.
-
- I am part of one of the most successful projects at _sudolabs_, _The Expert_. I am responsible for the architecture and quality of the proposed feature solutions and for the development processes used.
-
- As an Engineering manager, I try to **represent people in my team** and help them **achieve the best of their potential**.
-
-
- I've started to work for _sudolabs_ in October 2019.
+ I've worked there as a **tech lead and an Engineering manager**.
name: sudolabs s.r.o.
address:
name: Sudo Labs. s.r.o.
@@ -23,6 +19,7 @@ work_history:
city: Košice
country: Slovakia
displayed: true
+ thumbnail: /images/uploads/6708e31603754bd2b4c6ed11_sudo_logo.svg
- description: >-
_**Croptech**_ is a start-up company located in Košice focused on smart
automation of hydroponic systems. Founded in 2014 they've won
@@ -39,14 +36,9 @@ work_history:
zipcode: 040 18
city: Košice
country: Slovakia
- - description: >-
- _localhost.company_ was a small company that had around 40 developers
- while most of them were students. I worked in _localhost_ as a **Senior
- front end developer**. I was focused on delivering a high-quality product
- and to teach and helping other colleagues grow in expertise.
-
-
- I've started to work there in October 2018 and left after a year.
+ - description: I worked in *localhost* as a **Senior front end developer**. I was
+ focused on delivering a high-quality product and teaching and helping
+ other colleagues grow in expertise.
name: localhost.company s.r.o.
displayed: true
address:
@@ -55,15 +47,9 @@ work_history:
zipcode: 040 01
city: Košice
country: Slovakia
- - description: >
- I worked in _Ness_ as a Senior front-end developer. In _Ness_, I've been
- able to work for different clients on various projects.
-
-
- I joined Ness as a Junior front-end developer and I've been able to quickly proceed to Senior level with my engagement.
-
-
- I started to work in March 2013 and left in October 2018.
+ thumbnail: /images/uploads/LH-symbol-with-borders-WHITE-RED-BGb.png
+ - description: I worked in *Ness* as a Senior front-end developer. In *Ness*, I've
+ been able to work for different clients on various projects for 6 years.
name: Ness KE s.r.o.
displayed: true
address:
@@ -72,15 +58,9 @@ work_history:
zipcode: 040 11
city: Košice
country: Slovakia
- - description: >-
- I worked in _eSOLUTIONS_ as a **web developer** part-time while I was
- studying in high school and at University.
-
-
- I was building front-end and back-end services for websites and web applications. Mostly using _PHP_, _MySQL_, _JavaScript_, _HTML_, _CSS_.
-
-
- I started to work in 2007 and stopped in 2012.
+ thumbnail: /images/uploads/nesskosicelogo.svg
+ - description: I worked for *eSOLUTIONS* as a part-time **web developer** while I
+ was in high school and at University.
name: eSOLUTIONS s.r.o.
displayed: true
address:
@@ -89,285 +69,30 @@ work_history:
zipcode: 040 01
city: Košice
country: Slovakia
-projects:
- - description: >-
- _The Expert_ is a digital platform that connects clients to interior
- designers around the world. For experts, it allows **managing** their
- **portfolio and profile** and **schedule** in which they are open for
- **consultations**. Clients are able to view their profiles and book
- consultations.
-
- The project is **expanding with an e-commerce platform** that should enable these experts to recommend and sell high-value goods.
-
-
- We have built this platform from scratch as the only technical team. We also managed to design the product itself in-house.
-
- I am part of the engineering team. I work as an **Engineering manager**. I am also **responsible for the technical architecture** and **development processes** that are being used to deliver new features.
-
-
- _The Expert_ has been **featured in** numerous **worldwide media** such as [_The New York Times_](https://www.nytimes.com/2021/10/19/business/home-design-zoom.html?smid=url-share), [_Wall Street Journal_](https://www.wsj.com/articles/how-you-can-afford-to-hire-your-dream-interior-designer-11619627877), [_Forbes_](https://www.forbes.com/sites/emmareynolds/2021/02/08/introducing-the-expert-a-new-digital-platform-for-interior-design-founded-by-designer-jake-arnold/?sh=33b274934471), [_TechCrunch_](https://techcrunch.com/2021/04/19/gwyneth-paltrow-invests-in-the-expert-a-video-marketplace-for-high-end-interior-designers/?guccounter=2), and many more.
- displayed: true
- name: The Expert
- image:
- source: /images/uploads/the-expert-logo.svg
- image_description: The Expert logo
- - description: >-
- *Panoramic* is a company focused on building a web application for data
- scientists to be able to create and share models and graphs in between
- each other.
-
- I've been working as a **team lead** of a small team that was focused on building a **rich-text collaboration** feature into the web application.
-
- The application was built on top of modern web technologies such as **React, node.js with GraphQL, and TypeScript**. We have successfully built this feature by integrating *[Mattermost](https://mattermost.com/)* into the existing back-end. After that, we have been helping another team by enhancing existing features for importing data sources.
- displayed: true
- name: Panoramic
- - description: >-
- _Manualogic_ is a **single-page application** for product manual creators.
- It contains **custom web editor** and management system of **translatable
- pages, books** and **products.** Its main goal is to enable customers to
- get manuals of their products in digital form.
-
-
- It's built on top of modern web technologies such as **Angular**, **RxJS**, and the content is synchronized through **Websockets**. The back-end part is built on top of **Spring framework**.
-
-
- The team consisted of 3-4 front-end developers, 2-3 back-end developers, and 2 testers.
- displayed: true
- name: Manualogic
- - description: >-
- _**responzIO**_ is smart, easy to use monitoring and automation system.
- The ultimate tool for various applications such as hydroponics, aquariums
- and gardens.
-
-
- I worked on _responzIO_ as architect and full-stack developer. I've designed complete software solution for an already created platform and a series of sensors, sockets and other hardware. Designed solution consist of varios parts: Deployment, Microservices, Stateful core back-end application, progressive web application, auto-update over web...
-
-
- This project is built with modern web technologies including: **CycleJS**, **Reactive Streams**, **D3**, **Jest**, **Webpack**.
- displayed: true
- image:
- image_description: ' responzIO main controller'
- source: /images/uploads/responzio.png
- name: responzIO
- - description: >-
- _Signal Hub_ is an end-to-end **Big Data analytics platform** for large
- enterprises. It accelerates the process of extracting insights and
- intelligence from large volumes of data, including data of different types
- and in different formats.
-
-
- I worked on _Signal Hub_ as a front-end developer. Working on the part of the platform called _Workbench_. _Workbench_ is an **IDE for data analyst**. It allows to create and tweak various models and transformations which are then deployed to other parts of the platform. Users are able to create workflows and see the results of his work with pleasant visuals.
-
-
- This project is built with modern web technologies including: **AngularJS**, **React**, **D3**, **Highcharts**, **Jest**, **Webpack**.
-
-
- I was part of a large distributed team of ~20 developers & ~6 testers which were working on the whole platform.
- displayed: true
- name: Signal Hub Manager
- - description: >-
- _SHIP_ is a web application for **editors** who actively **track trades
- offers and bids** on the commodity market.
-
-
- It was built for a price reporting company _S&P Global Platts_. This company is a provider of energy and commodities information and a source of benchmark price assessments in the _physical energy markets_.
-
-
- _SHIP_ was suited for a very easy and quick workflow for editors.
-
-
- Team consisted of 3 front-end and 3 back-end developers. I was a **leader of the front-end** part of the project.
-
-
- The application was built with **AngularJS and Redux**. The challenging part was working with **Cassandra database**.
- displayed: true
- name: SHIP (Structured heard input process)
- - description: >-
- [www.caplin.com/business/fx-sales.com](http://www.caplin.com/business/fx-sales)
-
-
- The main function of _Caplin FX Sales_ is to allow sales users to trade on behalf of their clients. This needs to be an efficient workflow providing all the relevant information to the sales user.
-
-
- Main technologies used: **Websockets**, Custom Front-end JavaScript MVVM Framework (based on Knockout, BRJS)
-
-
- We worked on this project in a team of 6 developers and 3 testers
- displayed: true
- name: FX Salestrader
- - description: >-
- _Skosy_ is a web application which purpose is to **automate writing of
- integration tests** for web sites.
-
-
- I worked on a _proof of concept_ front-end portion of this application, which was able to create a list of steps for testing.
-
-
- I worked on this project in a team of 2 front-end developers.
- displayed: false
- name: Skosy
- - description: >-
- [www.livesport.tv](http://www.livesport.tv)
-
-
- _Livesport.tv_ is a network of premium online sports channels, featuring all the top sports competitions from around the world.
-
-
- I worked on this project as a front-end developer. I maintained all livesport channels and I worked on new features and enhancements of websites.
-
-
- Project was built on top of **Freemarker** templating language.
-
-
- The team consisted of 2 developers and 1 tester.
- displayed: true
- name: Livesport.tv
- - description: >-
- _beIN Sports_ is a global network of sports channels jointly owned and
- operated by _Qatari Sports Investments_, an affiliate of _Al Jazeera Media
- Networks_
-
-
- I worked on this project as a front-end developer. I maintained official websites of beIN SPORTS France and USA ([www.beinsports.fr](http://www.beinsports.fr), [www.beinsports.tv](http://www.beinsports.tv)).
-
-
- Project was built on top of **Freemarker** templating language.
-
-
- I worked on this project in a team consisting of 7 members.
- displayed: true
- name: beIN SPORTS France & beIN SPORTS USA
- - description: >-
- I worked on this project as a front-end developer. I maintained official
- websites of all Norweigian Football teams - NTF Network
- ([www.toppfotball.no](http://www.toppfotball.no))
-
-
- Project was built on top of **Freemarker** templating language.
-
-
- I worked on this project in a team consisting of 4 members.
- displayed: false
- name: Norsk Toppfotball
- - description: >-
- [www.kosicemarathon.com](http://www.kosicemarathon.com/)
-
-
- _Košice Peace Marathon_ is the oldest marathon in Europe and the third-oldest in the world.
-
-
- I worked on this project as a front-end and an back-end developer. I've built a **custom CMS** for website and for registration of participants. Also created an application for actual event for signing participants.
-
- The application was able to create a start list of all participants and provide various statistics about them.
-
-
- I've built this project alone and then one maintainer joined me.
- displayed: true
- name: Košice Peace Marathon
- - description: >-
- [www.ckvive.sk](http://www.ckvive.sk)
-
-
- _CK Vive_ is a travel agency.
-
-
- I worked on this project as a front-end and an back-end developer. I've created new **custom CMS** for adding destinations and apartments into offering.
-
-
- I've built this project on top of **PHP**, **MySQL** and **JavaScript**.
-
-
- I worked on this project alone.
- displayed: false
- name: CK Vive
-presentations:
- - displayed: true
- link: https://michalvankodev.github.io/unstoppable-growth-of-frontend-frameworks/
- name: Unstoppable growth of front-end frameworks
- description: >
- A simple summary of the web front-end evolution, which will try to
- describe how and why tools improve & why there is still something to
- explore.
- - displayed: true
- name: WebAssembly
- link: https://michalvankodev.github.io/presentation-webassembly/#/
- description: A presentation about what WebAssembly is about and how it might
- affect the future of the world.
- - displayed: true
- name: Spreading the web
- description:
- A presentation about the rising number of use cases for utilizing
- web technologies outside of the web platform such as native mobile
- applications and robotics.
- link: https://michalvankodev.github.io/spreading-the-web/#/
- - displayed: true
- name: Docker
- link: http://michalvankodev.github.io/dockerpresentation/#/
- description:
- An introduction to Docker containerization technology and how it
- differs from virtualization.
+ thumbnail: /images/uploads/esolutions_logo.svg
education:
- description: |-
Faculty of Electrical Engineering and Informatics - Intelligent Systems
_Artificial Intelligence, Neural Networks, Fuzzy Systems_
- Dates: 1\. 9\. 2010 - 20\. 6\. 2013
+ Year of 2013
- Title of qualification awarded: Bachelor (Bc.)
+ Title of qualification: Bachelor (Bc.)
displayed: true
name: Technická univerzita Košice
- - description: >-
+ thumbnail: /images/uploads/tuke_znak_b_cmyk.png
+ - description: |-
_SPŠ Elektrotechnická, Komenského 22, Košice_
-
Electrotechnics, Telecommunication
-
- Dates: 1\. 9\. 2005 - 1\. 7\. 2010
-
-
- Title of qualification awarded: Full secondary school education with leaving examination
+ Year of 2010
+ Full secondary school education with leaving examination
displayed: true
name: Secondary school of Electrical Engineering in Košice
+ thumbnail: /images/uploads/logo_spse_far.png
---
+As a passionate software developer with over half my life spent coding professionally, I've developed a strong affinity for building **highly scalable** and **proficient systems**. With extensive experience in **web application development**, I've honed my skills across various technological stacks, leveraging expertise to drive results. When not crafting complex solutions, you can find me indulging in **game development** - a creative outlet that allows me to bring fun and innovation to the table. As a **tech lead and mentor**, I thrive in environments where **quality software, tests, and collaboration** come together to **create innovative solutions**.
-## Personal Information
-
-I was born in Košice, Slovakia and I still live here. I like to drink tea and cook my own recipes.
-
-### Hobbies
-
-I enjoy playing basketball with my friends. I also like to play other team sports like football and hockey. I also play squash and table tennis. Once I've won a competition in squash at my university. During summer, I love to go water skiing or swimming in a nearby lake.
-
-I am very passionate about music. I've also tried to use some digital workstations to compose my own music.
-
-I enjoy playing board games with my friends and family.
-
-### Interests
-
-I like to explore new technologies and _Open-source_ software.
-I am interested in modern software architecture and _reactive programming_.
-I've attended several **tech conferences and hackathons**, where I can meet interesting people and explore fascinating ideas.
-
-I've given presentations on various topics related to _web development_. You can [take a look at some of them here](#presentations).
-
-I enjoy **teaching and explaining** how technologies and techniques work to my colleagues or students for their better understanding.
-I take advantage of **test-driven development**.
-
-## Skills
-
-Slovak is my mother tongue and I've learned English as my second language. I speak English on an advanced level.
-
-I'm an experienced _Linux Desktop_ user. I prefer to use open-source libraries and technologies while I develop solutions.
-
-I'm in good command of Office Tools and I have experience with image manipulation programs like _GIMP_ and _Inkscape_.
-I can also compose music and sounds on _digital audio workstation_.
-
-I'm passionate about _software architecture_. My goal is not only to be able to design a suitable solution for any kind of product but also to be able to architect the processes behind building a team. From small _presentation sites_, _IOT devices_, to large _enterprise applications running on cloud_.
-
-I practice **public speaking** and I am not afraid to share my knowledge and passion about technology.
-
-I'm an advanced user of source code management tools _git_ and _svn_.
-
-I've got a driving license for category B 🚗.
+In addition to my technical expertise, I bring a wealth of **experience as an Engineering manager**, where I've honed my **leadership skills** and developed a talent for **mentoring teams**. When not coding or leading teams, you can find me exploring the world through **streaming, building an online community** around programming, **making music**, and spending quality time with my family as a **proud father**. I'm also an avid board game enthusiast! As a thought leader, I aim to leverage my diverse experience and skills to **provide exceptional service** to my customers and make a positive impact on the tech industry.
diff --git a/justfile b/justfile
index 249fa94..f22ff69 100644
--- a/justfile
+++ b/justfile
@@ -6,7 +6,7 @@ tailwind:
# svg sprite creation
svgstore:
- npx svgstore -o templates/icons/sprite.svg src/svg/**.svg
+ npx svgstore -o templates/icons/sprite.svg static/svg/input/*.svg
server_dev:
cargo watch -x run
diff --git a/src/pages/contact.rs b/src/pages/contact.rs
index 4837dea..450c9dc 100644
--- a/src/pages/contact.rs
+++ b/src/pages/contact.rs
@@ -21,7 +21,7 @@ pub struct ContactPageTemplate {
pub async fn render_contact() -> Result {
let links = vec![
ContactLink {
- href: "mailto: michalvankosk@gmail.com".to_string(),
+ href: "mailto:michalvankosk@gmail.com".to_string(),
label: "michalvankosk@gmail.com".to_string(),
title: "E-mail address".to_string(),
svg: "mail".to_string(),
@@ -51,7 +51,7 @@ pub async fn render_contact() -> Result {
svg: "instagram".to_string(),
},
ContactLink {
- href: "https://instagram.com/michalvankodev".to_string(),
+ href: "https://github.com/michalvankodev".to_string(),
label: "GitHub".to_string(),
title: "Github profile".to_string(),
svg: "github".to_string(),
diff --git a/src/pages/portfolio.rs b/src/pages/portfolio.rs
index 3c92b2a..753c13d 100644
--- a/src/pages/portfolio.rs
+++ b/src/pages/portfolio.rs
@@ -12,11 +12,29 @@ use crate::{
projects::project_model::ProjectMetadata,
};
+use super::contact::ContactLink;
+
+#[derive(Deserialize, Debug)]
+pub struct Workplace {
+ pub name: String,
+ pub thumbnail: Option,
+ pub description: String,
+ pub displayed: bool,
+}
+
+#[derive(Deserialize, Debug)]
+pub struct Education {
+ pub name: String,
+ pub thumbnail: Option,
+ pub description: String,
+ pub displayed: bool,
+}
+
#[derive(Deserialize, Debug)]
pub struct PortfolioPageModel {
- pub title: String,
- // TODO work_history
- // TODO education
+ // pub title: String,
+ pub work_history: Vec,
+ pub education: Vec,
}
#[derive(Template)]
@@ -26,6 +44,10 @@ pub struct PortfolioTemplate {
pub body: String,
pub project_list: Vec>,
pub header_props: HeaderProps,
+ pub workplace_list: Vec,
+ pub education_list: Vec,
+ pub contact_links: Vec,
+ pub technology_list: Vec,
}
pub async fn render_portfolio() -> Result {
@@ -37,10 +59,81 @@ pub async fn render_portfolio() -> Result {
project_list.retain(|project| project.metadata.displayed);
project_list.reverse();
+ let workplace_list = portfolio
+ .metadata
+ .work_history
+ .into_iter()
+ .filter(|workplace| workplace.displayed)
+ .collect::>();
+
+ let education_list = portfolio
+ .metadata
+ .education
+ .into_iter()
+ .filter(|education| education.displayed)
+ .collect::>();
+
+ let contact_links = vec![
+ ContactLink {
+ href: "mailto:michalvankosk@gmail.com".to_string(),
+ label: "michalvankosk@gmail.com".to_string(),
+ title: "E-mail address".to_string(),
+ svg: "mail".to_string(),
+ },
+ ContactLink {
+ href: "tel:+421-905-372-947".to_string(),
+ label: "+421 905 372 947".to_string(),
+ title: "Phone".to_string(),
+ svg: "phone".to_string(),
+ },
+ ContactLink {
+ href: "https://github.com/michalvankodev".to_string(),
+ label: "GitHub".to_string(),
+ title: "Github profile".to_string(),
+ svg: "github".to_string(),
+ },
+ ContactLink {
+ href: "https://www.linkedin.com/in/michal-vanko-dev/".to_string(),
+ label: "LinkedIn".to_string(),
+ title: "LinkedIn profile".to_string(),
+ svg: "linkedin".to_string(),
+ },
+ ];
+
+ let technology_list = vec![
+ "Rust",
+ "HTMX",
+ "React",
+ "Svelte",
+ "Angular",
+ "PostgreSQL",
+ "Redis",
+ "GraphQL",
+ "TypeScript",
+ "Node.js",
+ "Axum",
+ "Bevy",
+ "Tailwind",
+ "OCaml",
+ "Python",
+ "git",
+ "Linux",
+ "Docker",
+ "Devops",
+ "Selfhosting",
+ ]
+ .into_iter()
+ .map(|str| str.to_owned())
+ .collect();
+
Ok(PortfolioTemplate {
title: "Portfolio".to_owned(),
body: portfolio.body,
header_props: HeaderProps::default(),
project_list,
+ workplace_list,
+ education_list,
+ contact_links,
+ technology_list,
})
}
diff --git a/static/images/uploads/6708e31603754bd2b4c6ed11_sudo_logo.svg b/static/images/uploads/6708e31603754bd2b4c6ed11_sudo_logo.svg
new file mode 100644
index 0000000..5d55072
--- /dev/null
+++ b/static/images/uploads/6708e31603754bd2b4c6ed11_sudo_logo.svg
@@ -0,0 +1,20 @@
+
\ No newline at end of file
diff --git a/static/images/uploads/LH-symbol-with-borders-WHITE-RED-BGb.png b/static/images/uploads/LH-symbol-with-borders-WHITE-RED-BGb.png
new file mode 100644
index 0000000..aa8134e
--- /dev/null
+++ b/static/images/uploads/LH-symbol-with-borders-WHITE-RED-BGb.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:97dfaa6f54a7e53f40776d7cbf517e8871f86d4ab0cd640dff28f6c88ec93f8e
+size 12612
diff --git a/static/images/uploads/TUKE_ZNAK_B_CMYK.png b/static/images/uploads/TUKE_ZNAK_B_CMYK.png
new file mode 100644
index 0000000..4c9b930
--- /dev/null
+++ b/static/images/uploads/TUKE_ZNAK_B_CMYK.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6c7cb518ffceab7458f326bd72364497670da402c5dda6c9086b927456d13cc7
+size 79614
diff --git a/static/images/uploads/esolutions_logo.svg b/static/images/uploads/esolutions_logo.svg
new file mode 100644
index 0000000..dfa18e7
--- /dev/null
+++ b/static/images/uploads/esolutions_logo.svg
@@ -0,0 +1,67 @@
+
diff --git a/static/images/uploads/logo_spse_far.png b/static/images/uploads/logo_spse_far.png
new file mode 100644
index 0000000..ba96bf9
--- /dev/null
+++ b/static/images/uploads/logo_spse_far.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:4b5f0c4ad39a13648d7e46096861ac70f78a74bdb92d551c152222f5515389e0
+size 425274
diff --git a/static/images/uploads/m-logo.svg b/static/images/uploads/m-logo.svg
new file mode 100644
index 0000000..d4e1bbf
--- /dev/null
+++ b/static/images/uploads/m-logo.svg
@@ -0,0 +1,4 @@
+
diff --git a/static/images/uploads/nesskosicelogo.svg b/static/images/uploads/nesskosicelogo.svg
new file mode 100644
index 0000000..be7988b
--- /dev/null
+++ b/static/images/uploads/nesskosicelogo.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/static/images/uploads/tuke_znak_b_cmyk.png b/static/images/uploads/tuke_znak_b_cmyk.png
new file mode 100644
index 0000000..4c9b930
--- /dev/null
+++ b/static/images/uploads/tuke_znak_b_cmyk.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:6c7cb518ffceab7458f326bd72364497670da402c5dda6c9086b927456d13cc7
+size 79614
diff --git a/static/svg/input/phone.svg b/static/svg/input/phone.svg
new file mode 100644
index 0000000..d898bc8
--- /dev/null
+++ b/static/svg/input/phone.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/styles/output.css b/styles/output.css
index 3169c49..b475e4c 100644
--- a/styles/output.css
+++ b/styles/output.css
@@ -107,7 +107,7 @@
}
/*
-! tailwindcss v3.4.13 | MIT License | https://tailwindcss.com
+! tailwindcss v3.4.14 | MIT License | https://tailwindcss.com
*/
/*
@@ -550,7 +550,7 @@ video {
/* Make elements with the HTML hidden attribute stay hidden by default */
-[hidden] {
+[hidden]:where(:not([hidden="until-found"])) {
display: none;
}
@@ -624,6 +624,10 @@ video {
grid-column: span 2 / span 2;
}
+.col-auto {
+ grid-column: auto;
+}
+
.row-span-3 {
grid-row: span 3 / span 3;
}
@@ -652,6 +656,10 @@ video {
margin: 1.5rem;
}
+.m-3 {
+ margin: 0.75rem;
+}
+
.mx-0\.5 {
margin-left: 0.125rem;
margin-right: 0.125rem;
@@ -707,6 +715,11 @@ video {
margin-bottom: 1.25rem;
}
+.my-1 {
+ margin-top: 0.25rem;
+ margin-bottom: 0.25rem;
+}
+
.mb-1 {
margin-bottom: 0.25rem;
}
@@ -739,6 +752,10 @@ video {
margin-top: 0.75rem;
}
+.mt-4 {
+ margin-top: 1rem;
+}
+
.block {
display: block;
}
@@ -823,10 +840,38 @@ video {
max-width: 64rem;
}
+.max-w-20 {
+ max-width: 5rem;
+}
+
+.max-w-60 {
+ max-width: 15rem;
+}
+
+.max-w-\[16rem\] {
+ max-width: 16rem;
+}
+
+.max-w-\[20rem\] {
+ max-width: 20rem;
+}
+
+.max-w-\[24rem\] {
+ max-width: 24rem;
+}
+
+.max-w-\[36rem\] {
+ max-width: 36rem;
+}
+
.flex-1 {
flex: 1 1 0%;
}
+.shrink-0 {
+ flex-shrink: 0;
+}
+
.flex-grow {
flex-grow: 1;
}
@@ -853,6 +898,14 @@ video {
flex-direction: column;
}
+.flex-wrap {
+ flex-wrap: wrap;
+}
+
+.flex-nowrap {
+ flex-wrap: nowrap;
+}
+
.place-content-center {
place-content: center;
}
@@ -889,6 +942,10 @@ video {
gap: 1.5rem;
}
+.gap-4 {
+ gap: 1rem;
+}
+
.self-start {
align-self: flex-start;
}
@@ -936,6 +993,11 @@ video {
border-color: rgb(203 213 225 / var(--tw-border-opacity));
}
+.border-blue-300 {
+ --tw-border-opacity: 1;
+ border-color: rgb(130 195 247 / var(--tw-border-opacity));
+}
+
.bg-blue-100 {
--tw-bg-opacity: 1;
background-color: rgb(225 239 253 / var(--tw-bg-opacity));
@@ -976,6 +1038,10 @@ video {
padding: 1rem;
}
+.p-2 {
+ padding: 0.5rem;
+}
+
.px-3 {
padding-left: 0.75rem;
padding-right: 0.75rem;
@@ -1007,6 +1073,10 @@ video {
text-align: justify;
}
+.font-mono {
+ font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
+}
+
.text-2xl {
font-size: 1.5rem;
line-height: 2rem;
@@ -1080,6 +1150,10 @@ video {
line-height: 1.25rem;
}
+.leading-tight {
+ line-height: 1.25;
+}
+
.text-blue-500 {
--tw-text-opacity: 1;
color: rgb(23 137 224 / var(--tw-text-opacity));
@@ -1115,6 +1189,16 @@ video {
color: rgb(30 41 59 / var(--tw-text-opacity));
}
+.text-blue-800 {
+ --tw-text-opacity: 1;
+ color: rgb(12 73 128 / var(--tw-text-opacity));
+}
+
+.text-pink-900 {
+ --tw-text-opacity: 1;
+ color: rgb(119 24 89 / var(--tw-text-opacity));
+}
+
.no-underline {
text-decoration-line: none;
}
@@ -2005,6 +2089,16 @@ article a:visited {
margin-bottom: 2rem;
}
+ .md\:mx-0 {
+ margin-left: 0px;
+ margin-right: 0px;
+ }
+
+ .md\:mx-6 {
+ margin-left: 1.5rem;
+ margin-right: 1.5rem;
+ }
+
.md\:h-16 {
height: 4rem;
}
@@ -2068,6 +2162,15 @@ article a:visited {
font-size: 1.25rem;
line-height: 1.75rem;
}
+
+ .md\:text-5xl {
+ font-size: 3rem;
+ line-height: 1;
+ }
+
+ .md\:leading-tight {
+ line-height: 1.25;
+ }
}
@media (min-width: 1024px) {
@@ -2146,6 +2249,10 @@ article a:visited {
grid-column: auto;
}
+ .xl\:col-span-2 {
+ grid-column: span 2 / span 2;
+ }
+
.xl\:row-span-2 {
grid-row: span 2 / span 2;
}
@@ -2154,10 +2261,35 @@ article a:visited {
grid-row-start: auto;
}
+ .xl\:my-4 {
+ margin-top: 1rem;
+ margin-bottom: 1rem;
+ }
+
+ .xl\:mb-4 {
+ margin-bottom: 1rem;
+ }
+
+ .xl\:mt-6 {
+ margin-top: 1.5rem;
+ }
+
+ .xl\:mt-10 {
+ margin-top: 2.5rem;
+ }
+
.xl\:block {
display: block;
}
+ .xl\:grid {
+ display: grid;
+ }
+
+ .xl\:grid-flow-row {
+ grid-auto-flow: row;
+ }
+
.xl\:grid-cols-3 {
grid-template-columns: repeat(3, minmax(0, 1fr));
}
@@ -2166,13 +2298,45 @@ article a:visited {
grid-template-columns: 1fr 2fr;
}
+ .xl\:gap-8 {
+ gap: 2rem;
+ }
+
.xl\:gap-x-32 {
-moz-column-gap: 8rem;
column-gap: 8rem;
}
+
+ .xl\:text-6xl {
+ font-size: 3.75rem;
+ line-height: 1;
+ }
+
+ .xl\:text-4xl {
+ font-size: 2.25rem;
+ line-height: 2.5rem;
+ }
+
+ .xl\:text-7xl {
+ font-size: 4.5rem;
+ line-height: 1;
+ }
+
+ .xl\:text-9xl {
+ font-size: 8rem;
+ line-height: 1;
+ }
+
+ .xl\:font-medium {
+ font-weight: 500;
+ }
}
@media print {
+ .print\:inline {
+ display: inline;
+ }
+
.print\:hidden {
display: none;
}
diff --git a/templates/components/education_card.html b/templates/components/education_card.html
new file mode 100644
index 0000000..e04e2c1
--- /dev/null
+++ b/templates/components/education_card.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+ {{workplace.description|parse_markdown|safe}}
+
+
diff --git a/templates/contact.html b/templates/contact.html
index 13a6749..c213cba 100644
--- a/templates/contact.html
+++ b/templates/contact.html
@@ -15,7 +15,7 @@
title="{{link.title}}"
>
{{link.label}}
diff --git a/templates/icons/sprite.svg b/templates/icons/sprite.svg
index ed8d355..f1725b3 100644
--- a/templates/icons/sprite.svg
+++ b/templates/icons/sprite.svg
@@ -14,6 +14,6 @@
-
+
\ No newline at end of file
diff --git a/templates/index.html b/templates/index.html
index 81c084a..711bef8 100644
--- a/templates/index.html
+++ b/templates/index.html
@@ -33,9 +33,9 @@
programmer
. I am developing software for more than half of my life and I love it! Sometimes I stream working on my side projects and building a community of like minded people. Here you can find blogs of my thoughts and journeys, as well as links to my socials where you can see other content.
-
- {% call tc::talent_card("code", "Web development", "Extensive expertise in creating performant, live web applications and websites") %}
- {% call tc::talent_card("gamepad", "Game development", "Extensive expertise in creating performant, live web applications and websites") %}
+
+ {% call tc::talent_card("code", "Web development", "Extensive expertise in creating performant, live web applications and websites.") %}
+ {% call tc::talent_card("gamepad", "Game development", "Creating games with passion. Capable of producing each aspect of a good game with profesional sound and creative mechanics. I consider games as multidisciplinary art.") %}
{% call tc::talent_card("person-chalkboard", "Mentoring & Consulting", "I offer consulting sessions to assist you in developing higher-quality software and share insights from crafting robust, professional web applications. Schedule a session with me and elevate your projects together.") %}
diff --git a/templates/portfolio.html b/templates/portfolio.html
index 8b79be8..5388360 100644
--- a/templates/portfolio.html
+++ b/templates/portfolio.html
@@ -1,3 +1,4 @@
+{%- import "components/talent_card.html" as tc -%}
{% extends "base.html" %}
{% block og_meta %}
@@ -9,10 +10,83 @@
{% block content %}
-
+
+
+ {% call tc::talent_card("code", "Web development", "Extensive expertise in creating performant, live web applications and websites.",) %}
+
+
+ {% call tc::talent_card("gamepad", "Game development", "Creating games with passion. Capable of producing each aspect of a good game with profesional sound and creative mechanics. I consider games as multidisciplinary art.") %}
+
+
+ {% call tc::talent_card("person-chalkboard", "Mentoring & Consulting", "I offer consulting sessions to assist you in developing higher-quality software and share insights from crafting robust, professional web applications. Schedule a session with me and elevate your projects together.") %}
+