A personal project dashboard built with Preact and esbuild. Reads project data from a JSON file and renders a card-based UI with click-frequency tracking via localStorage.
- Preact SPA with esbuild bundling
- JSON-based project configuration (no rebuild needed to update projects)
- Frequently Used section powered by localStorage
- Docker containerization with nginx
- Multi-platform Docker images (amd64/arm64)
- CI/CD with GitHub Actions
- Node.js 24
npm install
# Dev server with watch mode on :8080
npm run dev
# Production build → build/site/
npm run buildnpm run build
docker build -t kotrol .
docker run -p 8080:80 kotrolVisit http://localhost:8080 to view the site.
src/app.jsx- Application entry pointsrc/components/- Preact components (Card, Group, FrequentSection)src/hooks/useFrequent.js- localStorage tracking logicsrc/style.css- Stylespublic/projects.json- Project configurationpublic/logos/- Project logo assetsdefault.conf- nginx configurationDockerfile- Container image definition
Edit public/projects.json to add or modify projects:
{
"groups": [
{
"name": "Group Name",
"projects": [
{
"title": "Project Name",
"links": [{ "label": "Online", "url": "https://example.com" }],
"logo": "logo.svg"
}
]
}
]
}Add corresponding logo files to public/logos/.
The project uses GitHub Actions for automated builds and Docker image publishing to GitHub Container Registry (ghcr.io/irus/kotrol:main).
See LICENSE file for details.