<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Services on Suraj's Homelab</title><link>https://homelab.surajdhakre.xyz/services/</link><description>Recent content in Services on Suraj's Homelab</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://homelab.surajdhakre.xyz/services/index.xml" rel="self" type="application/rss+xml"/><item><title>Frigate NVR</title><link>https://homelab.surajdhakre.xyz/services/frigate/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/services/frigate/</guid><description>&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;
&lt;p&gt;Frigate is an open-source NVR that runs real-time object detection locally — no cloud, no subscription. It processes RTSP camera feeds, labels detected objects (person, car, dog), and records clips on motion events. Far fewer false alerts compared to simple motion-detection tools like MotionEye.&lt;/p&gt;
&lt;h2 id="runs-on"&gt;Runs on&lt;/h2&gt;
&lt;p&gt;🖥️ Lenovo ThinkCentre — Proxmox VM (Ubuntu Server)&lt;/p&gt;
&lt;h2 id="stack"&gt;Stack&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Details&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Image&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ghcr.io/blakeblackshear/frigate&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Cameras&lt;/td&gt;
 &lt;td&gt;Tapo &amp;amp; Imou RTSP feeds&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Storage&lt;/td&gt;
 &lt;td&gt;Recordings on WD Blue 4TB HDD&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Backup&lt;/td&gt;
 &lt;td&gt;Synced to Google Drive via rclone&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Database&lt;/td&gt;
 &lt;td&gt;SQLite&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="config-highlights"&gt;Config highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Object detection runs on CPU (no Coral TPU)&lt;/li&gt;
&lt;li&gt;Recordings retained and rotated automatically&lt;/li&gt;
&lt;li&gt;Accessible over Tailscale when away from home&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="links"&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🔗 &lt;a href="https://docs.frigate.video"&gt;Frigate documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;📝 &lt;a href="https://homelab.surajdhakre.xyz/blog/frigate-nvr-rtsp-camera-setup"&gt;Setup blog post&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Joplin Server</title><link>https://homelab.surajdhakre.xyz/services/joplin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/services/joplin/</guid><description>&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;
&lt;p&gt;Joplin Server is a self-hosted sync backend for the Joplin note-taking app. Notes sync instantly across all devices — phone, laptop, desktop — without relying on Joplin Cloud or any third-party service.&lt;/p&gt;
&lt;h2 id="runs-on"&gt;Runs on&lt;/h2&gt;
&lt;p&gt;🍓 Raspberry Pi 4B&lt;/p&gt;
&lt;h2 id="stack"&gt;Stack&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Details&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Image&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;joplin/server:latest&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Database&lt;/td&gt;
 &lt;td&gt;PostgreSQL 15 (Docker)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Proxy&lt;/td&gt;
 &lt;td&gt;nginx reverse proxy&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Port&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;22300&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="config-highlights"&gt;Config highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;PostgreSQL data stored on the WD Red SSD for fast access&lt;/li&gt;
&lt;li&gt;Daily automated backups via &lt;code&gt;pg_dump&lt;/code&gt; at 2 AM, retained for 7 days&lt;/li&gt;
&lt;li&gt;Accessible remotely via Tailscale + nginx reverse proxy&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="links"&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🔗 &lt;a href="https://joplinapp.org/help/dev/spec/server_sharing"&gt;Joplin Server docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;📝 &lt;a href="https://homelab.surajdhakre.xyz/blog/setting-up-joplin-server-on-raspberry-pi"&gt;Setup blog post&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Pi-hole</title><link>https://homelab.surajdhakre.xyz/services/pihole/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/services/pihole/</guid><description>&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;
&lt;p&gt;Pi-hole acts as a DNS sinkhole that blocks ads, trackers, and telemetry domains at the network level. Every device on the LAN gets ad-free browsing without needing browser extensions. Two instances run in parallel for redundancy — if one goes down, DNS still works.&lt;/p&gt;
&lt;h2 id="runs-on"&gt;Runs on&lt;/h2&gt;
&lt;p&gt;🍓 Raspberry Pi 4B + 💻 Old Laptop (one instance each)&lt;/p&gt;
&lt;h2 id="stack"&gt;Stack&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Details&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Image&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;pihole/pihole:latest&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Instances&lt;/td&gt;
 &lt;td&gt;2 (primary + secondary)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Port&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;53&lt;/code&gt; (DNS), &lt;code&gt;80&lt;/code&gt; (web UI)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="config-highlights"&gt;Config highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Both instances use the same blocklists for consistency&lt;/li&gt;
&lt;li&gt;Router configured with both Pi-hole IPs as DNS servers&lt;/li&gt;
&lt;li&gt;Web dashboard available for monitoring query logs and blocked domains&lt;/li&gt;
&lt;li&gt;Custom local DNS entries for homelab services (e.g., &lt;code&gt;grafana.home.lan&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="links"&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🔗 &lt;a href="https://docs.pi-hole.net"&gt;Pi-hole documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Grafana</title><link>https://homelab.surajdhakre.xyz/services/grafana/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/services/grafana/</guid><description>&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;
&lt;p&gt;Grafana provides a single pane of glass for monitoring the homelab — system resource usage, service uptime, network stats, and custom metrics all visualised through dashboards.&lt;/p&gt;
&lt;h2 id="runs-on"&gt;Runs on&lt;/h2&gt;
&lt;p&gt;🖥️ Lenovo ThinkCentre&lt;/p&gt;
&lt;h2 id="stack"&gt;Stack&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Details&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Image&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;grafana/grafana:latest&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Data source&lt;/td&gt;
 &lt;td&gt;Prometheus / InfluxDB&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Port&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;3000&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="config-highlights"&gt;Config highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Dashboards for CPU, memory, disk, and network across all 3 nodes&lt;/li&gt;
&lt;li&gt;Alerts configured for disk space and service downtime&lt;/li&gt;
&lt;li&gt;Accessible remotely via Tailscale&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="links"&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🔗 &lt;a href="https://grafana.com/docs/grafana/latest/"&gt;Grafana documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Tailscale</title><link>https://homelab.surajdhakre.xyz/services/tailscale/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/services/tailscale/</guid><description>&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;
&lt;p&gt;Tailscale creates a secure WireGuard-based mesh VPN across all devices. With subnet routing enabled, any device on the tailnet can reach services on the homelab LAN — even from outside the house.&lt;/p&gt;
&lt;h2 id="runs-on"&gt;Runs on&lt;/h2&gt;
&lt;p&gt;🖥️ All nodes (Pi, Laptop, ThinkCentre)&lt;/p&gt;
&lt;h2 id="stack"&gt;Stack&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Details&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Client&lt;/td&gt;
 &lt;td&gt;Tailscale agent on every node&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Protocol&lt;/td&gt;
 &lt;td&gt;WireGuard&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Feature&lt;/td&gt;
 &lt;td&gt;Subnet routing for LAN access&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="config-highlights"&gt;Config highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Subnet routes advertised from the Pi so the entire LAN is reachable&lt;/li&gt;
&lt;li&gt;MagicDNS enabled for friendly hostnames&lt;/li&gt;
&lt;li&gt;ACLs configured to restrict access to sensitive services&lt;/li&gt;
&lt;li&gt;Exit node available for tunnelling all traffic through the homelab&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="links"&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🔗 &lt;a href="https://tailscale.com/kb"&gt;Tailscale docs&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Samba NAS</title><link>https://homelab.surajdhakre.xyz/services/samba/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/services/samba/</guid><description>&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;
&lt;p&gt;Samba NAS exposes file shares from the Pi&amp;rsquo;s attached drives over the local network using the SMB protocol. Any device on the network — laptop, phone, TV — can mount and access shared folders.&lt;/p&gt;
&lt;h2 id="runs-on"&gt;Runs on&lt;/h2&gt;
&lt;p&gt;🍓 Raspberry Pi 4B&lt;/p&gt;
&lt;h2 id="stack"&gt;Stack&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Details&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Service&lt;/td&gt;
 &lt;td&gt;Samba (SMB)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Drives&lt;/td&gt;
 &lt;td&gt;WD Red 500GB SSD (fast access) + WD Blue 4TB HDD (bulk storage)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Connection&lt;/td&gt;
 &lt;td&gt;USB 3.0 to Pi&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="config-highlights"&gt;Config highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Separate shares for media, backups, and general files&lt;/li&gt;
&lt;li&gt;Read-write access restricted to authenticated users&lt;/li&gt;
&lt;li&gt;Used by Jellyfin and Frigate as the backing storage layer&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="links"&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🔗 &lt;a href="https://www.samba.org"&gt;Samba project&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Electricity Monitor</title><link>https://homelab.surajdhakre.xyz/services/electricity-monitor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/services/electricity-monitor/</guid><description>&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;
&lt;p&gt;A custom app that tracks household electricity consumption over time. It helps visualise usage patterns, estimate monthly costs, and spot anomalies — like a sudden spike from a faulty appliance.&lt;/p&gt;
&lt;h2 id="runs-on"&gt;Runs on&lt;/h2&gt;
&lt;p&gt;💻 Old Laptop&lt;/p&gt;
&lt;h2 id="stack"&gt;Stack&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Details&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;App&lt;/td&gt;
 &lt;td&gt;Custom-built&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Runtime&lt;/td&gt;
 &lt;td&gt;Docker&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="config-highlights"&gt;Config highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Tracks daily and monthly consumption trends&lt;/li&gt;
&lt;li&gt;Estimates electricity bill based on per-unit rates&lt;/li&gt;
&lt;li&gt;Historical data stored for long-term comparisons&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="links"&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🔗 Built in-house — no upstream project&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>FUP Monitor</title><link>https://homelab.surajdhakre.xyz/services/fup-monitor/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/services/fup-monitor/</guid><description>&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;
&lt;p&gt;Most broadband plans in India come with a Fair Usage Policy — once you cross the FUP limit, speeds get throttled. This app monitors daily upload and download data usage and sends notifications when consumption is approaching the limit, so there are no surprises.&lt;/p&gt;
&lt;h2 id="runs-on"&gt;Runs on&lt;/h2&gt;
&lt;p&gt;💻 Old Laptop&lt;/p&gt;
&lt;h2 id="stack"&gt;Stack&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Details&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;App&lt;/td&gt;
 &lt;td&gt;Custom-built&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Runtime&lt;/td&gt;
 &lt;td&gt;Docker&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="config-highlights"&gt;Config highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Tracks daily download and upload data&lt;/li&gt;
&lt;li&gt;Configurable FUP threshold and alert percentage&lt;/li&gt;
&lt;li&gt;Sends notifications before the limit is hit&lt;/li&gt;
&lt;li&gt;Helps plan heavy downloads (OS ISOs, media) around the billing cycle&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="links"&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🔗 Built in-house — no upstream project&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Jellyfin</title><link>https://homelab.surajdhakre.xyz/services/jellyfin/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/services/jellyfin/</guid><description>&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;
&lt;p&gt;Jellyfin is a free, open-source media server — think Plex but without the accounts, telemetry, or paywalled features. It organises and streams movies, TV shows, and music to any device with a web browser or the Jellyfin app.&lt;/p&gt;
&lt;h2 id="runs-on"&gt;Runs on&lt;/h2&gt;
&lt;p&gt;🖥️ Lenovo ThinkCentre&lt;/p&gt;
&lt;h2 id="stack"&gt;Stack&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Details&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Image&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;jellyfin/jellyfin:latest&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Storage&lt;/td&gt;
 &lt;td&gt;Media library on WD Blue 4TB HDD (via Samba)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Port&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;8096&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="config-highlights"&gt;Config highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Hardware transcoding for smooth playback across devices&lt;/li&gt;
&lt;li&gt;Media library mounted from the Samba NAS share&lt;/li&gt;
&lt;li&gt;Accessible over Tailscale for streaming on the go&lt;/li&gt;
&lt;li&gt;Metadata fetched automatically from TMDb and OMDb&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="links"&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🔗 &lt;a href="https://jellyfin.org/docs"&gt;Jellyfin documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Linkwarden</title><link>https://homelab.surajdhakre.xyz/services/linkwarden/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/services/linkwarden/</guid><description>&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;
&lt;p&gt;Linkwarden is a self-hosted bookmark manager that saves links into collections and automatically archives the web pages — so even if the original page goes down, the content is still accessible. Great for research, read-later workflows, and keeping bookmarks organised across browsers.&lt;/p&gt;
&lt;h2 id="runs-on"&gt;Runs on&lt;/h2&gt;
&lt;p&gt;🖥️ Lenovo ThinkCentre&lt;/p&gt;
&lt;h2 id="stack"&gt;Stack&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Details&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Image&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;ghcr.io/linkwarden/linkwarden:latest&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Database&lt;/td&gt;
 &lt;td&gt;PostgreSQL&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Port&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;3000&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="config-highlights"&gt;Config highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Automatic page archiving with screenshots and full-text snapshots&lt;/li&gt;
&lt;li&gt;Collections and tags for organising bookmarks&lt;/li&gt;
&lt;li&gt;Browser extension for quick saving from Chrome/Firefox&lt;/li&gt;
&lt;li&gt;Accessible remotely via Tailscale&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="links"&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🔗 &lt;a href="https://github.com/linkwarden/linkwarden"&gt;Linkwarden on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Omnitools</title><link>https://homelab.surajdhakre.xyz/services/omnitools/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/services/omnitools/</guid><description>&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;
&lt;p&gt;Omnitools is a self-hosted collection of everyday utility tools — things like unit converters, text formatters, encoders/decoders, hash generators, and more. Having it locally means no ads, no tracking, and it works even without internet.&lt;/p&gt;
&lt;h2 id="runs-on"&gt;Runs on&lt;/h2&gt;
&lt;p&gt;💻 Old Laptop&lt;/p&gt;
&lt;h2 id="stack"&gt;Stack&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Details&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Image&lt;/td&gt;
 &lt;td&gt;Omnitools (Docker)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Port&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;8080&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="config-highlights"&gt;Config highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fully offline — no external API calls&lt;/li&gt;
&lt;li&gt;Lightweight, runs happily on minimal resources&lt;/li&gt;
&lt;li&gt;Accessible to all devices on the LAN&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="links"&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🔗 &lt;a href="https://github.com/nicholasgasior/omnitools"&gt;Omnitools on GitHub&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Wishlist Manager</title><link>https://homelab.surajdhakre.xyz/services/wishlist-manager/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/services/wishlist-manager/</guid><description>&lt;h2 id="what-it-does"&gt;What it does&lt;/h2&gt;
&lt;p&gt;A custom app for managing wishlists. Add items you want to buy, track their prices over time, and mark them as purchased when you finally pull the trigger. Helps avoid impulse buys by letting you see price trends before deciding.&lt;/p&gt;
&lt;h2 id="runs-on"&gt;Runs on&lt;/h2&gt;
&lt;p&gt;💻 Old Laptop&lt;/p&gt;
&lt;h2 id="stack"&gt;Stack&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Component&lt;/th&gt;
 &lt;th&gt;Details&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;App&lt;/td&gt;
 &lt;td&gt;Custom-built&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Runtime&lt;/td&gt;
 &lt;td&gt;Docker&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="config-highlights"&gt;Config highlights&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Create multiple wishlists (tech, home, gifts, etc.)&lt;/li&gt;
&lt;li&gt;Track price history for each item over time&lt;/li&gt;
&lt;li&gt;Mark items as purchased to keep the list clean&lt;/li&gt;
&lt;li&gt;Helps time purchases around sales and price drops&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="links"&gt;Links&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;🔗 Built in-house — no upstream project&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>