Private index · not linked publicly

Everything running on this server

One page so you never have to remember a URL again. Bookmark this. Generated from the live server on 3 September 2026 — hostnames read from the Caddyfile, page counts from the actual web roots.

Public sites — anyone can open these

Your portfolio. Hero, skills, four case studies, contact.
source: portfolio-live//srv/proxy/site
KhamarTools — poultry calculators, Bangla + English. 12 pages, installable, works offline.
source: farm-site//srv/farm/site · service worker kt-v9
FitTools — Bangla health calculators. Newest site, no promotion yet.
source: sites/fit//srv/fit/site · pages generated by build-pages.py
Old KhamarTools address. Redirects to farm. Kept free for an actual game later.

Behind a login — yours only

SkarHome — the smart-home platform. Fastify + TimescaleDB + MQTT, React PWA, 9 ESP32 firmwares.
containers: skarhome-backend-1, skarhome-db-1, skarhome-webserver-1, skarhome-mosquitto-1
Gitea — your self-hosted git forge and CI runner. (Name is historical; it is not a status page.)
containers: skarci-gitea-1, skarci-runner-1
Uptime Kuma — uptime monitoring. (Name is historical; nothing IoT here.)
container: skarmon-uptime-kuma-1
Career map — the 24-month plan. Unlisted and noindex; it has salary numbers in it. Do not link publicly.

Run these from the project folder

./traffic.shWho visited, which pages, which crawlers. Reads Caddy's own logs — no analytics service.
./sync-check.shDoes every local file match what is deployed? Catches a half-finished upload.
python3 check-live.pyError sweep: service-worker precache, sitemaps, every internal link, every page status.
node toolkit/scaffold.mjs <slug> …Generates a whole new bilingual PWA site. Read toolkit/README.md first.
node promo/csp-check.mjsRun after ANY Caddy change — proves the CSP did not silently break a page.

Read these before changing anything

Still needs you — nothing here can be done for you

  • Rotate the sudo password. chage says it has not changed since 14 Jul 2026, the day it was pasted into chat. Run passwd.
  • Mosquitto is exposed on 0.0.0.0:8883, bypassing ufw, and internet scanners are brute-forcing it. Decide: bind it to WireGuard, or add client certificates.
  • A stray Mosquitto container is running under the random name gracious_pike, alongside the real skarhome-mosquitto-1. Almost certainly a leftover from testing — check, then remove it.
  • Kernel reboot pending for over a week.
  • GitHub Actions is failing on a billing block since 20 Aug — push-to-deploy is dead until that is paid.
  • Nothing is verified in Google Search Console and no affiliate link is live, so all three sites currently earn nothing and cannot be measured in search.