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 20 ], 21 21 }; 22 22 23 - const tailwindBin = "node_modules/.bin/tailwindcss"; 23 + const tailwindBin = "../node_modules/.bin/tailwindcss"; 24 24 const tailwindArgs = [ 25 25 "-i", 26 26 "src/css/tailwind.css",
+1 -1
frontend/eslint.config.js
··· 33 33 rules: { 34 34 "@typescript-eslint/no-unsafe-assignment": "off", 35 35 }, 36 - } 36 + }, 37 37 );
+146 -18
frontend/package-lock.json package-lock.json
··· 1 1 { 2 - "name": "autobivo", 2 + "name": "myivo", 3 3 "version": "1.0.0", 4 4 "lockfileVersion": 2, 5 5 "requires": true, 6 6 "packages": { 7 7 "": { 8 - "name": "autobivo", 8 + "name": "myivo", 9 9 "version": "1.0.0", 10 10 "license": "MIT", 11 - "dependencies": { 12 - "htmx.org": "^2.0.6", 13 - "tailwindcss": "^4.1.12" 14 - }, 11 + "workspaces": [ 12 + "frontend" 13 + ], 15 14 "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 15 "prettier": "^3.6.2", 27 - "typescript": "^5.9.2", 28 - "typescript-eslint": "^8.41.0" 16 + "prettier-plugin-tailwindcss": "^0.6.14" 29 17 } 30 18 }, 31 19 "../esbuild-plugin-postcss": { ··· 50 38 }, 51 39 "peerDependencies": { 52 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" 53 64 } 54 65 }, 55 66 "node_modules/@esbuild/aix-ppc64": { ··· 1759 1770 "dev": true, 1760 1771 "license": "Python-2.0" 1761 1772 }, 1773 + "node_modules/autobivo": { 1774 + "resolved": "frontend", 1775 + "link": true 1776 + }, 1762 1777 "node_modules/balanced-match": { 1763 1778 "version": "1.0.2", 1764 1779 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", ··· 3111 3126 "url": "https://github.com/prettier/prettier?sponsor=1" 3112 3127 } 3113 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 + }, 3114 3216 "node_modules/punycode": { 3115 3217 "version": "2.3.1", 3116 3218 "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", ··· 4347 4449 "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 4348 4450 "dev": true 4349 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 + }, 4350 4471 "balanced-match": { 4351 4472 "version": "1.0.2", 4352 4473 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", ··· 5171 5292 "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", 5172 5293 "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", 5173 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": {} 5174 5302 }, 5175 5303 "punycode": { 5176 5304 "version": "2.3.1",
+1 -3
frontend/package.json
··· 15 15 "eslint-config-prettier": "^10.1.8", 16 16 "globals": "^16.3.0", 17 17 "minimist": "^1.2.8", 18 - "prettier": "^3.6.2", 19 18 "typescript": "^5.9.2", 20 19 "typescript-eslint": "^8.41.0" 21 20 }, ··· 24 23 "build": "npm run check && node esbuild.js", 25 24 "build:production": "npm run check && node esbuild.js --prod", 26 25 "start": "node esbuild.js --serve", 27 - "format": "prettier --write .", 28 26 "lint": "eslint", 29 27 "test": "echo \"Error: no test specified\" && exit 1" 30 28 }, ··· 39 37 "tailwindcss": "^4.1.12" 40 38 }, 41 39 "volta": { 42 - "node": "24.6.0" 40 + "extends": "../package.json" 43 41 } 44 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 1 <!doctype html> 2 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> 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> 12 11 </html>