Remove tailwind css from stylesheet and updated CV general to conform to ATS standards
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 25s
All checks were successful
Deploy with Docker Compose / deploy (push) Successful in 25s
This commit is contained in:
@@ -106,81 +106,105 @@ body {
|
||||
}
|
||||
|
||||
input {
|
||||
@apply text-secondary border-primary border;
|
||||
color: var(--secondary);
|
||||
border-color: var(--primary);
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
small {
|
||||
@apply text-tertiary;
|
||||
color: var(--tertiary);
|
||||
}
|
||||
|
||||
code {
|
||||
@apply text-tertiary;
|
||||
color: var(--tertiary);
|
||||
}
|
||||
|
||||
ul {
|
||||
@apply text-tertiary;
|
||||
color: var(--tertiary);
|
||||
}
|
||||
|
||||
li {
|
||||
@apply text-tertiary;
|
||||
color: var(--tertiary);
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4 {
|
||||
@apply m-1 font-heading text-primary;
|
||||
margin: 0.25rem;
|
||||
font-family: var(--font_heading);
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
h3,
|
||||
h4 {
|
||||
@apply text-lg;
|
||||
font-size: 1.125rem;
|
||||
line-height: 1.75rem;
|
||||
}
|
||||
|
||||
h1 {
|
||||
@apply text-2xl;
|
||||
font-size: 1.5rem;
|
||||
line-height: 2rem;
|
||||
}
|
||||
|
||||
h2 {
|
||||
@apply text-xl;
|
||||
font-size: 1.25rem;
|
||||
line-height: 1.75rem;
|
||||
}
|
||||
|
||||
p {
|
||||
@apply text-secondary;
|
||||
color: var(--secondary);
|
||||
}
|
||||
|
||||
a {
|
||||
@apply text-primary bg-link text-center font-heading tracking-wide;
|
||||
color: var(--primary);
|
||||
background-color: var(--link);
|
||||
text-align: center;
|
||||
font-family: var(--font_heading);
|
||||
letter-spacing: 0.025em;
|
||||
}
|
||||
|
||||
input,
|
||||
textarea {
|
||||
@apply text-primary border p-2 w-full;
|
||||
color: var(--primary);
|
||||
border-width: 1px;
|
||||
padding: 0.5rem;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
input::placeholder,
|
||||
textarea::placeholder {
|
||||
@apply text-secondary opacity-50;
|
||||
color: var(--secondary);
|
||||
opacity: 0.5;
|
||||
}
|
||||
|
||||
table {
|
||||
@apply border-primary border text-primary;
|
||||
border-color: var(--primary);
|
||||
border-width: 1px;
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
td {
|
||||
@apply gap-1;
|
||||
gap: 0.25rem;
|
||||
}
|
||||
|
||||
tr {
|
||||
@apply border-primary border-b text-primary;
|
||||
border-color: var(--primary);
|
||||
border-bottom-width: 1px;
|
||||
color: var(--primary);
|
||||
}
|
||||
|
||||
th {
|
||||
@apply pr-3 pl-3 border-r border-dotted border-tertiary;
|
||||
padding-right: 0.75rem;
|
||||
padding-left: 0.75rem;
|
||||
border-right-width: 1px;
|
||||
border-style: dotted;
|
||||
border-color: var(--tertiary);
|
||||
}
|
||||
|
||||
td {
|
||||
@apply pr-3 pl-3;
|
||||
padding-right: 0.75rem;
|
||||
padding-left: 0.75rem;
|
||||
}
|
||||
|
||||
/* END OF ELEMENTS */
|
||||
@@ -194,47 +218,51 @@ td {
|
||||
|
||||
/* BORDERS */
|
||||
.bdr-1 {
|
||||
@apply border-30;
|
||||
border-width: 30px;
|
||||
border-image: url("/img/borders/border1.gif") 30 round;
|
||||
}
|
||||
|
||||
.bdr-1-inv {
|
||||
@apply border-30;
|
||||
border-width: 30px;
|
||||
border-image: url("/img/borders/border1inv.gif") 30 round;
|
||||
}
|
||||
|
||||
.bdr-2 {
|
||||
@apply border-5;
|
||||
border-width: 5px;
|
||||
border-image: url("/img/borders/border4.gif") 7 round;
|
||||
}
|
||||
|
||||
.bdr-cv {
|
||||
@apply border-30;
|
||||
border-width: 30px;
|
||||
border-image: url("/img/borders/bordercv.png") 30 round;
|
||||
}
|
||||
|
||||
/* A5 Page */
|
||||
.a5page-landscape {
|
||||
@apply m-0 box-content;
|
||||
margin: 0;
|
||||
box-sizing: content-box;
|
||||
height: 148mm;
|
||||
width: 210mm;
|
||||
}
|
||||
|
||||
.a5page-portrait {
|
||||
@apply m-0 box-content;
|
||||
margin: 0;
|
||||
box-sizing: content-box;
|
||||
width: 148mm;
|
||||
height: 210mm;
|
||||
}
|
||||
|
||||
/* A4 Page */
|
||||
.a4page-portrait {
|
||||
@apply m-0 box-content;
|
||||
margin: 0;
|
||||
box-sizing: content-box;
|
||||
width: 210mm;
|
||||
height: 297mm;
|
||||
}
|
||||
|
||||
.a4page-landscape {
|
||||
@apply m-0 box-content;
|
||||
margin: 0;
|
||||
box-sizing: content-box;
|
||||
height: 210mm;
|
||||
width: 297mm;
|
||||
}
|
||||
@@ -279,23 +307,31 @@ td {
|
||||
}
|
||||
|
||||
.tl {
|
||||
@apply absolute top-0 left-0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.tr {
|
||||
@apply absolute top-0 right-0;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.bl {
|
||||
@apply absolute bottom-0 left-0;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.br {
|
||||
@apply absolute bottom-0 right-0;
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.background {
|
||||
@apply fixed;
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
.halftone {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div class="w-full border-b border-primary">
|
||||
<h1 class="pl-2 m-0">
|
||||
<div class="w-full border-b border-primary pb-2 mb-4">
|
||||
<h1 class="p-0 m-0">
|
||||
<slot />
|
||||
</h1>
|
||||
</div>
|
||||
|
||||
@@ -7,13 +7,7 @@ import CVTemp from "./CVTemp.vue";
|
||||
|
||||
const CVHospitality = defineAsyncComponent(() => import("./CVHospitality.vue"));
|
||||
|
||||
const templates = [
|
||||
{ label: "General", component: CVGeneral },
|
||||
{ label: "Backend", component: CVBackend },
|
||||
{ label: "Frontend", component: CVFrontend },
|
||||
{ label: "Hospitality", component: CVHospitality },
|
||||
{ label: "Temp", component: CVTemp },
|
||||
];
|
||||
const templates = [{ label: "General", component: CVGeneral }];
|
||||
|
||||
const selected = ref(0);
|
||||
const currentComponent = shallowRef(templates[0].component);
|
||||
|
||||
@@ -8,29 +8,32 @@ import Project from "./Project.vue";
|
||||
<div class="a4page justify-between">
|
||||
<section>
|
||||
<div class="flex flex-col sm:flex-row sm:justify-between">
|
||||
<h1 class="name">Adam French</h1>
|
||||
<div class="contact-details sm:text-right">
|
||||
<h1 class="flex-1 name">Adam French</h1>
|
||||
<div class="contact-details">
|
||||
<p>London, United Kingdom</p>
|
||||
<p>+447563266931</p>
|
||||
<p>adam.a.french@outlook.com</p>
|
||||
<h4>
|
||||
<p>
|
||||
<a href="https://www.adam-french.co.uk">
|
||||
www.adam-french.co.uk
|
||||
</a>
|
||||
</h4>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Profile</h2>
|
||||
<p>
|
||||
First Class Honours graduate in Computer Science with
|
||||
Mathematics from the University of Leeds (81.1%), with a
|
||||
year abroad at the University of Waterloo. Proficient in
|
||||
full-stack development, systems programming, and CI/CD
|
||||
automation. Eager to contribute to a collaborative
|
||||
engineering team, apply strong academic foundations to
|
||||
real-world problems, and grow through hands-on experience.
|
||||
<p contenteditable="true">
|
||||
Full Stack Developer with a First Class Honours degree in
|
||||
Computer Science with Mathematics from the University of
|
||||
Leeds (81.1%) and a year abroad at the University of
|
||||
Waterloo. Proficient in full-stack development, systems
|
||||
programming, and CI/CD automation. Strong problem-solving
|
||||
and organisational skills. Eager to contribute to a
|
||||
collaborative engineering team, apply strong academic
|
||||
foundations to real-world problems, and grow through
|
||||
hands-on experience.
|
||||
</p>
|
||||
</section>
|
||||
|
||||
@@ -44,7 +47,7 @@ import Project from "./Project.vue";
|
||||
>
|
||||
</div>
|
||||
<div>
|
||||
<strong>Frontend</strong><br /><small
|
||||
<strong>Frontend / Web Design</strong><br /><small
|
||||
>Vue, React / Redux, Svelte, Tailwind CSS,
|
||||
WebAssembly</small
|
||||
>
|
||||
@@ -73,12 +76,12 @@ import Project from "./Project.vue";
|
||||
</template>
|
||||
<template v-slot:top>
|
||||
<small>
|
||||
Nginx, Vue, Postgres, Docker, Go, Python, Rust →
|
||||
Nginx, Vue, Postgres, Docker, Go, Python, Rust,
|
||||
Wasm, Git Actions, JWT Auth
|
||||
</small>
|
||||
<small>2025</small>
|
||||
</template>
|
||||
<p>
|
||||
<p contenteditable="true">
|
||||
Self-hosted personal website with a fully automated
|
||||
CI/CD pipeline. Iterated across diverse tech stacks
|
||||
including Svelte, React/Redux, SQLite, Rust Actix, and
|
||||
@@ -99,7 +102,7 @@ import Project from "./Project.vue";
|
||||
<small>Rust</small>
|
||||
<small>2026</small>
|
||||
</template>
|
||||
<p>
|
||||
<p contenteditable="true">
|
||||
CLI tool for building and navigating interactive code
|
||||
tutorials, with version-traversal semantics inspired by
|
||||
Git.
|
||||
@@ -119,7 +122,7 @@ import Project from "./Project.vue";
|
||||
<small>Rust, Linear Algebra, Multithreading</small>
|
||||
<small>2023</small>
|
||||
</template>
|
||||
<p>
|
||||
<p contenteditable="true">
|
||||
Parallelised recursive ray tracer for realistic 3D
|
||||
rendering. Emphasised algorithmic efficiency and
|
||||
low-level memory management in Rust.
|
||||
@@ -140,7 +143,7 @@ import Project from "./Project.vue";
|
||||
<small>Wolfram Mathematica</small>
|
||||
<small>2024</small>
|
||||
</template>
|
||||
<p>
|
||||
<p contenteditable="true">
|
||||
Research project on Mobile Automata with data
|
||||
visualisation and academic presentation. Delivered
|
||||
within a tight deadline in collaboration with academic
|
||||
@@ -149,22 +152,20 @@ import Project from "./Project.vue";
|
||||
</Project>
|
||||
</section>
|
||||
|
||||
<section>
|
||||
<h2>Education</h2>
|
||||
<div class="w-full h-fit flex flex-col sm:flex-row gap-5">
|
||||
<div class="flex-1 sm:border-r border-dotted sm:pr-3">
|
||||
<h3>
|
||||
<div class="w-full flex flex-col sm:flex-row gap-5">
|
||||
<section class="flex-1">
|
||||
<h2>
|
||||
<a
|
||||
href="https://www.adam-french.co.uk/pdf/transcript.pdf"
|
||||
>
|
||||
University of Leeds
|
||||
</a>
|
||||
</h3>
|
||||
</h2>
|
||||
<div
|
||||
class="flex-row flex place-content-between m-auto place-items-center"
|
||||
>
|
||||
<small>First Class Honours (81.1%)</small>
|
||||
<small>2021–2025</small>
|
||||
<small>Sep 2021 – Jun 2025</small>
|
||||
</div>
|
||||
<small>BSc Computer Science with Mathematics </small>
|
||||
<ul class="list-disc list-inside">
|
||||
@@ -173,31 +174,28 @@ import Project from "./Project.vue";
|
||||
<li>Formal Languages & Finite Automata</li>
|
||||
<li>Graph Algorithms & Complexity Theory</li>
|
||||
<li>
|
||||
Machine Learning · Databases · Computer
|
||||
Processors
|
||||
Machine Learning, Databases, Computer Processors
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="flex-1 sm:pl-3">
|
||||
<h3>University of Waterloo</h3>
|
||||
</section>
|
||||
<section class="flex-1">
|
||||
<h2>University of Waterloo</h2>
|
||||
<div
|
||||
class="flex-row flex place-content-between m-auto place-items-center"
|
||||
>
|
||||
<small>Year abroad</small>
|
||||
<small>2023–2024</small>
|
||||
<small>Sep 2023 – Apr 2024</small>
|
||||
</div>
|
||||
<ul class="list-disc list-inside">
|
||||
<li>Applied Cryptography</li>
|
||||
<li>Introduction to Computer Graphics</li>
|
||||
<li>
|
||||
Introduction to Rings and Fields with
|
||||
Applications
|
||||
Introduction to Rings and Fields with Applications
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="no-print w-full h-20"></div>
|
||||
|
||||
@@ -206,31 +204,43 @@ import Project from "./Project.vue";
|
||||
<h2>Experience</h2>
|
||||
<Project>
|
||||
<template #left>
|
||||
<p>Hospitality</p>
|
||||
<h4>Hospitality</h4>
|
||||
</template>
|
||||
<template #top>
|
||||
<small>Cashier, Bartender, Waiter</small>
|
||||
<small>2018–2023</small>
|
||||
<small>Jan 2018 – Dec 2023</small>
|
||||
</template>
|
||||
<p>
|
||||
Worked at <em>Belgrave Music Hall</em>,
|
||||
<em>The Crown and Anchor</em>, and
|
||||
<em>BFI Riverfront Kitchen</em>. Developed
|
||||
<p contenteditable="true">
|
||||
Worked at <strong>Belgrave Music Hall</strong>,
|
||||
<strong>The Crown and Anchor</strong>, and
|
||||
<strong>BFI Riverfront Kitchen</strong>. Developed
|
||||
communication, composure under pressure, and reliability
|
||||
in customer-facing roles.
|
||||
</p>
|
||||
</Project>
|
||||
</section>
|
||||
<section>
|
||||
<h2>Interests</h2>
|
||||
<div class="w-full flex flex-col sm:flex-row gap-5">
|
||||
<section class="flex-1">
|
||||
<h2>Soft Skills</h2>
|
||||
<ul class="list-disc list-inside">
|
||||
<li>Leetcode — daily competitive problem solving</li>
|
||||
<li>Learning Mandarin</li>
|
||||
<li>Rhythm Games</li>
|
||||
<li>Climbing · Gym</li>
|
||||
<li>Board games · Meetup.com</li>
|
||||
<li>Communication & collaboration</li>
|
||||
<li>Attention to detail</li>
|
||||
<li>Problem solving</li>
|
||||
<li>Adaptability</li>
|
||||
<li>Time management</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section class="flex-1">
|
||||
<h2>Interests</h2>
|
||||
<ul class="list-disc list-inside">
|
||||
<li>Leetcode</li>
|
||||
<li>Learning Mandarin</li>
|
||||
<li>Rhythm Games</li>
|
||||
<li>Climbing, Gym</li>
|
||||
<li>Board games, Meetup.com</li>
|
||||
</ul>
|
||||
</section>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="no-print w-full h-20"></div>
|
||||
@@ -265,12 +275,11 @@ import Project from "./Project.vue";
|
||||
|
||||
--font-heading: big_noodle_titling;
|
||||
--font-text: CreatoDisplay;
|
||||
--font-size-name: 2.5em;
|
||||
--font-size-text: 100%;
|
||||
--font-size-text: 1em;
|
||||
--font-size-small: 0.9em;
|
||||
--font-size-heading: 2.1em;
|
||||
--font-size-subheading: 1.7em;
|
||||
--font-size-subsubheading: 1.4em;
|
||||
--font-size-heading: 1.5em;
|
||||
--font-size-subheading: 1.5em;
|
||||
--font-size-subsubheading: 1.3em;
|
||||
}
|
||||
|
||||
/* A4 Page */
|
||||
@@ -279,7 +288,7 @@ import Project from "./Project.vue";
|
||||
font-family: var(--font-text);
|
||||
width: 210mm;
|
||||
height: 297mm;
|
||||
padding: 5mm;
|
||||
padding: 10mm;
|
||||
box-sizing: border-box;
|
||||
background-color: var(--background);
|
||||
box-shadow: 0 10px 25px rgba(0, 0, 0, 0.2);
|
||||
@@ -290,6 +299,13 @@ import Project from "./Project.vue";
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.name {
|
||||
font-size: 2em;
|
||||
font-weight: bold;
|
||||
justify-content: center;
|
||||
align-content: center;
|
||||
}
|
||||
|
||||
/* Component Styling */
|
||||
main {
|
||||
padding: 0px;
|
||||
@@ -299,6 +315,10 @@ main {
|
||||
background-color: white;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-weight: 900;
|
||||
}
|
||||
|
||||
span {
|
||||
height: 2em;
|
||||
}
|
||||
@@ -307,11 +327,11 @@ h1,
|
||||
h2,
|
||||
h3,
|
||||
h4 {
|
||||
margin: 0px;
|
||||
margin: 0px 0px 0.2em 0px;
|
||||
border: none;
|
||||
color: var(--primary);
|
||||
font-family: var(--font-heading);
|
||||
text-transform: capitalize;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
h1 {
|
||||
@@ -323,16 +343,20 @@ h2 {
|
||||
font-size: var(--font-size-subheading);
|
||||
}
|
||||
|
||||
h3 {
|
||||
h3,
|
||||
h4 {
|
||||
font-size: var(--font-size-subsubheading);
|
||||
}
|
||||
|
||||
a:hover {
|
||||
color: var(--tertiary);
|
||||
}
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
color: var(--secondary);
|
||||
font-family: inherit;
|
||||
font-size: var(--font-size-text);
|
||||
}
|
||||
|
||||
p {
|
||||
@@ -394,6 +418,16 @@ li {
|
||||
margin-bottom: 0.2em;
|
||||
}
|
||||
|
||||
p[contenteditable] {
|
||||
outline: none;
|
||||
cursor: text;
|
||||
}
|
||||
|
||||
p[contenteditable]:focus {
|
||||
outline: none;
|
||||
background-color: rgba(0, 0, 255, 0.05);
|
||||
}
|
||||
|
||||
@media (max-width: 640px) {
|
||||
.a4page {
|
||||
width: 100%;
|
||||
|
||||
Reference in New Issue
Block a user