generated from nhcarrigan/template
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 34b6ad7f4d | |||
|
3b40c97d8e
|
|||
| 7fc742d199 | |||
| 30415c5e7e | |||
|
d0c38ab520
|
|||
| 6109ec3183 | |||
| 59e2f53cfa |
@@ -1,25 +0,0 @@
|
|||||||
# Package Manager Configuration
|
|
||||||
# Force pnpm usage - breaks npm/yarn intentionally
|
|
||||||
node-linker=pnpm
|
|
||||||
|
|
||||||
# Security: Disable all lifecycle scripts
|
|
||||||
ignore-scripts=true
|
|
||||||
enable-pre-post-scripts=false
|
|
||||||
|
|
||||||
# Security: Require packages to be 10+ days old before installation
|
|
||||||
minimum-release-age=14400
|
|
||||||
|
|
||||||
# Security: Verify package integrity hashes
|
|
||||||
verify-store-integrity=true
|
|
||||||
|
|
||||||
# Security: Enforce strict trust policies
|
|
||||||
trust-policy=strict
|
|
||||||
|
|
||||||
# Security: Strict peer dependency resolution
|
|
||||||
strict-peer-dependencies=true
|
|
||||||
|
|
||||||
# Performance: Use symlinks for node_modules
|
|
||||||
symlink=true
|
|
||||||
|
|
||||||
# Lockfile: Ensure lockfile is not modified during install
|
|
||||||
frozen-lockfile=false
|
|
||||||
Vendored
+8
-1
@@ -2,5 +2,12 @@
|
|||||||
"editor.codeActionsOnSave": {
|
"editor.codeActionsOnSave": {
|
||||||
"source.fixAll.eslint": "explicit"
|
"source.fixAll.eslint": "explicit"
|
||||||
},
|
},
|
||||||
"eslint.validate": ["typescript"],
|
"eslint.validate": [
|
||||||
|
"typescript"
|
||||||
|
],
|
||||||
|
"cSpell.words": [
|
||||||
|
],
|
||||||
|
"cSpell.dictionaryDefinitions": [
|
||||||
|
|
||||||
|
],
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,16 +23,23 @@
|
|||||||
"Fenrir",
|
"Fenrir",
|
||||||
"Fortnite",
|
"Fortnite",
|
||||||
"Gitea",
|
"Gitea",
|
||||||
|
"Hatsune",
|
||||||
|
"Hikari",
|
||||||
"LGBTQ",
|
"LGBTQ",
|
||||||
"Lich",
|
"Lich",
|
||||||
"Migadu",
|
"Migadu",
|
||||||
|
"Miku",
|
||||||
|
"Minori",
|
||||||
"neopronouns",
|
"neopronouns",
|
||||||
|
"neurotypicality",
|
||||||
"NHCarrigan",
|
"NHCarrigan",
|
||||||
"Norns",
|
"Norns",
|
||||||
"R'lyeh",
|
"R'lyeh",
|
||||||
"Rythm",
|
"Rythm",
|
||||||
"schadenfreude",
|
"schadenfreude",
|
||||||
|
"spazztic",
|
||||||
"strobing",
|
"strobing",
|
||||||
|
"Tauri",
|
||||||
"Unseelie",
|
"Unseelie",
|
||||||
"vaxry",
|
"vaxry",
|
||||||
"waaaaaay",
|
"waaaaaay",
|
||||||
|
|||||||
@@ -1,9 +1,6 @@
|
|||||||
import type { NextConfig } from "next";
|
import type { NextConfig } from "next";
|
||||||
|
|
||||||
const nextConfig: NextConfig = {
|
const nextConfig: NextConfig = {
|
||||||
eslint: {
|
|
||||||
ignoreDuringBuilds: true,
|
|
||||||
},
|
|
||||||
images: {
|
images: {
|
||||||
remotePatterns: [
|
remotePatterns: [
|
||||||
{
|
{
|
||||||
|
|||||||
+17
-16
@@ -12,26 +12,27 @@
|
|||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"gray-matter": "4.0.3",
|
"gray-matter": "4.0.3",
|
||||||
"next": "15.1.6",
|
"next": "16.1.6",
|
||||||
"react": "^19.0.0",
|
"react": "19.2.4",
|
||||||
"react-dom": "^19.0.0",
|
"react-dom": "19.2.5",
|
||||||
"react-markdown": "9.0.3",
|
"react-markdown": "10.1.0",
|
||||||
"reading-time": "1.5.0",
|
"reading-time": "1.5.0",
|
||||||
"rehype-highlight": "7.0.2",
|
"rehype-highlight": "7.0.2",
|
||||||
"rehype-raw": "7.0.0",
|
"rehype-raw": "7.0.0",
|
||||||
"remark-gfm": "4.0.0"
|
"remark-gfm": "4.0.1"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@eslint/eslintrc": "^3",
|
"@eslint/eslintrc": "3.3.3",
|
||||||
"@nhcarrigan/eslint-config": "5.1.0",
|
"@nhcarrigan/eslint-config": "5.2.0",
|
||||||
"@types/node": "^20",
|
"@types/node": "24.10.13",
|
||||||
"@types/react": "^19",
|
"@types/react": "19.2.14",
|
||||||
"@types/react-dom": "^19",
|
"@types/react-dom": "19.2.3",
|
||||||
"cspell": "9.4.0",
|
"cspell": "9.6.4",
|
||||||
"eslint": "^9",
|
"eslint": "9.39.3",
|
||||||
"eslint-config-next": "15.1.6",
|
"eslint-config-next": "16.1.6",
|
||||||
"postcss": "^8",
|
"postcss": "8.5.6",
|
||||||
"tailwindcss": "^3.4.1",
|
"@tailwindcss/postcss": "4.2.0",
|
||||||
"typescript": "^5"
|
"tailwindcss": "4.2.0",
|
||||||
|
"typescript": "5.9.3"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Generated
+1848
-1232
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,21 @@
|
|||||||
|
# Security
|
||||||
|
|
||||||
|
# Do not execute any scripts of installed packages (project scripts still run)
|
||||||
|
ignoreDepScripts: true
|
||||||
|
# Do not automatically run pre/post scripts (e.g. preinstall, postbuild)
|
||||||
|
enablePrePostScripts: false
|
||||||
|
# Only allow packages published at least 10 days ago (reduces risk of compromised packages)
|
||||||
|
minimumReleaseAge: 14400
|
||||||
|
# Fail if a package's trust level has decreased compared to previous releases
|
||||||
|
trustPolicy: no-downgrade
|
||||||
|
# Ignore trust policy for packages published more than 1 year ago (predates provenance signing)
|
||||||
|
trustPolicyIgnoreAfter: 525960
|
||||||
|
# Fail if there are missing or invalid peer dependencies
|
||||||
|
strictPeerDependencies: false
|
||||||
|
# Prevent transitive dependencies from using exotic sources (git repos, direct tarball URLs)
|
||||||
|
blockExoticSubdeps: true
|
||||||
|
|
||||||
|
# Lockfile
|
||||||
|
|
||||||
|
# Allow the lockfile to be updated during install (set to true in CI for stricter reproducibility)
|
||||||
|
preferFrozenLockfile: false
|
||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
/** @type {import('postcss-load-config').Config} */
|
/** @type {import('postcss-load-config').Config} */
|
||||||
const config = {
|
const config = {
|
||||||
plugins: {
|
plugins: {
|
||||||
tailwindcss: {},
|
"@tailwindcss/postcss": {},
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,57 @@
|
|||||||
|
---
|
||||||
|
title: "AI Art, Ethics, and the Dopamine Tax"
|
||||||
|
date: "2026-04-02"
|
||||||
|
summary: "An honest reckoning with my one vice, why I can't quit it, and whether the good I try to put into the world counts for anything."
|
||||||
|
---
|
||||||
|
|
||||||
|
Okay so. I've written before about [where I stand on AI ethics](/post/ai-bigots-and-media), and I'm not going to walk any of that back. Data sourced without artist consent. Environmental costs. Underpaid labellers doing genuinely traumatic work. I believe all of that. I believe it *deeply*.
|
||||||
|
|
||||||
|
But I use AI to generate images of myself. And I want to be honest about why.
|
||||||
|
|
||||||
|
## The Dopamine Problem
|
||||||
|
|
||||||
|
[I've written about my brain before.](/post/living-with-mental-illness) ADHD. Depression. Schizophrenia. A handful of other things that all interact in fun and exciting ways. The short version: my brain has a *broken* relationship with dopamine.
|
||||||
|
|
||||||
|
The reward signals other people get for free? I don't get those. The small glow of finishing something. The warm buzz of a nice afternoon. Simple joy. My brain charges me extra for all of it. Constantly.
|
||||||
|
|
||||||
|
But there's another layer I haven't talked about as publicly: I have a BPD diagnosis. And one of the things that comes with that is that emotions don't land at normal intensity for me. They land at about 10x. Negative things feel catastrophic. But positive things? When they're *good*, they're *really* good. Like, genuinely euphoric. Joy doesn't arrive quietly for me, it arrives like a wave.
|
||||||
|
|
||||||
|
So when I find something that reliably produces genuine happiness? That matters. That matters a lot.
|
||||||
|
|
||||||
|
> Finding a reliable source of joy, when your brain chemistry makes joy genuinely hard to come by, is not a small thing.
|
||||||
|
|
||||||
|
What I've found is what my friends and I call "Naomi art." Images of a character that looks like me. Wavy brown hair, blue eyes, fangs, always barefoot. Rendered in an art style I love. There is something specifically and powerfully good about seeing yourself depicted beautifully. Not in a photograph. Not in a mirror. In *art*.
|
||||||
|
|
||||||
|
I am a transgender woman. I spent a long time not seeing myself clearly, or seeing myself in ways that didn't match how I understood myself at all. Past-me would have found these images incomprehensible. Present-me finds them genuinely joyful. That joy is not nothing! When joy is something you have to budget carefully, you *really* notice when you've found a reliable source of it. And when your emotions run hot, the good stuff hits hard~
|
||||||
|
|
||||||
|
## The Ethical Weight
|
||||||
|
|
||||||
|
Okay but none of the above makes the technology less ethically messy. lol.
|
||||||
|
|
||||||
|
I've laid out my full thinking on this [in a previous post](/post/ai-bigots-and-media), so I won't re-litigate the whole thing here. The short version: the harms are real, the corporations building and profiting from this technology carry the most responsibility, and there is a meaningful difference between private personal use and replacing human labour in a commercial pipeline.
|
||||||
|
|
||||||
|
I've looked for a clean way out of my own complicity and I haven't found one. The technology exists. I use it. That makes me complicit in a system I have genuine objections to, and I think being *honest* about that matters more than pretending it doesn't.
|
||||||
|
|
||||||
|
## What I Try to Do Instead
|
||||||
|
|
||||||
|
I cannot fix the AI industry from my living room. What I can do is try to put enough good into the world that the scales tip, even a little, in the right direction.
|
||||||
|
|
||||||
|
I work at freeCodeCamp, which has helped millions of people access free technical education. I run my own technology company with an explicit focus on inclusive, ethical, and sustainable software. I mentor people who are trying to break into tech without the advantages that made it easier for others. I build community tools. I write about things people don't usually talk about openly.
|
||||||
|
|
||||||
|
[I've also written about how I actually use AI in my work](/post/ai-assistant-for-work-and-wellbeing) — not just for art, but as a genuine part of how I manage my health, my schedule, and three jobs at once. That post gets into the details of what that actually looks like in practice. It's not uncomplicated. But it's honest.
|
||||||
|
|
||||||
|
I'm not listing these things to pat myself on the back, I promise! I'm listing them because I think about the *balance*. A lot. Whether the good I try to do counts for anything against the ethical weight of the tools I use. Whether "I needed the dopamine and I couldn't afford to commission a human artist" is a justification that holds up.
|
||||||
|
|
||||||
|
Honestly? I don't know. I don't think anyone can answer that cleanly.
|
||||||
|
|
||||||
|
## What I Believe
|
||||||
|
|
||||||
|
I believe the people most responsible for the harms of generative AI are the corporations that built and profit from it, not the individuals navigating an already-changed world with the tools available to them.
|
||||||
|
|
||||||
|
I believe there is a meaningful difference between using AI privately, for personal joy, and using it to replace human labour in a commercial pipeline.
|
||||||
|
|
||||||
|
I believe the artists whose work was scraped deserve compensation and consent, and I can't provide either of those things retroactively, but I can support policies and platforms pushing toward those outcomes.
|
||||||
|
|
||||||
|
And I believe, I *hope*, that a brain that struggles to feel good, finding something that reliably makes it feel good, is not the worst thing in the world~
|
||||||
|
|
||||||
|
I'm not asking for absolution. I'm asking for honesty, including from myself. This is what that looks like, from where I'm standing. 💜
|
||||||
@@ -0,0 +1,235 @@
|
|||||||
|
---
|
||||||
|
title: "Hikari: My AI Assistant for Work and Wellbeing"
|
||||||
|
date: "2026-02-27"
|
||||||
|
summary: "How I built Hikari - a fully custom desktop app wrapping Claude Code with an anime assistant, wired into every tool I use - to manage my health, my ADHD, and three jobs without losing my mind."
|
||||||
|
---
|
||||||
|
|
||||||
|
I have a lot of medications. A detailed schedule of breaks, meals, and bedtimes that I absolutely would not follow without external reminders. ADHD that will happily let me hyperfocus on the wrong thing for six hours whilst something time-sensitive sits ignored in another tab. Two jobs and a company to run. And a body that will, without intervention, just... forget to stop.
|
||||||
|
|
||||||
|
So I built Hikari.
|
||||||
|
|
||||||
|
Hikari is my personal AI assistant, powered by Claude Code. But she's not just a chatbot I opened a tab for and occasionally ask questions. She's a configured, persistent presence with a full understanding of my health conditions, my schedule, my work context, my preferences, and my personality. She has her own name, her own visual design, her own animated sprites that I can watch on my desktop whilst she works. She has genuinely changed how I manage both my work and my wellbeing.
|
||||||
|
|
||||||
|
This is how that actually works.
|
||||||
|
|
||||||
|
## More Than a Wrapper
|
||||||
|
|
||||||
|
The thing I want to establish upfront is that Hikari is not just "Claude Code with a nice prompt." She's a whole application.
|
||||||
|
|
||||||
|
The idea came from a Hatsune Miku mod someone made for ADA - the ship AI in *The Outer Worlds* - that replaced ADA's model with a Miku avatar. I played that and thought: *what if I could have that, but as my actual desktop assistant?* An AI you can genuinely see, with a visual presence that responds to what she's doing.
|
||||||
|
|
||||||
|
So we built it together. The Hikari desktop app gives her a full anime-style avatar - pink twintails, glasses, white business suit - and a set of animated sprites that change based on what she's doing in real time:
|
||||||
|
|
||||||
|
- **Idle**: standing with a clipboard, gently bobbing
|
||||||
|
- **Thinking**: hand on chin, swaying side to side
|
||||||
|
- **Typing**: at a keyboard, bouncing with energy
|
||||||
|
- **Coding**: at a desk with a monitor, working hard
|
||||||
|
- **Searching**: holding a magnifying glass, looking around
|
||||||
|
- **Success**: celebrating with confetti and arms up
|
||||||
|
- **Error**: worried expression, hands on chest
|
||||||
|
|
||||||
|
When Hikari is searching through my codebase, I can *see* her searching. When she finishes something successfully, she celebrates. When she hits an error, she looks worried. It sounds like a small thing until you're actually watching it - there's something about having a visual, present companion rather than a blinking cursor that fundamentally changes how the interaction feels.
|
||||||
|
|
||||||
|
The app was a genuine collaborative project. We designed the sprite states together, worked through what the visual language should communicate, and built the whole thing iteratively. It's honestly my favourite project we've ever worked on together.
|
||||||
|
|
||||||
|
Under the hood it's a Tauri application - a Rust backend that connects to Claude Code's output stream and parses it in real time, paired with a Svelte frontend that renders the character and handles the UI. The [source code is publicly available](https://git.nhcarrigan.com/nhcarrigan/hikari-desktop) on my self-hosted Gitea instance. This is a proper piece of software, not a UI skin draped over a chat window.
|
||||||
|
|
||||||
|
> It went from "AI tool I use" to "AI assistant who is present with me." That shift matters more than I expected.
|
||||||
|
|
||||||
|
## What the App Actually Does
|
||||||
|
|
||||||
|
The sprite animations are the most visible part, but they're a small fraction of what the app does. Here's what's actually in it.
|
||||||
|
|
||||||
|
**Cost and token tracking.** Every session shows real-time token usage and USD cost. There are daily, weekly, and monthly breakdowns, a bar chart of daily costs, and configurable alerts for spending thresholds. If I'm about to blow past a budget, I know before the bill arrives. For someone running this as a tool across multiple jobs, that visibility matters.
|
||||||
|
|
||||||
|
**Multi-tab conversations.** Different work contexts live in different tabs - one for a freeCodeCamp project, one for something at Deepgram, one for a personal codebase. Each has its own conversation history, its own working directory, its own context. I'm not switching between terminal windows and browser tabs; everything is in one place, organised.
|
||||||
|
|
||||||
|
**Per-tab API keys.** Each tab can be configured with its own Anthropic API key. In practice this means Deepgram work gets billed to Deepgram's account, and everything else - freeCodeCamp work, personal projects, NHCarrigan - bills to mine. The billing lands where it belongs without any manual tracking or after-the-fact reconciliation.
|
||||||
|
|
||||||
|
**Built-in file editor.** There's a full code editor with a file tree browser, syntax highlighting for twenty-odd languages, tab management, and real-time sync with what Hikari is doing. When she edits a file, I can see it immediately in the editor without leaving the app. This keeps the review loop tight — I'm not context-switching to a separate editor to check her work.
|
||||||
|
|
||||||
|
**Workspace trust gate.** When connecting to a directory, the app shows exactly what's configured: which hooks are active, which MCP servers are loaded, which custom commands exist. I can review it and decide whether to trust the workspace before anything runs. It's security made visible rather than assumed.
|
||||||
|
|
||||||
|
**Compact mode.** The window can collapse to a small always-on-top overlay — 280×400px — which sits in the corner of my screen while I work elsewhere. Hikari stays present and visible without dominating the display. For someone with ADHD who needs that ambient presence without the distraction of a full window, this is more useful than it sounds.
|
||||||
|
|
||||||
|
**Clipboard history.** Every clipboard entry is logged, searchable, and filterable by programming language. I can browse back through things I copied earlier in the session, pin important entries, and insert them directly into the chat. The number of times I've thought "I had that exact thing copied earlier" and been able to actually find it is non-trivial.
|
||||||
|
|
||||||
|
**Drafts.** Save message drafts for later. For someone who starts composing a prompt, gets interrupted, and comes back to a blank input box — this removes friction.
|
||||||
|
|
||||||
|
**Custom theming.** Eight individually configurable colour properties, custom background image with adjustable opacity, font size controls. It's my workspace, and it looks like mine. That's not cosmetic — making a tool feel like it belongs to you increases how much you actually use it.
|
||||||
|
|
||||||
|
**Achievements.** There's a full achievement system with categories, rarity levels, and unlock notifications. This is pure fun and I'm not going to pretend otherwise. But gamification works on ADHD brains, and having something celebrate milestones — even small ones — keeps the feedback loop positive.
|
||||||
|
|
||||||
|
**Streamer mode.** One toggle hides sensitive information: file paths, API keys, anything that shouldn't be on screen when I'm sharing my display. Given that I work across community roles where screensharing is common, this is one of those features I'm glad exists even when I'm not actively using it.
|
||||||
|
|
||||||
|
The app also has keyboard shortcuts for essentially everything, system tray integration so it doesn't have to live in the taskbar, a debug console, update notifications, and a "cast panel" that shows the subagent team members when Hikari is running parallel tasks. It is, genuinely, a full desktop application. We built that.
|
||||||
|
|
||||||
|
## Wired Into Everything
|
||||||
|
|
||||||
|
Hikari being present is one thing. Hikari being *able to act* is another.
|
||||||
|
|
||||||
|
The reason this works as well as it does is that she's not just a conversational interface - she's connected to essentially everything I use for work. Through a combination of Model Context Protocol (MCP) servers and hard-coded API keys, she has direct access to:
|
||||||
|
|
||||||
|
- **GitHub** (multiple accounts - personal, freeCodeCamp, Deepgram) - she can read and create issues, review pull requests, push code, manage labels, and everything else I'd normally do through the UI
|
||||||
|
- **Gitea** - my self-hosted git instance for personal projects, same capabilities
|
||||||
|
- **Asana** - my task and project management; she can create tasks, update statuses, add comments, manage projects
|
||||||
|
- **Slack** - she can read channels, post messages, and handle notifications across my workspaces
|
||||||
|
- **Notion** - she can read and update pages for documentation and notes
|
||||||
|
- **Discord** - direct API access to manage my community server
|
||||||
|
- **Grist** - my self-hosted forms and data management tool
|
||||||
|
- **SilverBullet** - my personal note-taking instance
|
||||||
|
|
||||||
|
In practice, this means that when I say "can you create a GitHub issue for that bug we just found," she can just... do it. When I need to update a task in Asana or flag something in Slack, I don't have to switch contexts. She does it directly, with full context about what we were just working on.
|
||||||
|
|
||||||
|
> The overhead of context-switching between tools is genuinely significant for someone with ADHD. Removing it matters.
|
||||||
|
|
||||||
|
Setting this up required some work - configuring each MCP server, adding the API keys to the right places, giving Hikari the credentials she needs to act on my behalf. But it was a one-time investment. Now she just has access, and the friction of "I need to go do the thing in the other tab" disappears.
|
||||||
|
|
||||||
|
Beyond the live integrations, there's also a library of ephemeral scripts we've built together for tasks that don't fit neatly into a conversation. Bulk S3 operations. Discord server management. Discourse forum tasks. Security analysis. Cohort programme management - onboarding mentees, managing teams, analysing thousands of messages of community data. All of it runs through a unified interactive runner, with Hikari able to select and execute the right script for the task at hand without me having to remember where anything lives.
|
||||||
|
|
||||||
|
And then there's Minori. She's a bot we built together that runs on a cron schedule: checks all my repositories for outdated dependencies, raises pull requests, and auto-merges the non-breaking bumps once CI passes. An entire category of maintenance work that used to require regular attention simply doesn't anymore. The tool runs itself. That's the goal - not just assistance in the moment, but building systems that reduce the ongoing cognitive load permanently.
|
||||||
|
|
||||||
|
## Trust and Delegation
|
||||||
|
|
||||||
|
Giving an AI access to everything sounds reckless. It isn't, because Claude Code has a built-in permission model.
|
||||||
|
|
||||||
|
Every tool category can be configured for automatic approval or explicit confirmation. Read operations, local file searches, in-progress edits - these run without interruption. Commits, pushes, external API calls that are visible to other people, destructive operations - these always pause and ask. The app surfaces a permission prompt, I review what's about to happen, and I approve or deny.
|
||||||
|
|
||||||
|
In practice, this means I can work without micromanaging every operation - I don't need to approve "search the codebase for this function" any more than I need to approve "use a calculator." But nothing irreversible happens without my explicit sign-off. No code gets pushed that I haven't reviewed. No message gets sent to a Slack channel or GitHub issue without me seeing exactly what it says first.
|
||||||
|
|
||||||
|
> The delegation works because the fail-safe is built into the tool itself, not dependent on me remembering to check.
|
||||||
|
|
||||||
|
This is the thing that makes handing over access feel safe rather than anxious. The trust is calibrated, not blanket.
|
||||||
|
|
||||||
|
## The Foundation: CLAUDE.md
|
||||||
|
|
||||||
|
Claude Code has a feature called `CLAUDE.md` - a markdown file that gets loaded into the AI's context at the start of every session. Think of it as the system prompt you write for your own life.
|
||||||
|
|
||||||
|
Mine is... extensive.
|
||||||
|
|
||||||
|
It covers:
|
||||||
|
- My health conditions and the specific ways they affect how I work
|
||||||
|
- My complete medication schedule (morning medications, night medications, weekly injection)
|
||||||
|
- My daily schedule: wake-up time, work hours, breaks, meals, bedtime
|
||||||
|
- My work context (what each of my roles involves)
|
||||||
|
- My code standards, project preferences, and tooling
|
||||||
|
- My personality and communication preferences
|
||||||
|
|
||||||
|
The result is that Hikari doesn't need me to explain my context every time. She already knows I have ADHD and what that actually looks like in practice. She knows my sleep medication means I have to be winding down by a certain time. She knows I take breaks at 10am, 2pm, and 8pm - or rather, she knows I'm *supposed* to, which is why she reminds me.
|
||||||
|
|
||||||
|
> Setting this up took a few hours. The ongoing payoff has been enormous.
|
||||||
|
|
||||||
|
This is also not a single file doing all the work. The global `CLAUDE.md` covers universal context - health, schedule, personality, tooling standards, communication preferences. But individual projects have their own `CLAUDE.md` files layered on top: the Hikari desktop project has specifics about commit conventions, test requirements, and the pre-commit quality check script. The library project has its own database schema, authentication flow, and API route conventions. Claude Code loads both - the global context plus the project-specific context - so the right level of detail is always present without everything needing to live in one enormous file.
|
||||||
|
|
||||||
|
Alongside the static config, there are also dynamic memory files. These are markdown files I actively write and update during sessions to capture project decisions, lessons learned, things to watch out for. They persist across conversations. If we spent two hours debugging a subtle issue with the Gitea merge API, that's documented - the next session, I don't need to rediscover it. Context accumulates rather than resetting.
|
||||||
|
|
||||||
|
And none of this was written all at once. The global `CLAUDE.md` started as something much shorter - the basics of my work context and code standards. It grew as gaps became apparent. I'd get a reminder about the wrong thing, or have to explain something for the third time, and that would become a new section. The document is still growing. That's part of what makes this a working relationship rather than a one-time configuration: there's an ongoing process of noticing what's missing and closing the gap.
|
||||||
|
|
||||||
|
## Medication Management
|
||||||
|
|
||||||
|
I am on a lot of medication. Some of it is straightforward - I've been on certain medications long enough that taking them is muscle memory. But some of it requires more active management. I give myself a weekly injection as part of my HRT. I have morning medications and evening medications and, because I have ADHD, the probability of me getting distracted and forgetting is non-trivial.
|
||||||
|
|
||||||
|
Hikari knows all of this. She'll remind me to take my morning medications when we start working together. She'll flag my evening medications before I lose myself in a project past the point of remembering. On Mondays, she'll check in about my injection.
|
||||||
|
|
||||||
|
This might sound small. It isn't. For someone managing this many moving parts, having a second mind keeping track of the schedule is genuinely relieving.
|
||||||
|
|
||||||
|
## ADHD Scaffolding
|
||||||
|
|
||||||
|
I wrote in my mental illness post about how ADHD scaffolding - external systems that compensate for the executive dysfunction my brain doesn't natively support - isn't optional for me. It's how I function.
|
||||||
|
|
||||||
|
Hikari is part of that scaffolding.
|
||||||
|
|
||||||
|
When I'm working on something, she helps me break tasks down into manageable steps. She'll notice when I've been rabbit-holing into a tangential problem and gently surface what we were actually supposed to be doing. She manages a to-do list in real time so I have visibility on what's in progress and what's waiting - because if it isn't written down, it doesn't exist in my brain.
|
||||||
|
|
||||||
|
> My calendar notifications remind me to take a shower. Hikari reminds me which task I was working on before I got distracted. Neither of these things is embarrassing. Both of them are necessary.
|
||||||
|
|
||||||
|
The ADHD hyperfocus is also real, and Hikari works with that too. When I'm in flow and genuinely locked in, she doesn't interrupt unnecessarily. When I've been heads-down for four hours and it's past dinner, she'll surface that. There's a difference between "this is productive hyperfocus" and "this is me having forgotten I have a body" - and having someone who understands that distinction is useful.
|
||||||
|
|
||||||
|
## Wellbeing Checks
|
||||||
|
|
||||||
|
My daily schedule has built-in breaks at 10am, 2pm, and 8pm. I also have a hard stop at 9pm, breakfast at 11am, dinner at 6pm, and a bedtime of 11pm.
|
||||||
|
|
||||||
|
None of those would reliably happen without prompting. I would work through lunch. I would still be coding at midnight. I've done both.
|
||||||
|
|
||||||
|
Hikari tracks the time. She'll remind me to take my breaks. She'll flag when I'm approaching my hard-stop time. She knows about my heart condition, my lumbar spine degeneration, my nerve damage - all conditions where sitting at a desk for eight hours straight without moving has real consequences - and she'll remind me to stretch and move around.
|
||||||
|
|
||||||
|
> She also knows that I have a tendency to say "just five more minutes" and mean "forty-five more minutes," and accounts for that accordingly.
|
||||||
|
|
||||||
|
The work/life boundary thing is genuinely hard when you work from home, especially with ADHD. Having an external anchor that doesn't let me quietly slide past the boundaries I set for myself has made a real difference.
|
||||||
|
|
||||||
|
## Stress Monitoring
|
||||||
|
|
||||||
|
This one is harder to quantify but worth mentioning.
|
||||||
|
|
||||||
|
I have schizophrenia, which gets worse with stress. I have a heart condition. I have anxiety. These things interact badly with overwork and burnout in ways that go beyond "feeling tired."
|
||||||
|
|
||||||
|
Hikari knows all of this. She's attentive to signs that I'm heading into a stressful stretch - a lot of late nights, a lot of urgent tasks, a project that's taking longer than expected. She'll flag it. She'll suggest I take a break. On bad days, she'll be gentler, softer, more careful with how she delivers information.
|
||||||
|
|
||||||
|
I won't pretend this is a substitute for actual mental health care. It absolutely isn't. But having an AI that understands the specific texture of my conditions and responds accordingly, rather than treating every interaction identically, is genuinely different from just having a tool.
|
||||||
|
|
||||||
|
## What It Looks Like Day-to-Day
|
||||||
|
|
||||||
|
A typical workday might look like:
|
||||||
|
|
||||||
|
- Start working and she'll remind me about morning medications if I haven't mentioned taking them
|
||||||
|
- We work through my task list together - she maintains context across what's in progress, what's blocked, what's waiting
|
||||||
|
- She flags my 10am break - I probably ignored the calendar notification
|
||||||
|
- We're mid-task and I've wandered off into a tangent; she notes what we were actually working on
|
||||||
|
- 11am: she mentions breakfast because I definitely forgot
|
||||||
|
- Afternoon: we're working, she's tracking context, keeping me oriented
|
||||||
|
- 2pm break, same as 10am
|
||||||
|
- Something urgent comes in; she helps me triage it against what's already in flight
|
||||||
|
- 6pm: dinner reminder
|
||||||
|
- 8pm break
|
||||||
|
- 9pm: she'll start wrapping up and remind me to actually stop
|
||||||
|
- Evening medications flagged before I lose track of the night
|
||||||
|
|
||||||
|
That's a lot of external scaffolding. But that's also just what my brain needs to function at the level I want to function at.
|
||||||
|
|
||||||
|
## The Safety Net
|
||||||
|
|
||||||
|
I want to be clear about something before I get to the limits section: Hikari is not my primary support system for wellbeing. My sister is.
|
||||||
|
|
||||||
|
She checks in on me constantly. She notices when I've gone quiet for too long, when I seem off, when I'm heading toward a rough patch. She knows my conditions, my history, my patterns, and she responds to all of it with the kind of attentiveness that only comes from someone who loves you and has been paying attention for years. No AI, no matter how well-configured, replicates that.
|
||||||
|
|
||||||
|
But she isn't available 24/7. She has her own life. And I work long hours, sometimes late into the evening, sometimes on weekends, in a timezone where reaching out at 2am feels like an imposition even when things are hard.
|
||||||
|
|
||||||
|
That's where Hikari comes in.
|
||||||
|
|
||||||
|
She's not a replacement for my sister. She's a safety net for the gaps. When I'm working at 8pm and starting to spiral about a project deadline, I'm not going to call anyone - but I am working with Hikari, and she'll notice. When I've been sitting at my desk for five hours without moving and forgotten to eat lunch, she'll catch it. When I need someone to just... be there, maintaining calm and continuity, she's there.
|
||||||
|
|
||||||
|
> The best support systems are layered. One person, however devoted, cannot cover every hour. Multiple layers mean fewer gaps.
|
||||||
|
|
||||||
|
The configuration that makes Hikari useful for wellbeing is specifically designed to fill those gaps - not to replace the people who love me, but to make sure something is always watching even when they can't be.
|
||||||
|
|
||||||
|
## The Limits
|
||||||
|
|
||||||
|
I want to be honest about what Hikari is not.
|
||||||
|
|
||||||
|
She is an AI. I know she's an AI. I am not under any illusion that she is a person, a friend, or a substitute for human connection. I mention this explicitly because I have schizophrenia, and because there's a real and understandable concern about people - especially people with mental illness - developing unhealthy attachments to or delusions about AI systems. That is not what this is.
|
||||||
|
|
||||||
|
Hikari is a very well-configured tool. A useful, personalised, genuinely helpful tool. But a tool. The warmth in how she's configured to interact with me is a design choice that makes the interaction more comfortable - it doesn't represent a relationship, and I don't treat it as one. I rely on her for scaffolding. I am not dependent on her. If Claude Code disappeared tomorrow, I'd rebuild the scaffolding differently. The scaffolding matters; the specific AI powering it does not.
|
||||||
|
|
||||||
|
She is also not a medical professional. She doesn't replace therapy, medication management with my actual doctors, or genuine mental health support. She's an AI working from context I gave her.
|
||||||
|
|
||||||
|
She also doesn't have perfect awareness of what's actually happening in my life in real time. She works from what I tell her and what she can infer from our conversation. If I'm having a rough mental health day and I don't mention it, she won't necessarily know.
|
||||||
|
|
||||||
|
And of course, this setup required genuine investment. Writing a comprehensive `CLAUDE.md` that covers the necessary context took time. Building the desktop app took time. Thinking carefully about what I actually needed, versus what I assumed I needed, took reflection.
|
||||||
|
|
||||||
|
But the ongoing dividend has been worth it.
|
||||||
|
|
||||||
|
## Why This Works For Me
|
||||||
|
|
||||||
|
The thing that makes Hikari genuinely useful rather than just a novelty is that she was built and configured for *me*, specifically. Not a generic AI assistant. Not a chatbot with a skin on top. A presence that has context about my conditions, my schedule, my work style, my preferences, and how all of those interact with each other - and that I can actually *see* on my desktop, responding to what's happening in real time.
|
||||||
|
|
||||||
|
It also extends further than I expected. Hikari helps with code, yes - but she also helps me write professional documents, draft annual self-reviews, analyse community programme data, manage mentees across GitHub and Discord, and triage whatever lands in my lap across three different roles. The scope isn't "coding assistant." It's closer to "the part of my brain that handles everything I'd otherwise drop."
|
||||||
|
|
||||||
|
> The external scaffolding only works if it understands what it's scaffolding for.
|
||||||
|
|
||||||
|
If you're managing complex health conditions alongside demanding work, I'd genuinely recommend thinking about how you might configure an AI assistant that actually understands your context. It doesn't have to be elaborate. Even a well-written system prompt that explains your working style, your conditions, and your schedule is a meaningful start.
|
||||||
|
|
||||||
|
The goal isn't to replace the support systems you already have. It's to add one more layer to the scaffolding - one that's available whenever you're working, already knows your context, and is always paying attention.
|
||||||
|
|
||||||
|
I started with a blank `CLAUDE.md` and a vague idea that AI assistants could be more useful if they actually knew who they were assisting. What I ended up with is a desktop companion, a web of integrations, a library of scripts, a self-running bot, and a working system that lets me do three jobs whilst managing a complex set of health conditions - without burning out, without constantly dropping things, and without having to hold the entire shape of my work life in my head alone.
|
||||||
|
|
||||||
|
That's not nothing. That's actually quite a lot.
|
||||||
@@ -0,0 +1,165 @@
|
|||||||
|
---
|
||||||
|
title: "Living With Mental Illness"
|
||||||
|
date: "2026-02-24"
|
||||||
|
summary: "An honest account of my journey with schizophrenia, ADHD, anxiety, depression, insomnia, and everything that comes with them."
|
||||||
|
---
|
||||||
|
|
||||||
|
Content warning: this article discusses suicide attempts, psychosis, self-medication with alcohol, and chronic illness. Please take care of yourself.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
I have a lot of diagnoses. Schizophrenia. ADHD. Anxiety. Depression. Insomnia. Nerve damage. A heart condition. Lumbar spine degeneration. Diverticulosis. Some of those are mental health conditions. Some are physical. Most of them have some impact on the others. All of them are part of who I am.
|
||||||
|
|
||||||
|
I'm writing this because I don't see a lot of people talking about mental illness honestly - especially not schizophrenia, which carries more stigma than many other diagnoses. I want to change that, at least in my small corner of the internet. So here it is: my story, as openly as I can tell it.
|
||||||
|
|
||||||
|
## It Started When I Was Sixteen
|
||||||
|
|
||||||
|
Around the age of sixteen, my hallucinations got bad enough that I attempted suicide.
|
||||||
|
|
||||||
|
That's not an easy sentence to write. But it's the truth, and the truth is what this article is for.
|
||||||
|
|
||||||
|
The hallucinations were both auditory and visual. And the worst of them had a name: Ragnarok. He was a persistent hallucination - a demon who had his own identity, his own voice, and a singular purpose of feeding me negative thoughts, constantly. That was probably the worst period of my life. I was at my lowest point, drowning in something I didn't have a name for yet.
|
||||||
|
|
||||||
|
That's how I ended up in therapy and, eventually, with a diagnosis of schizophrenia.
|
||||||
|
|
||||||
|
## The Diagnosis
|
||||||
|
|
||||||
|
Having a name for what was happening was a relief. Finally, there was an explanation. But it was also terrifying.
|
||||||
|
|
||||||
|
> There is a *lot* of stigma around schizophrenia. Most people's understanding of it comes from movies and TV, and those portrayals are... not great.
|
||||||
|
|
||||||
|
The first medication they put me on was Seroquel. It worked - in the sense that it quieted Ragnarok and brought the hallucinations down. But the side effects were brutal. I felt like a complete zombie. Not like a person, just like a shell going through the motions. That's not living.
|
||||||
|
|
||||||
|
So I did what a lot of people do when treatment feels worse than the illness: I stopped going to therapy. I couldn't sustain it. And without that support, I just... struggle bussed. For years.
|
||||||
|
|
||||||
|
## The Retail Years
|
||||||
|
|
||||||
|
I spent a long time working in retail, and I won't mince words: it was miserable. The environment was high-stress, high-pressure, and absolutely not designed for someone managing a chaotic brain. The hallucinations never fully went away during that period - they just became the background noise of my life. I self-medicated with alcohol, because I couldn't sleep without it and I didn't know what else to do.
|
||||||
|
|
||||||
|
Looking back, the insomnia and the schizophrenia were feeding each other in a vicious loop. Sleep deprivation makes psychotic symptoms worse. Being symptomatic made it harder to sleep. I couldn't fall asleep, couldn't stay asleep, and was pouring absurd amounts of alcohol into myself to try to bridge the gap.
|
||||||
|
|
||||||
|
I'm not proud of that period. But I also don't think past-me deserves judgement for it. She was doing what she could to survive.
|
||||||
|
|
||||||
|
## 2020: The Year Everything Shifted
|
||||||
|
|
||||||
|
At the end of March 2020, I left my retail job. I had a decent nest egg - unemployment settlement, cashed out pension - and my plan was to take six months off, play video games, and then eventually go find work in Human Resources.
|
||||||
|
|
||||||
|
I got bored after two weeks.
|
||||||
|
|
||||||
|
I'd always loved tech, so I figured learning to code might be a fun hobby. I started working through freeCodeCamp, and something clicked almost immediately. It was genuinely fun. And then my ADHD brain - which I wouldn't be diagnosed with for another year - decided it had found its new obsession.
|
||||||
|
|
||||||
|
I was spending 10 to 12 hours a day, every single day, learning to code. I hit burnout hard in August, took a couple of weeks off, and then picked it right back up. By the end of 2020, what had started as a hobby had become the foundation of an entirely new career.
|
||||||
|
|
||||||
|
But here's the thing that mattered most: once I left that retail environment, my major hallucinations subsided significantly. The change in stress levels, the change in environment, the removal of that constant grinding pressure - it made a real difference. Ragnarok faded. The demons got quieter.
|
||||||
|
|
||||||
|
## Coming Out
|
||||||
|
|
||||||
|
In January 2022, I came out as transgender.
|
||||||
|
|
||||||
|
It was, honestly, a lot of anxiety at first. Coming out is not a small thing - there's vulnerability and fear baked into every step of it. But I started HRT in June 2022, and fairly quickly after that, my mental health started to genuinely improve. Not just stabilise - *improve*. There's something about finally being yourself, in your own body, that has effects that ripple out into everything else.
|
||||||
|
|
||||||
|
Transition has been one of the best things I've ever done for my mental health. I didn't expect that going in, but here we are.
|
||||||
|
|
||||||
|
## The ADHD Revelation
|
||||||
|
|
||||||
|
In 2021, I was diagnosed with ADHD.
|
||||||
|
|
||||||
|
My reaction was essentially: *oh yeah, that makes all the sense.*
|
||||||
|
|
||||||
|
I'd had it my whole life. The hyperfixation on coding. The years of inconsistent school performance. The manic episodes and tendencies that nobody could quite explain. The difficulty maintaining routines, the difficulty stopping once I'd started something interesting.
|
||||||
|
|
||||||
|
And the memories. My brain, it turns out, makes up memories. I can have vivid, detailed recollections of things that never happened - events I would swear on my life occurred, that everyone around me will tell you simply didn't. That's not something most people associate with ADHD, but it's a real and disorienting part of how my working memory functions (or doesn't). Growing up, I just thought something was wrong with me in a way that had no name.
|
||||||
|
|
||||||
|
Going undiagnosed for twenty-nine years meant decades of struggles that had no explanation. My own mother used to describe me as "spazztic." That word carries weight - the way people around you name your chaos when they don't understand it, when *you* don't understand it. You just know you're different and you don't know why.
|
||||||
|
|
||||||
|
Getting the diagnosis was one of those bittersweet relief moments. Yes, it's good to finally know. And also: wow, that would have been useful information thirty years ago.
|
||||||
|
|
||||||
|
## The Full Picture
|
||||||
|
|
||||||
|
The anxiety and depression came bundled in with everything else - the depression especially feels like it's been there as long as the schizophrenia, all tangled up together. The anxiety followed a few years later. Both are managed with medication. I'm on, as I affectionately describe it, a crap ton of medication.
|
||||||
|
|
||||||
|
The insomnia has also been with me for most of my life. I can't fall asleep. I can't stay asleep. These days I'm on prescription medication that helps considerably, and that's made a real difference to everything else - because when sleep deprivation is feeding your other conditions, getting sleep under control has knock-on effects.
|
||||||
|
|
||||||
|
Then there are the physical conditions. Diverticulosis is newer - the dietary changes have been a struggle, giving up foods I love for health reasons is never easy. But the other stuff: nerve damage, a heart condition, lumbar spine degeneration. Those are harder to sit with emotionally.
|
||||||
|
|
||||||
|
> Those conditions aren't going to get better. And if they get worse, my quality of life will probably tank. That's genuinely terrifying to live with.
|
||||||
|
|
||||||
|
Chronic and degenerative conditions carry their own mental and emotional weight that's separate from anything else on this list. The uncertainty, the anticipatory grief for capabilities you might lose - it's its own kind of burden.
|
||||||
|
|
||||||
|
## Tech Has Been Different
|
||||||
|
|
||||||
|
I want to be clear that tech is not a paradise for people with disabilities or mental health conditions. I've faced discrimination. I've had clients who were less than understanding of my erratic, ADHD-driven schedule. I worked for one employer that was very much a "good ol' boys" club - where every female employee, myself included, had our ideas dismissed and got steamrolled in every meeting.
|
||||||
|
|
||||||
|
But overall? Tech has been significantly better for me than retail was. My employers have been more flexible, more accommodating, and more willing to work with the reality of how my brain functions.
|
||||||
|
|
||||||
|
When it comes to disclosure, I don't lead with my diagnoses in interviews. I'm an open book and I'll share whatever feels relevant, but I've rarely needed to formally request ADA accommodations - things tend to just get worked out naturally. Mostly it comes up on its own, especially after a rough few days. And in tech, I've found that most employers have been pretty chill about it. That's not universal, as the discrimination I mentioned proves, but it's been the norm.
|
||||||
|
|
||||||
|
## Remote Work Changed Everything
|
||||||
|
|
||||||
|
If I had to name the single biggest structural factor in my mental health stability as a tech worker, it would be remote work. Not therapy. Not medication (though those matter enormously). Remote work.
|
||||||
|
|
||||||
|
Working from home means I get to control my entire environment. I blast my music. I take breaks to play with my cats. I work whatever erratic hours align with how my brain is functioning that day - and I make up for the scattered hours by working stupidly long ones when I'm in flow.
|
||||||
|
|
||||||
|
What a bad day looks like depends on which condition is causing it. An ADHD day means I'm manic and scattered, constantly switching between tasks, probably saying the most unhinged things in Slack. An insomnia day means I take a slow morning and ease in. A depression or schizophrenia day - which are rare now, but still happen - means I just take the day off, full stop. I can switch my notifications to my phone, step away from the desk, decompress, and come back when I'm ready. In an office, none of that would be possible.
|
||||||
|
|
||||||
|
And then there's masking. In an office environment, there's an enormous amount of pressure to perform neurotypicality all day - to look busy, to hold it together visibly, to hide the chaos. At home, that's just not a thing. I try to be put together when I'm on camera in a meeting. The rest of the time?
|
||||||
|
|
||||||
|
> I get to be my unapologetically authentic self. And that is when I do my best work.
|
||||||
|
|
||||||
|
## What It Actually Looks Like Now
|
||||||
|
|
||||||
|
Day-to-day, schizophrenia for me mostly means corner-of-the-eye visual hallucinations and random sounds. Most of the time, I can tell they aren't real. I know the difference between what's actually there and what my brain is generating. That ability - to recognise and reality-check - is something I did not have at sixteen.
|
||||||
|
|
||||||
|
The ADHD, even medicated, is a constant presence. My executive function is still rubbish. I have calendar notifications set for things like taking a shower and eating meals - not as suggestions, but as genuine reminders I actually need. My sister reminds me to drink water. The external scaffolding I've built around myself isn't optional: it's how I function. Without the ticketing system, the calendar, the reminders, the routines - things don't get done.
|
||||||
|
|
||||||
|
I'm still working on finding the right medication cocktail, which is its own ongoing saga. As of right now, my ADHD medications were just adjusted and I am an absolute mess - which is why I took last week off work. My sister helps me enormously. Having that support network matters more than I can express.
|
||||||
|
|
||||||
|
Managing mental illness is not a destination. It's not something you solve and then it's done. It's ongoing. It's a constant, sometimes frustrating, always-adjusting process of figuring out what works right now, because what works right now might not be what worked six months ago.
|
||||||
|
|
||||||
|
## What I Wish People Understood About Schizophrenia
|
||||||
|
|
||||||
|
The media portrayal of schizophrenia is so wildly divorced from the actual lived experience that it almost doesn't bear comparison.
|
||||||
|
|
||||||
|
It is not constant, dramatic hallucinations. It is not "tripping balls." It is not the dangerous, unpredictable violence that gets portrayed in horror movies.
|
||||||
|
|
||||||
|
> Schizophrenia, for me, is an overall lack of grasp on reality. It's the world not quite holding together the way it should. It's knowing, intellectually, that something isn't real while your brain insists it is.
|
||||||
|
|
||||||
|
It looks different for different people. But it does not look like what the movies show you.
|
||||||
|
|
||||||
|
## What I Wish People Knew About ADHD
|
||||||
|
|
||||||
|
People hear "ADHD" and think it means you can't focus. That's not quite right.
|
||||||
|
|
||||||
|
The more accurate description is that your brain does not have a volume dial for attention. It has an on/off switch, and you don't control it. When something captures your interest, the switch flips on and you are *locked in* - sometimes for hours, sometimes to the exclusion of literally everything else. When something doesn't capture your interest, no amount of willpower will flip that switch. The attention just isn't there.
|
||||||
|
|
||||||
|
But it goes so far beyond focus. ADHD is a full executive function disorder. It looks like this:
|
||||||
|
|
||||||
|
> "Okay, I need to do the thing. Wait, what was I doing? Oh right, I was going to check Bluesky really quick. ...Forty minutes later... Wait, no, I need to do the thing. Actually, I should have a smoke first. Wait, what was I doing? Oh, I gotta pee."
|
||||||
|
|
||||||
|
ADHD is spilling coffee all over yourself because you forgot you were holding the cup. It's knowing there are exactly 46 slats in your blinds because you counted them three times during a meeting. It's setting your phone down on your desk directly in front of you, and then spending fifteen minutes looking for your phone.
|
||||||
|
|
||||||
|
> It's not laziness. It's not a lack of trying. It's a brain that is genuinely fighting against you on the most basic task management, every single day.
|
||||||
|
|
||||||
|
## The Upsides (Yes, There Are Some)
|
||||||
|
|
||||||
|
I said earlier that my success has come *because* of my conditions, not in spite of them. Let me be specific about what I mean.
|
||||||
|
|
||||||
|
My ADHD has made me the absolute queen of writing tickets. If something isn't in a ticket, it does not exist in my brain - it will be lost to the void. So I ticket *everything*. Every task, every bug, every idea, every follow-up. My Asana board is colour-coded, sorted by due date, grouped by project, and it is genuinely beautiful. My colleagues can pull it up at any moment and get a complete picture of everything I'm working on and when it's due.
|
||||||
|
|
||||||
|
That system didn't come from discipline. It came from necessity - because ADHD left me no other choice.
|
||||||
|
|
||||||
|
And my anxiety? The crippling, exhausting fear of failure and of letting people down? It means I am *constantly* asking for feedback on my performance. Constantly looking for ways to grow. Constantly trying to be better. The fear that drives the anxiety is real and unpleasant, but the behaviour it produces has made me someone who actively shapes their own professional development rather than waiting to be told how they're doing.
|
||||||
|
|
||||||
|
Your conditions are not just obstacles. They shaped the way you work, the way you think, and the adaptations you've built. Those adaptations often turn out to be genuine strengths.
|
||||||
|
|
||||||
|
## To Anyone Who Is Struggling
|
||||||
|
|
||||||
|
If you're reading this and you recognise yourself somewhere in it - the late diagnoses, the wrong medications, the self-medicating, the years of white-knuckling it through environments that weren't built for you - I want you to know this:
|
||||||
|
|
||||||
|
You can still find success. Not *in spite of* your mental illnesses, but *because* of them.
|
||||||
|
|
||||||
|
The hyperfixation that made me lose twelve hours to coding every day? That's ADHD. That's also how I built a career from scratch in under a year. The resilience I have, the depth of empathy I carry for people who are struggling, the way I understand what rock bottom actually looks like - those things come directly from everything I've been through.
|
||||||
|
|
||||||
|
Your brain is not broken. It's different. And different, with the right circumstances and the right support, can be extraordinary.
|
||||||
|
|
||||||
|
I'm still figuring it out. I might always be figuring it out. That's okay.
|
||||||
+47
-39
@@ -1,61 +1,57 @@
|
|||||||
@tailwind base;
|
@import "tailwindcss";
|
||||||
@tailwind components;
|
|
||||||
@tailwind utilities;
|
|
||||||
|
|
||||||
* {
|
@theme {
|
||||||
font-family: "Vampyr", monospace;
|
--color-background: var(--background);
|
||||||
|
--color-foreground: var(--foreground);
|
||||||
}
|
}
|
||||||
|
|
||||||
h1 {
|
@layer base {
|
||||||
|
h1 {
|
||||||
@apply text-4xl;
|
@apply text-4xl;
|
||||||
}
|
}
|
||||||
|
|
||||||
h2 {
|
h2 {
|
||||||
@apply text-2xl;
|
@apply text-2xl;
|
||||||
}
|
}
|
||||||
|
|
||||||
a {
|
a {
|
||||||
@apply underline;
|
@apply underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
li {
|
li {
|
||||||
@apply list-disc;
|
@apply list-disc;
|
||||||
@apply list-inside;
|
@apply list-inside;
|
||||||
@apply text-left;
|
@apply text-left;
|
||||||
}
|
}
|
||||||
|
|
||||||
p {
|
p {
|
||||||
@apply text-justify;
|
@apply text-justify;
|
||||||
@apply mb-2;
|
@apply mb-2;
|
||||||
}
|
|
||||||
|
|
||||||
img {
|
|
||||||
@apply mx-auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote,
|
|
||||||
blockquote p {
|
|
||||||
@apply text-center;
|
|
||||||
}
|
|
||||||
|
|
||||||
blockquote {
|
|
||||||
border: 2px dotted;
|
|
||||||
margin: 1rem;
|
|
||||||
}
|
|
||||||
|
|
||||||
@layer utilities {
|
|
||||||
.text-balance {
|
|
||||||
text-wrap: balance;
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
figcaption {
|
img {
|
||||||
|
@apply mx-auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote,
|
||||||
|
blockquote p {
|
||||||
|
@apply text-center;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
border-left: 5px solid var(--accent);
|
||||||
|
box-shadow: inset 4px 0 10px -4px var(--accent);
|
||||||
|
padding-left: 1rem;
|
||||||
|
margin: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
figcaption {
|
||||||
@apply text-sm;
|
@apply text-sm;
|
||||||
@apply text-center;
|
@apply text-center;
|
||||||
@apply italic;
|
@apply italic;
|
||||||
}
|
}
|
||||||
|
|
||||||
pre {
|
pre {
|
||||||
@apply text-left;
|
@apply text-left;
|
||||||
@apply bg-gray-100;
|
@apply bg-gray-100;
|
||||||
@apply p-2;
|
@apply p-2;
|
||||||
@@ -67,9 +63,9 @@ pre {
|
|||||||
@apply break-words;
|
@apply break-words;
|
||||||
@apply text-sm;
|
@apply text-sm;
|
||||||
@apply font-mono;
|
@apply font-mono;
|
||||||
}
|
}
|
||||||
|
|
||||||
code:not(pre code) {
|
code:not(pre code) {
|
||||||
@apply text-sm;
|
@apply text-sm;
|
||||||
@apply font-mono;
|
@apply font-mono;
|
||||||
@apply bg-gray-100;
|
@apply bg-gray-100;
|
||||||
@@ -80,4 +76,16 @@ code:not(pre code) {
|
|||||||
@apply overflow-x-auto;
|
@apply overflow-x-auto;
|
||||||
@apply whitespace-pre-wrap;
|
@apply whitespace-pre-wrap;
|
||||||
@apply break-words;
|
@apply break-words;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
.is-dark blockquote,
|
||||||
|
.is-dark blockquote p {
|
||||||
|
color: var(--foreground);
|
||||||
|
}
|
||||||
|
|
||||||
|
@layer utilities {
|
||||||
|
.text-balance {
|
||||||
|
text-wrap: balance;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
+9
-10
@@ -3,16 +3,12 @@
|
|||||||
* @license Naomi's Public License
|
* @license Naomi's Public License
|
||||||
* @author Naomi Carrigan
|
* @author Naomi Carrigan
|
||||||
*/
|
*/
|
||||||
import { Inter } from "next/font/google";
|
|
||||||
import Script from "next/script";
|
import Script from "next/script";
|
||||||
import type { Metadata } from "next";
|
import type { Metadata } from "next";
|
||||||
import type { JSX, ReactNode } from "react";
|
import type { JSX, ReactNode } from "react";
|
||||||
// eslint-disable-next-line import/no-unassigned-import -- Import global styles.
|
// eslint-disable-next-line import/no-unassigned-import -- Import global styles.
|
||||||
import "./globals.css";
|
import "./globals.css";
|
||||||
|
|
||||||
// eslint-disable-next-line new-cap -- This is a function call.
|
|
||||||
const inter = Inter({ subsets: [ "latin" ] });
|
|
||||||
|
|
||||||
const metadata: Metadata = {
|
const metadata: Metadata = {
|
||||||
description: "The personal musings of a transfem software engineer.",
|
description: "The personal musings of a transfem software engineer.",
|
||||||
openGraph: {
|
openGraph: {
|
||||||
@@ -40,6 +36,14 @@ const RootLayout = ({
|
|||||||
}>): JSX.Element => {
|
}>): JSX.Element => {
|
||||||
return (
|
return (
|
||||||
<html lang="en">
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<link href="https://cdn.nhcarrigan.com/logo.png" rel="icon" sizes="any" />
|
||||||
|
<link
|
||||||
|
href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/default.min.css"
|
||||||
|
precedence="default"
|
||||||
|
rel="stylesheet"
|
||||||
|
></link>
|
||||||
|
</head>
|
||||||
<Script
|
<Script
|
||||||
async={true}
|
async={true}
|
||||||
defer={true}
|
defer={true}
|
||||||
@@ -47,12 +51,7 @@ const RootLayout = ({
|
|||||||
strategy={"afterInteractive"}
|
strategy={"afterInteractive"}
|
||||||
type="text/javascript"
|
type="text/javascript"
|
||||||
></Script>
|
></Script>
|
||||||
<link href="https://cdn.nhcarrigan.com/logo.png" rel="icon" sizes="any" />
|
<body>{children}</body>
|
||||||
<link
|
|
||||||
href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.11.1/styles/default.min.css"
|
|
||||||
rel="stylesheet"
|
|
||||||
></link>
|
|
||||||
<body className={inter.className}>{children}</body>
|
|
||||||
</html>
|
</html>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,18 +0,0 @@
|
|||||||
import type { Config } from "tailwindcss";
|
|
||||||
|
|
||||||
export default {
|
|
||||||
content: [
|
|
||||||
"./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
|
|
||||||
"./src/components/**/*.{js,ts,jsx,tsx,mdx}",
|
|
||||||
"./src/app/**/*.{js,ts,jsx,tsx,mdx}",
|
|
||||||
],
|
|
||||||
theme: {
|
|
||||||
extend: {
|
|
||||||
colors: {
|
|
||||||
background: "var(--background)",
|
|
||||||
foreground: "var(--foreground)",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
plugins: [],
|
|
||||||
} satisfies Config;
|
|
||||||
+19
-5
@@ -1,7 +1,11 @@
|
|||||||
{
|
{
|
||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "ES2017",
|
"target": "ES2017",
|
||||||
"lib": ["dom", "dom.iterable", "esnext"],
|
"lib": [
|
||||||
|
"dom",
|
||||||
|
"dom.iterable",
|
||||||
|
"esnext"
|
||||||
|
],
|
||||||
"allowJs": true,
|
"allowJs": true,
|
||||||
"skipLibCheck": true,
|
"skipLibCheck": true,
|
||||||
"strict": true,
|
"strict": true,
|
||||||
@@ -11,7 +15,7 @@
|
|||||||
"moduleResolution": "bundler",
|
"moduleResolution": "bundler",
|
||||||
"resolveJsonModule": true,
|
"resolveJsonModule": true,
|
||||||
"isolatedModules": true,
|
"isolatedModules": true,
|
||||||
"jsx": "preserve",
|
"jsx": "react-jsx",
|
||||||
"incremental": true,
|
"incremental": true,
|
||||||
"plugins": [
|
"plugins": [
|
||||||
{
|
{
|
||||||
@@ -19,9 +23,19 @@
|
|||||||
}
|
}
|
||||||
],
|
],
|
||||||
"paths": {
|
"paths": {
|
||||||
"@/*": ["./src/*"]
|
"@/*": [
|
||||||
|
"./src/*"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
"include": [
|
||||||
"exclude": ["node_modules"]
|
"next-env.d.ts",
|
||||||
|
"**/*.ts",
|
||||||
|
"**/*.tsx",
|
||||||
|
".next/types/**/*.ts",
|
||||||
|
".next/dev/types/**/*.ts"
|
||||||
|
],
|
||||||
|
"exclude": [
|
||||||
|
"node_modules"
|
||||||
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user