Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 7 additions & 6 deletions app/components/AboutSection.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,12 +6,9 @@
<h1>Let me introduce myself.</h1>
<div class="intro-info">
<img src="/logos/CW_Logo.svg" alt="My profile picture." />
<p class="lead">
I am a Software Engineer working in London, having graduated from
King's College London with a First Class Honours degree in Computer
Science. I have had a passion for developing software since I was 14
years old.
</p>
<div>
<p v-for="p in About.text.split('\n')" class="lead">{{ p }}</p>
</div>
</div>
</div>
</div>
Expand All @@ -25,6 +22,10 @@
</section>
</template>

<script setup lang="ts">
import About from "~~/content/about.json";
</script>

<style lang="scss" scoped>
.about {
.section-intro {
Expand Down
2 changes: 1 addition & 1 deletion app/components/ContactSection.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<div class="row section-intro">
<div class="col-twelve">
<h5>Contact</h5>
<h1>I'd Love To Hear From You.</h1>
<h1>Id Love To Hear From You.</h1>
<p class="lead">
You can get in touch by emailing me directly.<br />To encrypt your
message first, use
Expand Down
3 changes: 2 additions & 1 deletion app/components/GitHubFlair.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
profile-name="Callum Watkins"
profile-picture="/logos/CW_Logo.svg"
:logo="GitHubLogo"
href="https://github.com/CallumWatkins"
:href="Online.github.url"
>
<template #details>
<template v-if="data">
Expand Down Expand Up @@ -42,6 +42,7 @@

<script setup lang="ts">
import GitHubLogo from "@/assets/images/github-mark-white.svg";
import Online from "~~/content/online.json";

interface GHContributionCalendar {
totalContributions: number;
Expand Down
2 changes: 1 addition & 1 deletion app/components/IntroSection.vue
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<div class="row">
<div class="col-twelve">
<h5>Hello, World.</h5>
<h1>I'm Callum Watkins.</h1>
<h1>Im Callum Watkins.</h1>
<p class="intro-position">
<span>Software Engineer</span>
<span>BSc Computer Science</span>
Expand Down
20 changes: 8 additions & 12 deletions app/components/OnlineSection.vue
Original file line number Diff line number Diff line change
Expand Up @@ -8,23 +8,15 @@
</div>
<div class="row profiles">
<div class="col-six tab-full">
<h3>Stack Overflow</h3>
<p>
I am a member of the Stack Overflow Q&amp;A community, contributing
questions and answers to the wide community of professional and
enthusiast programmers.
</p>
<h3>{{ Online.stackoverflow.title }}</h3>
<p>{{ Online.stackoverflow.description }}</p>
<div class="flair-container">
<StackOverflowFlair />
</div>
</div>
<div class="col-six tab-full">
<h3>GitHub &amp; Gist</h3>
<p>
GitHub hosts my public code resositories and Gists. Gists are a handy
way of sharing code; there's everything from snippets to whole
projects, available for public use.
</p>
<h3>{{ Online.github.title }}</h3>
<p>{{ Online.github.description }}</p>
<div class="flair-container">
<GitHubFlair />
</div>
Expand All @@ -33,6 +25,10 @@
</section>
</template>

<script setup lang="ts">
import Online from "~~/content/online.json";
</script>

<style lang="scss" scoped>
.online {
.row.profiles {
Expand Down
7 changes: 2 additions & 5 deletions app/components/ProjectsSection.vue
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
<div class="row section-intro">
<div class="col-twelve">
<h5>Projects</h5>
<h1>What I've been working on.</h1>
<h1>What Ive been working on.</h1>
<p class="lead">Take a look at examples of my work.</p>
</div>
</div>
Expand All @@ -19,9 +19,7 @@
<div class="project-card">
<div class="project-card__image">
<ImageSources
:sources="
p.images.map((img) => getImageSrc(`projects/${img}`))
"
:sources="p.images.map((img) => `/images/projects/${img}`)"
alt=""
/>
</div>
Expand Down Expand Up @@ -56,7 +54,6 @@ import "swiper/css";
import "swiper/css/scrollbar";

const swiperModules = [A11y, Scrollbar];
const { getImageSrc } = useImages();
</script>

<style lang="scss" scoped>
Expand Down
28 changes: 15 additions & 13 deletions app/components/ResumeSection.vue
Original file line number Diff line number Diff line change
Expand Up @@ -13,20 +13,22 @@
</div>
<div class="col-twelve">
<div class="timeline">
<div v-for="w in Work" class="timeline-entry">
<div class="timeline-entry__icon">
<FontAwesomeIcon icon="fa-solid fa-briefcase" />
</div>
<div class="timeline-entry__header">
<h3>{{ w.role }}</h3>
<p>{{ w.period }}</p>
</div>
<div class="timeline-entry__content">
<h4>{{ w.company }}</h4>
<p v-for="d in w.description.split('\n')">{{ d }}</p>
<BadgeCollection v-if="w.badges" :badges="w.badges" />
<template v-for="w in Work">
<div v-if="!w.hide" class="timeline-entry">
<div class="timeline-entry__icon">
<FontAwesomeIcon icon="fa-solid fa-briefcase" />
</div>
<div class="timeline-entry__header">
<h3>{{ w.role }}</h3>
<p>{{ w.period }}</p>
</div>
<div class="timeline-entry__content">
<h4>{{ w.company }}</h4>
<p v-for="d in w.description.split('\n')">{{ d }}</p>
<BadgeCollection v-if="w.badges" :badges="w.badges" />
</div>
</div>
</div>
</template>
</div>
</div>
</div>
Expand Down
3 changes: 2 additions & 1 deletion app/components/StackOverflowFlair.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
profile-name="Callum Watkins"
profile-picture="/logos/CW_Logo.svg"
:logo="StackOverflowLogo"
href="https://stackoverflow.com/users/4415734/callum-watkins"
:href="Online.stackoverflow.url"
>
<template #details>
<template v-if="user">
Expand Down Expand Up @@ -90,6 +90,7 @@

<script setup lang="ts">
import StackOverflowLogo from "@/assets/images/stack-overflow.svg";
import Online from "~~/content/online.json";

interface SOUserBadgeCounts {
bronze: number;
Expand Down
18 changes: 0 additions & 18 deletions app/composables/useImages.ts

This file was deleted.

2 changes: 1 addition & 1 deletion app/error.vue
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
<div class="container">
<section>
<template v-if="error.status !== undefined">
<h2>Darn, it's a</h2>
<h2>Darn, its a</h2>
<h1>{{ error.status }}</h1>
</template>
<template v-else>
Expand Down
3 changes: 3 additions & 0 deletions content/about.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"text": "I am a Software Engineer working in London, having graduated from King’s College London with a First Class Honours degree in Computer Science. I have had a passion for developing software since I was 14 years old."
}
2 changes: 1 addition & 1 deletion content/education.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
{
"level": "BSc Computer Science",
"period": "September 2018 – July 2022",
"institution": "King's College London",
"institution": "Kings College London",
"description": "Here I gained an in-depth understanding of the field of computer-based information systems.\nModules include: Software Engineering, Programming, Discrete Mathematics, Machine Architecture, Logic, Databases, Data Structures, Computational Mathematics, Internet Systems, Artificial Intelligence, Operating Systems, Language Paradigms, Compilers, Cryptography, Formal Verification, Computational Models, Network Security, Optimization Methods.",
"grades": {
"summary": "First Class Honours",
Expand Down
12 changes: 12 additions & 0 deletions content/online.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"stackoverflow": {
"title": "Stack Overflow",
"description": "I am a member of the Stack Overflow Q&A community, contributing questions and answers to the wide community of professional and enthusiast programmers.",
"url": "https://stackoverflow.com/users/4415734/callum-watkins"
},
"github": {
"title": "GitHub & Gist",
"description": "GitHub hosts my public code resositories and Gists. Gists are a handy way of sharing code; there’s everything from snippets to whole projects, available for public use.",
"url": "https://github.com/CallumWatkins"
}
}
4 changes: 2 additions & 2 deletions content/projects.json
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
}
},
{
"title": "King's College Hospital Paediatric Liver Service Website",
"title": "Kings College Hospital Paediatric Liver Service Website",
"description": "Coordinated with nurses at KCH to design and develop a web application to educate parents about liver conditions affecting their children.",
"images": ["kch-pls.avif", "kch-pls.png"],
"badges": ["Vue", "Java", "SQL", "Netlify"],
Expand Down Expand Up @@ -116,7 +116,7 @@
},
{
"title": "Dynamic DNS Updater",
"description": "A simple and robust tool for keeping DNS records on both Cloudflare and Namecheap dynamically updated with the host's public IP address.",
"description": "A simple and robust tool for keeping DNS records on both Cloudflare and Namecheap dynamically updated with the hosts public IP address.",
"images": ["ddns-updater.avif", "ddns-updater.png"],
"badges": ["C#", ".NET", "CLI", "Docker"],
"link": {
Expand Down
46 changes: 27 additions & 19 deletions content/social.json
Original file line number Diff line number Diff line change
@@ -1,40 +1,48 @@
[
{
"name": "LinkedIn",
"url": "https://www.linkedin.com/in/CallumWatkins",
"title": "Find my professional profile on LinkedIn",
"icon": "fa-brands fa-linkedin-in"
},
{
"name": "GitHub",
"url": "https://github.com/CallumWatkins",
"title": "Find my code repositories and contributions on GitHub",
"icon": "fa-brands fa-github"
},
{
"name": "Stack Overflow",
"url": "https://stackoverflow.com/users/4415734/callum-watkins",
"title": "Find my Q&A contributions on Stack Overflow",
"icon": "fa-brands fa-stack-overflow"
},
{
"name": "Email",
"url": "mailto:contact@callumwatkins.com",
"title": "Email me",
"icon": "fa-regular fa-envelope"
},
{
"url": "https://t.me/CallumWatkins",
"title": "Message me on Telegram",
"icon": "fa-brands fa-telegram"
},
{
"name": "Keybase",
"url": "https://keybase.io/CallumWatkins",
"title": "Find me on Keybase",
"title": "Message me securely using Keybase",
"icon": "fa-brands fa-keybase"
},
{
"name": "Twitter",
"url": "https://twitter.com/CallumWatkins",
"title": "Find me on Twitter",
"icon": "fa-brands fa-twitter"
},
{
"url": "https://github.com/CallumWatkins",
"title": "Find me on GitHub",
"icon": "fa-brands fa-github"
},
{
"url": "https://stackoverflow.com/users/4415734/callum-watkins",
"title": "Find me on Stack Overflow",
"icon": "fa-brands fa-stack-overflow"
},
{
"url": "https://www.linkedin.com/in/CallumWatkins",
"title": "Find me on LinkedIn",
"icon": "fa-brands fa-linkedin-in"
"name": "Telegram",
"url": "https://t.me/CallumWatkins",
"title": "Message me on Telegram",
"icon": "fa-brands fa-telegram"
},
{
"name": "PayPal",
"url": "https://www.paypal.me/CallumWatkins",
"title": "Send money with PayPal",
"icon": "fa-brands fa-paypal"
Expand Down
3 changes: 2 additions & 1 deletion content/work.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
"role": "Clerical Assistant",
"period": "July 2015 – August 2015",
"company": "H H Burke & Co",
"description": "School work experience in an accountancy office during which I improved my communication, organisation, and time management skills."
"description": "School work experience in an accountancy office during which I improved my communication, organisation, and time management skills.",
"hide": true
}
]
6 changes: 6 additions & 0 deletions nuxt.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,16 @@ export default defineNuxtConfig({
"@fortawesome/vue-fontawesome",
],
},
compatibilityDate: "2026-02-18",
css: [
"@fortawesome/fontawesome-svg-core/styles.css",
"@/assets/css/_global.scss",
],
nitro: {
prerender: {
routes: ["/llms.txt", "/llms-full.txt"],
},
},
typescript: {
strict: true,
},
Expand Down
Loading