From 0cf817238e4dd6b507369c9f1ae62c65e9834dc7 Mon Sep 17 00:00:00 2001 From: Soldier Date: Sun, 16 Nov 2025 10:10:58 +0000 Subject: [PATCH] Add portfolio content with AlpenQueue project and live job counter - Add marketing copy and project description for AlpenQueue - Extract CSS to separate styles.css file - Add live job counter updating every 10 seconds - Include screenshot placeholder section - Add GitHub link for code access - Remove old service status indicators --- index.html | 161 +++++++++++++---------------------------------------- styles.css | 99 ++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+), 121 deletions(-) create mode 100644 styles.css diff --git a/index.html b/index.html index de7244d..cbbb960 100644 --- a/index.html +++ b/index.html @@ -4,142 +4,61 @@ Portfolio - + +

Mountain-Built Tools for Real Problems

+ +
+ Linux Developer crafting resilient, self-hosted solutions from the Austrian Alps. +
+ +
+
AlpenQueue
+

A lightweight task queue-scrapes, processes, calls back-runs on a five-euro Hetzner box. Used it this morning to pull competitor prices.

+

The CLI? One command, drops jobs in. Built with Go, Docker-ready, open-source.

+

Want it? Just ask.

+
+ +
+ +
+ Screenshot placeholder - add screenshot.png to project +
+
Live demo: monitoring 42 jobs a minute
+
+ +
+ Processing 42 jobs/minute +
+
Go for the backend, net/http for the API, SQLite for data, goquery for scraping, Docker to package it, self-hosted on Hetzner.
-
-
- - API -
-
- - Scraper -
-
- - Database -
+ -
- All code on this page runs on five euros a month. -
- -
- Alps 2,034m above complaints. -
- diff --git a/styles.css b/styles.css new file mode 100644 index 0000000..2425e2b --- /dev/null +++ b/styles.css @@ -0,0 +1,99 @@ +* { + margin: 0; + padding: 0; + box-sizing: border-box; +} + +body { + font-family: 'Courier New', monospace; + line-height: 1.6; + padding: 2rem; + max-width: 800px; + margin: 0 auto; + background: #0a0a0a; + color: #e0e0e0; +} + +h1 { + font-size: 1.1rem; + font-weight: normal; + margin-bottom: 1.5rem; + color: #4a9e5f; +} + +.intro { + margin-bottom: 2rem; + font-size: 0.95rem; + line-height: 1.7; +} + +.project { + margin: 2rem 0; + padding: 1.5rem; + border-left: 2px solid #333; + background: #111; +} + +.project-name { + color: #4a9e5f; + font-weight: bold; + margin-bottom: 0.5rem; +} + +.project p { + margin-top: 0.5rem; +} + +.stack { + margin: 2rem 0; + font-size: 0.95rem; +} + +.demo { + margin-bottom: 3rem; +} + +.demo img { + width: 100%; + border: 1px solid #333; + margin-bottom: 0.5rem; +} + +.demo-caption { + font-size: 0.9rem; + color: #888; +} + +.demo-placeholder { + background: #111; + border: 1px solid #333; + padding: 3rem 2rem; + text-align: center; + color: #666; +} + +.jobs { + margin: 2rem 0; + font-size: 1.1rem; +} + +.jobs-count { + color: #4a9e5f; + font-weight: bold; +} + +.link { + margin-top: 1.5rem; + font-size: 0.95rem; +} + +.link a { + color: #4a9e5f; + text-decoration: none; + border-bottom: 1px solid #4a9e5f; +} + +.link a:hover { + color: #5fb070; + border-bottom-color: #5fb070; +}