aboutsummaryrefslogtreecommitdiff
path: root/public
diff options
context:
space:
mode:
Diffstat (limited to 'public')
-rw-r--r--public/_redirects18
-rw-r--r--public/bbg/bbg-logo.pngbin49471 -> 0 bytes
-rw-r--r--public/bbg/bbg-logo_padded.pngbin54017 -> 0 bytes
-rw-r--r--public/bbg/index.html92
-rw-r--r--public/help/index.html51
-rw-r--r--public/index.html185
-rw-r--r--public/privacy-policy/index.html99
-rw-r--r--public/resume/index.html936
-rw-r--r--public/terms-of-service/index.html40
9 files changed, 313 insertions, 1108 deletions
diff --git a/public/_redirects b/public/_redirects
deleted file mode 100644
index 02a9ab5..0000000
--- a/public/_redirects
+++ /dev/null
@@ -1,18 +0,0 @@
-/github https://github.com/zuedev
-/gitlab https://gitlab.com/zuedev
-/discord https://discord.gg/N34EeYtFCs
-/gumroad https://zuedev.gumroad.com/
-/linkedin https://linkedin.com/in/zuedev
-/stripe https://billing.stripe.com/p/login/6oE8Ag4EK2N82OI000
-/monzo https://monzo.me/alexanderpooley5
-/steam https://steamcommunity.com/id/zuedev
-/aws https://zuedev.awsapps.com/start
-
-/cv /resume
-/cv.pdf /resume
-/resume.pdf /resume
-/resume /resume/index.html
-
-/bbg/discord https://discord.gg/dT6cbHqXdx
-
-/tos /terms-of-service/
diff --git a/public/bbg/bbg-logo.png b/public/bbg/bbg-logo.png
deleted file mode 100644
index 9b771cc..0000000
--- a/public/bbg/bbg-logo.png
+++ /dev/null
Binary files differ
diff --git a/public/bbg/bbg-logo_padded.png b/public/bbg/bbg-logo_padded.png
deleted file mode 100644
index 32a2d1d..0000000
--- a/public/bbg/bbg-logo_padded.png
+++ /dev/null
Binary files differ
diff --git a/public/bbg/index.html b/public/bbg/index.html
deleted file mode 100644
index 393e14b..0000000
--- a/public/bbg/index.html
+++ /dev/null
@@ -1,92 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
- <head>
- <meta charset="UTF-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <link rel="icon" href="./bbg-logo.png" type="image/png" />
- <title>Blue Bean Games</title>
- <meta
- name="description"
- content="Blue Bean Games is a newly-formed game studio that believes in the power of open-source software. All of our work is completely dedicated to the public domain from company literature to video games."
- />
- <style>
- @import url("https://fonts.googleapis.com/css2?family=Itim&display=swap");
-
- html {
- background-color: #006eff;
- color: white;
- }
-
- html::-webkit-scrollbar {
- display: none;
- }
-
- .itim-regular {
- font-family: "Itim", cursive;
- font-weight: 400;
- font-style: normal;
- }
-
- body {
- margin: 0;
- padding: 0;
-
- display: flex;
- justify-content: center;
- flex-direction: column;
- height: 100vh;
-
- font-family: monospace;
-
- max-width: 720px;
- width: 100%;
- margin: auto;
-
- opacity: 0;
- animation: fadeIn 1s ease-in-out forwards;
- }
-
- @keyframes fadeIn {
- 0% {
- opacity: 0;
- }
- 100% {
- opacity: 1;
- }
- }
-
- p {
- font-size: 2rem;
- text-align: justify;
- padding: 1rem;
- }
-
- span {
- text-align: right;
- padding: 1rem;
- opacity: 0.5;
- }
-
- a {
- color: white;
- text-decoration: dotted underline;
- }
-
- a:hover {
- color: gold;
- text-decoration: none;
- }
- </style>
- </head>
- <body class="itim-regular">
- <p>
- Blue Bean Games is a newly-formed game studio that believes in the power
- of open-source software. All of our work is completely dedicated to the
- public domain from company literature to video games.
- </p>
- <span>
- "Blue Bean Games" is made with ❀️ by
- <a href="https://zue.dev" target="_blank">zue.dev</a>
- </span>
- </body>
-</html>
diff --git a/public/help/index.html b/public/help/index.html
new file mode 100644
index 0000000..9a4bc55
--- /dev/null
+++ b/public/help/index.html
@@ -0,0 +1,51 @@
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>Help</title>
+ <style>
+ /* import Inter font */
+ @import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap");
+
+ /* apply Inter font to entire html document */
+ html {
+ font-family: "Inter";
+ }
+
+ /* remove margin and padding from body */
+ body {
+ margin: 0;
+ padding: 0;
+ }
+
+ /* remove top margin from first-child h1 of element */
+ h1:first-child {
+ margin-top: 0;
+ }
+
+ /* apply light padding to body */
+ body {
+ padding: 20px;
+ }
+
+ /* make all text justified */
+ body {
+ text-align: justify;
+ }
+
+ /* accomodate dark mode users defaults */
+ @media (prefers-color-scheme: dark) {
+ body {
+ background-color: black;
+ color: white;
+ }
+ }
+ </style>
+ </head>
+ <body>
+ <p>Coming soon! For now, email us at:</p>
+
+ <p><a href="mailto:help@zue.dev">help@zue.dev</a></p>
+ </body>
+</html>
diff --git a/public/index.html b/public/index.html
index 6141472..dda4cd4 100644
--- a/public/index.html
+++ b/public/index.html
@@ -1,72 +1,135 @@
-<!DOCTYPE html>
+<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>zue.dev</title>
+ <meta
+ name="description"
+ content="Cloud Specialist. Gaming Enthusiast. Open Source Fanatic."
+ />
+ <style>
+ /* import Inter font */
+ @import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap");
- <title>zuedev's space</title>
- <meta name="description" content="Hello, World! I'm zuedev." />
- <link rel="icon" href="https://about.zue.dev/avatar.png" />
+ /* apply Inter font to entire html document */
+ html {
+ font-family: "Inter";
+ }
- <script src="https://cdn.jsdelivr.net/npm/@tailwindcss/browser@4"></script>
+ /* remove margin and padding from body */
+ body {
+ margin: 0;
+ padding: 0;
+ }
+
+ /* remove top margin from first-child h1 of element */
+ h1:first-child {
+ margin-top: 0;
+ }
+
+ /* make body full height */
+ body {
+ height: 100vh;
+ }
+
+ /* center content of body using flexbox */
+ body {
+ display: flex;
+ justify-content: center;
+ align-items: center;
+ }
+
+ /* fade in animation */
+ @keyframes fadeIn {
+ to {
+ opacity: 1;
+ }
+ }
+
+ /* fade in body content */
+ body {
+ opacity: 0;
+ animation: fadeIn 1s ease-in-out forwards;
+ }
+
+ /* accomodate dark mode users defaults */
+ @media (prefers-color-scheme: dark) {
+ body {
+ background-color: black;
+ color: white;
+ }
+ }
+
+ /* make text pan :3 */
+ .pan {
+ background: linear-gradient(
+ 45deg,
+ #ff1b8d 33%,
+ #ffd800 33%,
+ #ffd800 66%,
+ #21b1ff 66%
+ );
+ background-clip: text;
+ -webkit-text-fill-color: transparent;
+ /* shrink to fit to fix background */
+ display: inline;
+ }
+
+ /* link styles */
+ a {
+ color: inherit;
+ text-decoration: none;
+ }
+
+ a:hover {
+ background: black;
+ color: white;
+
+ @media (prefers-color-scheme: dark) {
+ background: white;
+ color: black;
+ }
+ }
+ </style>
</head>
<body>
- <div
- class="flex flex-col justify-center min-h-screen bg-black text-white font-mono text-lg"
- >
- <div class="max-w-2xl mx-auto px-4 py-8 space-y-4">
- <p>
- I'm working on updating this website to be a hub for my projects and
- services.
- </p>
- <p>In the meantime, here's some links:</p>
- <ul class="list-disc pl-5">
- <li>
- <a href="https://t1.zue.dev" class="text-cyan-500 hover:underline">
- T1: Zero-Markup Development & Hosting
- </a>
- </li>
- <li>
- <a href="https://96.zue.dev" class="text-cyan-500 hover:underline">
- 96: Transparent Talent Management
- </a>
- </li>
- <li>
- <a href="https://bbg.zue.dev" class="text-cyan-500 hover:underline">
- BBG: Open-Source Independent Game Studio
- </a>
- </li>
- <li>
- <a
- href="https://about.zue.dev"
- class="text-cyan-500 hover:underline"
- >
- About Me
- </a>
- </li>
- </ul>
- </div>
- </div>
- </body>
- <script>
- // animated tab
- const animation = [
- {
- emoji: "❀️",
- title: "Welcome to zuedev's space",
- },
- ];
+ <script src="https://unpkg.com/@babel/standalone/babel.min.js"></script>
+ <script type="text/babel" data-type="module">
+ import React from "https://esm.sh/react@18";
+ import ReactDOM from "https://esm.sh/react-dom@18/client";
- let tabAnimationStep = 0;
- const favicon = document.querySelector("link[rel='icon']");
- const updateTab = () => {
- const currentAnimation = animation[tabAnimationStep % animation.length];
- favicon.href = `data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100"><text y=".9em" font-size="90">${currentAnimation.emoji}</text></svg>`;
- document.title = currentAnimation.title;
- tabAnimationStep++;
- setTimeout(updateTab, 1000);
- };
+ ReactDOM.createRoot(document.body).render(
+ <main style={{ maxWidth: "666px", padding: "20px" }}>
+ <h1 className="pan">zuedev</h1>
+ <p
+ style={{
+ textAlign: "justify",
+ }}
+ >
+ Cloud Specialist. Gaming Enthusiast. Open Source Fanatic.
+ </p>
- updateTab();
- </script>
+ <article>
+ <h2>Projects</h2>
+ <ul>
+ {[
+ {
+ name: "Unnamed Group",
+ url: "https://unnamed.group/",
+ description: "Non-profit gaming community management",
+ },
+ ].map((project) => (
+ <li key={project.name}>
+ <a href={project.url}>
+ {project.name}: {project.description}
+ </a>
+ </li>
+ ))}
+ </ul>
+ </article>
+ </main>,
+ );
+ </script>
+ </body>
</html>
diff --git a/public/privacy-policy/index.html b/public/privacy-policy/index.html
new file mode 100644
index 0000000..22b9b9e
--- /dev/null
+++ b/public/privacy-policy/index.html
@@ -0,0 +1,99 @@
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="UTF-8" />
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+ <title>Privacy Policy</title>
+ <style>
+ /* import Inter font */
+ @import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap");
+
+ /* apply Inter font to entire html document */
+ html {
+ font-family: "Inter";
+ }
+
+ /* remove margin and padding from body */
+ body {
+ margin: 0;
+ padding: 0;
+ }
+
+ /* remove top margin from first-child h1 of element */
+ h1:first-child {
+ margin-top: 0;
+ }
+
+ /* apply light padding to body */
+ body {
+ padding: 20px;
+ }
+
+ /* make all text justified */
+ body {
+ text-align: justify;
+ }
+
+ /* accomodate dark mode users defaults */
+ @media (prefers-color-scheme: dark) {
+ body {
+ background-color: black;
+ color: white;
+ }
+ }
+ </style>
+ </head>
+ <body>
+ <h2>Privacy Policy</h2>
+ <p><strong>Last Updated:</strong> 3rd of March 2026</p>
+
+ <h3>1. Introduction</h3>
+ <p>
+ This Privacy Policy explains how zue.dev ("we", "us", or "our") handles
+ information when you use our website and services. We are committed to
+ respecting your privacy.
+ </p>
+
+ <h3>2. Information We Collect</h3>
+ <p>
+ We do not directly collect, store, or process any personal data. Our
+ website does not use cookies, tracking scripts, or analytics tools that we
+ operate ourselves.
+ </p>
+
+ <h3>3. Third-Party Services</h3>
+ <p>
+ We rely on third-party platforms to deliver our services (e.g. hosting,
+ payment processing, communication). These platforms may collect and
+ process personal data in accordance with their own privacy policies. We
+ encourage you to review the privacy policies of any third-party services
+ you interact with through us.
+ </p>
+
+ <h3>4. Data Retention</h3>
+ <p>
+ As we do not collect personal data ourselves, we do not retain any. Any
+ data held by third-party platforms is subject to their respective
+ retention policies.
+ </p>
+
+ <h3>5. Your Rights</h3>
+ <p>
+ If you have concerns about data held by a third-party service used in
+ connection with our services, please contact that provider directly. You
+ may also contact us and we will do our best to assist you.
+ </p>
+
+ <h3>6. Changes to This Policy</h3>
+ <p>
+ We may update this Privacy Policy from time to time. Any changes will be
+ reflected on this page with an updated "Last Updated" date.
+ </p>
+
+ <h3>7. Contact</h3>
+ <p>
+ If you have any questions about this Privacy Policy, please contact us at
+ <a href="mailto:alex@zue.dev">alex@zue.dev</a>.
+ </p>
+ </body>
+</html>
diff --git a/public/resume/index.html b/public/resume/index.html
deleted file mode 100644
index 7fa1fd3..0000000
--- a/public/resume/index.html
+++ /dev/null
@@ -1,936 +0,0 @@
-<!doctype html>
-<html lang="en">
- <head>
- <meta charset="UTF-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
- <title>Alex Pooley's Resume πŸ‘¨β€πŸ’ΌπŸ“„</title>
- <meta
- name="description"
- content="Results-oriented Software Engineer and Solutions Architect with over 14 years’ experience designing and implementing scalable and redundant system architecture."
- />
- <link rel="icon" href="../assets/images/pro_avatar.png" />
- <!-- get tailwindcss -->
- <script src="https://cdn.tailwindcss.com"></script>
- <!-- tailwind config -->
- <script>
- tailwind.config = {
- theme: {
- fontFamily: {
- sans: ["Inter"],
- },
- },
- };
- </script>
- <!-- do our own styling -->
- <style>
- /* import default font */
- @import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap");
-
- /* setup css vars */
- :root {
- --zuedev-purple: #240054;
- }
-
- /* define zd stuff */
- .bg-zd-purple {
- background-color: var(--zuedev-purple);
- }
-
- /* main background */
- html {
- background: black;
- }
-
- /* disable black background on prints */
- @media print {
- html {
- background: white;
- }
-
- .panText {
- -webkit-text-fill-color: initial;
- background: none;
- color: white;
- }
-
- .bg-zd-purple,
- .bg-black {
- -webkit-print-color-adjust: exact;
- print-color-adjust: exact;
- }
- }
-
- /* make body at least viewport height */
- body {
- min-height: 100vh;
- }
-
- /* pan stuff */
- .panText {
- background: linear-gradient(
- 45deg,
- #ff1b8d 33%,
- #ffd800 33%,
- #ffd800 66%,
- #21b1ff 66%
- );
- background-clip: text;
- -webkit-text-fill-color: transparent;
- }
-
- /* rave stuff */
- .raveBackground {
- /* rainbow */
- background: red;
- animation: raveBackgroundAnimation 1s linear infinite;
- }
-
- @keyframes raveBackgroundAnimation {
- 0% {
- background-color: red;
- }
- 16.666% {
- background-color: orange;
- }
- 33.333% {
- background-color: yellow;
- }
- 50% {
- background-color: green;
- }
- 66.666% {
- background-color: blue;
- }
- 83.333% {
- background-color: indigo;
- }
- 100% {
- background-color: violet;
- }
- }
-
- .raveBackgroundText {
- background: black;
- background-clip: text;
- -webkit-text-fill-color: transparent;
- animation: raveBackgroundTextAnimation 1s linear infinite;
- }
-
- @keyframes raveBackgroundTextAnimation {
- 0% {
- background-color: black;
- }
- 16.666% {
- background-color: black;
- }
- 33.333% {
- background-color: black;
- }
- 50% {
- background-color: white;
- }
- 66.666% {
- background-color: white;
- }
- 83.333% {
- background-color: white;
- }
- 100% {
- background-color: black;
- }
- }
- </style>
- </head>
- <body>
- <div id="root"></div>
-
- <!-- twemoji -->
- <script
- src="https://unpkg.com/twemoji@latest/dist/twemoji.min.js"
- crossorigin="anonymous"
- ></script>
- <script>
- // on load
- document.addEventListener("ReactDone", async () => {
- console.log("React done, parsing twemoji");
-
- // parse twemoji
- twemoji.parse(document.body, {
- folder: "svg",
- ext: ".svg",
- base: "https://cdn.jsdelivr.net/gh/twitter/twemoji@14.0.2/assets/",
- });
-
- // apply twemoji style fixes
- document.querySelectorAll("img.emoji").forEach((img) => {
- img.style.height = "1em";
- img.style.width = "1em";
- img.style.margin = "0 0.05em 0 0.1em";
- img.style.verticalAlign = "-0.1em";
- img.style.display = "inline";
- });
- });
- </script>
-
- <!-- load react -->
- <script
- src="https://unpkg.com/react@18/umd/react.development.js"
- crossorigin
- ></script>
- <script
- src="https://unpkg.com/react-dom@18/umd/react-dom.development.js"
- crossorigin
- ></script>
-
- <!-- load babel for jsx support -->
- <script src="https://unpkg.com/babel-standalone@6/babel.min.js"></script>
-
- <!-- run the resume code -->
- <script type="text/babel">
- // https://shields.io/badges/static-badge
- const skillsBadges = {
- nodejs: {
- badgeContent: "Node.js",
- style: "flat-square",
- logo: "nodedotjs",
- logoColor: "white",
- color: "026e00",
- link: "https://nodejs.org",
- },
- react: {
- badgeContent: "React",
- style: "flat-square",
- logo: "react",
- logoColor: "white",
- color: "61dafb",
- link: "https://reactjs.org",
- },
- docker: {
- badgeContent: "Docker",
- style: "flat-square",
- logo: "docker",
- logoColor: "white",
- color: "2496ed",
- link: "https://docker.com",
- },
- nextjs: {
- badgeContent: "Next.js",
- style: "flat-square",
- logo: "nextdotjs",
- logoColor: "white",
- color: "000000",
- link: "https://nextjs.org",
- },
- tailwindcss: {
- badgeContent: "Tailwind CSS",
- style: "flat-square",
- logo: "tailwindcss",
- logoColor: "white",
- color: "38b2ac",
- link: "https://tailwindcss.com",
- },
- mongodb: {
- badgeContent: "MongoDB",
- style: "flat-square",
- logo: "mongodb",
- logoColor: "white",
- color: "47a248",
- link: "https://mongodb.com",
- },
- cloudflare: {
- badgeContent: "Cloudflare",
- style: "flat-square",
- logo: "cloudflare",
- logoColor: "white",
- color: "f38020",
- link: "https://cloudflare.com",
- },
- vercel: {
- badgeContent: "Vercel",
- style: "flat-square",
- logo: "vercel",
- logoColor: "white",
- color: "000000",
- link: "https://vercel.com",
- },
- unity: {
- badgeContent: "Unity",
- style: "flat-square",
- logo: "unity",
- logoColor: "white",
- color: "000000",
- link: "https://unity.com",
- },
- csharp: {
- badgeContent: "C#",
- style: "flat-square",
- logo: "csharp",
- logoColor: "white",
- color: "239120",
- link: "https://docs.microsoft.com/en-us/dotnet/csharp/",
- },
- golang: {
- badgeContent: "Go",
- style: "flat-square",
- logo: "go",
- logoColor: "white",
- color: "00add8",
- link: "https://golang.org",
- },
- aws: {
- badgeContent: "AWS",
- style: "flat-square",
- logo: "amazonaws",
- logoColor: "white",
- color: "232f3e",
- link: "https://aws.amazon.com",
- },
- dynamodb: {
- badgeContent: "DynamoDB",
- style: "flat-square",
- logo: "amazonaws",
- logoColor: "white",
- color: "4053d6",
- link: "https://aws.amazon.com/dynamodb",
- },
- php: {
- badgeContent: "PHP",
- style: "flat-square",
- logo: "php",
- logoColor: "white",
- color: "777bb4",
- link: "https://php.net",
- },
- symfony: {
- badgeContent: "Symfony",
- style: "flat-square",
- logo: "symfony",
- logoColor: "white",
- color: "000000",
- link: "https://symfony.com",
- },
- mysql: {
- badgeContent: "MySQL",
- style: "flat-square",
- logo: "mysql",
- logoColor: "white",
- color: "4479a1",
- link: "https://mysql.com",
- },
- gcp: {
- badgeContent: "GCP",
- style: "flat-square",
- logo: "googlecloud",
- logoColor: "white",
- color: "4285f4",
- link: "https://cloud.google.com",
- },
- kubernetes: {
- badgeContent: "Kubernetes",
- style: "flat-square",
- logo: "kubernetes",
- logoColor: "white",
- color: "326ce5",
- link: "https://kubernetes.io",
- },
- wordpress: {
- badgeContent: "WordPress",
- style: "flat-square",
- logo: "wordpress",
- logoColor: "white",
- color: "21759b",
- link: "https://wordpress.org",
- },
- apache: {
- badgeContent: "Apache",
- style: "flat-square",
- logo: "apache",
- logoColor: "white",
- color: "d22128",
- link: "https://httpd.apache.org",
- },
- nginx: {
- badgeContent: "NGINX",
- style: "flat-square",
- logo: "nginx",
- logoColor: "white",
- color: "269539",
- link: "https://nginx.com",
- },
- digitalocean: {
- badgeContent: "DigitalOcean",
- style: "flat-square",
- logo: "digitalocean",
- logoColor: "white",
- color: "0080ff",
- link: "https://digitalocean.com",
- },
- html: {
- badgeContent: "HTML5",
- style: "flat-square",
- logo: "html5",
- logoColor: "white",
- color: "e34f26",
- link: "https://html.spec.whatwg.org",
- },
- css: {
- badgeContent: "CSS3",
- style: "flat-square",
- logo: "css3",
- logoColor: "white",
- color: "1572b6",
- link: "https://www.w3.org/Style/CSS/Overview.en.html",
- },
- javascript: {
- badgeContent: "JavaScript",
- style: "flat-square",
- logo: "javascript",
- logoColor: "white",
- color: "f7df1e",
- link: "https://developer.mozilla.org/en-US/docs/Web/JavaScript",
- },
- linux: {
- badgeContent: "Linux",
- style: "flat-square",
- logo: "linux",
- logoColor: "white",
- color: "fcc624",
- link: "https://kernel.org",
- },
- };
-
- const resumeData = {
- name: "Alex Pooley",
- bio: [
- "Cloud Specialist.",
- "Gaming Enthusiast.",
- "Open Source Fanatic.",
- ],
- blurbBold: "Results-oriented Software Engineer and Solutions Architect",
- blurb:
- "with over 14 years’ experience designing and implementing scalable and redundant system architecture.",
- summary:
- "Enthusiastic and accomplished leader of distributed, cross-functional development teams, consistently delivering world-class technical solutions that impact millions of users. Proven ability to ensure quality and efficiency in fast-paced, dynamic environments within the gaming industry. Core strengths include leadership, technical acumen, a drive for impactful solutions, and a commitment to quality and efficiency. Highly adaptable to fast-paced environments and bring a genuine passion for gaming, informing my understanding of user needs and market trends.",
- title: "Solutions Architect",
- avatar: "https://zue.dev/about/pro_avatar.png",
- status: "Looking for a new challenge.",
- location: "Harwich, United Kingdom",
- email: "alex@zue.dev",
- phone: "+44 7 943 941 456",
- website: "https://zue.dev",
- socials: [
- {
- href: "https://linkedin.com/in/zuedev",
- icon: "https://content.linkedin.com/content/dam/me/business/en-us/amp/xbu/linkedin-revised-brand-guidelines/home/fg/brand-homepg-please-note-icon-dsk-v01.png/jcr:content/renditions/brand-homepg-please-note-icon-dsk-v01-2x.png",
- title: "LinkedIn",
- },
- {
- href: "https://github.com/zuedev",
- icon: "https://cdn.simpleicons.org/github",
- title: "GitHub",
- },
- // {
- // href: "https://gitlab.sovereign.zue.dev",
- // icon: "https://cdn.simpleicons.org/gitlab",
- // title: "GitLab",
- // },
- {
- href: "https://zue.dev/discord",
- icon: "https://cdn.simpleicons.org/discord",
- title: "Discord",
- },
- // {
- // href: "https://zuedev.gumroad.com",
- // icon: "https://cdn.simpleicons.org/gumroad",
- // title: "Gumroad",
- // },
- ],
- career: [
- {
- position: "Director of Engineering",
- company: "Unnamed Group",
- url: "https://unnamed.group",
- brief: "Non-Profit Community Builders",
- start: new Date("2022-12-01"),
- end: null,
- type: "Full-Time",
- location: "Harwich, United Kingdom",
- skills: [
- skillsBadges.nodejs,
- skillsBadges.react,
- skillsBadges.docker,
- skillsBadges.nextjs,
- skillsBadges.tailwindcss,
- skillsBadges.mongodb,
- skillsBadges.cloudflare,
- ],
- expound: `Architected and directed the technical evolution of community platforms, ensuring scalability and reliability for over 1,000 active users. Led a team of 13 engineers, designers, and moderators, guiding technical decisions, providing mentorship, and fostering an innovative environment. Established best practices for development, deployment (CI/CD), and maintenance, driving projects that measurably improved user engagement and platform performance.`,
- achievements: [
- "Directed engineering efforts to develop and scale platform features such as user onboarding, engagement tools, and notification systems, crucial for supporting community growth to over 1,000 active members.",
- "Led the technical configuration, optimization, and integration of custom bots, API connections, and role automation of the community Discord server, enhancing functionality and contributing to measurable increases in user retention and satisfaction.",
- "Initiated and led fundraising efforts for charitable causes, raising over $1,000, which significantly contributed to community goodwill and social impact.",
- "Architected the technical implementation of the Patreon monetization strategy, overseeing API integrations, development of tiered access controls, and automated subscription management features to create a sustainable revenue stream.",
- ],
- },
- {
- position: "Solutions Architect",
- company: "November Games",
- url: "https://novembergames.com",
- brief: "Game Studio (MMO + SDKs)",
- start: new Date("2022-02-01"),
- end: new Date("2022-12-01"),
- type: "Contract",
- location: "New Zealand (Remote)",
- skills: [
- skillsBadges.nodejs,
- skillsBadges.unity,
- skillsBadges.csharp,
- skillsBadges.golang,
- skillsBadges.aws,
- skillsBadges.dynamodb,
- ],
- expound: `Led the design and implementation of the backend architecture for an innovative MMO game, ensuring scalability and performance. Developed and released robust SDKs for Unity and Unreal Engine, facilitating seamless integration for other developers into our platform and enhancing the developer experience.`,
- achievements: [
- "Engineered and launched a globally-distributed game server with an API, optimizing for high availability and minimal latency.",
- "Developed a sophisticated ticket-based party system achieving sub-second matchmaking, significantly enhancing player experience.",
- "Served as a domain expert during strategic meetings with major industry partners including AWS, Twitch, and NVIDIA, driving technical alignment and collaboration.",
- "Successfully delivered a multifaceted project under stringent deadlines, demonstrating effective project management and problem-solving skills.",
- ],
- },
- {
- position: "Technical Lead",
- company: "CORE Data Systems",
- url: "https://www.coredatasystems.co.uk",
- brief: "Educational Games Platform",
- start: new Date("2018-03-01"),
- end: new Date("2022-02-01"),
- type: "Full-Time",
- location: "Colchester, United Kingdom",
- skills: [
- skillsBadges.php,
- skillsBadges.symfony,
- skillsBadges.nodejs,
- skillsBadges.react,
- skillsBadges.mysql,
- skillsBadges.gcp,
- skillsBadges.kubernetes,
- ],
- expound: `I led the strategic technical direction of the company, spearheading the development of the innovative "CoreSciences" platform. In my role, I managed and coordinated a multidisciplinary team comprising developers, designers, and QA testers to ensure seamless project execution.`,
- achievements: [
- "Developed a scalable platform that attracted over 100,000 active users.",
- "Successfully launched an educational games platform, resulting in high user engagement and positive feedback.",
- "Implemented a subscription-based monetization strategy, significantly increasing revenue streams.",
- "Effectively managed and mentored a diverse team of over 10 developers, fostering collaboration and productivity.",
- ],
- },
- {
- position: "Full Stack Developer",
- company: "Aspen Woolf",
- url: "https://aspenwoolf.co.uk",
- brief: "Real Estate Investment Firm",
- start: new Date("2017-04-01"),
- end: new Date("2018-03-01"),
- type: "Freelance",
- location: "Manchester, United Kingdom",
- skills: [
- skillsBadges.php,
- skillsBadges.wordpress,
- skillsBadges.apache,
- skillsBadges.nginx,
- skillsBadges.mysql,
- skillsBadges.digitalocean,
- ],
- expound: `Employed by a white-label agency, BayCat, I spearheaded the development and maintenance of a high-traffic WordPress site. My role involved creating custom plugins and themes to enhance functionality and user experience, ensuring the platform remained robust and innovative.`,
- achievements: [
- "Engineered and sustained a bespoke WordPress theme, elevating site aesthetics and functionality.",
- "Designed and launched an innovative property search engine, enhancing user access and discovery.",
- "Enhanced website SEO and performance, boosting search rankings and reducing load times.",
- "Supervised a cross-functional team of 2 developers and 1 designer, fostering collaboration and productivity.",
- ],
- },
- {
- position: "Backend Engineer",
- company: "World Registration Systems",
- url: "https://find-and-update.company-information.service.gov.uk/company/06370780",
- brief: "Event Registration Platform",
- start: new Date("2016-11-01"),
- end: new Date("2017-04-01"),
- type: "Full-Time",
- location: "London, United Kingdom",
- skills: [
- skillsBadges.html,
- skillsBadges.css,
- skillsBadges.javascript,
- skillsBadges.php,
- skillsBadges.apache,
- skillsBadges.linux,
- ],
- expound: `Spearheaded the development and maintenance of the company's event registration platform, ensuring seamless user experience and system reliability. Developed and implemented custom APIs and integrations with third-party services, including payment processing through WorldPay, enhancing the platform's functionality.`,
- achievements: [
- "Led the development of a custom event registration platform, enhancing user engagement and transaction efficiency.",
- "Successfully integrated with WorldPay to streamline payment processes.",
- "Optimized platform for SEO and enhanced performance, resulting in increased traffic and user retention.",
- "Managed and mentored a team of 2 developers, fostering a collaborative and productive work environment.",
- ],
- },
- {
- position: "Backend Engineer",
- company: "Peccy Networks",
- url: "https://web.archive.org/web/20160305203701/http://peccy.net/",
- brief: "Web Development Agency",
- start: new Date("2014-07-28"),
- end: new Date("2016-11-01"),
- type: "Full-Time",
- location: "London, United Kingdom",
- skills: [
- skillsBadges.html,
- skillsBadges.css,
- skillsBadges.javascript,
- skillsBadges.php,
- skillsBadges.apache,
- skillsBadges.mysql,
- ],
- expound: `Spearheaded the development and maintenance of the company's client websites, ensuring a seamless user experience across various platforms. Enhanced website functionality by developing custom plugins and themes tailored for WordPress, Joomla, and Magento environments.`,
- achievements: [
- "Engineered innovative custom themes and plugins for Content Management Systems (CMS) platforms, significantly enhancing user engagement.",
- "Optimized website architecture to achieve top SEO rankings and superior performance metrics, boosting client visibility.",
- "Led and mentored a cross-functional team of 3 developers and 1 designer, fostering a collaborative and efficient work environment.",
- "Devised and implemented a custom ticketing system, improving the efficiency and responsiveness of client support services.",
- ],
- },
- ],
- projects: [
- {
- name: "World Anvil",
- brief: "Worldbuilding Platform",
- url: "https://worldanvil.com",
- start: new Date("2017-12-01"),
- end: new Date("2023-02-01"),
- type: "Professional",
- contribution:
- "Enhanced World Anvil, a leading worldbuilding platform for writers, gamers, and creators, by spearheading efforts to achieve 99.9% uptime through innovative DevOps pipelines and advanced monitoring systems. Successfully implemented comprehensive networking and security strategies, resulting in a 30% reduction in security incidents and improved system resilience. Improved platform scalability, supporting a 50% increase in user traffic, and facilitated seamless environment deployments to enhance collaboration and creativity across the community.",
- },
- ],
- certifications: [
- {
- issuer: "freeCodeCamp",
- issuerIcon: "https://cdn.simpleicons.org/freecodecamp",
- issuerProfile: "https://www.freecodecamp.org/zuedev",
- title: "Responsive Web Design",
- url: "https://www.freecodecamp.org/certification/zuedev/responsive-web-design",
- },
- {
- issuer: "freeCodeCamp",
- issuerIcon: "https://cdn.simpleicons.org/freecodecamp",
- issuerProfile: "https://www.freecodecamp.org/zuedev",
- title: "JavaScript Algorithms and Data Structures",
- url: "https://www.freecodecamp.org/certification/zuedev/javascript-algorithms-and-data-structures-v8",
- },
- {
- issuer: "freeCodeCamp",
- issuerIcon: "https://cdn.simpleicons.org/freecodecamp",
- issuerProfile: "https://www.freecodecamp.org/zuedev",
- title: "Scientific Computing with Python",
- url: "https://www.freecodecamp.org/certification/zuedev/scientific-computing-with-python-v7",
- },
- {
- issuer: "freeCodeCamp",
- issuerIcon: "https://cdn.simpleicons.org/freecodecamp",
- issuerProfile: "https://www.freecodecamp.org/zuedev",
- title: "Data Visualization",
- url: "https://www.freecodecamp.org/certification/zuedev/data-visualization",
- },
- ],
- };
-
- function Resume() {
- React.useEffect(() => {
- document.dispatchEvent(new Event("ReactDone"));
- }, []);
-
- return (
- <main className="bg-white min-h-screen p-4 space-y-4 max-w-screen-sm md:max-w-screen-md lg:max-w-[795px] print:max-w-full mx-auto">
- <header className="flex flex-row h-24">
- <div className="flex flex-row space-x-4 align-middle flex-grow">
- <img src={resumeData.avatar} alt={resumeData.name} />
- <div className="flex flex-col place-content-evenly">
- {resumeData.bio.map((line, index) => (
- <span
- key={index}
- className="text-xl font-bold text-gray-500"
- >
- {line}
- </span>
- ))}
- </div>
- </div>
- <div className="flex flex-col place-content-evenly text-gray-500 text-right">
- <span>
- <a
- href={
- "https://www.google.co.uk/maps/place/" +
- resumeData.location
- }
- className="text-blue-500 underline decoration-dotted"
- target="_blank"
- >
- {resumeData.location}
- </a>{" "}
- πŸ“
- </span>
- <span>
- <a
- href={"mailto:" + resumeData.email}
- className="text-blue-500 underline decoration-dotted"
- target="_blank"
- >
- {resumeData.email}
- </a>{" "}
- πŸ“§
- </span>
- <span>
- <a
- href={"tel:" + resumeData.phone.replaceAll(" ", "")}
- className="text-blue-500 underline decoration-dotted"
- target="_blank"
- >
- {resumeData.phone}
- </a>{" "}
- πŸ“±
- </span>
- <span>
- <a
- href={resumeData.website}
- className="text-blue-500 underline decoration-dotted"
- target="_blank"
- >
- {resumeData.website}
- </a>{" "}
- 🌎
- </span>
- </div>
- </header>
-
- <section className="space-y-4">
- <div className="flex flex-row text-4xl font-black">
- <h1 className="bg-zd-purple text-white px-2 py-1">
- <span className="panText">{resumeData.name}</span>
- </h1>
- <h2 className="bg-black text-white px-2 py-1">
- {resumeData.title}
- </h2>
- </div>
- <div>
- <ul className="flex flex-row h-full items-center">
- {resumeData.socials.map((social) => (
- <li key={social.href} className="px-2">
- <a href={social.href}>
- <img
- src={`${social.icon}`}
- className="h-8"
- title={social.title}
- />
- </a>
- </li>
- ))}
- </ul>
- </div>
- </section>
-
- <hr />
-
- <section className="space-y-4">
- <p className="text-lg text-justify">
- <b>{resumeData.blurbBold}</b> {resumeData.blurb}
- </p>
- </section>
-
- <section className="space-y-4">
- <h3 className="text-4xl font-bold">Summary</h3>
- <p className="text-lg text-justify">{resumeData.summary}</p>
- </section>
-
- <hr />
-
- <section className="space-y-4">
- <h3 className="text-4xl font-bold">Career</h3>
- <ul>
- {resumeData.career.map((job) => (
- <li
- key={job.company}
- className="space-y-4 border-black border-l-4 px-4 py-4 odd:bg-gray-100"
- >
- <div className="flex flex-row space-x-4 place-content-between">
- <div className="flex flex-col">
- <h4 className="text-xl font-bold">{job.position}</h4>
- <a
- href={job.url}
- className="text-lg font-bold text-gray-500 underline"
- >
- {job.company}
- </a>
- <p className="text-lg text-gray-500">{job.brief}</p>
- </div>
- <div className="flex flex-col text-right">
- <span>
- {job.start.toLocaleDateString("en-GB", {
- year: "numeric",
- month: "long",
- })}
- {" - "}
- {job.end
- ? job.end.toLocaleDateString("en-GB", {
- year: "numeric",
- month: "long",
- })
- : "Present"}{" "}
- πŸ“…
- </span>
- <span>{job.type} πŸ‘”</span>
- <span>{job.location} 🏒</span>
- </div>
- </div>
-
- <div className="space-y-2">
- {/*<span className="text-xl font-bold">Brief</span>*/}
- <p className="text-justify">{job.expound}</p>
- </div>
-
- <div className="space-y-2">
- <span className="text-xl font-bold">Achievements</span>
- <ul className="ml-8 list-disc">
- {job.achievements.map((achievement) => (
- <li key={achievement}>{achievement}</li>
- ))}
- </ul>
- </div>
-
- <div className="space-y-2">
- <span className="text-xl font-bold">Technologies</span>
- <p className="flex flex-row space-x-2">
- {job.skills.map((skill) => (
- <a key={skill.badgeContent} href={skill.link}>
- <img
- src={`https://img.shields.io/badge/${encodeURIComponent(
- skill.badgeContent,
- )}-${skill.color}?style=${skill.style}&logo=${
- skill.logo
- }&logoColor=${skill.logoColor}`}
- alt={skill.badgeContent}
- />
- </a>
- ))}
- </p>
- </div>
- </li>
- ))}
- </ul>
- </section>
-
- <hr />
-
- <section className="space-y-4">
- <h3 className="text-4xl font-bold">Projects</h3>
- <ul>
- {resumeData.projects.map((project) => (
- <li
- key={project.name}
- className="space-y-4 border-black border-l-4 px-4 py-4 odd:bg-gray-100"
- >
- <div className="flex flex-row space-x-4 place-content-between">
- <div className="flex flex-col">
- <h4 className="text-xl font-bold">
- <a
- href={project.url}
- className="text-lg font-bold underline"
- >
- {project.name}
- </a>
- </h4>
- <p className="text-lg text-gray-500">{project.brief}</p>
- </div>
- <div className="flex flex-col text-right">
- <span>
- {project.start.toLocaleDateString("en-GB", {
- year: "numeric",
- month: "long",
- })}
- {" - "}
- {project.end.toLocaleDateString("en-GB", {
- year: "numeric",
- month: "long",
- })}
- </span>
- <span>{project.type}</span>
- </div>
- </div>
-
- <p className="text-justify">{project.contribution}</p>
- </li>
- ))}
- </ul>
- </section>
-
- <hr />
-
- <section className="space-y-4">
- <h3 className="text-4xl font-bold">Certifications</h3>
- <ul className="grid grid-cols-3 gap-2">
- {resumeData.certifications.map((certification) => (
- <li
- key={certification.title}
- className="px-2 py-2 odd:bg-gray-100"
- >
- <div className="flex flex-col">
- <h4 className="text-xl font-bold">
- <img
- src={certification.issuerIcon}
- alt={certification.issuer}
- className="h-8"
- />
- <a
- href={certification.url}
- target="_blank"
- className="text-lg font-bold underline"
- >
- {certification.title}
- </a>
- </h4>
- <div>
- <span>from </span>
- <a
- href={certification.issuerProfile}
- target="_blank"
- className="text-lg text-gray-500 underline"
- >
- {certification.issuer}
- </a>
- </div>
- </div>
- </li>
- ))}
- </ul>
- </section>
-
- <hr />
-
- <footer className="text-center text-gray-500 text-sm">
- <p>
- This resume was generated by{" "}
- <a
- href="https://zue.dev/resume"
- className="text-blue-500 underline decoration-dotted"
- >
- zue.dev/resume
- </a>
- ; visit the link for the latest version.
- </p>
- </footer>
- </main>
- );
- }
-
- ReactDOM.createRoot(document.querySelector("#root")).render(<Resume />);
- </script>
- </body>
-</html>
diff --git a/public/terms-of-service/index.html b/public/terms-of-service/index.html
index de42200..b7fc28e 100644
--- a/public/terms-of-service/index.html
+++ b/public/terms-of-service/index.html
@@ -4,9 +4,47 @@
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Terms of Service</title>
+ <style>
+ /* import Inter font */
+ @import url("https://fonts.googleapis.com/css2?family=Inter:ital,opsz,wght@0,14..32,100..900;1,14..32,100..900&display=swap");
+
+ /* apply Inter font to entire html document */
+ html {
+ font-family: "Inter";
+ }
+
+ /* remove margin and padding from body */
+ body {
+ margin: 0;
+ padding: 0;
+ }
+
+ /* remove top margin from first-child h1 of element */
+ h1:first-child {
+ margin-top: 0;
+ }
+
+ /* apply light padding to body */
+ body {
+ padding: 20px;
+ }
+
+ /* make all text justified */
+ body {
+ text-align: justify;
+ }
+
+ /* accomodate dark mode users defaults */
+ @media (prefers-color-scheme: dark) {
+ body {
+ background-color: black;
+ color: white;
+ }
+ }
+ </style>
</head>
<body>
- <h2>Terms of Service</h2>
+ <h1>Terms of Service</h1>
<p><strong>Last Updated:</strong> 13th of February 2026</p>
<p>
These Terms of Service ("Terms") govern the relationship between Alexander