13 Commits

Author SHA1 Message Date
Pedro Cabral
575c05e65d added commit message 2026-07-17 15:57:07 +02:00
Pedro Cabral
052bbeed39 auto build only run after save 2026-07-17 13:20:51 +02:00
Pedro Cabral
3df51b7340 fixed URI ro moderncv variant and marked it as main CV variant 2026-07-17 13:14:20 +02:00
Pedro Cabral
141fb5e38c removed self reference 2026-07-17 13:13:25 +02:00
Pedro Cabral
bfe215b8a1 added other CV variants to README.md 2026-07-17 13:12:40 +02:00
Pedro Cabral
4e58b07666 added script to propagate commits across CV branches 2026-07-17 12:52:08 +02:00
Pedro Cabral
66df958c5f deleting auto-generated files, iff pdf was successfully rendered 2026-07-17 12:40:42 +02:00
Pedro Cabral
c38e185227 updated README.md
added info regarding the cls file
2026-07-17 11:51:42 +02:00
Pedro Cabral
388e6acc21 merging root directory's .gitignore 2026-07-17 11:51:33 +02:00
Pedro Cabral
652e27503c moved files to project root and renamed them 2026-07-15 00:02:00 +02:00
Pedro Cabral
8994e53562 removed moderncv type 2026-07-14 23:51:43 +02:00
Pedro Cabral
e7d2fc1190 removed awesome-cv type 2026-07-14 23:51:07 +02:00
Pedro Cabral
f60f5964d9 removed article type 2026-07-14 23:50:23 +02:00
6 changed files with 209 additions and 115 deletions

6
.gitignore vendored
View File

@@ -1,14 +1,14 @@
# Ignore all files # Ignore all files
*.* *.*
# Whitelist # Whitelist
!.gitignore !.gitignore
!*.cls
!*.tex !*.tex
!*.pdf !*.pdf
!*.cls
!*.jpg !*.jpg
!*.md !*.md
!.vscode/ !.vscode
!.vscode/** !.vscode/**
!build/*.* !build/*.*

Binary file not shown.

View File

@@ -1,84 +1,24 @@
\documentclass{custom-cv}
\documentclass[11pt,a4paper,sans]{pedro-moderncv} \usepackage{fontawesome6} % for icons
\moderncvstyle{classic} % Style options: 'casual', 'classic', 'oldstyle', 'banking'
\moderncvcolor{blue} % Color options: 'blue', 'orange', 'green', 'red', 'purple', 'grey', 'black'
\usepackage[scale=0.75]{geometry} % \cvdebugtrue
% Personal data \setcvtitle{Pedro Miguel \textbf{Pessoa Cabral}}
\name{Pedro Miguel}{Pessoa Cabral} \setcvauthor{\faMobile\quad +49-(0)-176-57909188 \quad \faEnvelope\quad \href{mailto:pmpcabral@gmail.com}{pmpcabral@posteo.de}}
\title{Curriculum Vitae} \setcvphoto{me_m_8x8_4x.jpg} % Try commenting this out to see layout adapt
\address{Rittmeisterkoppel 14C}{22359 Hamburg}{Germany}
\phone[mobile]{+49-(0)-17657-909188}
\email{pmpcabral@posteo.de}
\homepage{git.sueo.de/pcabral}
\social[]{} % Optional: GitHub, LinkedIn, etc.
\photo[3.5cm][0pt]{me_m_8x8_4x.jpg}
\hyphenation{interpersonal}
\linespread{1.05}
\begin{document} \begin{document}
\maketitle
\makecvtitle \section{Languages}
\cvitem{Portuguese}{First Language}{}
\begin{minipage}[t]{0.48\textwidth} \cvitem{German}{Fluent}{}
\section{Profile} \cvitem{English}{Fluent}{}
\cvitem{Date of Birth}{January 17\textsuperscript{th}, 1988} \cvitem{Spanish}{Good}{}
\cvitem{Place of Birth}{Setúbal, Portugal} \cvitem{French}{Basic}{}
\cvitem{Nationality}{Portuguese}
\end{minipage}\hfill
\begin{minipage}[t]{0.48\textwidth}
\section{Languages}
\cvitemwithcomment{Portuguese}{First Language}{}
\cvitemwithcomment{German}{Fluent}{}
\cvitemwithcomment{English}{Fluent}{}
\cvitemwithcomment{Spanish}{Good}{}
\cvitemwithcomment{French}{Basic}{}
\end{minipage}\hfill
\section{Experience} \section{Experience}
\cventry{Apr 2025 -- Present}{Professional Sabbatical}{}{}{}{ \cventry{2017 -- Present}{Software Developer}{HR4YOU AG}{PHP, JavaScript, SQL}
Dedicated time to personal development and family life following an intensive period in my career. Used this
opportunity to recharge, reassess long-term goals, and return with renewed focus and motivation for software
engineering.
}
\cventry{Jun 2021 -- Apr 2025}{Software Developer}{For Sale Digital Internet-Agentur GmbH}{Hamburg, Germany}{}{
PHP (\textit{native, Laravel, WordPress}), JavaScript (\textit{Vanilla, jQuery}), MySQL, Google Cloud Platform, TypeScript, React, Jenkins, ShipIt, Docker, Shopify.
}
\cventry{Feb 2017 -- May 2021}{Software Developer}{HR4YOU AG}{Großefehn, Germany}{}{
PHP, JavaScript (\textit{Vanilla, jQuery}), MySQL, CSS, LESS.
}
\cventry{Sep 2014 -- Apr 2016}{Support \& Operations}{SAFIRA/KPMG}{Carnaxide, Portugal}{}{
IBM Business Process Management, Forefront Identity Manager (\textit{FIM}).
}
\cventry{Apr 2013 -- Sep 2014}{Software Developer}{SAFIRA}{Carnaxide, Portugal}{}{
IBM BPM, IBM WebSphere Message Broker, SQL.
}
\section{Education}
\cventry{2013}{Bachelor of Science}{Faculdade de Ciências e Tecnologia, Universidade Nova de Lisboa}{Caparica, Portugal}{}{}
\section{Skills}
\cvitem{Languages}{PHP, JavaScript (\textit{Vanilla}), TypeScript, MySQL, CSS, SCSS, HTML}
\cvitem{Frameworks \& Libraries}{Laravel, React, jQuery, Bootstrap}
\cvitem{Content Management Systems}{WordPress, Shopify}
\cvitem{Development Tools}{PHPStorm, Visual Studio Code, Git, Composer, npm, Vite}
\cvitem{DevOps \& Automation Tools}{Jenkins, ShipIt, Docker, Kubernetes, Google Cloud Platform}
\cvitem{Software Development Practices}{Test-Driven Development (TDD), Object-Oriented Programming (OOP), Mobile-First Design}
\cvitem{Soft Skills}{Effective team player, collaborator, and mentor; strong communication and interpersonal skills; experienced moderator}
\section{About me}
I believe there are no stupid questions --- only opportunities to learn, improve, and build better things together.
\bigskip % bigger gap before Personal section
When I'm not coding, you'll usually find me taking care of and entertaining my two lovely kids.
\medskip % slightly smaller gap within Personal block
I also love singing, acting, playing the didgeridoo, and chopping wood. I regularly take cold showers (or ice baths when temperatures drop below zero) in the morning.
\end{document} \end{document}

View File

@@ -1,10 +1,7 @@
# Curriculum-Vitae # Curriculum-Vitae
This project contains my *curriculum vitae* writen in `TeX` using a slightly This project contains my *curriculum vitae* writen in `TeX` and the class
adapted version of [`moderncv`](https://github.com/moderncv/moderncv), which `custom-cv.cls` has been completley designed by me.
renders a circular profile picture.
> :information_source: This is my official current CV version
## Install TeX ## Install TeX
@@ -20,7 +17,7 @@ If you are using VS Code, I highly recommend to install [LaTeX Workshop](https:/
- [Article](../article/) - [Article](../article/)
- [Awesome-CV](../awesome-cv/) - [Awesome-CV](../awesome-cv/)
- [Pedro-CV](../pedro-cv/) - [ModernCV](../moderncv) (**main CV variant**)
## ##
Developed with ♥ by Pedro Pessoa Cabral Developed with ♥ by Pedro Pessoa Cabral

189
custom-cv.cls Normal file
View File

@@ -0,0 +1,189 @@
% =========================
% custom-cv.cls (2025-08-13)
% =========================
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{custom-cv}[2025/08/13 Custom CV class]
% Base class
\LoadClass[11pt,a4paper]{article}
% Packages
\RequirePackage[a4paper,margin=1in]{geometry}
\RequirePackage{xcolor}
\RequirePackage{graphicx}
\RequirePackage{tikz}
\RequirePackage{titlesec}
\RequirePackage{enumitem}
\RequirePackage{hyperref}
\RequirePackage{draftwatermark}
\RequirePackage{fontspec}
\RequirePackage{pgf} % for watermark autoscale
% ---------------------------
% Fonts (with fallback)
% ---------------------------
\IfFontExistsTF{Helvetica Neue}{
\setmainfont{Helvetica Neue}
}{
\IfFontExistsTF{TeX Gyre Heros}{\setmainfont{TeX Gyre Heros}}{\setmainfont{Latin Modern Roman}}
}
% ---------------------------
% Colors
% ---------------------------
\definecolor{cvblue}{HTML}{1A4E8A}
% Debug colors & borders
\definecolor{debugtext}{HTML}{E0F7FA}
\definecolor{debugtextborder}{HTML}{0D47A1}
\definecolor{debugphoto}{HTML}{FFEBEE}
\definecolor{debugphotoborder}{HTML}{B71C1C}
% ---------------------------
% Debug flag & helpers
% ---------------------------
\newif\ifcvdebug
\cvdebugfalse
\newcommand{\debugboxtext}[1]{%
\ifcvdebug
\fcolorbox{debugtextborder}{debugtext}{\parbox{\dimexpr\linewidth-2\fboxsep-2\fboxrule}{#1}}%
\else
#1%
\fi
}
\newcommand{\debugboxphoto}[1]{%
\ifcvdebug
\fcolorbox{debugphotoborder}{debugphoto}{\parbox{\dimexpr\linewidth-2\fboxsep-2\fboxrule}{#1}}%
\else
#1%
\fi
}
% ---------------------------
% CV storage + setters
% ---------------------------
\newcommand{\cvtitle}{} % main title (name)
\newcommand{\cvauthor}{} % contact line
\newcommand{\cvphoto}{} % photo path
\newcommand{\setcvtitle}[1]{\renewcommand{\cvtitle}{#1}}
\newcommand{\setcvauthor}[1]{\renewcommand{\cvauthor}{#1}}
\newcommand{\setcvphoto}[1]{\renewcommand{\cvphoto}{#1}}
% ---------------------------
% Robust "is empty?" test (trim spaces)
% ---------------------------
\makeatletter
\newcommand{\IfNotEmpty}[3]{%
\edef\cv@tmp{\zap@space\detokenize{#1} \@empty}%
\ifx\cv@tmp\@empty
#3%
\else
#2%
\fi
}
\makeatother
% ---------------------------
% Hyperlinks & lists
% ---------------------------
\hypersetup{
colorlinks=true,
urlcolor=cvblue,
linkcolor=cvblue
}
\setlength{\parskip}{0.4em}
\setlist[itemize]{noitemsep,topsep=0pt}
% ---------------------------
% Section formatting
% ---------------------------
\titleformat{\section}
{\large\bfseries\color{cvblue}}
{}{0em}
{\debugboxtext}
[\titlerule]
\titleformat{\subsection}
{\normalsize\bfseries\color{cvblue}}
{}{0em}
{}
\setcounter{secnumdepth}{0}
% ---------------------------
% CV content commands
% ---------------------------
\newcommand{\cvitem}[2]{%
\debugboxtext{%
\noindent\textbf{#1:} #2
}\par
}
% \cventry{Title}{Date/Place}{Subtitle/Role}{Details}
\newcommand{\cventry}[4]{%
\debugboxtext{%
\noindent\textbf{#2} \hfill {\small #1}\\
\IfNotEmpty{#3}{\textit{#3}\par}{}%
#4%
}\par\vspace{0.8em}
}
% ---------------------------
% maketitle with adaptive layout
% ---------------------------
\renewcommand{\maketitle}{%
\IfNotEmpty{\cvtitle}{%
\begin{center}
\IfNotEmpty{\cvphoto}{%
% Text + Photo
\begin{minipage}[c]{0.75\textwidth}
\debugboxtext{%
{\LARGE \textbf{\cvtitle}}%
\IfNotEmpty{\cvauthor}{\\[0.5em]\cvauthor}{}%
}
\end{minipage}%
\hfill
\begin{minipage}[c]{0.23\textwidth}
\debugboxphoto{%
\begin{tikzpicture}
\clip (0,0) circle (1.75cm);
\node at (0,0) {\includegraphics[height=3.5cm]{\cvphoto}};
\end{tikzpicture}
}
\end{minipage}
}{%
% No photo: full-width text
\begin{minipage}[c]{\textwidth}
\debugboxtext{%
{\LARGE \textbf{\cvtitle}}%
\IfNotEmpty{\cvauthor}{\\[0.5em]\cvauthor}{}%
}
\end{minipage}
}%
\end{center}
\vspace{1em}
}{}%
}
% ---------------------------
% Watermark (auto-scale)
% ---------------------------
\newlength{\cvWatermarkWidth}
\newcommand{\cvsetwatermark}{%
\ifcvdebug
\SetWatermarkText{DEBUG MODE}%
{%
\fontsize{5cm}{5cm}\selectfont
\settowidth{\cvWatermarkWidth}{DEBUG MODE}%
}%
\pgfmathsetmacro{\cvScale}{min(\paperwidth,\paperheight)/\cvWatermarkWidth*0.9}%
\SetWatermarkScale{\cvScale}%
\SetWatermarkColor[gray]{0.85}%
\else
\SetWatermarkText{}%
\fi
}
\AtBeginDocument{\cvsetwatermark}

View File

@@ -1,32 +0,0 @@
\NeedsTeXFormat{LaTeX2e}
\ProvidesClass{pedro-moderncv}[2026/02/24 Custom moderncv wrapper]
\LoadClassWithOptions{moderncv}
\RequirePackage{tikz}
\RequirePackage{etoolbox}
\AtBeginDocument{%
\makeatletter
% Safe scaled length
\newlength{\@photowidthscaled}
\patchcmd{\makecvhead}
{\includegraphics[width=\@photowidth]{\@photo}}
{%
% Copy original width
\setlength{\@photowidthscaled}{\@photowidth}
% Scale safely (no calc/dimexpr/TikZ parser issues)
\setlength{\@photowidthscaled}{1.2\@photowidthscaled}
\begin{tikzpicture}
\clip (0, 0) circle (\@photowidth/2);
\node at (-0.2cm, -0.3cm) {
\includegraphics[width=\@photowidthscaled]{\@photo}
};
\end{tikzpicture}
}
{}{}
\makeatother
}