From 689d1c640fcd3c960c4ed401ad6ec39df8d4d0c2 Mon Sep 17 00:00:00 2001 From: Ainsley Clark Date: Wed, 25 Feb 2026 09:52:32 +0000 Subject: [PATCH 1/6] fix: Sitemap build never --- themes/shared/layouts/_default/sitemap.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/themes/shared/layouts/_default/sitemap.xml b/themes/shared/layouts/_default/sitemap.xml index e4732e4c..481867f9 100644 --- a/themes/shared/layouts/_default/sitemap.xml +++ b/themes/shared/layouts/_default/sitemap.xml @@ -1,7 +1,7 @@ {{ printf "" | safeHTML }} {{ range .Data.Pages }} - {{- if and (.Permalink) (not .Params.private) -}} + {{- if and (.Permalink) (not .Params.private) (ne .Params.build.render "never") -}} {{ .Permalink }}{{ if or (eq .Sitemap.Priority 1.0) (not .Lastmod.IsZero) }} {{ if eq .Sitemap.Priority 1.0 }}{{ now.Format "2006-01-02T15:04:05-07:00" | safeHTML }}{{ else }}{{ .Lastmod.Format "2006-01-02T15:04:05-07:00" | safeHTML }}{{ end }}{{ end }} {{ with .Sitemap.ChangeFreq }} From 602e7fc62b69b69e5ff1f33d74d6bee6ab5a8229 Mon Sep 17 00:00:00 2001 From: Ainsley Clark Date: Wed, 25 Feb 2026 09:59:08 +0000 Subject: [PATCH 2/6] fix: Origin --- api/_pkg/middleware/auth.go | 18 ++++++++++++++---- api/_pkg/middleware/auth_test.go | 16 ++++++++++++++-- 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/api/_pkg/middleware/auth.go b/api/_pkg/middleware/auth.go index 8b28a73d..d65658dd 100644 --- a/api/_pkg/middleware/auth.go +++ b/api/_pkg/middleware/auth.go @@ -20,11 +20,14 @@ const ( // AuthHeader is the header used for authentication via an // API Key AuthHeader = "X-API-Key" - // OriginURL is the URL of the site to compare against - // in production. - OriginURL = "https://ainsley.dev" ) +// OriginURLs is the list of allowed origins to compare against in production. +var OriginURLs = []string{ + "https://ainsley.dev", + "https://ainsleyclark.com", +} + // Auth validates API request and determines if the AuthHeader value is of equal // to the header send in the request. // Returns errors.INVALID if there is a mismatch. @@ -40,7 +43,14 @@ func Auth(cfg *environment.Config) echo.MiddlewareFunc { // Vercel comes back with a different URL in production for some reason. // So a static variable needs to be used. // TODO: See if there is a more graceful way of doing this. - if !strings.Contains(origin, OriginURL) || origin == "" { + allowed := false + for _, u := range OriginURLs { + if strings.Contains(origin, u) { + allowed = true + break + } + } + if !allowed || origin == "" { return false, fmt.Errorf("bad origin: %s, with comparison: %s", origin, cfg.URL) } return auth == cfg.APIKey, nil diff --git a/api/_pkg/middleware/auth_test.go b/api/_pkg/middleware/auth_test.go index 3d4d20e9..48565f30 100644 --- a/api/_pkg/middleware/auth_test.go +++ b/api/_pkg/middleware/auth_test.go @@ -50,11 +50,23 @@ func TestAuth(t *testing.T) { }, want: http.StatusOK, }, - "OK Production": { + "OK Production ainsley.dev": { input: func(r *http.Request) { t.Setenv(AuthHeader, "key") r.Header.Set(AuthHeader, "key") - r.Header.Set("Origin", OriginURL) + r.Header.Set("Origin", OriginURLs[0]) + }, + config: environment.Config{ + Env: "production", + APIKey: "key", + }, + want: http.StatusOK, + }, + "OK Production ainsleyclark.com": { + input: func(r *http.Request) { + t.Setenv(AuthHeader, "key") + r.Header.Set(AuthHeader, "key") + r.Header.Set("Origin", OriginURLs[1]) }, config: environment.Config{ Env: "production", From 84282df4a96ee95ed02a0db185b018326d740d1a Mon Sep 17 00:00:00 2001 From: Ainsley Clark Date: Wed, 25 Feb 2026 10:20:58 +0000 Subject: [PATCH 3/6] content: Bio & anim changes --- sites/ainsley-clark/config/_default/params.yaml | 10 ---------- sites/ainsley-clark/content/_index.md | 13 ++++++++++++- sites/ainsley-clark/layouts/index.html | 2 +- themes/shared/assets/js/animations/text.ts | 13 ++++++++++++- themes/shared/assets/js/pages/home.ts | 2 +- 5 files changed, 26 insertions(+), 14 deletions(-) diff --git a/sites/ainsley-clark/config/_default/params.yaml b/sites/ainsley-clark/config/_default/params.yaml index 6f00894e..6c22f848 100644 --- a/sites/ainsley-clark/config/_default/params.yaml +++ b/sites/ainsley-clark/config/_default/params.yaml @@ -50,15 +50,5 @@ codepen: footer: title: 'Shipping Go at scale.
Growing engineers.
Building communities that last.' subText: 'All original content, code, and written works published on this site are the intellectual property of ainsley.dev LTD unless otherwise stated.' -bio: - image: images/bio.jpg - title: "Hi, I'm Ainsley." - content: | -

Most of my time is spent writing Go at Just Eat Takeaway.com, where I work as a Senior/Lead Software Engineer across platform services, architecture, and tooling. The rest goes into the thing I care about just as much — growing engineers and the Go community.

-

At JET, that meant founding and chairing the Go Guild, a cross-organisation community focused on Go adoption, engineering standards, and knowledge sharing. We've published over 10 episodes on YouTube, hosted speakers like Eleanor McHugh, and built a space where Gophers across the company come together to learn and set the bar higher.

-

In 2025, I spoke at GopherCon UK on how Just Eat uses tooling to deploy Go micro-services in minutes. Before that, I presented at JET TechFest and started creating content around Go best practices — from writing well-crafted packages to effective error handling.

-

Before JET, I spent four years at Reddico as a Senior Full Stack Engineer, designing and shipping an intelligent link-building tool that processed 100k+ tasks daily across ten bespoke micro-services. I also founded ainsley.dev, a registered software company that won Website of the Year in its first year — end-to-end experience from branding and design through to architecture and deployment.

-

Open source is a big part of how I contribute back. go-mail (190+ stars) is a cross-platform mail driver for Go. Verbis is a CMS built entirely in Go. WebKit turns a single app.json manifest into production-ready infrastructure and CI/CD pipelines.

-

The thread through all of it — whether it's code review, pair programming, one-on-ones, or running a guild — is making the engineers around me better and building communities where people actually grow.

wording: pronoun: me diff --git a/sites/ainsley-clark/content/_index.md b/sites/ainsley-clark/content/_index.md index a4830106..f3d3a547 100644 --- a/sites/ainsley-clark/content/_index.md +++ b/sites/ainsley-clark/content/_index.md @@ -1,9 +1,20 @@ --- -title: Full Stack Software Engineer (GoLang | PHP | TypeScript) at @justeat Gopher, developer, author & tech enthusiast. +title: Engineer, Author, Speaker & Mentor | Full Stack Software Engineer (GoLang | PHP | TypeScript) at @justeat. heading: Shipping Go at scale*
Growing engineers
Building communities that last lead: Senior/Lead Software Engineer at Just Eat Takeaway.com. GopherCon UK speaker. Chair of the Go Guild at JET and open-source contributor. Passionate about writing well-crafted Go, mentoring engineers, and building communities where Gophers thrive. styles: - scss/pages/home.scss +bio: + image: images/bio.jpg + title: "Hi, I'm Ainsley." + content: | +

Hi, I'm Ainsley

+

Most of my time is spent writing Go at Just Eat Takeaway.com, where I work as a Senior/Lead Software Engineer across platform services, architecture, and tooling. The rest goes into the thing I care about just as much — growing engineers and the Go community.

+

At JET, that meant founding and chairing the Go Guild, a cross-organisation community focused on Go adoption, engineering standards, and knowledge sharing. We've published over 10 episodes on YouTube, hosted speakers like Eleanor McHugh, and built a space where Gophers across the company come together to learn and set the bar higher.

+

In 2025, I spoke at GopherCon UK on how Just Eat uses tooling to deploy Go micro-services in minutes. Before that, I presented at JET TechFest and started creating content around Go best practices — from writing well-crafted packages to effective error handling.

+

Before JET, I spent four years at Reddico as a Senior Full Stack Engineer, designing and shipping an intelligent link-building tool that processed 100k+ tasks daily across ten bespoke micro-services. I also founded ainsley.dev, a registered software company that won Website of the Year in its first year — end-to-end experience from branding and design through to architecture and deployment.

+

Open source is a big part of how I contribute back. go-mail (190+ stars) is a cross-platform mail driver for Go. Verbis is a CMS built entirely in Go. WebKit turns a single app.json manifest into production-ready infrastructure and CI/CD pipelines.

+

The thread through all of it — whether it's code review, pair programming, one-on-ones, or running a guild — is making the engineers around me better and building communities where people actually grow.

skills: - title: Languages & Frameworks list: diff --git a/sites/ainsley-clark/layouts/index.html b/sites/ainsley-clark/layouts/index.html index e7d7904d..71f2e1ec 100644 --- a/sites/ainsley-clark/layouts/index.html +++ b/sites/ainsley-clark/layouts/index.html @@ -64,7 +64,7 @@

- {{ with .Site.Params.bio }} + {{ with .Params.bio }}
diff --git a/themes/shared/assets/js/animations/text.ts b/themes/shared/assets/js/animations/text.ts index 3ed7575a..6550b3be 100644 --- a/themes/shared/assets/js/animations/text.ts +++ b/themes/shared/assets/js/animations/text.ts @@ -204,7 +204,18 @@ const hero = (): Playable => { duration: 1000, }, 900, - ); + ) + // Appears on pages with logos (a-clark right now). + .add( + { + targets: document.querySelectorAll(".logo-carousel-slide"), + opacity: [0, 1], + easing: 'easeInQuad', + duration: 1000, + delay: anime.stagger(100), + }, + 900 + ) const arrow = document.querySelector('.hero .arrow-hover'); if (arrow) { diff --git a/themes/shared/assets/js/pages/home.ts b/themes/shared/assets/js/pages/home.ts index 0c1fee1b..c8327aeb 100644 --- a/themes/shared/assets/js/pages/home.ts +++ b/themes/shared/assets/js/pages/home.ts @@ -94,7 +94,7 @@ export const homeAnimation = (): void => { duration: 2000, }, '-=4000', - ); + ) Scroll.onScroll((y: number) => { const percent = (y / (height + offset - Elements.HTML.clientHeight)) * 100; From 2126518173dc28f6761bebb2be2acd89f588fe40 Mon Sep 17 00:00:00 2001 From: Ainsley Clark Date: Wed, 25 Feb 2026 11:31:49 +0000 Subject: [PATCH 4/6] refactor: Logo carousel changes --- themes/shared/assets/js/animations/text.ts | 66 +++++++++++++++---- .../scss/components/_logo-carousel.scss | 8 ++- 2 files changed, 62 insertions(+), 12 deletions(-) diff --git a/themes/shared/assets/js/animations/text.ts b/themes/shared/assets/js/animations/text.ts index 6550b3be..fd798467 100644 --- a/themes/shared/assets/js/animations/text.ts +++ b/themes/shared/assets/js/animations/text.ts @@ -42,6 +42,7 @@ export class Animations { this.playables.push(...up()); this.playables.push(...fade()); this.playables.push(carousel()); + this.playables.push(logoCarousel()); } /** @@ -144,6 +145,7 @@ const hero = (): Playable => { anime.set(heading.querySelectorAll('.word'), { opacity: 1 }); anime.set(heading.querySelectorAll('.char'), { opacity: 0 }); anime.set(heading.querySelectorAll('.hero .arrow-hover'), { opacity: 0 }); + const timeline = anime .timeline({ autoplay: false, @@ -205,17 +207,6 @@ const hero = (): Playable => { }, 900, ) - // Appears on pages with logos (a-clark right now). - .add( - { - targets: document.querySelectorAll(".logo-carousel-slide"), - opacity: [0, 1], - easing: 'easeInQuad', - duration: 1000, - delay: anime.stagger(100), - }, - 900 - ) const arrow = document.querySelector('.hero .arrow-hover'); if (arrow) { @@ -428,3 +419,56 @@ const carousel = (): Playable => { return timeline.play; }; + +/** + * Logo Carousel animation (a-clark homepage). + */ +const logoCarousel = (): Playable => { + const items = document.querySelectorAll('.logo-carousel-slide'); + if (!items.length) { + return <() => void>{}; + } + + anime.set(items, { opacity: 0 }); + + const timeline = anime.timeline({ + autoplay: false, + }); + + // Mobile (simple fade, no bounce) + if (window.innerWidth < 1024) { + timeline.add({ + targets: items, + opacity: [0, 1], + easing: 'easeInQuad', + duration: 1000, + delay: anime.stagger(100), + }); + return timeline.play; + } + + // Desktop — separate translateY and opacity, matches carousel() pattern + timeline + .add( + { + targets: items, + translateY: [250, 0], + easing: 'easeOutElastic', + duration: 2500, + delay: anime.stagger(120), + }, + 0, + ) + .add( + { + targets: items, + opacity: [0, 1], + easing: 'easeInQuad', + duration: 1000, + delay: anime.stagger(100), + }, + 100, + ); + + return timeline.play; +}; diff --git a/themes/shared/assets/scss/components/_logo-carousel.scss b/themes/shared/assets/scss/components/_logo-carousel.scss index dd5bedef..69294534 100644 --- a/themes/shared/assets/scss/components/_logo-carousel.scss +++ b/themes/shared/assets/scss/components/_logo-carousel.scss @@ -7,6 +7,7 @@ position: relative; width: 100%; overflow-x: clip; + isolation: isolate; margin-top: clamp(60px, 10vw, 100px); // Gradients @@ -21,6 +22,11 @@ width: clamp(80px, 16vw, 160px); z-index: 1; pointer-events: none; + + @include media-desk { + top: -100px; + bottom: -300px; + } } &::before { @@ -37,7 +43,7 @@ // ========================================================================= &-embla { - overflow: hidden; + overflow-x: clip; } &-container { From d1f707aaf65c210db10c72c20de921faccc36532 Mon Sep 17 00:00:00 2001 From: Ainsley Date: Wed, 25 Feb 2026 13:51:37 +0000 Subject: [PATCH 5/6] refactor: Reamde chnages --- README.md | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index 7c41cfe2..ef4e42d1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@

- +

ainsley.dev

@@ -19,16 +19,17 @@
[![Vercel](https://therealsujitk-vercel-badge.vercel.app/?app=website&style=plastic)](https://ainsley.dev) +[![Go Report Card](https://goreportcard.com/badge/github.com/ainsleydev/webkit)](https://goreportcard.com/report/github.com/ainsleydev/website) [![Test](https://github.com/ainsleydev/website/actions/workflows/test.yaml/badge.svg)](https://github.com/ainsleydev/website/actions/workflows/test.yaml) -[![Maintainability](https://api.codeclimate.com/v1/badges/f5912a1dec11b8003850/maintainability)](https://codeclimate.com/github/ainsleydev/website/maintainability) [![Coverage](https://codecov.io/gh/ainsleydev/website/branch/dev/graph/badge.svg?token=Y8crTxn7Ic)](https://codecov.io/gh/ainsleydev/website) +[![ainsley.dev](https://img.shields.io/badge/-ainsley.dev-black?style=flat&logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAABmJLR0QA/wD/AP+gvaeTAAAAB3RJTUUH5wEYDzUGL1b35AAABA1JREFUWMPtlttvFVUUxn977ZnZu+W0tLalqRovBAUvQag0xNQbpSIosSSIJC198YknJfHJxDf9A/DBJ0x8MbFACjVqvCASq6FYFLFBvJAaAomkFCmhHGpLO+PDzOmZzpn2nKP4pCs5ycmevb7vW99as/fA//FfD1XO5p1nzuA3NWJHx5T8cVkRBPHHQfRjd0tzyZhOOQIy27bAxET9zCuvvhY0r2kC/OiRABeAN4BL/4oDr9+3lGszPs7UVNfUE23v3Nj5koszR/8N4EXg3XJckFIFuCLUuU7GWNNtTg25cu4syJx0F+gGMuU4UJKAt1Yux1UKV6TVat1qs+OYwQESMwDQCjwKsOv4iZsnwGihwbiuEek2WjJGhMrvv0UujYKa08VFkQvuTXNgz6oVeCIo1CqrZYMRwTiaytERKn44kRQAsAFYDbBrsLgLRQU0GI919TXKiHQaUQ1GBCuCCQKqjg/MqInrM4lZrgc6A1CljHhRAZ4Ip65m77FaOmbJdehC5vzZr1RAf/T6x6NDwb3/uAVfP74GnwCjZasRuXuWXASj9XQme+3t6erqPcB0IvUuYCsUH8YFBRhRNBqvyYpsn0MeOnG6wvc/9x33MPBjSvp24Na/7cDP7Y/gKIURecZoeTBObkSwWg7UNjaOeFfGLgK9KRAPAM8Wc2FeAUaEWtddbEV2WBFtREXkCqvlghE5yOQkvucBHAR+T0BooAtYXLYDI5sewxWFJ/Kk1bI2UTlW5DMFp03+JPwJ+DQFai2wbiEXUgVUas0trmuslm4jUmGi/tuwDVmrpafBuNPVrs7N/wzQA2QTUJbwYLIlOxB0tOGJ4IhqsSJts+T54Rv0lBz1RFh9ZJA385fOAHAshaMNaAF4OcWFQgeUwhMlrlJdnqjaOLkR8Y2WvbWec9VIQeo4sJf8FZ2LmmgWJO1cmm8I7wc2a6XwosGL+v+rFfnYUYplh47Obo5dvZ8Av6TgbSZ8KxYWEGxZn/u7Dbg9t8HNnwF9S2qqzqVUn4vzQF/K+m3AC1A4jGlId0QC8l0BXKVGrahe//okNR99WZAUc6EXuJiC+zxw57wOxKp/DliRAvCFKDUkxS+YIeBwyvryCHuOC0kH6oBOCj/V/gTeA6aK0oefZj3ARGJdRdh1BQ7Eqm8HHk4B/Q7oB1B9acWFEWtDf5STjGbgqbgLcQcqCQ8NL5EUAPuBsRKqz8UVYB+F97QXcSyatSXoWJ8zvB04AFQlkoaBp4HhhaqPR1TdUsLjeVni8TjhVX0odCAkd4AdKeQAHxIwXEb1Odt+Az5IeVQVcTmhgDBWAhtTNl8G9qGAwKfU2N3SnJvi/RFGMjYCD8UFdACNKRsHgZMA6v0j5ZpAlPtNyvqSiJO/AKik60y0ALlUAAAAJXRFWHRkYXRlOmNyZWF0ZQAyMDIzLTAxLTI0VDE1OjUzOjA2KzAwOjAwm5vntAAAACV0RVh0ZGF0ZTptb2RpZnkAMjAyMy0wMS0yNFQxNTo1MzowNiswMDowMOrGXwgAAABXelRYdFJhdyBwcm9maWxlIHR5cGUgaXB0YwAAeJzj8gwIcVYoKMpPy8xJ5VIAAyMLLmMLEyMTS5MUAxMgRIA0w2QDI7NUIMvY1MjEzMQcxAfLgEigSi4A6hcRdPJCNZUAAAAASUVORK5CYII=)](https://ainsley.dev) [![Twitter Handle](https://img.shields.io/twitter/follow/ainsleydev)](https://twitter.com/ainsleydev)
## ainsley.dev -Website and theme source code for [ainsley.dev](https://ainsley.dev). +Website and theme source code for [ainsley.dev](https://ainsley.dev) and [ainsleyclark.com](https://ainsleyclark.com) Coupling state-of-the-art technology with stunning designs, we create memorable digital transformations and well-crafted software for everyone from startups to established brands. @@ -69,7 +70,7 @@ Kingdom and/or other countries. All other trademarks are the property of their r ## Copyright You may not, except with our express written permission, distribute or commercially exploit the content found within -the `/content` folder or any written text within this repository. Nor may you transmit it or store it in any other +the `content` folder or any written text within this repository. Nor may you transmit it or store it in any other website or other form of electronic retrieval system. Any redistribution or reproduction of part or all of the contents in any form is prohibited other than the following: @@ -82,5 +83,3 @@ Any redistribution or reproduction of part or all of the contents in any form is Code Copyright 2023 ainsley.dev. Code released under the [BSD-3 Clause](LICENSE). -[//]: # ([![Maintainability](https://api.codeclimate.com/v1/badges/f5912a1dec11b8003850/maintainability)](https://codeclimate.com/github/ainsleydev/website/maintainability)) - From b6752c3f053e28fd4586fd5584f89e5b92c8891a Mon Sep 17 00:00:00 2001 From: Ainsley Date: Wed, 25 Feb 2026 14:08:04 +0000 Subject: [PATCH 6/6] refactor: Updating content/styling --- sites/ainsley-clark/BRIEF.md | 96 ------------------- sites/ainsley-clark/content/_index.md | 18 ++-- .../scss/components/_logo-carousel.scss | 2 +- 3 files changed, 11 insertions(+), 105 deletions(-) delete mode 100644 sites/ainsley-clark/BRIEF.md diff --git a/sites/ainsley-clark/BRIEF.md b/sites/ainsley-clark/BRIEF.md deleted file mode 100644 index 7ba5e25c..00000000 --- a/sites/ainsley-clark/BRIEF.md +++ /dev/null @@ -1,96 +0,0 @@ -# ainsleyclark.com — Content Brief - ---- - -## Hero - -**Headline:** -Shipping Go at scale. Growing engineers. Building communities that last. - -**Lead paragraph:** -Senior/Lead Software Engineer at Just Eat Takeaway.com. GopherCon UK speaker. Chair of the Go Guild at JET and open-source contributor. Passionate about writing well-crafted Go, mentoring engineers, and building communities where Gophers thrive. - ---- - -## Logos - -**Label:** "Companies I've worked with" - -- Just Eat Takeaway.com -- Reddico -- ainsley.dev -- Dec's Pets -- Oak Tuition -- S.Clark -- Thinkopedia -- Royal Beauty -- Scott's Guttering -- EDR Dental -- Elite Roofing - ---- - -## Bio - -Most of my time is spent writing Go at Just Eat Takeaway.com, where I work as a Senior/Lead Software Engineer across platform services, architecture, and tooling. The rest goes into the thing I care about just as much — growing engineers and the Go community. - -At JET, that meant founding and chairing the Go Guild, a cross-organisation community focused on Go adoption, engineering standards, and knowledge sharing. We've published over 10 episodes on YouTube, hosted speakers like Eleanor McHugh, and built a space where Gophers across the company come together to learn and set the bar higher. - -In 2025, I spoke at GopherCon UK on how Just Eat uses tooling to deploy Go micro-services in minutes. Before that, I presented at JET TechFest and started creating content around Go best practices — from writing well-crafted packages to effective error handling. - -Before JET, I spent four years at Reddico as a Senior Full Stack Engineer, designing and shipping an intelligent link-building tool that processed 100k+ tasks daily across ten bespoke micro-services. I also founded ainsley.dev, a registered software company that won Website of the Year in its first year — end-to-end experience from branding and design through to architecture and deployment. - -Open source is a big part of how I contribute back. go-mail (190+ stars) is a cross-platform mail driver for Go. Verbis is a CMS built entirely in Go. WebKit turns a single app.json manifest into production-ready infrastructure and CI/CD pipelines. - -The thread through all of it — whether it's code review, pair programming, one-on-ones, or running a guild — is making the engineers around me better and building communities where people actually grow. - ---- - -## Media - -### Conference Talks - -- **GopherCon UK 2025** — How Just Eat uses tooling to deploy Go micro-services in minutes - -### Just Eat Go Guild (YouTube) - -- Feb 2026 — Diving into Go's 1.26, survey results and a round up -- Nov 2025 — Community insights & network resilience -- April 2025 — Diving into the new Go tool directive -- Feb 2025 — Exploring Go 1.24, plus a deep dive into Go's internals -- Dec 2024 — Go 1.24 Unveiled: Discover the Latest Features -- Oct 2024 — How passing tests can still cause issues in production -- Sept 2024 — Building Open Source Go Projects in Public with MelkeyDev - -### Written - -- How to write well-crafted GoLang packages -- Effective error handling in GoLang: how to Error() -- Responsibilities as a developer for optimised SEO - ---- - -## Contact - -**Heading:** Let's talk - -**Subtext:** Whether it's about Go, open source, engineering leadership, or opportunities — I'd love to hear from you. - -**Form fields:** -- Name -- Email -- Message -- Send button - ---- - -## Footer - -**Links:** -- ainsley.dev -- GitHub (github.com/ainsleyclark) -- LinkedIn (linkedin.com/in/ainsleyclark) -- X / Twitter (@ainsleydev) - -**Optional tagline:** -Built with Go, obviously. diff --git a/sites/ainsley-clark/content/_index.md b/sites/ainsley-clark/content/_index.md index f3d3a547..5c17593b 100644 --- a/sites/ainsley-clark/content/_index.md +++ b/sites/ainsley-clark/content/_index.md @@ -1,7 +1,8 @@ --- -title: Engineer, Author, Speaker & Mentor | Full Stack Software Engineer (GoLang | PHP | TypeScript) at @justeat. +title: Full Stack Engineer, Author, Speaker & Mentor +description: Ainsley Clark, a full stack software engineer working at Just Eat Takeaway.com & founder of ainsley.dev with a passion for all things tech. heading: Shipping Go at scale*
Growing engineers
Building communities that last -lead: Senior/Lead Software Engineer at Just Eat Takeaway.com. GopherCon UK speaker. Chair of the Go Guild at JET and open-source contributor. Passionate about writing well-crafted Go, mentoring engineers, and building communities where Gophers thrive. +lead: Senior software engineer at Just Eat Takeaway.com, owner of ainsley.dev (web design & dev), conference speaker & leader. & open-source contributor. Passionate about writing well-crafted Go, mentoring the next generation, and building communities where engineers thrive. styles: - scss/pages/home.scss bio: @@ -9,12 +10,13 @@ bio: title: "Hi, I'm Ainsley." content: |

Hi, I'm Ainsley

-

Most of my time is spent writing Go at Just Eat Takeaway.com, where I work as a Senior/Lead Software Engineer across platform services, architecture, and tooling. The rest goes into the thing I care about just as much — growing engineers and the Go community.

-

At JET, that meant founding and chairing the Go Guild, a cross-organisation community focused on Go adoption, engineering standards, and knowledge sharing. We've published over 10 episodes on YouTube, hosted speakers like Eleanor McHugh, and built a space where Gophers across the company come together to learn and set the bar higher.

-

In 2025, I spoke at GopherCon UK on how Just Eat uses tooling to deploy Go micro-services in minutes. Before that, I presented at JET TechFest and started creating content around Go best practices — from writing well-crafted packages to effective error handling.

-

Before JET, I spent four years at Reddico as a Senior Full Stack Engineer, designing and shipping an intelligent link-building tool that processed 100k+ tasks daily across ten bespoke micro-services. I also founded ainsley.dev, a registered software company that won Website of the Year in its first year — end-to-end experience from branding and design through to architecture and deployment.

-

Open source is a big part of how I contribute back. go-mail (190+ stars) is a cross-platform mail driver for Go. Verbis is a CMS built entirely in Go. WebKit turns a single app.json manifest into production-ready infrastructure and CI/CD pipelines.

-

The thread through all of it — whether it's code review, pair programming, one-on-ones, or running a guild — is making the engineers around me better and building communities where people actually grow.

+

I've always been a bit of a geek at heart. Starting with off with a pair off decks as a kid which led me into a Music Technology degree, and somewhere along the way turned into a career building software. I can say I love what I do & always excited about all things tech.

+

Engineering

+

Most of my time is spent writing Go at Just Eat Takeaway.com, leading platform work across architecture, services and tooling at scale.

+

Advocating

+

Giving back matters to me, whether that's speaking at conferences, contributing to open source, or contributing to the Just Eat Go Guild to raise engineering standards across teams.

+

Mentoring

+

I've always loved investing in people, and watching people grow through one to ones, code reviews and pair programming.

skills: - title: Languages & Frameworks list: diff --git a/themes/shared/assets/scss/components/_logo-carousel.scss b/themes/shared/assets/scss/components/_logo-carousel.scss index 69294534..03bf0498 100644 --- a/themes/shared/assets/scss/components/_logo-carousel.scss +++ b/themes/shared/assets/scss/components/_logo-carousel.scss @@ -25,7 +25,7 @@ @include media-desk { top: -100px; - bottom: -300px; + bottom: -100px; } }