Compare commits

..

20 Commits

Author SHA1 Message Date
minori ed5746bea9 deps: update jest-util to 30.3.0
Node.js CI / CI (pull_request) Successful in 1m46s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m40s
2026-03-20 07:03:33 -07:00
minori 037993804d Merge pull request 'deps: update @swc/helpers to 0.5.19' (#76) from dependencies/update--swc-helpers into main
Node.js CI / CI (push) Failing after 2m30s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 3m36s
2026-03-06 07:04:03 -08:00
hikari 7d8c6bf21c fix: load Google Fonts correctly with strict CSP (#77)
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m42s
Node.js CI / CI (push) Successful in 1m47s
## Summary

- Allows `fonts.googleapis.com` in `style-src` and `fonts.gstatic.com` in `font-src` so the browser can load Google Fonts
- Adds preconnect hints and the Google Fonts import (Griffy, Kalam, Creepster, Henny Penny) to `index.html`
- Sets the body font to Kalam and heading font to Griffy, with utility classes for Creepster and Henny Penny
- Disables Angular's `inlineCritical` optimisation, which was causing the stylesheet to be deferred via `onload="this.media='all'"` — an inline event handler blocked by the strict `script-src` CSP, preventing the heading font rules from ever applying to screen media

## Test plan

- [ ] Rebuild and reload the app
- [ ] Verify headings render in Griffy
- [ ] Verify body text renders in Kalam
- [ ] Check DevTools Styles tab confirms the `h1-h6` font-family rule is matched

 This PR was created with help from Hikari~ 🌸

Reviewed-on: #77
Co-authored-by: Hikari <hikari@nhcarrigan.com>
Co-committed-by: Hikari <hikari@nhcarrigan.com>
2026-03-05 10:32:19 -08:00
minori c769c81207 Merge pull request 'deps: update @typescript-eslint/utils to 8.56.0' (#75) from dependencies/update--typescript-eslint-utils into main
Node.js CI / CI (push) Successful in 2m30s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m44s
2026-03-05 07:05:07 -08:00
minori 6dd0ec7db0 deps: update @swc/helpers to 0.5.19
Node.js CI / CI (pull_request) Successful in 2m23s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 2m26s
2026-03-05 07:05:01 -08:00
minori b821ab7a6e Merge pull request 'deps: update marked to 17.0.3' (#74) from dependencies/update-marked into main
Node.js CI / CI (push) Has been cancelled
Security Scan and Upload / Security & DefectDojo Upload (push) Has started running
2026-03-05 07:04:34 -08:00
minori d3e91bfcb1 deps: update @typescript-eslint/utils to 8.56.0
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 2m20s
Node.js CI / CI (pull_request) Successful in 2m25s
2026-03-04 07:04:53 -08:00
minori 8f51c75f0a deps: update marked to 17.0.3
Node.js CI / CI (pull_request) Successful in 2m12s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 2m19s
2026-03-04 07:04:31 -08:00
minori 163738867b Merge pull request 'deps: update typescript-eslint to 8.56.0' (#72) from dependencies/update-typescript-eslint into main
Node.js CI / CI (push) Successful in 2m10s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 2m31s
2026-02-28 07:06:04 -08:00
minori 84fee6afcb deps: update typescript-eslint to 8.56.0
Node.js CI / CI (pull_request) Successful in 2m26s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m30s
2026-02-27 07:05:37 -08:00
minori 0cc515971a Merge pull request 'deps: update jsdom to 28.1.0' (#70) from dependencies/update-jsdom into main
Node.js CI / CI (push) Successful in 1m40s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m42s
2026-02-26 07:05:19 -08:00
minori e3fae2f8bb deps: update jsdom to 28.1.0
Node.js CI / CI (pull_request) Successful in 1m48s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m43s
2026-02-25 07:06:16 -08:00
minori 2f9e623af6 Merge pull request 'deps: update typescript-eslint to 8.55.0' (#63) from dependencies/update-typescript-eslint into main
Node.js CI / CI (push) Successful in 1m45s
Security Scan and Upload / Security & DefectDojo Upload (push) Successful in 1m39s
2026-02-23 20:51:16 -08:00
minori 1af0e0d7de Merge pull request 'deps: update @typescript-eslint/utils to 8.55.0' (#62) from dependencies/update--typescript-eslint-utils into main
Node.js CI / CI (push) Has been cancelled
Security Scan and Upload / Security & DefectDojo Upload (push) Has been cancelled
2026-02-23 20:50:50 -08:00
minori 2dc553ee1c Merge pull request 'deps: update marked to 17.0.2' (#68) from dependencies/update-marked into main
Node.js CI / CI (push) Has been cancelled
Security Scan and Upload / Security & DefectDojo Upload (push) Has been cancelled
2026-02-23 20:50:15 -08:00
minori 21af80181f Merge pull request 'deps: update @fastify/oauth2 to 8.2.0' (#61) from dependencies/update--fastify-oauth2 into main
Node.js CI / CI (push) Has been cancelled
Security Scan and Upload / Security & DefectDojo Upload (push) Has been cancelled
2026-02-23 20:49:58 -08:00
minori d7cd3ccd99 deps: update marked to 17.0.2
Node.js CI / CI (pull_request) Successful in 2m8s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m53s
2026-02-22 07:04:07 -08:00
minori b245f1984e deps: update typescript-eslint to 8.55.0
Node.js CI / CI (pull_request) Successful in 1m52s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m56s
2026-02-20 07:15:40 -08:00
minori 6545f46ba6 deps: update @typescript-eslint/utils to 8.55.0
Node.js CI / CI (pull_request) Successful in 1m45s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m47s
2026-02-20 07:14:51 -08:00
minori 8215fda5ff deps: update @fastify/oauth2 to 8.2.0
Node.js CI / CI (pull_request) Successful in 1m15s
Security Scan and Upload / Security & DefectDojo Upload (pull_request) Successful in 1m7s
2026-02-20 07:12:23 -08:00
6 changed files with 605 additions and 415 deletions
+2 -2
View File
@@ -14,11 +14,11 @@ const helmetPlugin: FastifyPluginAsync = async (app) => {
directives: { directives: {
defaultSrc: ["'self'"], defaultSrc: ["'self'"],
// Angular uses inline styles for component encapsulation, so we need to allow them // Angular uses inline styles for component encapsulation, so we need to allow them
styleSrc: ["'self'", "'unsafe-inline'"], styleSrc: ["'self'", "'unsafe-inline'", "https://fonts.googleapis.com"],
imgSrc: ["'self'", "data:", "https:"], imgSrc: ["'self'", "data:", "https:"],
scriptSrc: ["'self'"], scriptSrc: ["'self'"],
connectSrc: ["'self'", process.env.FRONTEND_URL ?? "http://localhost:4200"], connectSrc: ["'self'", process.env.FRONTEND_URL ?? "http://localhost:4200"],
fontSrc: ["'self'", "data:"], fontSrc: ["'self'", "data:", "https://fonts.gstatic.com"],
objectSrc: ["'none'"], objectSrc: ["'none'"],
baseUri: ["'self'"], baseUri: ["'self'"],
formAction: ["'self'"], formAction: ["'self'"],
+5
View File
@@ -25,6 +25,11 @@
}, },
"configurations": { "configurations": {
"production": { "production": {
"optimization": {
"styles": {
"inlineCritical": false
}
},
"budgets": [ "budgets": [
{ {
"type": "initial", "type": "initial",
+3
View File
@@ -8,6 +8,9 @@
<meta name="description" content="Naomi's curated collection of games, books, music, shows, manga, and art. Browse, engage, and suggest new additions!" /> <meta name="description" content="Naomi's curated collection of games, books, music, shows, manga, and art. Browse, engage, and suggest new additions!" />
<meta name="theme-color" content="#9d4edd" /> <meta name="theme-color" content="#9d4edd" />
<link rel="icon" type="image/x-icon" href="favicon.ico" /> <link rel="icon" type="image/x-icon" href="favicon.ico" />
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link href="https://fonts.googleapis.com/css2?family=Creepster&family=Griffy&family=Henny+Penny&family=Kalam:wght@300;400;700&display=swap" rel="stylesheet" />
<script defer src="https://analytics.nhcarrigan.com/js/pa-YUXAn1vhhRttySUAw_LMN.js"></script> <script defer src="https://analytics.nhcarrigan.com/js/pa-YUXAn1vhhRttySUAw_LMN.js"></script>
<script> <script>
window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}}; window.plausible=window.plausible||function(){(plausible.q=plausible.q||[]).push(arguments)},plausible.init=plausible.init||function(i){plausible.o=i||{}};
+22 -1
View File
@@ -38,7 +38,7 @@
body { body {
margin: 0; margin: 0;
padding: 0; padding: 0;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, sans-serif; font-family: 'Kalam', cursive;
font-size: 14pt; font-size: 14pt;
line-height: 1.6; line-height: 1.6;
color: var(--foreground); color: var(--foreground);
@@ -75,10 +75,30 @@ body::after {
pointer-events: none; pointer-events: none;
} }
@keyframes wiggle {
0%, 100% { transform: rotate(-2deg); }
50% { transform: rotate(2deg); }
}
h1, h2, h3, h4, h5, h6 { h1, h2, h3, h4, h5, h6 {
margin-top: 0; margin-top: 0;
line-height: 1.2; line-height: 1.2;
color: var(--witch-purple); color: var(--witch-purple);
font-family: 'Griffy', cursive;
}
h1 {
animation: wiggle 4s ease-in-out infinite;
display: inline-block;
}
.witchy-accent,
.spooky-title {
font-family: 'Creepster', cursive;
}
.mystical-text {
font-family: 'Henny Penny', cursive;
} }
a { a {
@@ -121,6 +141,7 @@ select:focus {
// Button base styles // Button base styles
button { button {
font-family: inherit;
transition: all 0.3s; transition: all 0.3s;
} }
+7 -7
View File
@@ -31,7 +31,7 @@
"@fastify/csrf-protection": "7.1.0", "@fastify/csrf-protection": "7.1.0",
"@fastify/helmet": "13.0.2", "@fastify/helmet": "13.0.2",
"@fastify/jwt": "10.0.0", "@fastify/jwt": "10.0.0",
"@fastify/oauth2": "8.1.2", "@fastify/oauth2": "8.2.0",
"@fastify/rate-limit": "10.3.0", "@fastify/rate-limit": "10.3.0",
"@fastify/sensible": "6.0.4", "@fastify/sensible": "6.0.4",
"@fastify/static": "9.0.0", "@fastify/static": "9.0.0",
@@ -44,8 +44,8 @@
"dompurify": "3.3.1", "dompurify": "3.3.1",
"fastify": "5.7.3", "fastify": "5.7.3",
"fastify-plugin": "5.0.1", "fastify-plugin": "5.0.1",
"jsdom": "28.0.0", "jsdom": "28.1.0",
"marked": "17.0.1", "marked": "17.0.3",
"rxjs": "7.8.2" "rxjs": "7.8.2"
}, },
"devDependencies": { "devDependencies": {
@@ -70,13 +70,13 @@
"@schematics/angular": "21.1.2", "@schematics/angular": "21.1.2",
"@swc-node/register": "1.9.2", "@swc-node/register": "1.9.2",
"@swc/core": "1.5.29", "@swc/core": "1.5.29",
"@swc/helpers": "0.5.18", "@swc/helpers": "0.5.19",
"@types/dompurify": "3.2.0", "@types/dompurify": "3.2.0",
"@types/jest": "30.0.0", "@types/jest": "30.0.0",
"@types/jsdom": "27.0.0", "@types/jsdom": "27.0.0",
"@types/jsonwebtoken": "9.0.10", "@types/jsonwebtoken": "9.0.10",
"@types/node": "20.19.9", "@types/node": "20.19.9",
"@typescript-eslint/utils": "8.54.0", "@typescript-eslint/utils": "8.56.0",
"angular-eslint": "21.1.0", "angular-eslint": "21.1.0",
"cypress": "15.9.0", "cypress": "15.9.0",
"esbuild": "0.19.12", "esbuild": "0.19.12",
@@ -84,13 +84,13 @@
"eslint-plugin-cypress": "3.6.0", "eslint-plugin-cypress": "3.6.0",
"jest": "30.2.0", "jest": "30.2.0",
"jest-environment-node": "30.2.0", "jest-environment-node": "30.2.0",
"jest-util": "30.2.0", "jest-util": "30.3.0",
"nx": "22.4.4", "nx": "22.4.4",
"prisma": "6.19.2", "prisma": "6.19.2",
"ts-jest": "29.4.6", "ts-jest": "29.4.6",
"ts-node": "10.9.1", "ts-node": "10.9.1",
"tslib": "2.8.1", "tslib": "2.8.1",
"typescript": "5.9.3", "typescript": "5.9.3",
"typescript-eslint": "8.54.0" "typescript-eslint": "8.56.0"
} }
} }
+566 -405
View File
File diff suppressed because it is too large Load Diff