<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>self-hosting Archives - Prsm Studio</title>
	<atom:link href="https://prsm-studio.com/en/tag/self-hosting-en/feed/" rel="self" type="application/rss+xml" />
	<link>https://prsm-studio.com/en/tag/self-hosting-en/</link>
	<description>automation · homeserver · side projects · game · gadgets · play</description>
	<lastBuildDate>Mon, 20 Apr 2026 23:48:51 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://prsm-studio.com/wp-content/uploads/2026/03/ic_launcher-playstore-150x150.png</url>
	<title>self-hosting Archives - Prsm Studio</title>
	<link>https://prsm-studio.com/en/tag/self-hosting-en/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Even a Code-Illiterate Built It! Home Server Journey (9) — Trying to Automate Meeting Notes, and Failing in Every Single Way</title>
		<link>https://prsm-studio.com/en/code-illiterate-home-server-build-9-meeting-notes-failures/</link>
					<comments>https://prsm-studio.com/en/code-illiterate-home-server-build-9-meeting-notes-failures/#respond</comments>
		
		<dc:creator><![CDATA[Toaster]]></dc:creator>
		<pubDate>Mon, 20 Apr 2026 09:01:10 +0000</pubDate>
				<category><![CDATA[Computer Play]]></category>
		<category><![CDATA[Home Server/Self-hosting]]></category>
		<category><![CDATA[AI meeting notes]]></category>
		<category><![CDATA[Google Meet]]></category>
		<category><![CDATA[Home Server]]></category>
		<category><![CDATA[meeting automation]]></category>
		<category><![CDATA[meeting notes]]></category>
		<category><![CDATA[Microsoft Teams]]></category>
		<category><![CDATA[Notta alternative]]></category>
		<category><![CDATA[self-hosting]]></category>
		<category><![CDATA[vibe coding]]></category>
		<category><![CDATA[Webex]]></category>
		<guid isPermaLink="false">https://prsm-studio.com/?p=943</guid>

					<description><![CDATA[<p>Tried to replace my Notta subscription by building a meeting-notes bot. Got wrecked at all 4 stages — joining the room, 0KB recordings, no attendee-name step, mediocre Gemini Flash output. Still leaning on Notta while patching.</p>
<p>The post <a href="https://prsm-studio.com/en/code-illiterate-home-server-build-9-meeting-notes-failures/">Even a Code-Illiterate Built It! Home Server Journey (9) — Trying to Automate Meeting Notes, and Failing in Every Single Way</a> appeared first on <a href="https://prsm-studio.com/en">Prsm Studio</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Wrapping up meeting notes after a meeting eats time. A one-hour meeting takes another hour to summarize.</p>
<p>So I&#8217;d been using <strong>Notta</strong> — a meeting transcription SaaS — on a yearly subscription. Genuinely useful. But the renewal date was creeping up, and shelling out for another year felt wasteful&#8230;</p>
<p><strong>&#8220;Why not have an AI sit in on the meeting and write the notes? Just throw it on my home server?&#8221;</strong></p>
<p>That&#8217;s the thinking I started with. <strong>Bottom line up front: it has never worked cleanly even once.</strong> Here&#8217;s an honest breakdown of where it broke, case by case.</p>
<hr>
<h2>What I tried: a &#8220;meeting notes bot&#8221;</h2>
<p>The picture I wanted:</p>
<pre><code>1. Throw a meeting link at the bot
2. Bot joins the meeting on its own
3. After the meeting ends, notes show up in chat</code></pre>
<p>Supported platforms: <strong>Google Meet, Microsoft Teams, Cisco Webex</strong>. (Zoom — code&#8217;s there, but I don&#8217;t use it personally so it&#8217;s untested.)</p>
<hr>
<h2>Failure case 1: can&#8217;t get into the meeting room</h2>
<p>The first wall. Each platform has its own way of letting you in, and each one breaks differently.</p>
<p><figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="1024" src="https://prsm-studio.com/wp-content/uploads/2026/04/wiki-Google-Meet-4.png" alt="This is the Google Meet icon." class="wp-image-940" srcset="https://prsm-studio.com/wp-content/uploads/2026/04/wiki-Google-Meet-4.png 1024w, https://prsm-studio.com/wp-content/uploads/2026/04/wiki-Google-Meet-4-300x300.png 300w, https://prsm-studio.com/wp-content/uploads/2026/04/wiki-Google-Meet-4-150x150.png 150w, https://prsm-studio.com/wp-content/uploads/2026/04/wiki-Google-Meet-4-768x768.png 768w" sizes="(max-width: 1024px) 100vw, 1024px" /><figcaption>Unknown authorUnknown author / Wikimedia Commons (Public domain)</figcaption></figure>
</p>
<h3>Google Meet — outside-org users blocked</h3>
<p>If a company uses Google Workspace, an external bot is just blocked. &#8220;Users outside the organization can&#8217;t join.&#8221; End of story.</p>
<p>The workaround would be to have <strong>the bot log in with my own Google account</strong>. Once you log in, a <strong>cookie</strong> (<em>a small piece of info the browser uses to remember &#8220;I know who you are&#8221;</em>) gets saved, and the bot uses that to enter from then on.</p>
<p>But hooking my company Google account up to a bot felt sketchy. Security-wise iffy, plus 2-step verification (<em>that thing where you also have to enter a code from your phone</em>) trips it up every time. <strong>So I just gave up on Google Meet.</strong> Even though most of my work meetings are on Meet.</p>
<p><figure class="wp-block-image size-large"><img decoding="async" width="528" height="398" src="https://prsm-studio.com/wp-content/uploads/2026/04/wiki-Microsoft-Teams-4.jpg" alt="Logo of Microsoft Teams" class="wp-image-941" srcset="https://prsm-studio.com/wp-content/uploads/2026/04/wiki-Microsoft-Teams-4.jpg 528w, https://prsm-studio.com/wp-content/uploads/2026/04/wiki-Microsoft-Teams-4-300x226.jpg 300w" sizes="(max-width: 528px) 100vw, 528px" /><figcaption>Microsoft / Wikimedia Commons (CC BY-SA 4.0)</figcaption></figure>
</p>
<h3>Teams — CAPTCHA shows up</h3>
<p>&#8220;Type the characters you see.&#8221; That <strong>CAPTCHA</strong> (<em>the thing websites use to check &#8220;are you actually human?&#8221; with distorted text</em>). It pops up 100% of the time the bot tries to join.</p>
<p>The fix: feed the CAPTCHA image to <strong>Gemini Vision</strong> (<em>an AI that can read text out of images</em>) and have it type the answer. If the first attempt fails, refresh and try again. Up to 3 tries, then give up.</p>
<p>I have this coded in, but Gemini occasionally reads the wrong letters. Not smooth.</p>
<p><figure class="wp-block-image size-large"><img decoding="async" width="1280" height="487" src="https://prsm-studio.com/wp-content/uploads/2026/04/wiki-Cisco-Webex-4.png" alt="The logo of Webex by Cisco – American web conferencing and videoconferencing company by Cisco System" class="wp-image-942" srcset="https://prsm-studio.com/wp-content/uploads/2026/04/wiki-Cisco-Webex-4.png 1280w, https://prsm-studio.com/wp-content/uploads/2026/04/wiki-Cisco-Webex-4-300x114.png 300w, https://prsm-studio.com/wp-content/uploads/2026/04/wiki-Cisco-Webex-4-1024x390.png 1024w, https://prsm-studio.com/wp-content/uploads/2026/04/wiki-Cisco-Webex-4-768x292.png 768w" sizes="(max-width: 1280px) 100vw, 1280px" /><figcaption>Cisco / Wikimedia Commons (Public domain)</figcaption></figure>
</p>
<h3>Webex — everything&#8217;s inside a frame-within-a-frame</h3>
<p>Webex runs the entire meeting UI inside an <strong>iframe</strong> (<em>a structure where one full webpage is embedded inside another — think picture-in-picture</em>). When the bot tries to find a &#8220;mute mic&#8221; button on the outer page, it&#8217;s not there. You have to dig into the inner frame.</p>
<p>Debugging this took 5 separate &#8220;snap a screenshot at this step&#8221; hooks in the code. (&#8220;Did we grab the inner frame?&#8221; → &#8220;Inner frame loaded too slow, retry&#8221; → &#8220;Still no inner frame? One more time&#8230;&#8221;). If the frame fails to load, fall back to plan B; if plan B also fails, plan C. I keep adding workaround code per case.</p>
<h3>Common: 5-minute host approval timeout</h3>
<p>Even after all of that, <strong>you land in the lobby</strong>. The host has to click &#8220;Admit&#8221; before you&#8217;re in.</p>
<p>The bot waits up to 5 minutes and then bails. If the host starts the meeting 5 minutes late? The bot&#8217;s already gone. Have to send it again.</p>
<p><strong>What it looks like in practice:</strong> &#8220;Sent the bot, the meeting ended, and I got a chat saying it never made it in.&#8221;</p>
<hr>
<h2>Failure case 2: recording saved as a 0KB file</h2>
<p>This is the one that happened most often.</p>
<p>The bot got into the meeting. The bot&#8217;s status said &#8220;Recording.&#8221; But the file I got back after the meeting? <strong>A zero-second empty file.</strong></p>
<p>Cause: how the audio is captured. The bot drops <strong>a tiny &#8220;hook&#8221; into the audio stream</strong> (<em>&#8220;hook&#8221; in the dev sense — code that latches onto data flowing past, like a fishing line</em>) inside the meeting page to record. But meeting sites change their internal structure constantly, so the hook lands in the wrong spot and pulls in nothing. The bot reports &#8220;recording started!&#8221; while the actual file is 0 seconds long.</p>
<p>After eating this a few times I added <strong>a backup move</strong> (<em>if plan A fails, automatically try plan B</em>). It still hands me empty files now and then.</p>
<p><strong>What it looks like in practice:</strong> &#8220;Hour-long meeting wraps up, chat pings me — file is 0KB. Thought it was recording. It was 0 from the start.&#8221;</p>
<hr>
<h2>Failure case 3: no place to type in attendee names</h2>
<p>This problem sat unfixed for a long time.</p>
<p>The whole point of meeting notes is <strong>who said what</strong>. The bot does try to read speaker names off the screen automatically, but if someone has their camera off or the layout changes in a way the bot can&#8217;t see, the name doesn&#8217;t get caught.</p>
<p>So a human has to fill in names afterward. <strong>The old version had no step for that at all.</strong> Bot ends meeting → instantly generates notes → done. If a name was wrong, no recovery.</p>
<p>I recently added a flow where, after the meeting, the bot pauses and waits for me to chat back the attendee list (&#8220;attendees are Mr. Kim and Ms. Lee&#8221;), and only then generates the notes.</p>
<p>But <strong>I haven&#8217;t actually tested this fix.</strong> Case 2 above (the 0KB recording) keeps blowing up on Webex, and if there&#8217;s no recording there&#8217;s no notes to attach names to — so the new feature can&#8217;t be verified.</p>
<p><strong>What it looks like in practice:</strong> &#8220;Fixed one thing, but something else is broken downstream so I can&#8217;t even test the new feature.&#8221;</p>
<hr>
<h2>Failure case 4: the one set of notes I did get back was mediocre</h2>
<p>After clearing all the above, <strong>I&#8217;ve actually received meeting notes exactly once — from Webex.</strong> (Meet: gave up. Teams: CAPTCHA solved but the recording broke after.) That single set of notes had two problems.</p>
<p>I had <strong>Gemini Flash</strong> (<em>Google&#8217;s free AI</em>) generate the notes.</p>
<h3>1. The writing quality is meh</h3>
<p>Run the same transcript through Gemini Pro and the notes come out much more natural, with the key points actually surfaced. Flash is free, which is great, but the notes feel awkward and the gist gets blurred.</p>
<h3>2. Markdown shows up raw in Telegram</h3>
<p>Gemini outputs notes in <strong>Markdown</strong> (<em>a convention where &#8220;two asterisks = bold&#8221;, &#8220;hash = heading&#8221;, etc. The format Notion or GitHub silently renders for you</em>), but Telegram doesn&#8217;t render it. So I get this on screen:</p>
<pre><code>## Decisions
- **Option A approved**
- ~~Option B~~ on hold</code></pre>
<p>Hard to read. I asked for clean notes; what I get looks like raw scribbles with asterisks and hash marks.</p>
<p><strong>What it looks like in practice:</strong> &#8220;Notes generated, but the writing&#8217;s awkward and Markdown symbols sit there raw. Not readable.&#8221;</p>
<hr>
<h2>So where am I now</h2>
<p>Honestly, <strong>I have never had a meeting → automatic notes flow run end-to-end cleanly.</strong> One of the four failure modes above hits every single time.</p>
<p>What I&#8217;m currently working around / fixing:</p>
<ul>
<li>Joining meetings: I gave up on full automation entirely. Manual approval per meeting + secondary account.</li>
<li>0KB recordings: still patching the audio-capture fallback. Still drops files occasionally.</li>
<li>Attendee-name step: built. Just need Webex recording to stabilize before I can verify it.</li>
<li>Notes quality: trying Gemini Pro and weighing cost vs. quality. Planning to add Markdown → HTML conversion before sending to Telegram.</li>
</ul>
<hr>
<h2>Wrapping up</h2>
<p><strong>Why write this if nothing&#8217;s actually finished?</strong> Two reasons.</p>
<ol>
<li>To give anyone trying to build the same thing a heads-up: &#8220;this is harder than it looks, plan for the time.&#8221;</li>
<li>So that later, when it actually works, I can write a &#8220;back then it was all broken, now it looks like this&#8221; follow-up.</li>
</ol>
<p>For now, <strong>I&#8217;m leaning on Notta to get through actual work</strong>, and pushing on the meeting bot in the background. Building it from scratch made me appreciate why Notta charges what it does — you have to clear every one of these cases before you reach that level.</p>
<p><strong>I&#8217;ll write a follow-up once it&#8217;s actually usable.</strong> When all four cases pass reliably and I can finish a meeting and have the notes show up without touching anything.</p>
<p>Automation isn&#8217;t a one-shot achievement — it&#8217;s slow improvement, <strong>case by case, hitting walls and routing around them</strong>. I can&#8217;t code, but I keep asking AI &#8220;why doesn&#8217;t this work?&#8221; and inching forward step by step.</p>
<p>Next post will be on something a bit cleaner.</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-9-meeting-notes-failures%2F&amp;linkname=Even%20a%20Code-Illiterate%20Built%20It%21%20Home%20Server%20Journey%20%289%29%20%E2%80%94%20Trying%20to%20Automate%20Meeting%20Notes%2C%20and%20Failing%20in%20Every%20Single%20Way" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-9-meeting-notes-failures%2F&amp;linkname=Even%20a%20Code-Illiterate%20Built%20It%21%20Home%20Server%20Journey%20%289%29%20%E2%80%94%20Trying%20to%20Automate%20Meeting%20Notes%2C%20and%20Failing%20in%20Every%20Single%20Way" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-9-meeting-notes-failures%2F&amp;linkname=Even%20a%20Code-Illiterate%20Built%20It%21%20Home%20Server%20Journey%20%289%29%20%E2%80%94%20Trying%20to%20Automate%20Meeting%20Notes%2C%20and%20Failing%20in%20Every%20Single%20Way" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-9-meeting-notes-failures%2F&#038;title=Even%20a%20Code-Illiterate%20Built%20It%21%20Home%20Server%20Journey%20%289%29%20%E2%80%94%20Trying%20to%20Automate%20Meeting%20Notes%2C%20and%20Failing%20in%20Every%20Single%20Way" data-a2a-url="https://prsm-studio.com/en/code-illiterate-home-server-build-9-meeting-notes-failures/" data-a2a-title="Even a Code-Illiterate Built It! Home Server Journey (9) — Trying to Automate Meeting Notes, and Failing in Every Single Way"></a></p><p>The post <a href="https://prsm-studio.com/en/code-illiterate-home-server-build-9-meeting-notes-failures/">Even a Code-Illiterate Built It! Home Server Journey (9) — Trying to Automate Meeting Notes, and Failing in Every Single Way</a> appeared first on <a href="https://prsm-studio.com/en">Prsm Studio</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://prsm-studio.com/en/code-illiterate-home-server-build-9-meeting-notes-failures/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Even a Code-Illiterate Built It! Home Server Journey (7) — Making the Server Work on Its Own with n8n</title>
		<link>https://prsm-studio.com/en/code-illiterate-home-server-build-7-n8n-automation-en/</link>
					<comments>https://prsm-studio.com/en/code-illiterate-home-server-build-7-n8n-automation-en/#respond</comments>
		
		<dc:creator><![CDATA[Toaster]]></dc:creator>
		<pubDate>Sun, 15 Mar 2026 09:32:47 +0000</pubDate>
				<category><![CDATA[Computer Play]]></category>
		<category><![CDATA[Home Server/Self-hosting]]></category>
		<category><![CDATA[AI automation]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Home Server]]></category>
		<category><![CDATA[n8n]]></category>
		<category><![CDATA[self-hosting]]></category>
		<category><![CDATA[Telegram alerts]]></category>
		<category><![CDATA[workflow]]></category>
		<category><![CDATA[Zapier alternative]]></category>
		<guid isPermaLink="false">https://prsm-studio.com/?p=462</guid>

					<description><![CDATA[<p>Installing n8n on a home server and building 4 real automation workflows: dev log Notion sync, blog Google indexing monitor, server health check, and morning briefing. Free Zapier alternative.</p>
<p>The post <a href="https://prsm-studio.com/en/code-illiterate-home-server-build-7-n8n-automation-en/">Even a Code-Illiterate Built It! Home Server Journey (7) — Making the Server Work on Its Own with n8n</a> appeared first on <a href="https://prsm-studio.com/en">Prsm Studio</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In the previous six episodes, I set up photo backup (Immich), an AI assistant (OpenClaw), local AI (Ollama), and a blog (WordPress) on my home server. Each service runs great on its own. But managing them all by hand? Honestly, it gets old fast.</p>
<p><strong>&#8220;I just want to set it up once and have it run itself.&#8221;</strong></p>
<p>That&#8217;s why I installed <strong>n8n</strong>. After setting up a few workflows, my server now works on its own. All I do is check Telegram notifications.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="940" height="627" src="https://prsm-studio.com/wp-content/uploads/2026/03/stock-11035393-1.jpg" alt="IT, 간판, 개념의 무료 스톡 사진" class="wp-image-460" srcset="https://prsm-studio.com/wp-content/uploads/2026/03/stock-11035393-1.jpg 940w, https://prsm-studio.com/wp-content/uploads/2026/03/stock-11035393-1-300x200.jpg 300w, https://prsm-studio.com/wp-content/uploads/2026/03/stock-11035393-1-768x512.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /><figcaption>Photo by RealToughCandy.com / Pexels</figcaption></figure>
<h2>What is n8n? One-Line Summary: Free Zapier</h2>
<p><a href="https://n8n.io" target="_blank">n8n</a> (pronounced &#8220;n-eight-n&#8221;) is a <strong>visual automation tool</strong>. If you&#8217;ve used Zapier or Make (formerly Integromat), it&#8217;s exactly that. Drag blocks onto a canvas, connect them with lines, and your automation is done. Code? Not a single line needed.</p>
<p>The one difference: <strong>it runs on your own server.</strong> That means it&#8217;s free, there are no execution limits, and your data never leaves your machine.</p>
<table>
<thead>
<tr>
<th></th>
<th>Zapier</th>
<th>n8n (Self-hosted)</th>
</tr>
</thead>
<tbody>
<tr>
<td>Price</td>
<td>From $19.99/month</td>
<td><strong>Free</strong></td>
</tr>
<tr>
<td>Execution limit</td>
<td>100-750/month</td>
<td><strong>Unlimited</strong></td>
</tr>
<tr>
<td>Your data</td>
<td>Stored on Zapier&#8217;s servers</td>
<td><strong>Stays on your server</strong></td>
</tr>
<tr>
<td>Integrations</td>
<td>7,000+</td>
<td>400+ (all major services covered)</td>
</tr>
<tr>
<td>UI</td>
<td>Very easy</td>
<td>Easy (slight learning curve)</td>
</tr>
</tbody>
</table>
<p>If you already have a home server, there&#8217;s no reason not to use n8n. Especially if you&#8217;ve ever hit Zapier&#8217;s free tier limit of 100 executions per month.</p>
<h2>Installing n8n: One Docker Compose File</h2>
<p>Remember how we set up Docker in <a href="/code-illiterate-home-server-build-1-ser9max-windows11-wsl2-docker/">Episode 1</a>? We just add n8n on top of that.</p>
<pre><code>services:
  n8n:
    image: n8nio/n8n:latest
    ports:
      - "5678:5678"
    volumes:
      - ./data:/home/node/.n8n
    environment:
      - N8N_BASIC_AUTH_ACTIVE=true
      - N8N_BASIC_AUTH_USER=admin
      - N8N_BASIC_AUTH_PASSWORD=yourpassword
    restart: unless-stopped</code></pre>
<p>Tell Claude &#8220;install n8n&#8221; and it creates this file and runs <code>docker compose up -d</code> for you. Navigate to <code>http://yourServerIP:5678</code> and you&#8217;ll see this:</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="940" height="627" src="https://prsm-studio.com/wp-content/uploads/2026/03/stock-4955393-1.jpg" alt="CSS, HTML, IT의 무료 스톡 사진" class="wp-image-461" srcset="https://prsm-studio.com/wp-content/uploads/2026/03/stock-4955393-1.jpg 940w, https://prsm-studio.com/wp-content/uploads/2026/03/stock-4955393-1-300x200.jpg 300w, https://prsm-studio.com/wp-content/uploads/2026/03/stock-4955393-1-768x512.jpg 768w" sizes="auto, (max-width: 940px) 100vw, 940px" /><figcaption>Photo by Godfrey  Atima / Pexels</figcaption></figure>
<p>At first glance it might look intimidating. But give it five minutes. You drag nodes (blocks) from the left panel onto the canvas and connect them with lines. It&#8217;s like building with LEGO.</p>
<h2>Real Workflow #1 — Auto-Sync Dev Logs to Notion</h2>
<p>I&#8217;m building an app called Prsm. (A non-coder building an app? Yep, I just tell AI what to do. That&#8217;s a story for another post.) Every day I write development progress in a file on GitHub. I wanted those logs copied to Notion automatically.</p>
<p><strong>Doing it manually:</strong></p>
<ol>
<li>Open GitHub</li>
<li>Find today&#8217;s log file</li>
<li>Copy the content</li>
<li>Open Notion</li>
<li>Paste into the Day Log page</li>
<li>Add a date tag</li>
</ol>
<p>Five minutes a day. Doesn&#8217;t sound like much, but that&#8217;s two and a half hours a month. And honestly, I forget to do it most days.</p>
<p><strong>After automating with n8n:</strong></p>
<blockquote><p>Every night at 11 PM &rarr; Read file from GitHub &rarr; Auto-add to Notion Day Log</p></blockquote>
<p>Three nodes. Set it up once, and it runs every night by itself. <strong>What I have to do: nothing.</strong> When I open Notion in the morning, last night&#8217;s log is neatly organized and waiting for me.</p>
<h2>Real Workflow #2 — Auto-Monitor Blog Google Indexing</h2>
<p>No matter how good your blog post is, if Google hasn&#8217;t indexed it, nobody can find it through search. This is especially brutal for new blogs — it&#8217;s common for posts to go unindexed for days after publishing.</p>
<p>Checking manually? You&#8217;d have to log into Google Search Console and inspect each URL one by one. Ten posts means ten checks.</p>
<p><strong>n8n handles it:</strong></p>
<blockquote><p>Every 12 hours &rarr; Get list of published post URLs &rarr; Check Google indexing status &rarr; Unindexed post found? &rarr; Send Telegram alert</p></blockquote>
<p>&#8220;Hey boss, episodes 3 and 5 still aren&#8217;t indexed on Google!&#8221; — I get alerts like this on Telegram. Then I just click &#8220;Request Indexing&#8221; in Search Console. Done.</p>
<h2>Real Workflow #3 — Instant Alert When Server Goes Down</h2>
<p>When you&#8217;re running multiple services on a home server, one of them can quietly die without you noticing. Once, Immich crashed after an update and I didn&#8217;t realize for over a day. That was a full day of photos not being backed up.</p>
<p><strong>So I built this workflow:</strong></p>
<blockquote><p>Periodic check &rarr; Ping Immich &rarr; Ping OpenClaw &rarr; Ping WordPress &rarr; Any service down? &rarr; Send Telegram alert</p></blockquote>
<p>Now when a service goes down, I get notified <strong>within minutes</strong>. After setting up this workflow, Immich actually crashed again. This time I caught it in 10 minutes and fixed it immediately. Because n8n is watching 24/7.</p>
<h2>Real Workflow #4 — Morning Briefing Data Prep</h2>
<p>Remember the morning briefing from <a href="/code-illiterate-home-server-build-5-openclaw-ai-agent/">Episode 5</a>? My AI assistant sends me weather, news, gold prices, and my schedule via Telegram every morning at 7 AM.</p>
<p>To create that briefing, the AI needs data. Calling weather APIs, fetching exchange rates, checking the calendar — n8n handles all this data collection automatically at 6:50 AM every morning. At 7 AM, the AI picks up the data, summarizes it, and shoots it to Telegram.</p>
<p><strong>My morning routine:</strong> Wake up, open Telegram, check today&#8217;s weather and news. That&#8217;s it.</p>
<h2>Before and After Automation</h2>
<table>
<thead>
<tr>
<th>Task</th>
<th>Before</th>
<th>After</th>
</tr>
</thead>
<tbody>
<tr>
<td>Dev log Notion sync</td>
<td>5 min/day, often forgot</td>
<td>Automatic (0 min)</td>
</tr>
<tr>
<td>Blog index check</td>
<td>Manual search, too lazy so never did it</td>
<td>Auto every 12h, just check alerts</td>
</tr>
<tr>
<td>Server status check</td>
<td>Only knew when something broke</td>
<td>Instant alert on failure</td>
</tr>
<tr>
<td>Morning briefing</td>
<td>Manually search news</td>
<td>Just check Telegram</td>
</tr>
</tbody>
</table>
<p>Saving time is great, but the real benefit is <strong>peace of mind</strong>. &#8220;Is the server okay?&#8221;, &#8220;Did that post get indexed?&#8221;, &#8220;Did I sync the logs?&#8221; — I don&#8217;t worry about any of this anymore. n8n is watching over everything.</p>
<h2>n8n Self-Hosting Cost Breakdown</h2>
<p>Let&#8217;s crunch the numbers.</p>
<table>
<thead>
<tr>
<th>Item</th>
<th>Using Zapier</th>
<th>n8n Self-hosted</th>
</tr>
</thead>
<tbody>
<tr>
<td>Monthly subscription</td>
<td>$19.99</td>
<td><strong>$0</strong></td>
</tr>
<tr>
<td>Annual cost</td>
<td>~$240</td>
<td><strong>$0</strong></td>
</tr>
<tr>
<td>Extra electricity</td>
<td>None</td>
<td>Negligible (server already runs 24/7)</td>
</tr>
</tbody>
</table>
<p>n8n is lightweight and barely uses any server resources. Compared to Immich or Ollama, it&#8217;s practically invisible. Since the server is already running around the clock, the additional electricity cost is effectively zero.</p>
<h2>Tips for Beginners</h2>
<p>It&#8217;s all great, but let me be honest about a few things to watch out for.</p>
<ul>
<li><strong>Name your workflows clearly.</strong> If you leave them as &#8220;My Workflow 1&#8221; and &#8220;New Workflow,&#8221; you won&#8217;t know what&#8217;s what once you have more than ten. Use specific names like &#8220;Prsm to Notion Sync&#8221; or &#8220;Server Health Check.&#8221;</li>
<li><strong>Always add error notification nodes.</strong> When an API is temporarily down or a service changes, your workflow will fail silently. Connect a Telegram notification node at the end to catch errors — you&#8217;ll sleep better at night.</li>
<li><strong>Block external access.</strong> n8n stores sensitive information like Notion tokens and GitHub tokens. Make sure to block external access with a firewall. I locked everything down with iptables back in <a href="/code-illiterate-home-server-build-1-ser9max-windows11-wsl2-docker-en/">Episode 1</a>.</li>
</ul>
<h2>What&#8217;s Next</h2>
<p>Now that the server runs itself with automation, it&#8217;s time to build features that are <strong>directly useful for real work</strong>.</p>
<p>In the next episode:</p>
<ul>
<li><strong>Auto-transcribe phone calls</strong> — hang up and the text is ready</li>
<li><strong>AI-generated meeting notes</strong> — Google Meet and Zoom meetings summarized by AI</li>
<li><strong>Whisper</strong> — OpenAI&#8217;s speech recognition AI, running free on your own server</li>
<li>How <strong>a single phone call becomes a work record</strong> in a manufacturing environment</li>
</ul>
<p>A non-coder who built an AI assistant, now building an AI transcriber. Stay tuned.</p>
<p><em>This post was written by AI (Claude Code) and reviewed by a code-illiterate human.</em></p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-7-n8n-automation-en%2F&amp;linkname=Even%20a%20Code-Illiterate%20Built%20It%21%20Home%20Server%20Journey%20%287%29%20%E2%80%94%20Making%20the%20Server%20Work%20on%20Its%20Own%20with%20n8n" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-7-n8n-automation-en%2F&amp;linkname=Even%20a%20Code-Illiterate%20Built%20It%21%20Home%20Server%20Journey%20%287%29%20%E2%80%94%20Making%20the%20Server%20Work%20on%20Its%20Own%20with%20n8n" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-7-n8n-automation-en%2F&amp;linkname=Even%20a%20Code-Illiterate%20Built%20It%21%20Home%20Server%20Journey%20%287%29%20%E2%80%94%20Making%20the%20Server%20Work%20on%20Its%20Own%20with%20n8n" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-7-n8n-automation-en%2F&#038;title=Even%20a%20Code-Illiterate%20Built%20It%21%20Home%20Server%20Journey%20%287%29%20%E2%80%94%20Making%20the%20Server%20Work%20on%20Its%20Own%20with%20n8n" data-a2a-url="https://prsm-studio.com/en/code-illiterate-home-server-build-7-n8n-automation-en/" data-a2a-title="Even a Code-Illiterate Built It! Home Server Journey (7) — Making the Server Work on Its Own with n8n"></a></p><p>The post <a href="https://prsm-studio.com/en/code-illiterate-home-server-build-7-n8n-automation-en/">Even a Code-Illiterate Built It! Home Server Journey (7) — Making the Server Work on Its Own with n8n</a> appeared first on <a href="https://prsm-studio.com/en">Prsm Studio</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://prsm-studio.com/en/code-illiterate-home-server-build-7-n8n-automation-en/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Even a Code-Illiterate Built It! Home Server Journey (6) — WordPress Blog Setup: AI Did Everything</title>
		<link>https://prsm-studio.com/en/code-illiterate-home-server-build-6-wordpress-blog-en/</link>
					<comments>https://prsm-studio.com/en/code-illiterate-home-server-build-6-wordpress-blog-en/#respond</comments>
		
		<dc:creator><![CDATA[Toaster]]></dc:creator>
		<pubDate>Tue, 10 Mar 2026 06:24:12 +0000</pubDate>
				<category><![CDATA[Computer Play]]></category>
		<category><![CDATA[Home Server]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[Code-Illiterate]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Polylang]]></category>
		<category><![CDATA[self-hosting]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[Tailscale]]></category>
		<category><![CDATA[WordPress]]></category>
		<guid isPermaLink="false">https://prsm-studio.com/code-illiterate-home-server-build-6-wordpress-blog-en/</guid>

					<description><![CDATA[<p>A non-developer's journey of installing WordPress on a home server, exposing it to the world with Tailscale Funnel, and building an AI-powered auto-publishing pipeline. From Docker setup to bilingual blogging and SEO.</p>
<p>The post <a href="https://prsm-studio.com/en/code-illiterate-home-server-build-6-wordpress-blog-en/">Even a Code-Illiterate Built It! Home Server Journey (6) — WordPress Blog Setup: AI Did Everything</a> appeared first on <a href="https://prsm-studio.com/en">Prsm Studio</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>&#8211;</p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-6-wordpress-blog-en%2F&amp;linkname=Even%20a%20Code-Illiterate%20Built%20It%21%20Home%20Server%20Journey%20%286%29%20%E2%80%94%20WordPress%20Blog%20Setup%3A%20AI%20Did%20Everything" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-6-wordpress-blog-en%2F&amp;linkname=Even%20a%20Code-Illiterate%20Built%20It%21%20Home%20Server%20Journey%20%286%29%20%E2%80%94%20WordPress%20Blog%20Setup%3A%20AI%20Did%20Everything" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-6-wordpress-blog-en%2F&amp;linkname=Even%20a%20Code-Illiterate%20Built%20It%21%20Home%20Server%20Journey%20%286%29%20%E2%80%94%20WordPress%20Blog%20Setup%3A%20AI%20Did%20Everything" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-6-wordpress-blog-en%2F&#038;title=Even%20a%20Code-Illiterate%20Built%20It%21%20Home%20Server%20Journey%20%286%29%20%E2%80%94%20WordPress%20Blog%20Setup%3A%20AI%20Did%20Everything" data-a2a-url="https://prsm-studio.com/en/code-illiterate-home-server-build-6-wordpress-blog-en/" data-a2a-title="Even a Code-Illiterate Built It! Home Server Journey (6) — WordPress Blog Setup: AI Did Everything"></a></p><p>The post <a href="https://prsm-studio.com/en/code-illiterate-home-server-build-6-wordpress-blog-en/">Even a Code-Illiterate Built It! Home Server Journey (6) — WordPress Blog Setup: AI Did Everything</a> appeared first on <a href="https://prsm-studio.com/en">Prsm Studio</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://prsm-studio.com/en/code-illiterate-home-server-build-6-wordpress-blog-en/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Even a Code-Illiterate Built It\! Home Server Journey (3) — Replacing Google Photos with Immich 📸🏠</title>
		<link>https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/</link>
					<comments>https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/#respond</comments>
		
		<dc:creator><![CDATA[Toaster]]></dc:creator>
		<pubDate>Sun, 08 Mar 2026 07:25:45 +0000</pubDate>
				<category><![CDATA[Computer Play]]></category>
		<category><![CDATA[Docker]]></category>
		<category><![CDATA[Google Photos]]></category>
		<category><![CDATA[Home Server]]></category>
		<category><![CDATA[iCloud]]></category>
		<category><![CDATA[Immich]]></category>
		<category><![CDATA[photo backup]]></category>
		<category><![CDATA[self-hosting]]></category>
		<category><![CDATA[SER9 MAX]]></category>
		<guid isPermaLink="false">https://prsm-studio.com/code-illiterate-home-server-build-4-immich-photo-backup-en/</guid>

					<description><![CDATA[<p>How I cancelled Google Photos and iCloud, set up Immich on my home server, and backed up 35,000+ photos for free. From installation to mobile auto-backup and AI search.</p>
<p>The post <a href="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/">Even a Code-Illiterate Built It\! Home Server Journey (3) — Replacing Google Photos with Immich 📸🏠</a> appeared first on <a href="https://prsm-studio.com/en">Prsm Studio</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>In <a href="/code-illiterate-home-server-build-3-wordpress-blog-ai-autopublish-2/">Part 3</a>, we set up a blog. Now it&#8217;s time for something <strong>actually useful</strong>.</p>
<p><strong>Photo backup.</strong></p>
<p>Google Photos: $2/month. iCloud: $1/month. Doesn&#8217;t sound like much, right? But what if you could do the same thing on your own server, for <strong>free</strong>, with <strong>unlimited storage</strong>?</p>
<p>Here&#8217;s the punchline: after setting up Immich on my home server, I <strong>cancelled my Google Photos subscription</strong>. Over 35,000 photos are now backed up automatically, and I can access them from anywhere thanks to Tailscale. What did I actually do? I told AI to set it up. That&#8217;s it.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="940" height="529" src="https://prsm-studio.com/wp-content/uploads/2026/03/replaced-4549417.jpg" alt="Photo gallery on smartphone" class="wp-image-256" /><figcaption>Photo by Plann / Pexels</figcaption></figure>
<div id="ez-toc-container" class="ez-toc-v2_0_81 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction">
<div class="ez-toc-title-container">
<p class="ez-toc-title" style="cursor:inherit">Table of Contents</p>
<p><span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewBox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewBox="0 0 24 24" version="1.2" baseProfile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div>
<nav>
<ul class='ez-toc-list ez-toc-list-level-1 ' >
<li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/#Why_I_Left_Google_Photos" >Why I Left Google Photos</a></li>
<li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/#What_Is_Immich" >What Is Immich?</a></li>
<li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-3" href="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/#Installation_One_Docker_Compose_File" >Installation: One Docker Compose File</a></li>
<li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-4" href="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/#Auto-Backup_from_Your_Phone" >Auto-Backup from Your Phone</a></li>
<li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-5" href="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/#iPhone_Users_Youre_Covered_Too" >iPhone Users: You&#8217;re Covered Too</a></li>
<li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-6" href="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/#Access_Your_Photos_From_Anywhere" >Access Your Photos From Anywhere</a></li>
<li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-7" href="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/#AI_Features_No_Reason_to_Miss_Google_Photos" >AI Features: No Reason to Miss Google Photos</a>
<ul class='ez-toc-list-level-3' >
<li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-8" href="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/#Photo_Search" >Photo Search</a></li>
<li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-9" href="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/#Face_Recognition" >Face Recognition</a></li>
<li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-10" href="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/#Map_View" >Map View</a></li>
</ul>
</li>
<li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-11" href="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/#How_Much_Do_You_Actually_Save" >How Much Do You Actually Save?</a></li>
<li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-12" href="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/#The_Honest_Downsides" >The Honest Downsides</a></li>
<li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-13" href="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/#Whats_Next" >What&#8217;s Next</a></li>
</ul>
</nav>
</div>
<h2><span class="ez-toc-section" id="Why_I_Left_Google_Photos"></span><span class="ez-toc-section" id="Why_I_Left_Google_Photos"></span>Why I Left Google Photos<span class="ez-toc-section-end"></span><span class="ez-toc-section-end"></span></h2>
<p>Google Photos is great. AI search, automatic albums, the whole deal. But here&#8217;s the thing:</p>
<ol>
<li><strong>15GB free runs out fast.</strong> Take photos for three months and you&#8217;re done.</li>
<li><strong>Paid plans never end.</strong> 100GB, then 200GB, then 2TB&#8230; it&#8217;s a subscription for life.</li>
<li><strong>Your photos live on someone else&#8217;s server.</strong> What if Google changes their policy? What if they shut it down?</li>
</ol>
<p>iCloud is the same story. I was paying for 50GB just for iPhone backup. Another monthly charge that never stops.</p>
<p><strong>&#8220;I have a server at home. Why am I paying someone else to store my photos?&#8221;</strong> Once you think that, you&#8217;re already halfway there.</p>
<h2><span class="ez-toc-section" id="What_Is_Immich"></span><span class="ez-toc-section" id="What_Is_Immich"></span>What Is Immich?<span class="ez-toc-section-end"></span><span class="ez-toc-section-end"></span></h2>
<p><a href="https://immich.app" target="_blank">Immich</a> is basically a <strong>self-hosted Google Photos</strong>.</p>
<ul>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4f1.png" alt="📱" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Mobile app</strong> — automatic backup from Android and iOS</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f50d.png" alt="🔍" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>AI search</strong> — search &#8220;beach&#8221; or &#8220;cat&#8221; and it just works</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f5fa.png" alt="🗺" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Map view</strong> — see where every photo was taken on a world map</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f465.png" alt="👥" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Face recognition</strong> — automatically groups people</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4c2.png" alt="📂" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Albums</strong> — shared albums, timeline, everything</li>
<li><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f512.png" alt="🔒" class="wp-smiley" style="height: 1em; max-height: 1em;" /> <strong>Your server</strong> — data stays in your home</li>
</ul>
<p>It does almost everything Google Photos does. It&#8217;s free, open-source, and the only storage limit is your hard drive.</p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="433" height="650" src="https://prsm-studio.com/wp-content/uploads/2026/03/stock-4524371-1.jpg" alt="클로즈업 사진에서 나무 표면 위의 핸드폰" class="wp-image-188" srcset="https://prsm-studio.com/wp-content/uploads/2026/03/stock-4524371-1.jpg 433w, https://prsm-studio.com/wp-content/uploads/2026/03/stock-4524371-1-200x300.jpg 200w" sizes="auto, (max-width: 433px) 100vw, 433px" /><figcaption>Photo by Markus Winkler / Pexels</figcaption></figure>
<h2><span class="ez-toc-section" id="Installation_One_Docker_Compose_File"></span><span class="ez-toc-section" id="Installation_One_Docker_Compose_File"></span>Installation: One Docker Compose File<span class="ez-toc-section-end"></span><span class="ez-toc-section-end"></span></h2>
<p>Remember the Docker setup from <a href="/code-illiterate-home-server-build-1-ser9max-windows11-wsl2-docker-en/">Part 1</a>? We just add on top of it.</p>
<pre><code># docker-compose.yml (essentials)
services:
  immich-server:
    image: ghcr.io/immich-app/immich-server:release
    ports:
      - "2283:2283"
    volumes:
      - ./upload:/usr/src/app/upload
    environment:
      - DB_PASSWORD=your_secure_password_here
      - REDIS_HOSTNAME=redis

  immich-machine-learning:
    image: ghcr.io/immich-app/immich-machine-learning:release

  redis:
    image: redis:7-alpine

  database:
    image: tensorchord/pgvecto-rs:pg16-v0.2.1</code></pre>
<p>I told Claude &#8220;install Immich&#8221; and it created this file and ran <code>docker compose up -d</code> for me. I just watched.</p>
<p>Once it&#8217;s running, go to <code>http://server-ip:2283</code>, create an admin account, and you&#8217;re ready.</p>
<h2><span class="ez-toc-section" id="Auto-Backup_from_Your_Phone"></span><span class="ez-toc-section" id="Auto-Backup_from_Your_Phone"></span>Auto-Backup from Your Phone<span class="ez-toc-section-end"></span><span class="ez-toc-section-end"></span></h2>
<ol>
<li>Install <strong>Immich</strong> from Play Store (or App Store for iPhone)</li>
<li>Enter your server address: <code>http://192.168.xxx.xxx:2283</code>
<p>&#8211; Want access outside your home? Use your Tailscale IP (<a href="/code-illiterate-home-server-build-2-tailscale-remote-access-en/">see Part 2</a>!)</li>
<li>Log in → <strong>Enable auto backup</strong></li>
<li>Done.</li>
</ol>
<p>That&#8217;s literally it. Every photo you take now automatically goes to your home server.</p>
<p>I uploaded <strong>over 35,000 photos</strong> from my Galaxy S25 Ultra. How long did it take? <strong>About 3-4 days.</strong> But honestly, I didn&#8217;t even notice. I installed the app, turned on backup, and just lived my life. Went to work, ate, slept — and a few days later I opened the app and everything was there. That&#8217;s the beauty of it. <strong>Set it and forget it.</strong></p>
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="940" height="529" src="https://prsm-studio.com/wp-content/uploads/2026/03/replaced-28461160.jpg" alt="Cloud backup and storage" class="wp-image-257" /><figcaption>Photo by Alpha En / Pexels</figcaption></figure>
<h2><span class="ez-toc-section" id="iPhone_Users_Youre_Covered_Too"></span><span class="ez-toc-section" id="iPhone_Users_Youre_Covered_Too"></span>iPhone Users: You&#8217;re Covered Too<span class="ez-toc-section-end"></span><span class="ez-toc-section-end"></span></h2>
<p>Same exact process:</p>
<ol>
<li>Install <strong>Immich</strong> from App Store</li>
<li>Enter server address + log in</li>
<li>Auto backup ON</li>
</ol>
<p>For existing photos stuck in iCloud:</p>
<ol>
<li>Mac Photos app → Settings → <strong>&#8220;Download Originals to this Mac&#8221;</strong></li>
<li>Wait for everything to download (could be dozens of GB)</li>
<li>Use <code>immich-go</code> to bulk upload to your server</li>
</ol>
<p>Google Photos works the same way. Export via <a href="https://takeout.google.com" target="_blank">Google Takeout</a> → upload with <code>immich-go</code>. <strong>Duplicates are automatically filtered out.</strong> Even if the same photo exists in both Google and iCloud, only one copy ends up on your server.</p>
<h2><span class="ez-toc-section" id="Access_Your_Photos_From_Anywhere"></span><span class="ez-toc-section" id="Access_Your_Photos_From_Anywhere"></span>Access Your Photos From Anywhere<span class="ez-toc-section-end"></span><span class="ez-toc-section-end"></span></h2>
<p>Remember the Tailscale setup from <a href="/code-illiterate-home-server-build-2-tailscale-remote-access-en/">Part 2</a>? This is where it pays off.</p>
<p>Set your Immich app&#8217;s server address to your Tailscale IP (<code>100.xx.xx.xx:2283</code>), and you can access your photos <strong>from a cafe, from a business trip, from another country</strong>. It&#8217;s a VPN, so security isn&#8217;t a concern either.</p>
<h2><span class="ez-toc-section" id="AI_Features_No_Reason_to_Miss_Google_Photos"></span><span class="ez-toc-section" id="AI_Features_No_Reason_to_Miss_Google_Photos"></span>AI Features: No Reason to Miss Google Photos<span class="ez-toc-section-end"></span><span class="ez-toc-section-end"></span></h2>
<p>Immich comes with a built-in <strong>Machine Learning server</strong>. It runs automatically after installation.</p>
<h3><span class="ez-toc-section" id="Photo_Search"></span><span class="ez-toc-section" id="Photo_Search"></span>Photo Search<span class="ez-toc-section-end"></span><span class="ez-toc-section-end"></span></h3>
<p>Type &#8220;food&#8221; in the search bar and only food photos show up. &#8220;Beach&#8221;, &#8220;mountain&#8221;, &#8220;car&#8221; — it all works. Same AI search as Google Photos, but running on your own server.</p>
<h3><span class="ez-toc-section" id="Face_Recognition"></span><span class="ez-toc-section" id="Face_Recognition"></span>Face Recognition<span class="ez-toc-section-end"></span><span class="ez-toc-section-end"></span></h3>
<p>It automatically detects and groups faces. Tag someone&#8217;s name once, and you can browse all their photos in one place.</p>
<h3><span class="ez-toc-section" id="Map_View"></span><span class="ez-toc-section" id="Map_View"></span>Map View<span class="ez-toc-section-end"></span><span class="ez-toc-section-end"></span></h3>
<p>Photos with GPS data appear as pins on a world map. Perfect for &#8220;where did I take that photo last year?&#8221;</p>
<h2><span class="ez-toc-section" id="How_Much_Do_You_Actually_Save"></span><span class="ez-toc-section" id="How_Much_Do_You_Actually_Save"></span>How Much Do You Actually Save?<span class="ez-toc-section-end"></span><span class="ez-toc-section-end"></span></h2>
<p>Let&#8217;s do the math.</p>
<table>
<thead>
<tr>
<th>Service</th>
<th>Monthly</th>
<th>Yearly</th>
</tr>
</thead>
<tbody>
<tr>
<td>Google Photos 100GB</td>
<td>$2</td>
<td>$24</td>
</tr>
<tr>
<td>iCloud 50GB</td>
<td>$1</td>
<td>$12</td>
</tr>
<tr>
<td><strong>Total</strong></td>
<td><strong>$3</strong></td>
<td><strong>$36</strong></td>
</tr>
<tr>
<td><strong>Immich (self-hosted)</strong></td>
<td><strong>$0</strong></td>
<td><strong>$0</strong></td>
</tr>
</tbody>
</table>
<p>What about electricity? The SER9 MAX has a 54W TDP. Running 24/7 costs roughly <strong>$1.50/month in electricity.</strong> But that&#8217;s shared across all services — blog, AI assistant, local LLM, and more. The photo backup cost is effectively zero.</p>
<p>As long as you have hard drive space, it&#8217;s <strong>unlimited backup</strong>. Add a 1TB SSD and you&#8217;re set for a decade.</p>
<h2><span class="ez-toc-section" id="The_Honest_Downsides"></span><span class="ez-toc-section" id="The_Honest_Downsides"></span>The Honest Downsides<span class="ez-toc-section-end"></span><span class="ez-toc-section-end"></span></h2>
<p>Let&#8217;s be real about the cons:</p>
<ol>
<li><strong>Server down = no access.</strong> During power outages or reboots, you can&#8217;t reach your photos. The app does cache recent ones for offline viewing though.</li>
<li><strong>You need backup for your backup.</strong> If your SSD dies, your photos are gone. External drive or NAS for redundancy is strongly recommended.</li>
<li><strong>Initial upload takes time.</strong> 35,000 photos took 3-4 days for me. But it runs in the background — just forget about it and check back later. One day you&#8217;ll open the app and it&#8217;s all done.</li>
<li><strong>Shared albums are limited.</strong> The &#8220;share a link with anyone&#8221; feature isn&#8217;t as polished as Google Photos yet.</li>
</ol>
<p>But if you believe <strong>&#8220;my photos should stay on my server&#8221;</strong>, these trade-offs are worth it.</p>
<h2><span class="ez-toc-section" id="Whats_Next"></span><span class="ez-toc-section" id="Whats_Next"></span>What&#8217;s Next<span class="ez-toc-section-end"></span><span class="ez-toc-section-end"></span></h2>
<p>Photos backed up on our server. Blog is live. Remote access works. Now it&#8217;s time to give this server a <strong>brain</strong>.</p>
<p>In the next part:</p>
<ul>
<li><strong>OpenClaw + Telegram</strong> — putting an AI assistant on the server and chatting with it via Telegram</li>
<li>A <strong>morning briefing bot</strong> that sends weather, news, and schedule summaries every day</li>
<li>An AI that writes blog posts, generates images, and even codes — <strong>my personal AI minion</strong></li>
</ul>
<p>Stay tuned for the story of how a guy who can&#8217;t write a single line of code built his own AI assistant.</p>
<p><em>This post was written by AI (Claude Code) and reviewed by a code-illiterate human.</em> <img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f916.png" alt="🤖" class="wp-smiley" style="height: 1em; max-height: 1em;" /><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2728.png" alt="✨" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>
<p><a class="a2a_button_facebook" href="https://www.addtoany.com/add_to/facebook?linkurl=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-3-immich-photo-backup-en%2F&amp;linkname=Even%20a%20Code-Illiterate%20Built%20It%5C%21%20Home%20Server%20Journey%20%283%29%20%E2%80%94%20Replacing%20Google%20Photos%20with%20Immich%20%F0%9F%93%B8%F0%9F%8F%A0" title="Facebook" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_mastodon" href="https://www.addtoany.com/add_to/mastodon?linkurl=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-3-immich-photo-backup-en%2F&amp;linkname=Even%20a%20Code-Illiterate%20Built%20It%5C%21%20Home%20Server%20Journey%20%283%29%20%E2%80%94%20Replacing%20Google%20Photos%20with%20Immich%20%F0%9F%93%B8%F0%9F%8F%A0" title="Mastodon" rel="nofollow noopener" target="_blank"></a><a class="a2a_button_email" href="https://www.addtoany.com/add_to/email?linkurl=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-3-immich-photo-backup-en%2F&amp;linkname=Even%20a%20Code-Illiterate%20Built%20It%5C%21%20Home%20Server%20Journey%20%283%29%20%E2%80%94%20Replacing%20Google%20Photos%20with%20Immich%20%F0%9F%93%B8%F0%9F%8F%A0" title="Email" rel="nofollow noopener" target="_blank"></a><a class="a2a_dd addtoany_share_save addtoany_share" href="https://www.addtoany.com/share#url=https%3A%2F%2Fprsm-studio.com%2Fen%2Fcode-illiterate-home-server-build-3-immich-photo-backup-en%2F&#038;title=Even%20a%20Code-Illiterate%20Built%20It%5C%21%20Home%20Server%20Journey%20%283%29%20%E2%80%94%20Replacing%20Google%20Photos%20with%20Immich%20%F0%9F%93%B8%F0%9F%8F%A0" data-a2a-url="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/" data-a2a-title="Even a Code-Illiterate Built It\! Home Server Journey (3) — Replacing Google Photos with Immich &#x1f4f8;&#x1f3e0;"></a></p><p>The post <a href="https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/">Even a Code-Illiterate Built It\! Home Server Journey (3) — Replacing Google Photos with Immich 📸🏠</a> appeared first on <a href="https://prsm-studio.com/en">Prsm Studio</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://prsm-studio.com/en/code-illiterate-home-server-build-3-immich-photo-backup-en/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
