7 Commits

Author SHA1 Message Date
hikari 4441f0d2f8 chore: migrate tailwindcss from v3 to v4
Node.js CI / CI (pull_request) Failing after 50s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m28s
2026-03-03 19:11:57 -08:00
hikari 78f0285973 chore: bump next, react-markdown, types, and postcss to latest eligible versions 2026-03-03 19:04:02 -08:00
hikari ef7e6f1d46 chore: bump dependencies to latest minor versions 2026-03-03 18:55:03 -08:00
hikari 9e3afc4e47 chore: pin all dependency versions 2026-03-03 18:44:13 -08:00
hikari 93a6cf952d fix: move link tags into head and add stylesheet precedence
Node.js CI / CI (pull_request) Failing after 20s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m48s
Resolves hydration error from link elements as direct children of html,
and adds precedence="default" to the highlight.js stylesheet link.
2026-03-03 18:16:40 -08:00
hikari d9644d3a57 fix: improve blockquote dark mode and border styling
Adds dark mode text colour via .is-dark selector, replaces full dotted
border with a left-only accent-coloured border with inner glow effect.
2026-03-03 18:06:56 -08:00
hikari 71f184f696 fix: use global font settings instead of Inter
Removes Inter font import from layout and the conflicting CSS font rule,
deferring font handling to the CDN global headers script.
2026-03-03 17:53:44 -08:00
9 changed files with 1973 additions and 1349 deletions
-3
View File
@@ -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
View File
@@ -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.4",
"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"
} }
} }
+1847 -1224
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -11,7 +11,7 @@ trustPolicy: no-downgrade
# Ignore trust policy for packages published more than 1 year ago (predates provenance signing) # Ignore trust policy for packages published more than 1 year ago (predates provenance signing)
trustPolicyIgnoreAfter: 525960 trustPolicyIgnoreAfter: 525960
# Fail if there are missing or invalid peer dependencies # 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) # Prevent transitive dependencies from using exotic sources (git repos, direct tarball URLs)
blockExoticSubdeps: true blockExoticSubdeps: true
+1 -1
View File
@@ -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": {},
}, },
}; };
+20 -12
View File
@@ -1,11 +1,11 @@
@tailwind base; @import "tailwindcss";
@tailwind components;
@tailwind utilities;
* { @theme {
font-family: "Vampyr", monospace; --color-background: var(--background);
--color-foreground: var(--foreground);
} }
@layer base {
h1 { h1 {
@apply text-4xl; @apply text-4xl;
} }
@@ -39,16 +39,12 @@ blockquote p {
} }
blockquote { blockquote {
border: 2px dotted; border-left: 5px solid var(--accent);
box-shadow: inset 4px 0 10px -4px var(--accent);
padding-left: 1rem;
margin: 1rem; margin: 1rem;
} }
@layer utilities {
.text-balance {
text-wrap: balance;
}
}
figcaption { figcaption {
@apply text-sm; @apply text-sm;
@apply text-center; @apply text-center;
@@ -81,3 +77,15 @@ code:not(pre code) {
@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
View File
@@ -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>
); );
}; };
-18
View File
@@ -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
View File
@@ -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"
]
} }