diff --git a/.github/workflows/terraform.yml b/.github/workflows/terraform.yml new file mode 100644 index 0000000..8a8b41b --- /dev/null +++ b/.github/workflows/terraform.yml @@ -0,0 +1,54 @@ +name: terraform (cloudflare) + +# DNS/redirects change rarely, so apply is manual (a button). PRs that touch +# terraform/ get a plan for review. +on: + pull_request: + paths: ["terraform/**"] + workflow_dispatch: + inputs: + action: + description: "plan or apply" + type: choice + options: [plan, apply] + default: plan + +permissions: + contents: read + +concurrency: + group: terraform-cloudflare + cancel-in-progress: false + +jobs: + terraform: + runs-on: ubuntu-latest + defaults: + run: + working-directory: terraform + env: + # Cloudflare (your repo secrets) + TF_VAR_cloudflare_api_token: ${{ secrets.CF_API }} + TF_VAR_account_id: ${{ secrets.CF_ACCOUNT }} + # Terraform Cloud holds the state (free tier). Needs a TF_API_TOKEN secret + # and a TF_CLOUD_ORG variable; see terraform/README.md. + TF_TOKEN_app_terraform_io: ${{ secrets.TF_API_TOKEN }} + steps: + - uses: actions/checkout@v4 + + - name: Enable remote state (Terraform Cloud) + run: sed "s/__TF_CLOUD_ORG__/${{ vars.TF_CLOUD_ORG }}/" backend.tf.example > backend.tf + + - uses: hashicorp/setup-terraform@v3 + + - run: terraform init -input=false + - run: terraform fmt -check + - run: terraform validate + + - name: Plan + if: ${{ github.event_name == 'pull_request' || inputs.action == 'plan' }} + run: terraform plan -input=false + + - name: Apply + if: ${{ github.event_name == 'workflow_dispatch' && inputs.action == 'apply' }} + run: terraform apply -input=false -auto-approve diff --git a/assets/js/app.js b/assets/js/app.js index b576bdb..536fa4e 100644 --- a/assets/js/app.js +++ b/assets/js/app.js @@ -53,6 +53,25 @@ /* ---------- three.js hero ---------- */ var hero = { renderer: null, raf: null, running: false }; + // A soft circular sprite so the particles render as round dots, not squares. + var _sprite = null; + function makeRoundSprite() { + if (_sprite) return _sprite; + var c = document.createElement("canvas"); + c.width = c.height = 64; + var g = c.getContext("2d"); + var grd = g.createRadialGradient(32, 32, 0, 32, 32, 32); + grd.addColorStop(0, "rgba(255,255,255,1)"); + grd.addColorStop(0.45, "rgba(255,255,255,0.85)"); + grd.addColorStop(1, "rgba(255,255,255,0)"); + g.fillStyle = grd; + g.beginPath(); + g.arc(32, 32, 32, 0, Math.PI * 2); + g.fill(); + _sprite = new THREE.CanvasTexture(c); + return _sprite; + } + function startHero() { var canvas = document.getElementById("hero-canvas"); if (!canvas || typeof THREE === "undefined" || hero.running) return; @@ -90,8 +109,9 @@ geo.setAttribute("position", new THREE.BufferAttribute(positions, 3)); geo.setAttribute("color", new THREE.BufferAttribute(colors, 3)); var mat = new THREE.PointsMaterial({ - size: 0.16, vertexColors: true, transparent: true, opacity: 0.85, - depthWrite: false, blending: THREE.AdditiveBlending + size: 0.22, vertexColors: true, transparent: true, opacity: 0.9, + depthWrite: false, blending: THREE.AdditiveBlending, + map: makeRoundSprite(), alphaTest: 0.02 }); var points = new THREE.Points(geo, mat); scene.add(points); diff --git a/assets/scss/main.scss b/assets/scss/main.scss index 034a633..20a4f1d 100644 --- a/assets/scss/main.scss +++ b/assets/scss/main.scss @@ -16,7 +16,10 @@ --accent: #ffd166; /* neurodiversity gold — focus + highlights */ --accent-ink: #1a1430; /* text on accent */ --shadow: 0 14px 40px rgba(0, 0, 0, 0.45); + --coffee: #d8a47f; /* warm latte — the "and Coffee" nod */ --pride: linear-gradient(90deg, #e63946, #f4a261, #2a9d8f, #457b9d, #9d4edd); + /* Brighter pride stops so every word stays legible on the dark background. */ + --hero-gradient: linear-gradient(90deg, #ff8fa3, #ffd166, #6ee7d2, #8ecae6, #d0b3ff); color-scheme: dark; } @@ -33,6 +36,9 @@ --accent: #b8860b; /* darker gold for contrast on light */ --accent-ink: #1c1633; /* dark text on gold — AA on light theme */ --shadow: 0 14px 40px rgba(40, 30, 80, 0.14); + --coffee: #8a4b2f; /* deeper roast for contrast on cream */ + /* Deeper, saturated stops that stay readable on the cream background. */ + --hero-gradient: linear-gradient(90deg, #d62839, #c25e00, #1a7f6b, #2a6f97, #7b2fd4); color-scheme: light; } @@ -175,12 +181,15 @@ img { max-width: 100%; height: auto; display: block; } .hero__title { font-size: clamp(2.1rem, calc(1.3rem + 3.6vw), 4rem); margin: 0 0 1.2rem; - background: var(--pride); - -webkit-background-clip: text; background-clip: text; color: transparent; + background: var(--hero-gradient); + -webkit-background-clip: text; + background-clip: text; + -webkit-text-fill-color: transparent; + color: var(--text); /* fallback colour if clip is unsupported */ } -/* Keep a solid fallback so the headline is always legible if clip is unsupported. */ -@supports not (background-clip: text) { - .hero__title { color: var(--text); background: none; } +/* If neither prefixed nor unprefixed clip is supported, show solid readable text. */ +@supports not ((-webkit-background-clip: text) or (background-clip: text)) { + .hero__title { -webkit-text-fill-color: var(--text); background: none; } } .hero__lede { font-size: 1.15rem; color: var(--text-muted); margin: 0 auto 2rem; max-width: 40rem; } .hero__actions { display: flex; gap: 0.8rem; justify-content: center; flex-wrap: wrap; } @@ -217,6 +226,43 @@ img { max-width: 100%; height: auto; display: block; } .focus-card__title { margin: 0 0 0.5rem; font-size: 1.25rem; } .focus-card p { margin: 0; color: var(--text-muted); } +/* ========================================================================= + Two-flavor split (home) + landing pages (/dev, /audhd) + ========================================================================= */ +.flavors { max-width: $maxw; margin-inline: auto; padding: 3.5rem 1.25rem 1rem; } +.flavors__grid { + display: grid; gap: 1.4rem; + grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); +} +.flavor-card { + display: flex; flex-direction: column; gap: 0.6rem; + background: var(--surface); border: 1px solid var(--border); + border-radius: $radius; padding: 1.8rem; box-shadow: var(--shadow); + border-top: 4px solid var(--border); +} +.flavor-card--dev { border-top-color: var(--coffee); } +.flavor-card--audhd { border-top-color: var(--link); } +.flavor-card__kicker { + margin: 0; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; + font-size: 0.78rem; color: var(--text-muted); +} +.flavor-card__title { margin: 0; font-size: 1.5rem; } +.flavor-card__lede { margin: 0; color: var(--text-muted); } +.flavor-card__list { margin: 0.2rem 0 1rem; padding-left: 1.1rem; color: var(--text-muted); } +.flavor-card__list li { margin: 0.15rem 0; } +.flavor-card .btn { align-self: flex-start; margin-top: auto; } + +.landing__head { max-width: $readw; margin-bottom: 1rem; } +.landing__kicker { + margin: 0 0 0.5rem; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; + font-size: 0.82rem; color: var(--text-muted); +} +.landing__title { font-size: clamp(1.9rem, calc(1.3rem + 2.4vw), 3rem); margin: 0 0 0.8rem; } +.landing__lede { font-size: 1.2rem; color: var(--text-muted); margin: 0 0 1.4rem; } +.landing__cta { display: flex; gap: 0.7rem; flex-wrap: wrap; margin: 0 0 1rem; } +.landing--dev .landing__title { border-left: 5px solid var(--coffee); padding-left: 0.7rem; } +.landing--audhd .landing__title { border-left: 5px solid var(--link); padding-left: 0.7rem; } + /* ========================================================================= Post cards / grid ========================================================================= */ @@ -311,7 +357,7 @@ img { max-width: 100%; height: auto; display: block; } .page-head__desc { color: var(--text-muted); margin: 0; } .notfound { text-align: center; } -.notfound__code { font-size: clamp(4rem, 10vw, 8rem); margin: 0; background: var(--pride); -webkit-background-clip: text; background-clip: text; color: transparent; } +.notfound__code { font-size: clamp(4rem, 10vw, 8rem); margin: 0; background: var(--hero-gradient); -webkit-background-clip: text; background-clip: text; -webkit-text-fill-color: transparent; color: var(--text); } .notfound__msg { color: var(--text-muted); font-size: 1.2rem; margin: 0 0 1.5rem; } /* ========================================================================= @@ -319,18 +365,39 @@ img { max-width: 100%; height: auto; display: block; } ========================================================================= */ .site-footer { border-top: 1px solid var(--border); background: var(--bg-elev); margin-top: 3rem; } .site-footer__inner { max-width: $maxw; margin-inline: auto; padding: 2.5rem 1.25rem; display: grid; gap: 1.2rem; } -.site-footer__title { font-family: $font-display; font-size: 1.3rem; margin: 0; } +.site-footer__title { font-family: $font-display; font-size: 1.3rem; margin: 0; display: inline-flex; align-items: center; gap: 0.5rem; } +.site-footer__coffee { color: var(--coffee); display: inline-flex; } .site-footer__bio { color: var(--text-muted); margin: 0.4rem 0 0; max-width: 40rem; } .social__list { list-style: none; display: flex; gap: 0.5rem; padding: 0; margin: 0; flex-wrap: wrap; } .social__link { width: 2.6rem; height: 2.6rem; border-radius: 50%; border: 1px solid var(--border); background: var(--surface); display: inline-flex; align-items: center; justify-content: center; - color: var(--text); font-size: 1.1rem; + color: var(--text); transition: color 0.2s $ease, border-color 0.2s $ease, transform 0.2s $ease; } -.social__link:hover { color: var(--link); border-color: var(--link); } +.social__link:hover { color: var(--link); border-color: var(--link); transform: translateY(-2px); } +.social__icon { width: 1.2rem; height: 1.2rem; display: block; } .site-footer__copyright { color: var(--text-muted); font-size: 0.9rem; margin: 0; } .site-footer__copyright a { color: var(--link); } +.site-footer__brewed { color: var(--text-muted); font-size: 0.82rem; margin: 0; opacity: 0.85; font-style: italic; } + +/* ========================================================================= + Coffee cup (the "and Coffee" motif) — header brand + footer + ========================================================================= */ +.coffee-cup { display: block; } +.coffee-cup__steam { opacity: 0.75; } +.brand__coffee { color: var(--coffee); display: inline-flex; } +.brand__coffee .coffee-cup { width: 22px; height: 22px; } +@media (prefers-reduced-motion: no-preference) { + [data-motion="on"] .coffee-cup__steam { + animation: coffee-steam 3.2s ease-in-out infinite; + transform-origin: center; + } +} +@keyframes coffee-steam { + 0%, 100% { opacity: 0.35; transform: translateY(0); } + 50% { opacity: 0.85; transform: translateY(-1px); } +} /* ========================================================================= Author aside (siteinfo) diff --git a/config.yaml b/config.yaml index 685cb30..5bf3b56 100644 --- a/config.yaml +++ b/config.yaml @@ -1,5 +1,5 @@ ######################## default configuration #################### -baseURL: / +baseURL: https://kellyand.coffee/ title: Kelly and Coffee locale: en-US defaultContentLanguage: en @@ -15,18 +15,18 @@ removePathAccents: true # Because I may type accents # sectionPagesMenu: "main" menu: main: - - name: Posts - url: /posts + - name: Tech + url: /dev/ weight: 1 - - name: About - url: /about + - name: Advocacy + url: /audhd/ weight: 2 - - name: Tags - url: /tags + - name: Blog + url: /posts/ + weight: 3 + - name: About + url: /about/ weight: 4 - - name: Resume - url: /resume - weight: 5 #################### Taxonomies;grouping #################### # Must include default tags and categories @@ -43,15 +43,15 @@ params: Notes from a neurodivergent, queer DevOps engineer on tech, accessibility, and living as your whole self. subtitle: Neurodivergent · LGBTQIA+ · Tech advocate author: Kelly Crabbé - heroTitle: Building a kinder, more accessible corner of tech. + heroTitle: Automation by day. Advocacy out loud. heroLede: >- - I'm Kelly — a DevOps engineer, advocate, and writer. I share what I'm learning about living and working as a neurodivergent, queer person in technology, and how we can build things that include everyone. + I'm Kelly — a DevOps & automation engineer who also writes and speaks about being AuDHD and queer in tech. Two sides of the same person. Pick a door. avatar: true bio: >- I am a geeky, happily married, neurodivergent and queer woman who works in DevOps after a 15-year affair with system administration. I write about tech, accessibility, and showing up as my whole self — alongside my wife, our plus-daughter, and a very particular English Cocker Spaniel named Lou. googleAnalitycs: G-WYTPMHCV3B mobile: +32479695560 - email: kelly.crabbe@gmail.com + email: kelly@kellyand.coffee location: "Neerlinter,België" copyright: >- | copyright © 2022 [Kelly Crabbé](https://kellyand.coffee) @@ -67,7 +67,7 @@ params: - title: twitter link: "https://twitter.com/kaymoonwitch" - title: instagram - link: "https://https://instagram.com/kaymoonwitch" + link: "https://instagram.com/kaymoonwitch" - title: github link: "https://github.com/moonwitch" - title: linkedin diff --git a/content/audhd.md b/content/audhd.md new file mode 100644 index 0000000..26ccdf2 --- /dev/null +++ b/content/audhd.md @@ -0,0 +1,28 @@ +--- +title: "Neurodiversity & Advocacy" +description: "Writing and public speaking on being AuDHD and queer in tech — accessibility, masking, and showing up as your whole self." +layout: landing +flavor: audhd +kicker: "Neurodivergent · LGBTQIA+ · in tech" +cta: + text: "Invite me to speak" + url: "mailto:kelly@kellyand.coffee?subject=Speaking%20invitation" +cta2: + text: "Read the blog" + url: "/posts/" +--- + +I'm autistic and ADHD — AuDHD — and queer, and I work in tech. For a long time I kept those parts of myself folded away at work. I don't anymore, and I've started writing and speaking about it, because the version of me who needed to hear "you're not broken, you're just wired differently" didn't have anyone saying it. + +## What I talk about + +- **Being AuDHD in a technical career** — the real accommodations, executive function, and the cost of masking — not the inspirational-poster version. +- **Accessibility & inclusive defaults** — why building for the edges makes things better for everyone, and how teams can do it without a big budget. +- **Showing up whole** — being openly queer *and* neurodivergent at work, and what managers can do to make that safe. +- **The honest middle of a neurodivergent career** — the wins, the wall, and the bits nobody puts on LinkedIn. + +## Bring me to your stage + +Meetup, conference track, panel, internal lunch-and-learn — if you want someone to talk plainly and warmly about neurodivergence and queerness in tech, I'd love to. I'm not here to be the polished expert with everything figured out; I'm here as someone a few steps down the same road, turning around to say *it's walkable, and here's where the potholes are.* + +I write about all of this on [the blog](/posts/), too. You bring the audience — I'll bring the honesty (and, let's be real, the coffee). diff --git a/content/dev.md b/content/dev.md new file mode 100644 index 0000000..28141d4 --- /dev/null +++ b/content/dev.md @@ -0,0 +1,27 @@ +--- +title: "Kelly & Coffee — Tech & Cloud" +description: "You bring the coffee, I'll bring the automation. DevOps, cloud engineering, and low-code workflows that get your platform running." +layout: landing +flavor: dev +kicker: "Automation · Cloud · DevOps" +cta: + text: "Book a chat" + url: "mailto:kelly@kellyand.coffee?subject=Kelly%20%26%20Coffee%20%E2%80%94%20let's%20talk" +cta2: + text: "GitHub" + url: "https://github.com/moonwitch" +--- + +I'm a DevOps and automation engineer. I like taking the fiddly, repetitive, error-prone parts of running software off people's plates so they can get back to the work that actually needs a human. The unglamorous plumbing — pipelines, infrastructure, the workflow that quietly runs at 3am so nobody has to — is genuinely my favourite thing to build. + +## What I do + +- **CI/CD & DevOps** — build, test, and deployment pipelines that are boring in the best way: predictable, repeatable, and hard to break. +- **Cloud engineering on GCP** — infrastructure as code, sensible defaults, and platforms that scale without drama. +- **Low-code & n8n automation** — wiring your tools together so the busywork happens on its own. If you're doing the same thing by hand twice a week, it probably shouldn't be you doing it. + +## How I work + +Plainly, and without jargon for its own sake. I'd rather explain a thing clearly than sound clever about it. I document as I go, I automate the boring bits, and I leave systems in a state the next person (often future-me) can actually understand. + +If you've got a platform that needs taming, a pile of manual steps that should be a workflow, or a cloud setup that's grown into a thicket — let's have a coffee about it. diff --git a/content/posts/2026-06-13-audhd-when-autism-and-adhd-share-a-brain.md b/content/posts/2026-06-13-audhd-when-autism-and-adhd-share-a-brain.md new file mode 100644 index 0000000..9199d8c --- /dev/null +++ b/content/posts/2026-06-13-audhd-when-autism-and-adhd-share-a-brain.md @@ -0,0 +1,48 @@ +--- +title: "AuDHD: When Autism and ADHD Share a Brain" +date: "2026-06-13" +lastmod: "2026-06-13" +categories: + - blog +tags: + - neurodivergent + - autism + - adhd + - audhd +comments: true +draft: true +--- + +People are often surprised you can be both autistic and ADHD at once. They picture them as opposites — the autistic person who craves sameness and rigid routine, and the ADHD person who's all impulse and chaos and novelty. So how do you fit both in one head? + +The honest answer: it's exactly as contradictory as it sounds, and learning to live with the contradiction is a lot of the work. Welcome to AuDHD. + +## A foot on each pedal + +The simplest way I can describe it is this: autism is the part of me that wants the world to be predictable, ordered, and calm. ADHD is the part of me that gets bored senseless by predictable, ordered, and calm. One half builds the careful system; the other half kicks it over because it wanted something *new*. I am, fairly often, accelerating and braking at the same time. + +That tension shows up everywhere. I need routine to function — but routine understimulates me until I sabotage it. I want to hyperfocus on one deep thing — but I also can't filter out the six other things pulling at my attention. I plan meticulously — and then act on a whim and surprise myself. It can feel less like having two traits and more like co-hosting a podcast with someone who constantly disagrees with me. + +## It's not "a bit of both," it's a third thing + +For a while I tried to understand myself as autism plus ADHD, like two separate apps running side by side. That never quite worked, because they don't just sit next to each other — they interact, and the result is its own thing. + +The ADHD can mask the autism: my impulsiveness and chattiness don't match the stereotype, so people miss the autistic part. The autism can mask the ADHD: my routines and systems look so organised that nobody clocks the executive-function struggle underneath. Each one hides the other, which is a big reason late diagnosis is so common for people like me — we present as a confusing average that matches neither checklist cleanly. + +And the burnout is its own beast. Autistic burnout and ADHD exhaustion compound. The masking it takes to look "fine" while two opposing systems argue inside you is genuinely expensive, and the bill always comes due. + +## What actually helps + +I don't have a tidy fix, because it isn't a problem to be fixed — it's a way of being that needs accommodating. But a few things have made the contradiction livable: + +- **Routine with escape hatches.** I keep the structure my autistic side needs, but I deliberately build in novelty and choice so the ADHD side doesn't go looking for chaos on its own terms. +- **Externalising everything.** Lists, timers, reminders, written-down plans. I do not trust my brain to hold state; I trust paper and software. (I work in automation — letting machines remember things is sort of my whole personality.) +- **Sensory management is not optional.** Controlling noise and input isn't fussiness; it's the difference between a functional day and a fried one. Protecting my sensory environment buys back focus I'd otherwise lose. +- **Rest counts as maintenance, not reward.** Recovery time isn't something I earn after being productive. It's the thing that makes productivity possible at all. +- **Self-compassion over self-optimisation.** The goal isn't to hack myself into a neurotypical shape. It's to work *with* the brain I have. + +## Why I named a domain after it + +There's a word for this overlap now — AuDHD — and I like that it exists, because for a long time there wasn't one, and not having a word makes you feel like a glitch instead of a category. I even own the domain `audhd.cloud`, which tells you roughly how much this framing means to me: it's where the cloud-engineering half of my brain and the neurodivergent half finally share a name. + +If you're sitting with the same contradiction — needing both order and novelty, both depth and stimulation, and feeling like no single label ever fit — you might not be failing at being autistic *or* ADHD. You might just be doing both at once. It's a lot. It's also, on the good days, a genuinely interesting way to be alive. diff --git a/content/posts/2026-06-13-diagnosed-let-go-and-finding-the-volume-knob.md b/content/posts/2026-06-13-diagnosed-let-go-and-finding-the-volume-knob.md new file mode 100644 index 0000000..3df7020 --- /dev/null +++ b/content/posts/2026-06-13-diagnosed-let-go-and-finding-the-volume-knob.md @@ -0,0 +1,56 @@ +--- +title: "Diagnosed, Let Go, and Finding the Volume Knob" +date: "2026-06-13" +lastmod: "2026-06-13" +categories: + - blog +tags: + - neurodivergent + - adhd + - autism + - personal + - work +comments: true +draft: true +--- + +I've been putting off writing this one, which is very on-brand for me. It's the post where the personal and the professional collide — the stretch of a couple of years where I got a name for how my brain works, lost a job I thought I wanted, and ended up somewhere that, of all the lovely ironies, makes a living helping people turn the volume down. Let me try to tell it honestly. + +> A note before I start: this is my story, from my chair. I'm not writing it as a complaint about anyone in particular, and it isn't medical advice. It's just what happened, and what I learned. + +## Getting the name for it + +For most of my life I assumed everyone was running the same race I was, just complaining about it less. That everyone white-knuckled their way through open-plan offices, rehearsed small talk in the car, and crashed on the sofa at 6pm because being a person all day had used up the whole battery. That everyone's feelings arrived at the volume mine did. + +They don't. I found that out properly as an adult — in 2023, in my late thirties — when I finally went looking for answers and came back with two words that suddenly explained a *lot*: autistic, and ADHD. Both. The combination even has a nickname, **AuDHD**, and once I had it, the puzzle pieces stopped fighting each other. The hyperfocus and the total inability to start a boring task. The way criticism doesn't bruise so much as detonate. The sensory stuff I'd spent decades calling "being difficult." The exhaustion that wasn't laziness; it was the cost of pretending all day. + +A diagnosis doesn't fix anything overnight. What it gave me was a manual. I stopped reading my own behaviour as a series of character flaws and started reading it as a system with particular needs — predictable, once you know the wiring. That reframe alone was worth the whole process. + +## The job that didn't work out + +Here's the part that still stings to type. Not long after I'd started understanding myself better, a job I'd been excited about came to an end — not on my terms. I was let go. + +I'm not going to relitigate it here, and I'm deliberately not pointing fingers, because the truth is messier and more human than a villain story. But I'll say the thing I most needed to hear at the time: a workplace not being the right fit for how you're built is not the same as you being broken. I had spent so much energy masking — performing the calm, neurotypical-shaped version of competent — that by the time things went wrong, there was very little of *me* left in the room to advocate for. When you're running on a mask, you don't have the bandwidth to also explain why you need the mask. + +RSD made the ending so much worse than the facts warranted. My brain took "this role isn't working" and translated it, instantly and physically, into *you are a failure and everyone always knew it.* It took a long time, and a lot of help, to separate the real, survivable disappointment from the catastrophe my nervous system insisted on. + +What I took from it, eventually, wasn't bitterness. It was a quiet, stubborn decision: never again would I try to earn my place by hiding the thing that actually needed accommodating. + +## Finding the volume knob + +And then — life's sense of humour — I landed at a company that makes earplugs. + +I work at Loop now, and I won't pretend I didn't laugh when the pieces lined up. A neurodivergent person who spent years overwhelmed by noise, who needs to manage her sensory world carefully to function, working somewhere whose entire reason for existing is giving people a way to turn the volume down without checking out of their own lives. It's the most fitting metaphor I could have stumbled into. Some days the job *is* the metaphor. + +More than the poetry of it, though, it's the first place where I haven't felt I had to choose between being honest about my brain and being taken seriously. Where "I work better like this" is a sentence that gets a "sure," not a raised eyebrow. I don't want to over-romanticise a workplace — they're all imperfect, and I'm still learning where my edges are. But the difference between an environment that treats your needs as a negotiation and one that treats them as information is enormous. It's the difference between surviving the week and actually having something left over at the end of it. + +## What I'd tell past-me + +If I could send a note back to the version of me in the middle of all this — diagnosed but raw, freshly let go, convinced it was proof of something terrible — it would be short: + +- The diagnosis is a map, not a verdict. Use it to route around the potholes, not to decide you're a write-off. +- A bad fit is data, not a sentence. It tells you what you need, if you're willing to listen instead of just bleed. +- Masking has a price, and you've been paying it in a currency you can't afford. Spend less of yourself pretending. +- The right room exists. It might, hilariously, sell earplugs. Keep going until you find it. + +I'm still a work in progress — gloriously, permanently so. But I'm doing it as myself now, at a volume I can actually live at. That turns out to be the whole thing. diff --git a/content/posts/2026-06-13-getting-named-at-forty-my-audhd-diagnosis.md b/content/posts/2026-06-13-getting-named-at-forty-my-audhd-diagnosis.md new file mode 100644 index 0000000..772b110 --- /dev/null +++ b/content/posts/2026-06-13-getting-named-at-forty-my-audhd-diagnosis.md @@ -0,0 +1,49 @@ +--- +title: "Getting Named at Forty: My AuDHD Diagnosis" +date: "2026-06-13" +lastmod: "2026-06-13" +categories: + - blog +tags: + - neurodivergent + - autism + - adhd + - audhd + - personal +comments: true +draft: true +--- + +I was nearly forty when I finally got the words. Autistic. ADHD. Both — the combination some of us call AuDHD. The autism piece landed first, early in 2023; the ADHD assessment followed later that same year. By the time it was all written down, I'd spent decades quietly assuming I was just a slightly defective version of a normal person. Turns out I'm a perfectly good version of a different one. + +I want to write about getting diagnosed as an adult, because the story you usually hear — kid bounces off the walls, gets spotted at seven, sorted by ten — is not the story a lot of us live. Plenty of us, especially women and especially people who learned early to perform "fine," slip through every net until something gives. + +## Why it took so long + +Late diagnosis isn't a mystery once you see the mechanics. I was bright enough to compensate, anxious enough to mask, and old enough that when I was a kid, the criteria barely imagined someone like me. Autistic? But I make eye contact and have a wife and tell jokes. ADHD? But I held down a demanding career for years. The stereotypes are narrow, and I didn't match the cartoon, so nobody — including me — went looking. + +What I *did* have was a lifetime of evidence I'd misfiled. Exhaustion I called laziness. Overwhelm I called drama. A head that never stopped, focus that ran either at zero or at a hundred with nothing in between, and a nervous system that treated a slightly-off email like a threat to my life. I'd built an elaborate scaffolding of lists and routines and coping tricks to hold it all up, and I genuinely thought everyone was doing the same and just complaining less. + +## The assessment, and the strange relief + +Going through an adult assessment is a peculiar experience. You sit in a room and narrate your entire life to someone who is gently checking it against a framework, and slowly the framework starts to fit better than any story you'd told yourself. There's a specific feeling when a stranger describes your insides more accurately than you ever have. It's unnerving and it's a relief in equal measure. + +When the conclusions came back, I cried — not from sadness, exactly. More like the release you feel when you finally put down something heavy you'd forgotten you were even carrying. It wasn't "something is wrong with me" confirmed. It was "the thing you've been fighting has a name, and it was never a character flaw." That reframe is the whole gift of a late diagnosis. + +## The grief nobody warns you about + +But I'd be lying if I sold it as pure relief. There's grief too, and people don't mention that part enough. + +You grieve the years you spent blaming yourself for things that were never moral failings. You grieve the version of you who might have struggled less with a bit of understanding and a few accommodations, decades earlier. You replay old scenes — the job that went sideways, the friendships that frayed, the times you were called "too much" or "too sensitive" — and you see them in a new, kinder, sadder light. + +I've made my peace with it, mostly. The grief and the relief turn out to be roommates, not enemies. You can mourn the long detour and still be glad you finally arrived. + +## What changed afterward + +The diagnosis didn't hand me a new personality. I'm the same person I was the day before the report. What changed is what I do with that person. + +I stopped trying to fix things that aren't broken and started building around how I actually work. I ask for what I need without apologising for the asking. I let the lists be lists, the routines be routines, and the rest days be non-negotiable instead of guilty secrets. When my brain refuses a task, I treat it as information rather than a referendum on my worth. And I've gotten a lot more honest — with myself, and increasingly out loud — about being autistic and ADHD, because the masking was never sustainable and pretending only ever served other people's comfort. + +If you're an adult wondering whether the puzzle pieces of your life might click into a different picture: you're allowed to go looking. A name is not a cage. For me it was the opposite — the first map I'd ever been handed that matched the actual terrain. + +I got named at forty. I only wish I'd had the words sooner — but I have them now, and I'm not putting them back. diff --git a/content/posts/2026-06-13-why-i-want-to-talk-about-this-out-loud.md b/content/posts/2026-06-13-why-i-want-to-talk-about-this-out-loud.md new file mode 100644 index 0000000..7ef08df --- /dev/null +++ b/content/posts/2026-06-13-why-i-want-to-talk-about-this-out-loud.md @@ -0,0 +1,45 @@ +--- +title: "Why I Want to Talk About This Out Loud" +date: "2026-06-13" +lastmod: "2026-06-13" +categories: + - blog +tags: + - neurodivergent + - lgbtqia + - advocacy + - tech +comments: true +draft: true +--- + +For most of my career I worked hard at being unremarkable. Not at the job — at being a *person* at the job. I kept the queer parts and the neurodivergent parts folded away where they couldn't cost me anything, and I told myself that was professionalism. It wasn't. It was camouflage, and it was exhausting, and it quietly taught everyone around me that people like me apparently don't exist in tech. + +I'm done doing that. And lately I've started wanting to do the opposite — to talk about this out loud, on stages and in writing, to whoever will listen. This post is me saying that intention into the open so I can't quietly take it back. + +## Representation isn't a nice-to-have + +Here's what folding myself away actually did: it removed a data point. Every time I passed as a tidy, neurotypical, unmarked engineer, I made it a little less imaginable that an autistic, ADHD, queer woman could be standing exactly where I was standing. I was, in a small way, helping to keep the door looking closed. + +When you grow up not seeing anyone like you doing the thing you want to do, you quietly conclude the thing isn't for you. I don't want to be another absence in that picture. Visibility sounds abstract until you remember it's just the everyday act of letting people see that you're here, doing fine, taking up the space. + +## The talks I wish someone had given me + +I think a lot about what I needed earlier and didn't get. Nobody told me that struggling to start tasks wasn't a moral failing. Nobody explained that the sensory overwhelm had a name and that I was allowed to manage it. Nobody modelled being openly queer *and* openly neurodivergent in a technical career and being respected anyway. + +So those are the talks I want to give: + +- What it actually looks like to work in DevOps with an AuDHD brain — the real accommodations, not the inspirational poster version. +- Why accessible and inclusive defaults make teams better, not just kinder. +- How to show up as your whole self at work without burning out from the masking, and what managers can do to make that safe. +- The honest, unglamorous middle of a neurodivergent career: the wins, the wall, and the bits nobody puts on LinkedIn. + +Not as an expert with it all figured out. As someone a few steps down the same road, turning around to say: it's walkable, and here's where the potholes are. + +## Why me, why now + +I'm not the most senior engineer in any room, and I'll never be the slickest speaker. For a long time that felt like a reason to stay quiet. I've flipped it: the point isn't polish, it's *honesty*. There are plenty of confident people on stages already. There are far fewer who'll stand up and say "this is hard, here's how it actually feels, and you're not broken for finding it hard too." That's the talk I can give that not everyone can. + +And the timing is simple. I finally have the words for how my brain works. I've finally got an environment where being open about it is safe. The masking already cost me enough years — I'm not interested in spending the next ones quiet too. + +So: if you organise a meetup, a conference track, a panel, an internal lunch-and-learn, and you want someone to talk plainly about being neurodivergent and queer in tech — about accessibility, about masking, about building things that include everyone — I'd genuinely love to. Reach out. I'll bring the honesty. You bring the audience, and maybe the coffee. diff --git a/layouts/_default/landing.html b/layouts/_default/landing.html new file mode 100644 index 0000000..99befe1 --- /dev/null +++ b/layouts/_default/landing.html @@ -0,0 +1,23 @@ +{{ partial "header.html" . }} + +
+
+
+ {{ with .Params.kicker }}

{{ . }}

{{ end }} +

{{ .Title }}

+ {{ with .Description }}

{{ . }}

{{ end }} + {{ with .Params.cta }} +

+ {{ .text }} + {{ with $.Params.cta2 }}{{ .text }}{{ end }} +

+ {{ end }} +
+ +
+ {{ .Content }} +
+
+
+ +{{ partial "footer.html" . }} diff --git a/layouts/index.html b/layouts/index.html index 9dc634b..c5bac1d 100644 --- a/layouts/index.html +++ b/layouts/index.html @@ -1,57 +1,59 @@ {{ partial "header.html" . }}
-
-

Neurodivergent · LGBTQIA+ · Tech

+

Automation · Cloud · Neurodivergent advocacy

- {{ with .Site.Params.heroTitle }}{{ . }}{{ else }}Building a kinder, more accessible corner of tech.{{ end }} + {{ with .Site.Params.heroTitle }}{{ . }}{{ else }}Kelly & Coffee{{ end }}

- {{ with .Site.Params.heroLede }}{{ . }}{{ else }}I'm {{ .Site.Params.author }} — a DevOps engineer, advocate, and writer. I share notes on living and working as a neurodivergent, queer person in technology, and what I'm learning about building things that include everyone.{{ end }} + {{ with .Site.Params.heroLede }}{{ . }}{{ else }}I'm Kelly — a DevOps & automation engineer who also writes and speaks about being neurodivergent and queer in tech. Two sides of the same person. Pick a door.{{ end }}

-
-

What I write about

- +
+

What I do

+
+
+

Kelly & Coffee

+

Tech & navigating the cloud

+

You bring the coffee, I'll bring the automation. DevOps, cloud engineering, and low-code workflows that get your platform running.

+
    +
  • CI/CD & DevOps
  • +
  • GCP cloud engineering
  • +
  • n8n & low-code automation
  • +
+ See the tech +
+ +
+

Neurodiversity & advocacy

+

Being AuDHD & queer in tech

+

Writing and public speaking on neurodivergence, accessibility, and showing up as your whole self in technology.

+
    +
  • Public speaking & talks
  • +
  • AuDHD & lived experience
  • +
  • Accessibility & inclusion
  • +
+ See the advocacy +
+
-

Latest posts

- All posts → +

From the blog

+ All posts →
{{ $posts := where (where .Site.RegularPages "Type" "posts") ".Params.hidden" "!=" "true" }} diff --git a/layouts/partials/coffee-cup.html b/layouts/partials/coffee-cup.html new file mode 100644 index 0000000..5436445 --- /dev/null +++ b/layouts/partials/coffee-cup.html @@ -0,0 +1,10 @@ +{{- /* Decorative steaming coffee cup. aria-hidden; purely a visual nod to the site name. */ -}} + diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html index 7c2b324..7e4f43e 100644 --- a/layouts/partials/footer.html +++ b/layouts/partials/footer.html @@ -3,7 +3,10 @@
@@ -39,8 +43,5 @@ {{ $opts := dict "minify" hugo.IsProduction "target" "es2017" }} {{ $app = $app | js.Build $opts | fingerprint }} - - - diff --git a/layouts/partials/header.html b/layouts/partials/header.html index 7015ced..82d88fe 100644 --- a/layouts/partials/header.html +++ b/layouts/partials/header.html @@ -25,6 +25,7 @@ {{ .Site.Title }} + {{ partial "coffee-cup.html" . }}