My personal site cherry.computer
htmx tailwind axum askama

style: move Prettier to root of monorepo

This allows us to apply prettier formatting on the HTML templates in the
server code, including the Tailwind plugin to sort its classes
correctly.

cherry.computer c1a854ef 2c21510a

verified
+186 -34
+4
.prettierrc.json
···
··· 1 + { 2 + "plugins": ["prettier-plugin-tailwindcss"], 3 + "tailwindStylesheet": "./frontend/src/css/tailwind.css" 4 + }
-1
frontend/.prettierignore
··· 1 - build
···
-1
frontend/.prettierrc.json
··· 1 - {}
···
+1 -1
frontend/esbuild.js
··· 20 ], 21 }; 22 23 - const tailwindBin = "node_modules/.bin/tailwindcss"; 24 const tailwindArgs = [ 25 "-i", 26 "src/css/tailwind.css",
··· 20 ], 21 }; 22 23 + const tailwindBin = "../node_modules/.bin/tailwindcss"; 24 const tailwindArgs = [ 25 "-i", 26 "src/css/tailwind.css",
+1 -1
frontend/eslint.config.js
··· 33 rules: { 34 "@typescript-eslint/no-unsafe-assignment": "off", 35 }, 36 - } 37 );
··· 33 rules: { 34 "@typescript-eslint/no-unsafe-assignment": "off", 35 }, 36 + }, 37 );
+146 -18
frontend/package-lock.json package-lock.json
··· 1 { 2 - "name": "autobivo", 3 "version": "1.0.0", 4 "lockfileVersion": 2, 5 "requires": true, 6 "packages": { 7 "": { 8 - "name": "autobivo", 9 "version": "1.0.0", 10 "license": "MIT", 11 - "dependencies": { 12 - "htmx.org": "^2.0.6", 13 - "tailwindcss": "^4.1.12" 14 - }, 15 "devDependencies": { 16 - "@eslint/js": "^9.34.0", 17 - "@tailwindcss/cli": "^4.1.12", 18 - "@types/node": "^24.3.0", 19 - "browserslist": "^4.25.3", 20 - "esbuild": "^0.25.9", 21 - "esbuild-plugin-browserslist": "^1.0.1", 22 - "eslint": "^9.34.0", 23 - "eslint-config-prettier": "^10.1.8", 24 - "globals": "^16.3.0", 25 - "minimist": "^1.2.8", 26 "prettier": "^3.6.2", 27 - "typescript": "^5.9.2", 28 - "typescript-eslint": "^8.41.0" 29 } 30 }, 31 "../esbuild-plugin-postcss": { ··· 50 }, 51 "peerDependencies": { 52 "esbuild": "^0.14.38" 53 } 54 }, 55 "node_modules/@esbuild/aix-ppc64": { ··· 1759 "dev": true, 1760 "license": "Python-2.0" 1761 }, 1762 "node_modules/balanced-match": { 1763 "version": "1.0.2", 1764 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", ··· 3111 "url": "https://github.com/prettier/prettier?sponsor=1" 3112 } 3113 }, 3114 "node_modules/punycode": { 3115 "version": "2.3.1", 3116 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", ··· 4347 "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 4348 "dev": true 4349 }, 4350 "balanced-match": { 4351 "version": "1.0.2", 4352 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", ··· 5171 "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", 5172 "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", 5173 "dev": true 5174 }, 5175 "punycode": { 5176 "version": "2.3.1",
··· 1 { 2 + "name": "myivo", 3 "version": "1.0.0", 4 "lockfileVersion": 2, 5 "requires": true, 6 "packages": { 7 "": { 8 + "name": "myivo", 9 "version": "1.0.0", 10 "license": "MIT", 11 + "workspaces": [ 12 + "frontend" 13 + ], 14 "devDependencies": { 15 "prettier": "^3.6.2", 16 + "prettier-plugin-tailwindcss": "^0.6.14" 17 } 18 }, 19 "../esbuild-plugin-postcss": { ··· 38 }, 39 "peerDependencies": { 40 "esbuild": "^0.14.38" 41 + } 42 + }, 43 + "frontend": { 44 + "name": "autobivo", 45 + "version": "1.0.0", 46 + "license": "MIT", 47 + "dependencies": { 48 + "htmx.org": "^2.0.6", 49 + "tailwindcss": "^4.1.12" 50 + }, 51 + "devDependencies": { 52 + "@eslint/js": "^9.34.0", 53 + "@tailwindcss/cli": "^4.1.12", 54 + "@types/node": "^24.3.0", 55 + "browserslist": "^4.25.3", 56 + "esbuild": "^0.25.9", 57 + "esbuild-plugin-browserslist": "^1.0.1", 58 + "eslint": "^9.34.0", 59 + "eslint-config-prettier": "^10.1.8", 60 + "globals": "^16.3.0", 61 + "minimist": "^1.2.8", 62 + "typescript": "^5.9.2", 63 + "typescript-eslint": "^8.41.0" 64 } 65 }, 66 "node_modules/@esbuild/aix-ppc64": { ··· 1770 "dev": true, 1771 "license": "Python-2.0" 1772 }, 1773 + "node_modules/autobivo": { 1774 + "resolved": "frontend", 1775 + "link": true 1776 + }, 1777 "node_modules/balanced-match": { 1778 "version": "1.0.2", 1779 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", ··· 3126 "url": "https://github.com/prettier/prettier?sponsor=1" 3127 } 3128 }, 3129 + "node_modules/prettier-plugin-tailwindcss": { 3130 + "version": "0.6.14", 3131 + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.14.tgz", 3132 + "integrity": "sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==", 3133 + "dev": true, 3134 + "license": "MIT", 3135 + "engines": { 3136 + "node": ">=14.21.3" 3137 + }, 3138 + "peerDependencies": { 3139 + "@ianvs/prettier-plugin-sort-imports": "*", 3140 + "@prettier/plugin-hermes": "*", 3141 + "@prettier/plugin-oxc": "*", 3142 + "@prettier/plugin-pug": "*", 3143 + "@shopify/prettier-plugin-liquid": "*", 3144 + "@trivago/prettier-plugin-sort-imports": "*", 3145 + "@zackad/prettier-plugin-twig": "*", 3146 + "prettier": "^3.0", 3147 + "prettier-plugin-astro": "*", 3148 + "prettier-plugin-css-order": "*", 3149 + "prettier-plugin-import-sort": "*", 3150 + "prettier-plugin-jsdoc": "*", 3151 + "prettier-plugin-marko": "*", 3152 + "prettier-plugin-multiline-arrays": "*", 3153 + "prettier-plugin-organize-attributes": "*", 3154 + "prettier-plugin-organize-imports": "*", 3155 + "prettier-plugin-sort-imports": "*", 3156 + "prettier-plugin-style-order": "*", 3157 + "prettier-plugin-svelte": "*" 3158 + }, 3159 + "peerDependenciesMeta": { 3160 + "@ianvs/prettier-plugin-sort-imports": { 3161 + "optional": true 3162 + }, 3163 + "@prettier/plugin-hermes": { 3164 + "optional": true 3165 + }, 3166 + "@prettier/plugin-oxc": { 3167 + "optional": true 3168 + }, 3169 + "@prettier/plugin-pug": { 3170 + "optional": true 3171 + }, 3172 + "@shopify/prettier-plugin-liquid": { 3173 + "optional": true 3174 + }, 3175 + "@trivago/prettier-plugin-sort-imports": { 3176 + "optional": true 3177 + }, 3178 + "@zackad/prettier-plugin-twig": { 3179 + "optional": true 3180 + }, 3181 + "prettier-plugin-astro": { 3182 + "optional": true 3183 + }, 3184 + "prettier-plugin-css-order": { 3185 + "optional": true 3186 + }, 3187 + "prettier-plugin-import-sort": { 3188 + "optional": true 3189 + }, 3190 + "prettier-plugin-jsdoc": { 3191 + "optional": true 3192 + }, 3193 + "prettier-plugin-marko": { 3194 + "optional": true 3195 + }, 3196 + "prettier-plugin-multiline-arrays": { 3197 + "optional": true 3198 + }, 3199 + "prettier-plugin-organize-attributes": { 3200 + "optional": true 3201 + }, 3202 + "prettier-plugin-organize-imports": { 3203 + "optional": true 3204 + }, 3205 + "prettier-plugin-sort-imports": { 3206 + "optional": true 3207 + }, 3208 + "prettier-plugin-style-order": { 3209 + "optional": true 3210 + }, 3211 + "prettier-plugin-svelte": { 3212 + "optional": true 3213 + } 3214 + } 3215 + }, 3216 "node_modules/punycode": { 3217 "version": "2.3.1", 3218 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", ··· 4449 "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 4450 "dev": true 4451 }, 4452 + "autobivo": { 4453 + "version": "file:frontend", 4454 + "requires": { 4455 + "@eslint/js": "^9.34.0", 4456 + "@tailwindcss/cli": "^4.1.12", 4457 + "@types/node": "^24.3.0", 4458 + "browserslist": "^4.25.3", 4459 + "esbuild": "^0.25.9", 4460 + "esbuild-plugin-browserslist": "^1.0.1", 4461 + "eslint": "^9.34.0", 4462 + "eslint-config-prettier": "^10.1.8", 4463 + "globals": "^16.3.0", 4464 + "htmx.org": "^2.0.6", 4465 + "minimist": "^1.2.8", 4466 + "tailwindcss": "^4.1.12", 4467 + "typescript": "^5.9.2", 4468 + "typescript-eslint": "^8.41.0" 4469 + } 4470 + }, 4471 "balanced-match": { 4472 "version": "1.0.2", 4473 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", ··· 5292 "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", 5293 "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", 5294 "dev": true 5295 + }, 5296 + "prettier-plugin-tailwindcss": { 5297 + "version": "0.6.14", 5298 + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.14.tgz", 5299 + "integrity": "sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==", 5300 + "dev": true, 5301 + "requires": {} 5302 }, 5303 "punycode": { 5304 "version": "2.3.1",
+1 -3
frontend/package.json
··· 15 "eslint-config-prettier": "^10.1.8", 16 "globals": "^16.3.0", 17 "minimist": "^1.2.8", 18 - "prettier": "^3.6.2", 19 "typescript": "^5.9.2", 20 "typescript-eslint": "^8.41.0" 21 }, ··· 24 "build": "npm run check && node esbuild.js", 25 "build:production": "npm run check && node esbuild.js --prod", 26 "start": "node esbuild.js --serve", 27 - "format": "prettier --write .", 28 "lint": "eslint", 29 "test": "echo \"Error: no test specified\" && exit 1" 30 }, ··· 39 "tailwindcss": "^4.1.12" 40 }, 41 "volta": { 42 - "node": "24.6.0" 43 } 44 }
··· 15 "eslint-config-prettier": "^10.1.8", 16 "globals": "^16.3.0", 17 "minimist": "^1.2.8", 18 "typescript": "^5.9.2", 19 "typescript-eslint": "^8.41.0" 20 }, ··· 23 "build": "npm run check && node esbuild.js", 24 "build:production": "npm run check && node esbuild.js --prod", 25 "start": "node esbuild.js --serve", 26 "lint": "eslint", 27 "test": "echo \"Error: no test specified\" && exit 1" 28 }, ··· 37 "tailwindcss": "^4.1.12" 38 }, 39 "volta": { 40 + "extends": "../package.json" 41 } 42 }
+25
package.json
···
··· 1 + { 2 + "name": "myivo", 3 + "version": "1.0.0", 4 + "description": "Personal site for Ivo Murrell", 5 + "type": "module", 6 + "workspaces": [ 7 + "frontend" 8 + ], 9 + "devDependencies": { 10 + "prettier": "^3.6.2", 11 + "prettier-plugin-tailwindcss": "^0.6.14" 12 + }, 13 + "scripts": { 14 + "format": "prettier -w ." 15 + }, 16 + "author": "Ivo Murrell", 17 + "license": "MIT", 18 + "repository": { 19 + "type": "git", 20 + "url": "https://github.com/ivomurrell/myivo.git" 21 + }, 22 + "volta": { 23 + "node": "24.6.0" 24 + } 25 + }
+8 -9
server/templates/index.html
··· 1 <!doctype html> 2 <html> 3 - <head> 4 - <title>Ivo's Bio</title> 5 - <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 - <link rel="stylesheet" href="build/app.css" /> 7 - <link rel="me" href="https://hachyderm.io/@cherry" /> 8 - <script defer src="build/app.js" type="module"></script> 9 - </head> 10 - <body class="bg-gray-900"> 11 - </body> 12 </html>
··· 1 <!doctype html> 2 <html> 3 + <head> 4 + <title>Ivo's Bio</title> 5 + <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 6 + <link rel="stylesheet" href="build/app.css" /> 7 + <link rel="me" href="https://hachyderm.io/@cherry" /> 8 + <script defer src="build/app.js" type="module"></script> 9 + </head> 10 + <body class="bg-gray-900"></body> 11 </html>