generated from nhcarrigan/template
chore: update dependencies and fix blog styling (#24)
## Summary ### Dependency Updates - Pin all dependencies to exact versions - Bump minor/patch versions across all packages - Upgrade **Next.js** 15 → 16.1.6 (async params/cookies already handled) - Upgrade **react-markdown** 9 → 10.1.0 (no breaking changes in use) - Upgrade **@types/node** 20 → 24.10.13 (aligns with Node 24 runtime) - Upgrade **Tailwind CSS** 3 → 4.2.0 (CSS-first config with `@tailwindcss/postcss`) ### Style Fixes - Replace Inter font import with CDN-based global font settings - Fix blockquote dark mode text visibility using `.is-dark` selector - Replace full dotted blockquote border with left-only accent border - Move `<link>` elements into proper `<head>` to resolve React hydration error - Add `precedence="default"` to highlight.js stylesheet link - Wrap global element rules in `@layer base` to restore Tailwind v4 utility precedence Closes #8 Closes #9 Closes #10 Closes #11 Closes #12 Closes #13 Closes #14 Closes #15 Closes #16 Closes #17 Closes #18 Closes #19 Closes #20 Closes #21 Closes #22 Closes #23 ✨ This PR was created with help from Hikari~ 🌸 Co-authored-by: Naomi Carrigan <commits@nhcarrigan.com> Reviewed-on: #24 Co-authored-by: Hikari <hikari@nhcarrigan.com> Co-committed-by: Hikari <hikari@nhcarrigan.com>
This commit was merged in pull request #24.
This commit is contained in:
9
.vscode/settings.json
vendored
9
.vscode/settings.json
vendored
@@ -2,5 +2,12 @@
|
||||
"editor.codeActionsOnSave": {
|
||||
"source.fixAll.eslint": "explicit"
|
||||
},
|
||||
"eslint.validate": ["typescript"],
|
||||
"eslint.validate": [
|
||||
"typescript"
|
||||
],
|
||||
"cSpell.words": [
|
||||
],
|
||||
"cSpell.dictionaryDefinitions": [
|
||||
|
||||
],
|
||||
}
|
||||
|
||||
@@ -23,16 +23,23 @@
|
||||
"Fenrir",
|
||||
"Fortnite",
|
||||
"Gitea",
|
||||
"Hatsune",
|
||||
"Hikari",
|
||||
"LGBTQ",
|
||||
"Lich",
|
||||
"Migadu",
|
||||
"Miku",
|
||||
"Minori",
|
||||
"neopronouns",
|
||||
"neurotypicality",
|
||||
"NHCarrigan",
|
||||
"Norns",
|
||||
"R'lyeh",
|
||||
"Rythm",
|
||||
"schadenfreude",
|
||||
"spazztic",
|
||||
"strobing",
|
||||
"Tauri",
|
||||
"Unseelie",
|
||||
"vaxry",
|
||||
"waaaaaay",
|
||||
|
||||
@@ -1,9 +1,6 @@
|
||||
import type { NextConfig } from "next";
|
||||
|
||||
const nextConfig: NextConfig = {
|
||||
eslint: {
|
||||
ignoreDuringBuilds: true,
|
||||
},
|
||||
images: {
|
||||
remotePatterns: [
|
||||
{
|
||||
|
||||
33
package.json
33
package.json
@@ -12,26 +12,27 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"gray-matter": "4.0.3",
|
||||
"next": "15.1.6",
|
||||
"react": "^19.0.0",
|
||||
"react-dom": "^19.0.0",
|
||||
"react-markdown": "9.0.3",
|
||||
"next": "16.1.6",
|
||||
"react": "19.2.4",
|
||||
"react-dom": "19.2.4",
|
||||
"react-markdown": "10.1.0",
|
||||
"reading-time": "1.5.0",
|
||||
"rehype-highlight": "7.0.2",
|
||||
"rehype-raw": "7.0.0",
|
||||
"remark-gfm": "4.0.0"
|
||||
"remark-gfm": "4.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/eslintrc": "^3",
|
||||
"@nhcarrigan/eslint-config": "5.1.0",
|
||||
"@types/node": "^20",
|
||||
"@types/react": "^19",
|
||||
"@types/react-dom": "^19",
|
||||
"cspell": "9.4.0",
|
||||
"eslint": "^9",
|
||||
"eslint-config-next": "15.1.6",
|
||||
"postcss": "^8",
|
||||
"tailwindcss": "^3.4.1",
|
||||
"typescript": "^5"
|
||||
"@eslint/eslintrc": "3.3.3",
|
||||
"@nhcarrigan/eslint-config": "5.2.0",
|
||||
"@types/node": "24.10.13",
|
||||
"@types/react": "19.2.14",
|
||||
"@types/react-dom": "19.2.3",
|
||||
"cspell": "9.6.4",
|
||||
"eslint": "9.39.3",
|
||||
"eslint-config-next": "16.1.6",
|
||||
"postcss": "8.5.6",
|
||||
"@tailwindcss/postcss": "4.2.0",
|
||||
"tailwindcss": "4.2.0",
|
||||
"typescript": "5.9.3"
|
||||
}
|
||||
}
|
||||
|
||||
3071
pnpm-lock.yaml
generated
3071
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -11,7 +11,7 @@ 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: true
|
||||
strictPeerDependencies: false
|
||||
# Prevent transitive dependencies from using exotic sources (git repos, direct tarball URLs)
|
||||
blockExoticSubdeps: true
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
/** @type {import('postcss-load-config').Config} */
|
||||
const config = {
|
||||
plugins: {
|
||||
tailwindcss: {},
|
||||
"@tailwindcss/postcss": {},
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ Mine is... extensive.
|
||||
|
||||
It covers:
|
||||
- My health conditions and the specific ways they affect how I work
|
||||
- My complete medication schedule (morning meds, night meds, weekly injection)
|
||||
- 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
|
||||
@@ -129,7 +129,7 @@ And none of this was written all at once. The global `CLAUDE.md` started as some
|
||||
|
||||
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 meds before I lose myself in a project past the point of remembering. On Mondays, she'll check in about my injection.
|
||||
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.
|
||||
|
||||
|
||||
@@ -112,7 +112,7 @@ Day-to-day, schizophrenia for me mostly means corner-of-the-eye visual hallucina
|
||||
|
||||
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 meds 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.
|
||||
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.
|
||||
|
||||
|
||||
@@ -1,46 +1,87 @@
|
||||
@tailwind base;
|
||||
@tailwind components;
|
||||
@tailwind utilities;
|
||||
@import "tailwindcss";
|
||||
|
||||
* {
|
||||
font-family: "Vampyr", monospace;
|
||||
@theme {
|
||||
--color-background: var(--background);
|
||||
--color-foreground: var(--foreground);
|
||||
}
|
||||
|
||||
h1 {
|
||||
@apply text-4xl;
|
||||
@layer base {
|
||||
h1 {
|
||||
@apply text-4xl;
|
||||
}
|
||||
|
||||
h2 {
|
||||
@apply text-2xl;
|
||||
}
|
||||
|
||||
a {
|
||||
@apply underline;
|
||||
}
|
||||
|
||||
li {
|
||||
@apply list-disc;
|
||||
@apply list-inside;
|
||||
@apply text-left;
|
||||
}
|
||||
|
||||
p {
|
||||
@apply text-justify;
|
||||
@apply mb-2;
|
||||
}
|
||||
|
||||
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-center;
|
||||
@apply italic;
|
||||
}
|
||||
|
||||
pre {
|
||||
@apply text-left;
|
||||
@apply bg-gray-100;
|
||||
@apply p-2;
|
||||
@apply rounded-md;
|
||||
@apply border;
|
||||
@apply border-gray-300;
|
||||
@apply overflow-x-auto;
|
||||
@apply whitespace-pre-wrap;
|
||||
@apply break-words;
|
||||
@apply text-sm;
|
||||
@apply font-mono;
|
||||
}
|
||||
|
||||
code:not(pre code) {
|
||||
@apply text-sm;
|
||||
@apply font-mono;
|
||||
@apply bg-gray-100;
|
||||
@apply p-1;
|
||||
@apply rounded-md;
|
||||
@apply border;
|
||||
@apply border-gray-300;
|
||||
@apply overflow-x-auto;
|
||||
@apply whitespace-pre-wrap;
|
||||
@apply break-words;
|
||||
}
|
||||
}
|
||||
|
||||
h2 {
|
||||
@apply text-2xl;
|
||||
}
|
||||
|
||||
a {
|
||||
@apply underline;
|
||||
}
|
||||
|
||||
li {
|
||||
@apply list-disc;
|
||||
@apply list-inside;
|
||||
@apply text-left;
|
||||
}
|
||||
|
||||
p {
|
||||
@apply text-justify;
|
||||
@apply mb-2;
|
||||
}
|
||||
|
||||
img {
|
||||
@apply mx-auto;
|
||||
}
|
||||
|
||||
blockquote,
|
||||
blockquote p {
|
||||
@apply text-center;
|
||||
}
|
||||
|
||||
blockquote {
|
||||
border: 2px dotted;
|
||||
margin: 1rem;
|
||||
.is-dark blockquote,
|
||||
.is-dark blockquote p {
|
||||
color: var(--foreground);
|
||||
}
|
||||
|
||||
@layer utilities {
|
||||
@@ -48,36 +89,3 @@ blockquote {
|
||||
text-wrap: balance;
|
||||
}
|
||||
}
|
||||
|
||||
figcaption {
|
||||
@apply text-sm;
|
||||
@apply text-center;
|
||||
@apply italic;
|
||||
}
|
||||
|
||||
pre {
|
||||
@apply text-left;
|
||||
@apply bg-gray-100;
|
||||
@apply p-2;
|
||||
@apply rounded-md;
|
||||
@apply border;
|
||||
@apply border-gray-300;
|
||||
@apply overflow-x-auto;
|
||||
@apply whitespace-pre-wrap;
|
||||
@apply break-words;
|
||||
@apply text-sm;
|
||||
@apply font-mono;
|
||||
}
|
||||
|
||||
code:not(pre code) {
|
||||
@apply text-sm;
|
||||
@apply font-mono;
|
||||
@apply bg-gray-100;
|
||||
@apply p-1;
|
||||
@apply rounded-md;
|
||||
@apply border;
|
||||
@apply border-gray-300;
|
||||
@apply overflow-x-auto;
|
||||
@apply whitespace-pre-wrap;
|
||||
@apply break-words;
|
||||
}
|
||||
@@ -3,16 +3,12 @@
|
||||
* @license Naomi's Public License
|
||||
* @author Naomi Carrigan
|
||||
*/
|
||||
import { Inter } from "next/font/google";
|
||||
import Script from "next/script";
|
||||
import type { Metadata } from "next";
|
||||
import type { JSX, ReactNode } from "react";
|
||||
// eslint-disable-next-line import/no-unassigned-import -- Import global styles.
|
||||
import "./globals.css";
|
||||
|
||||
// eslint-disable-next-line new-cap -- This is a function call.
|
||||
const inter = Inter({ subsets: [ "latin" ] });
|
||||
|
||||
const metadata: Metadata = {
|
||||
description: "The personal musings of a transfem software engineer.",
|
||||
openGraph: {
|
||||
@@ -40,6 +36,14 @@ const RootLayout = ({
|
||||
}>): JSX.Element => {
|
||||
return (
|
||||
<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
|
||||
async={true}
|
||||
defer={true}
|
||||
@@ -47,12 +51,7 @@ const RootLayout = ({
|
||||
strategy={"afterInteractive"}
|
||||
type="text/javascript"
|
||||
></Script>
|
||||
<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"
|
||||
rel="stylesheet"
|
||||
></link>
|
||||
<body className={inter.className}>{children}</body>
|
||||
<body>{children}</body>
|
||||
</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;
|
||||
@@ -1,7 +1,11 @@
|
||||
{
|
||||
"compilerOptions": {
|
||||
"target": "ES2017",
|
||||
"lib": ["dom", "dom.iterable", "esnext"],
|
||||
"lib": [
|
||||
"dom",
|
||||
"dom.iterable",
|
||||
"esnext"
|
||||
],
|
||||
"allowJs": true,
|
||||
"skipLibCheck": true,
|
||||
"strict": true,
|
||||
@@ -11,7 +15,7 @@
|
||||
"moduleResolution": "bundler",
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"jsx": "preserve",
|
||||
"jsx": "react-jsx",
|
||||
"incremental": true,
|
||||
"plugins": [
|
||||
{
|
||||
@@ -19,9 +23,19 @@
|
||||
}
|
||||
],
|
||||
"paths": {
|
||||
"@/*": ["./src/*"]
|
||||
"@/*": [
|
||||
"./src/*"
|
||||
]
|
||||
}
|
||||
},
|
||||
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
||||
"exclude": ["node_modules"]
|
||||
"include": [
|
||||
"next-env.d.ts",
|
||||
"**/*.ts",
|
||||
"**/*.tsx",
|
||||
".next/types/**/*.ts",
|
||||
".next/dev/types/**/*.ts"
|
||||
],
|
||||
"exclude": [
|
||||
"node_modules"
|
||||
]
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user