瀏覽代碼

June 2025 updates

Craig Fletcher 5 月之前
父節點
當前提交
ded03cb5d0
共有 2 個文件被更改,包括 198 次插入90 次删除
  1. 173 77
      cv.md
  2. 25 13
      styles.css

+ 173 - 77
cv.md

@@ -2,15 +2,45 @@
 
 You can call me on 07480924132, email me at [hi@leakypixel.net](mailto:hi@leakypixel.net), or see additional details at [leakypixel.net](https://www.leakypixel.net/). 
 
-I've been developing for the web for around 16 years and I'm still as eager as ever to push my skills and learn new things. I primarily work remotely, and have led teams and worked on multiple large-scale initiatives for startups and multinational corporations alike.
+I'm an experienced and adaptable full-stack JavaScript engineer with over 18 years of hands-on work delivering modern, performant, and accessible digital services. I've led cross-functional teams, replaced legacy systems at scale, and designed human-centred solutions grounded in XP, Agile, and value-delivery principles. I work closely with stakeholders across product, design, and ops, and I'm always looking for ways to improve development processes and system architecture. I'm particularly passionate about mentoring, observability, and infrastructure-as-code practices that support robust, scalable delivery.
+
+
+### Key Competencies
+
+* Technical leadership & team mentoring
+* Performance optimisation & Core Web Vitals
+* Cross-functional collaboration & stakeholder engagement
+* XP practices (TDD, CI/CD, pair programming)
+* Accessibility & inclusive design
+* Service-oriented & event-driven architecture
+* Agile delivery, kaizen & continuous improvement
+* Legacy system modernisation & modularisation
+* Infrastructure as code (Docker, Ansible, Azure, AWS)
+* Observability & monitoring (Grafana, Telegraf, InfluxDB)
+* Automated testing (Jest, Cypress, Playwright)
+* Documentation & technical communication
 
-My primary skills include React, Vue, NodeJS and JavaScript/TypeScript generally -  though I've worked with many languages, libraries and tools appropriate to the task at hand and often managed the entire stack from development to production to support.
 
 ## Experience
-A short description of my last few roles and what they entailed. I'd be happy to
-discuss these further, but for now I'll keep it brief.
 
-### Mint Velvet - Full-stack JavaScript engineer
+### *Timeout.com (Econify)* - Full-stack JavaScript engineer
+*October 2024 - June 2025, fully remote*
+
+Brought in as part of a small, specialist consultancy team to help improve Timeout.com's site performance, developer experience, and overall delivery velocity. Focused primarily on the JavaScript/TypeScript codebase, but also collaborated across a broader tech stack including Python and e-commerce systems. Highlights included:
+
+* Delivered ~20% improvement in Core Web Vitals through targeted DOM optimisations, smarter scheduling, deferral of non-critical work and strategic refactors to legacy rendering logic
+* Introduced a lightweight feature flagging mechanism to speed up experimentation and reduce deployment risk
+* Pushed TypeScript adoption across critical areas of the codebase, fixing types, removing unsafe patterns, and improving editor/developer tooling
+* Upgraded multiple out-of-date dependencies both frontend (React, TypeScript, Apollo) and backend (both Node and Python-based) services, resolving long-standing technical debt and reducing security overhead
+* Played a key role in reworking an e-commerce sister site alongside a visual redesign, with attention to performance, accessibility, and maintainability
+* Helped define coding standards, type definitions and linting configurations to promote consistency across a large monorepo
+* Regularly advised on architectural decisions and performance tradeoffs, particularly around SSR, bundle size, and loading strategies
+* Played a hands-on role in shaping and encouraging better documentation practices across the team
+* Contributed to ad delivery improvements, resolving layout shifts and misfiring campaigns in close collaboration with the adops team
+
+_Skills used: NodeJS React TypeScript Apollo Next.js Koa Hapi Playwright Storybook Python Django GraphQL Yarn Sentry AdTech_
+
+### *Mint Velvet* - Full-stack JavaScript engineer
 *October 2023 - September 2024, fully remote*
 
 As part of a small, highly commerically-driven team, took up various initiatives and improvements, alongside day-to-day
@@ -31,9 +61,9 @@ for Windows users in particular
 * Refactoring and improving critical areas of the site to make better use of client-side caching and improve perceived
 speed through optimistic updates to the store
 
-_Skills used: Vue CompositionAPI GraphQL NodeJS Pinia TypeScript Yarn ESBuild pkg Fastify MongoDB Shopify Liquid Storybook Cloudinary Docker Ansible Azure Swagger OpenAPI React-remix_
+_Skills used: Vue CompositionAPI GraphQL NodeJS Pinia TypeScript Yarn ESBuild pkg Fastify MongoDB Shopify Shopify-Plus Liquid Storybook Cloudinary Docker Ansible Azure Swagger OpenAPI React-remix_
 
-### Kloeckner Metals (Erlang Solutions) - Front-end JavaScript engineer
+### *Kloeckner Metals (Erlang Solutions)* - Front-end JavaScript engineer
 *August 2022 - October 2023, fully remote*
 
 Worked on and led various business-critical initiatives, including:
@@ -42,20 +72,22 @@ Worked on and led various business-critical initiatives, including:
 * Upgrading a stock and order management app from Vue 2 to Vue 3
 * Helping develop a component library using modern techniques and tooling, including both Vue and Ember
 * Implementing stock availability across a worldwide group in a centralised app
+* Deployment to S3 as static files for various FE apps
 
-_Skills used: Vue CompositionAPI GraphQL NodeJS Vuex Vite Ember Pinia TypeScript Yarn_
+_Skills used: Vue CompositionAPI GraphQL NodeJS Vuex Vite Ember Pinia TypeScript Yarn AWS S3_
 
-### Orbit - Full-stack JavaScript engineer
+### *Orbit* - Full-stack JavaScript engineer
 *June - August 2022, fully remote*
 
-Worked together with a cofounder of a small startup to develop core features of the product and decrease tech debt
-(primarily in the state management and data fetching areas of the app). Developed a state management and data cacheing
-solution based on Jotai and URQL which fixed a number of long-standing bugs and resulted in a 15-20% performance
-improvement across the app.
+* Worked together with a cofounder of a small startup to develop core features of the product and decrease tech debt
+(primarily in the state management and data fetching areas of the app) 
+* Developed a state management and data cacheing solution based on Jotai and URQL which fixed a number of long-standing bugs and resulted in a 15-20% performance
+improvement across the app
+* Deployment of AWS lambda functions for various business and technical tasks, such as updating static JSON data in S3
 
-_Skills used: React React-hooks GraphQL NodeJS TypeScript NPM Ramda Jotai URQL Hasura_
+_Skills used: React React-hooks GraphQL NodeJS TypeScript NPM Ramda Jotai URQL Hasura AWS S3 Lambdas_
 
-### Attest/101ways - Full-stack JavaScript engineer
+### *Attest (101ways)* - Full-stack JavaScript engineer
 *March - June 2022, fully remote*
 
 Worked with a small to medium sized team to develop new features and improvements to the client application, using Vue,
@@ -65,7 +97,7 @@ libraries.
 _Skills used: TypeScript Vue NPM HighCharts WebPack Pinia Vuex Ramda PostCSS Jest Cypress_
 
 
-### Penfold pensions - Full-stack JavaScript engineer
+### *Penfold pensions* - Full-stack JavaScript engineer
 *September 2021 - March 2022, fully remote*
 
 Worked with a medium sized team to refine and develop a cross-platform app to allow customers to manage and analyse
@@ -75,19 +107,20 @@ features to match stakeholder specifications and performance analysis and recomm
 _Skills used: TypeScript React NPM WebPack Babel React-Hooks NextJS NodeJS Apollo Jest Cypress_
 
 
-### Erlang Solutions - Front end tech lead
+### *Betika* - Front end engineer
 *October 2020 - September 2021, fully remote*
 
 Architected and led a 3-person front end team, replacing an underpeforming angular site
 with a fully modularised and modern react-based solution for a high traffic
 betting company based in South Africa, as well as upskilling the existing development team into the react ecosystem.
 As part of the team lead role, updated key stakeholders and discussed design of the solution with appropriate people
-within the business.
+within the business. Worked closely on a project to move non-private data to static storage (S3) in order to improve
+performance and lower costs.
 
-_Skills used: TypeScript React Docker NPM WebPack Babel React-Hooks React-Sagas_
+_Skills used: TypeScript React Docker NPM WebPack Babel React-Hooks React-Sagas AWS S3 Lambdas_
 
 
-### Betika - Front end engineer
+### *Erlang Solutions* - Front end tech lead
 *April - October 2020, fully remote*
 
 Worked as part of a 10-person team to deliver new functionality to a greenfield
@@ -96,7 +129,7 @@ implementation of a high-traffic sports betting website, using VueJS and Vuex.
 _Skills used: TypeScript VueJS Docker NPM WebPack Babel Vuex_
 
 
-### EnergyLinx (GoCompare group) - JavaScript consultant
+### *EnergyLinx (GoCompare group)* - JavaScript consultant
 *January - April 2020, fully remote*
 
 Worked as the lead developer with a small (3 person) team on a complete rebuild of a React and TypeScript
@@ -111,8 +144,6 @@ _Skills used: TypeScript React Docker NPM WebPack Babel_
 
 ### Earlier
 
-*2019*  - _Greenroom Design - Systems integration engineer (3 months, fully remote)_
-
 *2019* - _AKQA - JavaScript consultant (6 months, fully remote)_
 
 *2018 to 2019* - _Erlang Solutions - JavaScript consultant (9 months, fully remote)_
@@ -133,23 +164,105 @@ _Skills used: TypeScript React Docker NPM WebPack Babel_
 I'm sometimes lucky enough to get to work on small projects, which can be quite
 varied. A few of my favourites have been:
 
-* Working with a large-scale manufacturing firm to develop a vanilla javascript and C# .NET tracing portal to follow the
-entire production process from order to shelf
-* Worked with a small team to deliver a mobile-first video conferencing solution built on open source technologies in
-    order to host entertainment events with a high level of audience participation
-* Development of an "augmented reality" display app for an international shoe
-    brand, requiring reverse engineering the existing platform
-* Cross-platform time tracking app for a series-A startup, using
-    Quasar/Vue/Capacitor/Cordova
-* Worked with a series A startup to produce a custom-designed device for secure decommissioning and backup of spinning disk drives
-* Various Web3 projects - including dashboards, dApp interaction and web3 APIs for early-stage startups using web3js and
-    ethers
-* Successfully delivered both shopify reskins and full builds of small ecommerce sites for small to medium businesses,
-    incorporating detailed analytics and complex applications (embedded Vue apps) such as cut calculation for sheet
-    materials
+#### *Peratech* - Independent Full-stack Consultant
+_2024, fully remote_
+
+Brought in as a one-person consultancy to lead the design and development of a bespoke production tracing portal for a global manufacturing firm. The system allows stakeholders to track the full lifecycle of an order - from initial request through to factory assembly and final shelf delivery. Worked closely with a single in-house developer and multiple non-technical stakeholders to define scope, timelines, and technical architecture.
+
+* Designed and implemented a custom end-to-end tracing portal using vanilla JavaScript and C# .NET, integrating deeply with existing factory systems
+* Developed a clean, minimal front-end experience optimised for reliability and clarity across industrial contexts
+* Wrote server-side JavaScript to coordinate between systems and ensure consistent data flow between UI and backend services
+* Delivered the project independently: managed all aspects of planning, architecture, and delivery without external team dependencies
+* Helped translate operational requirements into technical solutions, working closely with stakeholders to ensure usability and clarity of the portal
+* Created documentation and training material to support internal adoption and long-term maintainability of the tool
+* Improved backend integration reliability by shaping request/response conventions and advising on API design between JS frontend and .NET services
+
+_Skills used: Vanilla-JavaScript .NET/C#_
+
+
+#### *Green Room Design* – Full-stack & Systems Consultant
+_2023, hybrid remote/on-site_
+
+Brought in to develop an augmented reality-style display application for a global footwear brand, powering an in-store installation that overlaid animated graphics and text onto physical products using a transparent screen. Inherited a legacy Erlang-based platform from a previous vendor with no documentation or handover, requiring extensive reverse engineering and infrastructure updates.
+
+* Reverse-engineered an undocumented Erlang system to gain full understanding of display logic, integration points, and hardware interaction
+* Led the redesign and development of the AR display layer, carefully aligning animations and messaging with specific shoe features inside the box
+* Refactored the deployment pipeline to eliminate reliance on a Windows-based toolchain, moving to a fast, kiosk-style Linux system that reduced licensing costs and improved reliability
+* Prioritised accessibility and legibility on transparent media, iterating with designers to ensure high contrast, clear typography, and resilient layout behavior
+* Delivered build and deployment tooling to support fast iteration across multiple store locations and hardware setups
+* Provided architectural guidance and infrastructure improvements to stabilise the overall system and simplify long-term maintenance
+
+_Skills used: Erlang JavaScript Linux Kiosk-Systems Reverse-Engineering Deployment Automation Accessibility AR-Display-Systems Systemd Bash_
+
+
+#### *Series-A Startup (NDA)* – Cross-platform App Developer
+_2023, fully remote_
+
+Worked with an early-stage startup to deliver a cross-platform time tracking application targeting mobile and desktop users. The project focused on rapid iteration and delivery of core features across platforms using a unified codebase.
+
+* Built and deployed the app using Quasar Framework with Vue.js, targeting iOS, Android, and desktop via Capacitor and Cordova
+* Implemented core time tracking logic, persistent storage, and offline support to accommodate mobile-first usage patterns
+* Collaborated closely with the founding team to refine UX patterns and optimise for responsiveness and usability across devices
+* Contributed to build tooling and deployment workflows for multiple platforms from a single codebase
+
+_Skills used: Vue.js Quasar Capacitor Cordova JavaScript Cross-platform Mobile-App-Development_
+
+
+#### *Something to Aim For / Us in the Making* – Independent DevOps & Full-stack Engineer
+_2022, fully remote_
+
+Collaborated with a small team to deliver a mobile-first, video conferencing platform tailored for interactive entertainment events. The platform leveraged open-source tooling to enable high levels of audience participation, targeting the unique needs of a performing arts organisation. Took a lead role in DevOps and infrastructure, owning the entire deployment pipeline and live service delivery.
+
+* Spearheaded infrastructure design and deployment using Ansible to provision and manage environments across development, staging, and production
+* Built and maintained CI/CD pipelines using GitHub Actions to support frequent, stable releases across a distributed team
+* Set up and managed AWS services including EC2, Route 53, and Lambda to support performant, scalable service delivery
+* Implemented independent hosting of a private Docker registry to streamline image management and reduce external dependencies
+* Designed monitoring and recovery strategies to ensure high availability during live events, where system failure was not an option
+* Supported front-end and back-end teams by improving local development workflows, automating environment provisioning, and resolving deployment bottlenecks
+* Collaborated directly with creative stakeholders to balance performance, reliability, and cost-effectiveness in a limited-resource context
+
+_Skills used: Ansible AWS EC2 Lambda Route53 Docker GitHubActions CI/CD DevOps Linux Nginx Node.js WebRTC_
+
+
+#### *Weee Recycle* – Hardware-Integrated Software Consultant
+_2022, fully remote_
+
+Collaborated with a startup to design and develop a bespoke device for the secure decommissioning and backup of spinning disk drives, targeting enterprise data destruction and archival workflows.
+
+* Developed control software and automation logic for secure data handling and drive management
+* Worked closely with hardware engineers to integrate software with physical device operations
+* Focused on reliability, ease of use, and adherence to strict data handling requirements
+
+_Skills used: Hardware-Integration Secure-Storage Automation Linux Bash Low-level-DiskOperations_
+
+
+#### *Various Web3 Startups* – Web3 Frontend & Integration Engineer
+_2021–2023, fully remote_
+
+Worked with a range of early-stage Web3 startups to deliver dashboards, dApp interfaces, and blockchain-integrated web applications. Projects often involved rapid prototyping, direct smart contract interaction, and bespoke API development.
+
+*    Built user-facing dashboards and admin panels to surface on-chain data in real time
+*    Developed frontend integrations with smart contracts using Web3.js and Ethers.js, enabling wallet interactions, token transfers, and DeFi functionality
+*    Designed lightweight APIs and data services to bridge blockchain data with traditional frontend needs
+*    Provided technical guidance to non-Web3-native teams around contract interaction patterns, security considerations, and network behavior
+
+_Skills used: Web3.js Ethers.js JavaScript React Smart Contract Integration dApp Development Ethereum JSON-RPC_
+
+
+#### *Freelance* – E-commerce Developer
+_Ongoing (various projects), remote_
+
+Delivered a mix of Shopify reskins and full custom builds for small to medium-sized businesses, balancing performance, usability, and business needs. Projects often required integrating rich client-side functionality with the constraints of hosted platforms.
+
+*    Designed and implemented full Shopify themes as well as reskins, tailored to brand and UX requirements
+*    Built and embedded complex Vue.js applications within Shopify storefronts to support dynamic product configuration, bookings, and other interactive features
+*    Integrated detailed analytics setups (GA, GTM, custom tracking) to support marketing, funnel optimisation, and customer insights
+*    Advised clients on platform capabilities, limitations, and trade-offs to ensure scalable, maintainable solutions
+
+_Skills used: Shopify Vue.js Liquid JavaScript HTML/CSS Analytics Integration GA GTM E-commerce UXi_
+
 
 ## Skills
-Some of the skills I've picked up along the way and tools I've used.
 
 ### JavaScript
 I've around 16 years experience with JavaScript, and consider myself
@@ -161,7 +274,7 @@ free time checking out new features and frameworks.
 * CMS and product management platforms (Shopify/Strapi/Contentful/Wix)
 * Cross-platform wrappers (Cordova/Capacitor/Quasar/Electron/PhoneGap)
 * API integration (analytics/Facebook messenger platform/payment systems/GraphQL)
-* NodeJS (Express/Restify/Fastify/native HTTP/cloud functions/Hasura/Prisma)
+* NodeJS (Express/Restify/Fastify/Hapi/Koa/Apollo/native HTTP/cloud functions/Hasura/Prisma)
 * Document DBs (Mongo/Couchbase/DynamoDB)
 * Client-side templating (Handlebars/Mustache/jst)
 * Module loading & dependency resolution
@@ -176,7 +289,7 @@ Initially, this started as a passion project to containerise and self host
 infrastructure, but quickly developed into managing the full stack in my
 commerical roles.
 
-* AWS and Digital ocean
+* Multiple cloud services (AWS/Azure/GCP)
 * Continuous integration (Jenkins/Travis/GitHub actions)
 * Docker & docker-compose
 * Ansible
@@ -229,55 +342,38 @@ environments, with varying degrees of depth.
 * Python (flask/sql alchemy/raspi-GPIO/scripting)
 * Ruby (Rails/cucumber/rspec/scripting)
 
-### References/reviews
-Things people have said about working with me.
-
+### References/recommendations
+My latest references/recommendations can always be found on my linkedin, but here're a few recent ones:
 
-#### Kloeckner - Jan Butzner (Product Manager Innovation & Design)
-_November 2023_
+#### *Mint Velvet - Jon Ashcroft* (Technical Development Lead)
+_September 2024_
 
->I worked with Craig for over a year, very closely on a complex, high-stakes project involving Vue, GraphQL and such, with a lot of technical debt. First of all, it is a joy to work with and talk to Craig. He is very knowledgeable, intelligent, empathic and efficient. He not only managed to analyze the situation clearly, he also proactively suggested and made major improvements to the code base and was able to clearly communicate and explain it even to non-tech people. 
->
->We/I will dearly miss working with him and he was only "released" due to unrelated business decisions. Highly recommend hiring Craig, you will not regret it!
-
-
-#### Orbit - Sebastian Sas Mangel (Co-founder - Engineering)
-_July 2022_
-
->Craig has been a fantastic and excellent addition to our team for a few months. We have worked together very hard to develop core features of the product and decrease tech debt in the state management and data fetching areas of our web app. He has a very thorough understanding of the React ecosystem and as a whole of front-end technologies. Craig has conducted together with myself the research and PoC implementation of Jotai, which we later have adopted throughout the app. This has resulted in a 15-20% performance improvement and it has reduced significantly the number of network requests and bugs that we have faced with our previous implementation of a data caching layer. Needless to say, this was a very challenging endeavor, with a relatively short deadline, filled with numerous moving parts. 
->
->We have also worked together to develop a new feature called the Treemap, which is a visual and interactive representation of the product discovery outcomes.
+>I am pleased to recommend Craig, who was a great addition to the team. From the first day, Craig demonstrated a high technical ability and during his time with us, punctually delivered several key projects.
 >
->He is a great communicator and very hard working individual. His technical knowledge covers areas way beyond front-end technologies. I can't recall just how many conversations we had about IoT devices, microcontrollers, networking, and security - always fascinated by the sheer amount of knowledge he has.
+>Craig is very hands-on and efficient. He's keen to gain an understanding of the bigger picture and apply his proven experience to deliver considered solutions and raise the correct questions to help steer directions of technical work.
 >
->We have been very pleased with the work he has done and we are grateful to him for his contribution to the team and the company.
+>His adaptability and vast knowledge is an asset to any company. He's able to both own new projects and understand existing codebase with ease. It was a pleasure working with him!
 
 
-#### AKQA - Mike Carlisle (Group Technical Director / Consultant / Architect)
-*October 2019* 
-
-> Craig worked with us on an extremely intense project with tight timelines. He was able to help deliver the project and put in additional effort above and beyond what was expected of him. He was able to ramp up quickly and own the solutions he worked on, as well as reacting to changing requirements and challenges. Craig worked closely with an external API team to overcome issues and deficiencies with data, and collaborate around improvements with how data was retrieved to optimize for performance. He also produced the frontend for a web experience in ReactJs to design specifications, and with impressive turn-around. Craig also owned and delivered a Facebook Messenger Bot as part of the solution.
-> 
-> This was an unusually challenging and stressful project, and we were lucky to
-> have Craig staying focused and committed to the delivery of the end experience.
+#### *Kloeckner - Jan Butzner* (Product Manager Innovation & Design)
+_November 2023_
 
-#### Erlang Solutions - Katarzyna Kraus (Project Manager)
-*June 2019* 
+>I worked with Craig for over a year, very closely on a complex, high-stakes project involving Vue, GraphQL and such, with a lot of technical debt. First of all, it is a joy to work with and talk to Craig. He is very knowledgeable, intelligent, empathic and efficient. He not only managed to analyze the situation clearly, he also proactively suggested and made major improvements to the code base and was able to clearly communicate and explain it even to non-tech people. 
+>
+>We/I will dearly miss working with him and he was only "released" due to unrelated business decisions. Highly recommend hiring Craig, you will not regret it!
 
-> I had the pleasure of working with Craig on a few month long project implementing an Elixir based app. As our frontend expert he had an additional challenge being the only representative of his field on a distributed team of backend engineers. With members located all over Europe, taking on intertwined tasks, there was an additional requirement of communicating effectively within the team to make sure everyone progresses with their work and does not block others. The success hinged on developers actively coordinating with each other and keeping the conversation going. Craig’s friendly attitude, sense of humour and opened mind played a huge role in making that happen.
 
-> Craig managed to combine the requirements of being the sole expert in his field with being a team player aiding other people and overall team progress. He took initiative, was able to advise and guide the customer towards certain solutions, he listened to feedback and changing requirements and moved forward in a steady, confident pace. He is not the loudest voice in the room and not the one to initiate edgy endeavours, but his advice is well thought out, meaningful and opened for debate. He is not afraid to admit mistakes and raise flags if he thinks something is going wrong, which builds trust within the team and allows management to make good decisions.
 
-> It is my opinion Craig’s personality will match any team and combined with his expertise as a seasoned frontend developer will help projects reach a successful delivery.
+## I'm not boring
 
+I have quite a few hobbies outside of my development work, and try to keep myself as active as I can - summer or winter!
 
-## I'm not boring
+* Working in digital means I'm especially concious of getting some "green time", from kayaking to hiking to exploring the odd
+underground bunker - I generally do a variety of things over the month, and in 2024 managed to cross off all 23 MBA
+bothies in Wales and England (I'm working on the ~80 in Scotland...)
 
-I have quite a few hobbies outside of my development work, and try to keep myself as active as I can - especially during the summer, when I can get outside.
+* Being interested in the DIY/open-source side of things, I attend events and spend a fair amount of time creating things myself -
+steel-framed furniture, a few hand tools, my own hammock... whatever my magpie brain has latched onto this week. I've
+not got around to presenting most of these at an event yet, because only the less interesting projects are ever truly "finished". That's right, I kaizen my own hobby projects, we're on hammock v1.7 at this point I think?
 
-* Rock climbing and bouldering are my big hobbies... though they don't look a lot different from the outside, there's quite a gap. I vary between the two, but practice indoors twice a week and get outside when I can.
-* Being interested in the open-source culture, I attend as many related meetups
-    and events as I can - oggcamp and fosstalk live being ones I've attended for
-    a few years.
 * I also spend quite a lot of my free time tinkering and working on personal projects, such as building raspberry pi based camera systems, monitors, or arcade systems. I'm also passionate about self hosting as much of my personal infrastructure as I can (talk to me about this!) and dockerising all the things.
-* Of course everybody needs to relax - I spend quite a lot of time reading, or listening to podcasts. Some of my favourites are [99 percent invisible](https://99percentinvisible.org/), [bad voltage](https://www.badvoltage.org/), [linux unplugged](https://linuxunplugged.com/), [selfhosted](https://selfhosted.show/) and [Stuff you should know](https://www.iheart.com/podcast/105-stuff-you-should-know-26940277/).

+ 25 - 13
styles.css

@@ -26,35 +26,37 @@ body {
 }
 section {
   max-width: 42vw;
-  margin: 0 auto 2em auto;
+  margin: 0 auto 2rem auto;
   overflow: hidden;
   clear: both;
   display: block;
 }
 
 h1 {
-  font-size: 1.6em;
+  font-size: 1.8rem;
   font-weight: normal;
-  line-height: 1.25em;
+  line-height: 1.35rem;
   margin: 3vw 0 1vw 0;
 }
 h2 {
   display: inline-block;
-  margin: 3em 0 1em 0;
-  font-size: 1.4em;
-  line-height: 1.6em;
+  margin: 3rem 0 1rem 0;
+  font-size: 1.6rem;
+  line-height: 1.8rem;
   page-break-after: avoid;
 }
 
 h3 {
-  font-size: 1.2em;
-  margin: 4em 0 1em 0;
+  font-size: 1.4rem;
+  margin: 4rem 0 1rem 0;
   page-break-after: avoid;
+  font-weight: normal;
 }
 
 h4 {
-  font-size: 1em;
-  margin: 4em 0 1em 0;
+  font-size: 1.2rem;
+  margin: 4rem 0 1rem 0;
+  font-weight: normal;
   page-break-before: avoid;
   page-break-after: avoid;
 }
@@ -66,11 +68,21 @@ p {
   margin: 1vw 0;
 }
 ul {
-  margin-top: 0.6em;
+  margin-top: 0.6rem;
   margin-bottom: 1vw;
 }
 li {
-  margin-top: 0.4em;
+  margin-top: 0.4rem;
+}
+h3 em {
+  font-size: 1.6rem;
+  font-style: normal;
+  font-weight: 500;
+}
+h4 em {
+  font-size: 1.4rem;
+  font-style: normal;
+  font-weight: 500;
 }
 @media print {
   p {
@@ -83,7 +95,7 @@ li {
   body {
     max-width: 95%;
     width: 95%;
-    margin: 2em;
+    margin: 2rem;
     font-size: 10px;
   }
 }