ui overhaul
All checks were successful
Build and deploy Havenllo / Verify Go and frontend (push) Successful in 32s
Build and deploy Havenllo / Build and push image (push) Successful in 32s
Build and deploy Havenllo / Apply and restart Havenllo (push) Successful in 6s

This commit is contained in:
Hermes
2026-07-14 11:24:43 -03:00
parent afd23ca751
commit 4797bbdef8
5 changed files with 33 additions and 4 deletions

View File

@@ -10,7 +10,7 @@ Havenllo (Haven + Trello) is a lightweight, single-user, no-authentication kanba
- Go module `havenllo`, Go 1.24.
- Backend: `modernc.org/sqlite`, pure Go and CGO-free.
- Frontend runtime: `preact`, `commonmark`, and `dompurify`; build tooling: `@preact/preset-vite`, `@types/commonmark`, `typescript`, and `vite`.
- Frontend runtime: `preact`, `commonmark`, and `dompurify`; build tooling: `@preact/preset-vite`, `@types/commonmark`, `@types/node`, `typescript`, and `vite`.
- Card movement: custom Pointer Events interaction; no DnD library.
- Static SPA assets are embedded with Go `embed` from `web/dist`.
- Runtime port: `8080`; `HAVENLLO_LISTEN_ADDR` defaults to `:8080` and `HAVENLLO_DATABASE_PATH` defaults to `/data/havenllo.db`.
@@ -52,7 +52,7 @@ Havenllo (Haven + Trello) is a lightweight, single-user, no-authentication kanba
### Embedding bridge
- `web/embed.go`: embeds `web/dist` and exports it as `web.Files` after stripping the `dist/` prefix. `web/dist` is generated and ignored; Docker rebuilds it.
- `web/embed.go`: embeds `web/dist` and exports it as `web.Files` after stripping the `dist/` prefix. `web/dist` is generated and ignored except for its tracked `.gitkeep` placeholder, which keeps Go embeds valid before Vite runs; `web/vite.config.ts` recreates that placeholder after every build. Docker rebuilds the real bundle.
## Backend Architecture

0
web/dist/.gitkeep vendored Normal file
View File

18
web/package-lock.json generated
View File

@@ -15,6 +15,7 @@
"devDependencies": {
"@preact/preset-vite": "^2.10.1",
"@types/commonmark": "^0.27.10",
"@types/node": "^26.1.1",
"typescript": "^5.8.3",
"vite": "^6.3.5"
}
@@ -1344,6 +1345,16 @@
"dev": true,
"license": "MIT"
},
"node_modules/@types/node": {
"version": "26.1.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.1.tgz",
"integrity": "sha512-nxAkRSVkN1Y0JC1W8ky/fTfkGsMmcrRsbx+3XoZE+rMOX71kLYTV7fLXpqud1GpbpP5TuffXFqfX7fH2GgZREw==",
"dev": true,
"license": "MIT",
"dependencies": {
"undici-types": "~8.3.0"
}
},
"node_modules/@types/trusted-types": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
@@ -2048,6 +2059,13 @@
"node": ">=14.17"
}
},
"node_modules/undici-types": {
"version": "8.3.0",
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz",
"integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==",
"dev": true,
"license": "MIT"
},
"node_modules/update-browserslist-db": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz",

View File

@@ -16,6 +16,7 @@
"devDependencies": {
"@preact/preset-vite": "^2.10.1",
"@types/commonmark": "^0.27.10",
"@types/node": "^26.1.1",
"typescript": "^5.8.3",
"vite": "^6.3.5"
},

View File

@@ -1,11 +1,21 @@
import { writeFileSync } from "node:fs";
import { defineConfig } from "vite";
import preact from "@preact/preset-vite";
const embedPlaceholder = new URL("./dist/.gitkeep", import.meta.url);
export default defineConfig({
plugins: [preact()],
plugins: [
preact(),
{
name: "preserve-go-embed-placeholder",
closeBundle() {
writeFileSync(embedPlaceholder, "");
}
}
],
build: {
outDir: "dist",
emptyOutDir: true
}
});