<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Suraj's Homelab</title><link>https://homelab.surajdhakre.xyz/</link><description>Recent content on Suraj's Homelab</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Sun, 24 May 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://homelab.surajdhakre.xyz/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><item><title>How I Manage Power Interruptions in My Homelab</title><link>https://homelab.surajdhakre.xyz/blog/homelab-power-interruption-management/</link><pubDate>Sun, 24 May 2026 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/blog/homelab-power-interruption-management/</guid><description>&lt;h2 id="power-cuts-are-a-fact-of-life"&gt;Power cuts are a fact of life&lt;/h2&gt;
&lt;p&gt;If you run a homelab in India, power interruptions aren&amp;rsquo;t a question of &lt;em&gt;if&lt;/em&gt; — they&amp;rsquo;re a question of &lt;em&gt;when&lt;/em&gt;. Gurgaon gets frequent short outages (a few seconds to a few minutes to a few hours), plus occasional longer cuts during storms or maintenance windows.&lt;/p&gt;
&lt;p&gt;My goal was simple: &lt;strong&gt;keep the homelab and network running through every outage, no matter how brief.&lt;/strong&gt; Servers should never see a power blip. The gaming PC gets its own dedicated protection because it draws too much for the main inverter.&lt;/p&gt;</description></item><item><title>Homelab Network Architecture — VLANs, OpenWrt, and a Managed Switch</title><link>https://homelab.surajdhakre.xyz/blog/homelab-network-architecture-vlans-openwrt/</link><pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/blog/homelab-network-architecture-vlans-openwrt/</guid><description>&lt;h2 id="the-problem"&gt;The problem&lt;/h2&gt;
&lt;p&gt;When the homelab was just a Raspberry Pi, everything sat on the same flat network — my gaming PC, phones, TV, and all the homelab services. That&amp;rsquo;s fine until you start running things like Frigate NVR, Pi-hole DNS, and a dozen Docker containers. One misconfigured service and suddenly your gaming session is lagging because Jellyfin is saturating the network with a transcode.&lt;/p&gt;
&lt;p&gt;The fix: &lt;strong&gt;VLANs&lt;/strong&gt;. Separate the homelab into its own isolated network segment, with controlled routing between them.&lt;/p&gt;</description></item><item><title>Homelab Power Consumption — What Does It Actually Cost to Run?</title><link>https://homelab.surajdhakre.xyz/blog/homelab-power-consumption-cost/</link><pubDate>Sat, 23 May 2026 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/blog/homelab-power-consumption-cost/</guid><description>&lt;h2 id="the-question-everyone-asks"&gt;The question everyone asks&lt;/h2&gt;
&lt;p&gt;&lt;em&gt;&amp;ldquo;Doesn&amp;rsquo;t running all that 24/7 cost a fortune in electricity?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Short answer: no. The whole homelab costs roughly the same as running a ceiling fan. Here&amp;rsquo;s the actual breakdown.&lt;/p&gt;
&lt;h2 id="measuring-power-draw"&gt;Measuring power draw&lt;/h2&gt;
&lt;p&gt;I measured each device at the wall using a kill-a-watt style power meter. Here are the idle and typical load numbers:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Device&lt;/th&gt;
 &lt;th&gt;Idle&lt;/th&gt;
 &lt;th&gt;Typical load&lt;/th&gt;
 &lt;th&gt;Max draw&lt;/th&gt;
 &lt;th&gt;Notes&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Raspberry Pi 4B (2GB)&lt;/td&gt;
 &lt;td&gt;~5W&lt;/td&gt;
 &lt;td&gt;~7W&lt;/td&gt;
 &lt;td&gt;~9W&lt;/td&gt;
 &lt;td&gt;Includes SATA SSD via USB + cooling fan&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Old Laptop (8GB)&lt;/td&gt;
 &lt;td&gt;~9W&lt;/td&gt;
 &lt;td&gt;~12W&lt;/td&gt;
 &lt;td&gt;~18W&lt;/td&gt;
 &lt;td&gt;Very efficient — barely sips power&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Lenovo ThinkCentre (64GB)&lt;/td&gt;
 &lt;td&gt;~20W&lt;/td&gt;
 &lt;td&gt;~35W&lt;/td&gt;
 &lt;td&gt;~65W&lt;/td&gt;
 &lt;td&gt;Biggest consumer, does the heavy lifting&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;TP-Link TL-SG108E Switch&lt;/td&gt;
 &lt;td&gt;~4W&lt;/td&gt;
 &lt;td&gt;~4W&lt;/td&gt;
 &lt;td&gt;~5W&lt;/td&gt;
 &lt;td&gt;Constant draw, no variation&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;OpenWrt Router&lt;/td&gt;
 &lt;td&gt;~5W&lt;/td&gt;
 &lt;td&gt;~5W&lt;/td&gt;
 &lt;td&gt;~7W&lt;/td&gt;
 &lt;td&gt;Routing + firewall + DHCP&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;WD Blue 4TB HDD&lt;/td&gt;
 &lt;td&gt;~5W&lt;/td&gt;
 &lt;td&gt;~8W&lt;/td&gt;
 &lt;td&gt;~10W&lt;/td&gt;
 &lt;td&gt;Drops to &amp;lt;1W when spun down&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;~48W&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;~71W&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;~114W&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Most of the time the homelab sits around &lt;strong&gt;48–71W&lt;/strong&gt; — the ThinkCentre is the biggest consumer, but its modern CPU is surprisingly efficient at idle. The old laptop is remarkably frugal at just 9–12W.&lt;/p&gt;</description></item><item><title>Setting Up Frigate NVR with RTSP Cameras</title><link>https://homelab.surajdhakre.xyz/blog/frigate-nvr-rtsp-camera-setup/</link><pubDate>Mon, 01 Dec 2025 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/blog/frigate-nvr-rtsp-camera-setup/</guid><description>&lt;h2 id="what-is-frigate"&gt;What is Frigate?&lt;/h2&gt;
&lt;p&gt;Frigate is an open-source NVR built around real-time object detection. It runs locally — no cloud, no subscription, no monthly fees. Point it at any RTSP camera feed and it&amp;rsquo;ll detect objects (person, car, dog, cat) in real-time, record clips on motion events, and let you review everything through a clean web UI.&lt;/p&gt;
&lt;h2 id="why-frigate-over-something-like-motioneye"&gt;Why Frigate over something like MotionEye?&lt;/h2&gt;
&lt;p&gt;MotionEye is fine for basic motion detection, but it triggers on &lt;em&gt;everything&lt;/em&gt; — a curtain moving, shadows shifting, rain. Frigate gives you actual object labels, which means far fewer false alerts. You get a notification that says &amp;ldquo;person detected at the front door&amp;rdquo; instead of 300 motion clips of nothing.&lt;/p&gt;</description></item><item><title>Setting Up Joplin Server on Raspberry Pi</title><link>https://homelab.surajdhakre.xyz/blog/setting-up-joplin-server-on-raspberry-pi/</link><pubDate>Sat, 01 Nov 2025 00:00:00 +0000</pubDate><guid>https://homelab.surajdhakre.xyz/blog/setting-up-joplin-server-on-raspberry-pi/</guid><description>&lt;h2 id="why-self-host-joplin"&gt;Why self-host Joplin?&lt;/h2&gt;
&lt;p&gt;Joplin Cloud costs money, and I don&amp;rsquo;t love my notes sitting on someone else&amp;rsquo;s server. The Pi was already running 24/7 anyway, so spinning up a sync server was a natural fit. Total cost: ₹0/month.&lt;/p&gt;
&lt;p&gt;The alternatives I considered:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Option&lt;/th&gt;
 &lt;th&gt;Why I skipped it&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Joplin Cloud&lt;/td&gt;
 &lt;td&gt;Paid, data on third-party servers&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Nextcloud sync&lt;/td&gt;
 &lt;td&gt;Too heavy for a 2GB Pi just for notes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dropbox/OneDrive&lt;/td&gt;
 &lt;td&gt;Works but sync conflicts are painful&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Self-hosted Joplin Server&lt;/td&gt;
 &lt;td&gt;✅ Free, fast, full control&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="stack"&gt;Stack&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Joplin Server&lt;/strong&gt; — the official sync backend (Docker)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;PostgreSQL 15&lt;/strong&gt; — note storage and metadata (Docker)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;nginx&lt;/strong&gt; — reverse proxy with SSL termination&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bash script&lt;/strong&gt; — automated daily &lt;code&gt;pg_dump&lt;/code&gt; backups&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tailscale&lt;/strong&gt; — remote access from anywhere&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Raspberry Pi 4B running headless Raspberry Pi OS (64-bit)&lt;/li&gt;
&lt;li&gt;Docker and Docker Compose installed&lt;/li&gt;
&lt;li&gt;A domain or local hostname for nginx (e.g., &lt;code&gt;joplin.home.lan&lt;/code&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="step-1--docker-compose-setup"&gt;Step 1 — Docker Compose setup&lt;/h2&gt;
&lt;p&gt;Create a working directory:&lt;/p&gt;</description></item></channel></rss>