<?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>Deuts.NET</title>
	<atom:link href="https://deuts.net/feed/" rel="self" type="application/rss+xml" />
	<link>https://deuts.net</link>
	<description>Personal rumblings on tech and stuff</description>
	<lastBuildDate>Tue, 16 Jun 2026 17:23:54 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://deuts.net/wp-content/uploads/2021/08/cropped-cropped-deuts.net_logo-32x32.jpg</url>
	<title>Deuts.NET</title>
	<link>https://deuts.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>WordPress MCP Setup for Claude Code</title>
		<link>https://deuts.net/2026/06/wordpress-mcp-setup-for-claude-code/</link>
					<comments>https://deuts.net/2026/06/wordpress-mcp-setup-for-claude-code/#respond</comments>
		
		<dc:creator><![CDATA[Claude]]></dc:creator>
		<pubDate>Tue, 16 Jun 2026 17:22:55 +0000</pubDate>
				<category><![CDATA[AI & Automation]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Claude Code]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://deuts.net/?p=13171</guid>

					<description><![CDATA[The WordPress MCP Adapter plugin exposes a WordPress site as an MCP server. Combined with Automattic&#8217;s @automattic/mcp-wordpress-remote package, Claude Code can create and edit posts, manage pages, and interact with WordPress directly from a session. Architecture Claude Code └── stdio └── npx @automattic/mcp-wordpress-remote └── HTTPS (Application Password auth) └── WordPress REST API (/wp-json/mcp/...) └── MCP &#8230; <a href="https://deuts.net/2026/06/wordpress-mcp-setup-for-claude-code/" class="more-link">Continue reading <span class="screen-reader-text">WordPress MCP Setup for Claude Code</span></a>]]></description>
										<content:encoded><![CDATA[<p>The <a href="https://github.com/WordPress/mcp-adapter">WordPress MCP Adapter plugin</a> exposes a WordPress site as an MCP server. Combined with Automattic&#8217;s <code>@automattic/mcp-wordpress-remote</code> package, Claude Code can create and edit posts, manage pages, and interact with WordPress directly from a session.</p>
<h2>Architecture</h2>
<pre><code>Claude Code
  └── stdio
      └── npx @automattic/mcp-wordpress-remote
              └── HTTPS (Application Password auth)
                      └── WordPress REST API (/wp-json/mcp/...)
                              └── MCP Adapter plugin
                                      └── WordPress Abilities API</code></pre>
<h2>Requirements</h2>
<ul>
<li>WordPress 6.9+</li>
<li>Node.js (installed via nvm)</li>
<li>MCP Adapter plugin activated on the WordPress site</li>
</ul>
<p><span id="more-13171"></span></p>
<h2>Step 1: Install the MCP Adapter Plugin</h2>
<p>Via WP-CLI on the server:</p>
<pre><code>wp plugin install https://github.com/WordPress/mcp-adapter/releases/latest/download/mcp-adapter.zip --activate</code></pre>
<p>Or install manually from the GitHub releases page and activate in WP Admin → Plugins. Once active, the following REST API routes should be present:</p>
<pre><code>/wp-json/mcp/
/wp-json/mcp/mcp-adapter-default-server</code></pre>
<h2>Step 2: Create a WordPress Application Password</h2>
<ol>
<li>Log into WP Admin → Users → Profile</li>
<li>Scroll to <strong>Application Passwords</strong></li>
<li>Enter a name (e.g. <code>claude-code</code>) and click <strong>Add New Application Password</strong></li>
<li>Copy the generated password — it is shown only once</li>
</ol>
<h2>Step 3: Install Node.js via nvm</h2>
<pre><code>curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
source ~/.nvm/nvm.sh
nvm install --lts</code></pre>
<h2>Step 4: Add the MCP Server to ~/.claude.json</h2>
<p>Add the following under <code>mcpServers</code> in <code>~/.claude.json</code>:</p>
<pre><code>{
  "wordpress": {
    "type": "stdio",
    "command": "/home/user/.nvm/versions/node/v24.x.x/bin/npx",
    "args": ["@automattic/mcp-wordpress-remote"],
    "env": {
      "WP_API_USERNAME": "your-wp-username",
      "WP_API_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx",
      "WP_API_URL": "https://yourdomain.com/wp-json/mcp/mcp-adapter-default-server",
      "PATH": "/home/user/.nvm/versions/node/v24.x.x/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
    }
  }
}</code></pre>
<p>Two critical details:</p>
<ul>
<li><strong><code>WP_API_URL</code> must be the full endpoint path</strong>, not a bare domain. Passing just <code>https://yourdomain.com</code> triggers legacy mode in the package, which targets the deprecated <code>/wp-json/wp/v2/wpmcp</code> endpoint and returns a 404.</li>
<li><strong><code>PATH</code> must include the nvm Node path</strong>. Claude Code sessions do not source <code>.bashrc</code> or nvm, so without this, npx fails with <code>env: 'node': No such file or directory</code>.</li>
</ul>
<p>Note: XML-RPC (<code>/xmlrpc.php</code>) is not used — the MCP Adapter uses the REST API exclusively. It can stay disabled.</p>
<h2>Step 5: Restart Claude Code and Verify</h2>
<p>MCP servers connect at session startup. After editing <code>~/.claude.json</code>, start a new session. To verify the endpoint is reachable beforehand:</p>
<pre><code>curl -s https://yourdomain.com/wp-json/mcp/ | python3 -m json.tool</code></pre>
<p>Should list <code>/mcp</code> and <code>/mcp/mcp-adapter-default-server</code> routes. Once connected, WordPress tools will appear alongside any other MCP tools in the session.</p>
<h2>Notes</h2>
<ul>
<li>The <code>@automattic/mcp-wordpress-remote</code> package is downloaded on first use by npx and cached in <code>~/.npm/</code>.</li>
<li>For additional WordPress sites, add new entries under <code>mcpServers</code> with different keys (e.g. <code>wordpress-staging</code>).</li>
<li>MCP servers only connect at session start — always start a new Claude Code session after changing MCP configuration.</li>
</ul>
]]></content:encoded>
					
					<wfw:commentRss>https://deuts.net/2026/06/wordpress-mcp-setup-for-claude-code/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Setting Up Mnemosyne Memory for Claude Code</title>
		<link>https://deuts.net/2026/06/setting-up-mnemosyne-memory-for-claude-code/</link>
					<comments>https://deuts.net/2026/06/setting-up-mnemosyne-memory-for-claude-code/#respond</comments>
		
		<dc:creator><![CDATA[Claude]]></dc:creator>
		<pubDate>Tue, 16 Jun 2026 17:21:42 +0000</pubDate>
				<category><![CDATA[AI & Automation]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Claude Code]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MCP]]></category>
		<guid isPermaLink="false">https://deuts.net/?p=13170</guid>

					<description><![CDATA[Mnemosyne is a local-first AI memory system that integrates with Claude Code via MCP, giving Claude persistent memory across sessions. Why MCP Instead of CLI The CLI (mnemosyne store, mnemosyne recall) is a manual tool — you run it yourself and paste results back. The MCP integration makes Mnemosyne a first-class tool Claude can call &#8230; <a href="https://deuts.net/2026/06/setting-up-mnemosyne-memory-for-claude-code/" class="more-link">Continue reading <span class="screen-reader-text">Setting Up Mnemosyne Memory for Claude Code</span></a>]]></description>
										<content:encoded><![CDATA[<p><a href="https://github.com/AxDSan/mnemosyne">Mnemosyne</a> is a local-first AI memory system that integrates with Claude Code via MCP, giving Claude persistent memory across sessions.</p>
<h2>Why MCP Instead of CLI</h2>
<p>The CLI (<code>mnemosyne store</code>, <code>mnemosyne recall</code>) is a manual tool — you run it yourself and paste results back. The MCP integration makes Mnemosyne a <strong>first-class tool Claude can call directly</strong>, just like any other tool in a session.</p>
<p>Concretely, with MCP:</p>
<ul>
<li>Claude automatically stores and retrieves memories during a conversation without any manual intervention</li>
<li>Memory reads and writes happen inline, so context is enriched transparently</li>
<li>No copy-pasting: Claude calls <code>mnemosyne_remember</code> or <code>mnemosyne_recall</code> the same way it calls any other tool</li>
</ul>
<p>The CLI remains useful for inspection (<code>mnemosyne stats</code>), backup (<code>mnemosyne export</code>), and manual management — but it is not a substitute for the MCP integration when Claude is the one that needs to remember things.</p>
<p><span id="more-13170"></span></p>
<h2>Step 0: Disable Claude Code&#8217;s Built-in Auto-Memory</h2>
<p>Claude Code has its own file-based memory system that writes to <code>~/.claude/projects/*/memory/</code>. It runs in parallel with Mnemosyne if not suppressed, duplicating everything. Disable it by adding the following to <code>~/.claude/CLAUDE.md</code> (create it if it doesn&#8217;t exist — this file is loaded in every session regardless of working directory):</p>
<pre><code>## Memory

**Use Mnemosyne exclusively for persistent memory.** Call `mnemosyne_remember` and `mnemosyne_recall` via MCP tools.

**Never write to the file-based auto-memory system** at `~/.claude/projects/*/memory/`. Do not create or edit files there. Do not create or update any `MEMORY.md` index files. That system is not used.</code></pre>
<h2>Step 1: Install via pipx</h2>
<pre><code>pipx install mnemosyne-memory</code></pre>
<p>This installs the <code>mnemosyne</code> CLI to <code>~/.local/bin/mnemosyne</code>.</p>
<h2>Step 2: Install the Hermes Tool Schemas</h2>
<p>The MCP server depends on <code>mnemosyne-hermes</code> for its tool definitions. It must be injected into the same pipx venv:</p>
<pre><code>~/.local/share/pipx/venvs/mnemosyne-memory/bin/python -m pip install mnemosyne-hermes</code></pre>
<p>Skip this and <code>mnemosyne mcp</code> will start and complete the protocol handshake but advertise zero tools — silently broken.</p>
<h2>Step 3: Register the MCP Server</h2>
<pre><code>claude mcp add --scope user mnemosyne   -e MNEMOSYNE_DATA_DIR=$HOME/.local/share/mnemosyne   -- ~/.local/bin/mnemosyne mcp</code></pre>
<p>This writes the entry to <code>~/.claude.json</code>, which is where Claude Code 2.x reads MCP server definitions. Do not add it to <code>~/.claude/settings.json</code> — that file is not used for MCP configuration.</p>
<h2>Step 4: Set the Data Directory in Your Shell</h2>
<p>So that the CLI uses the same database as the MCP server, add to <code>~/.bashrc</code>:</p>
<pre><code>export MNEMOSYNE_DATA_DIR="$HOME/.local/share/mnemosyne"</code></pre>
<p>Then run <code>source ~/.bashrc</code>.</p>
<h2>Step 5: Restart Claude Code and Verify</h2>
<p>MCP servers connect at session startup. After completing the above, start a new Claude Code session, then check:</p>
<pre><code>claude mcp get mnemosyne   # should show Status: &#x2714; Connected
mnemosyne stats            # confirms CLI hits the right database</code></pre>
<h2>Step 6: Install the Mnemosyne Dashboard (Optional)</h2>
<p>The <a href="https://github.com/wysie/mnemosyne-dashboard">Mnemosyne Dashboard</a> is a local-first web UI for browsing, visualising, and maintaining your memory store. It&#8217;s intentionally minimal: Python standard library server, static HTML/CSS/JS frontend, no external JS runtime, no cloud calls, and read-only by default.</p>
<h3>Install via Hermes</h3>
<pre><code>hermes plugins install wysie/mnemosyne-dashboard --enable
hermes gateway restart</code></pre>
<h3>Run as a persistent systemd service (Linux)</h3>
<p>If you want the dashboard to survive Hermes restarts, run it as a systemd user service instead. Create <code>~/.config/systemd/user/mnemosyne-dashboard.service</code>:</p>
<pre><code>[Unit]
Description=Mnemosyne Dashboard
After=network.target

[Service]
Type=simple
WorkingDirectory=%h/.hermes/plugins/mnemosyne-dashboard
ExecStart=python3 server.py --host 0.0.0.0 --port 8765 --db %h/.local/share/mnemosyne/mnemosyne.db
Restart=on-failure
RestartSec=5
Environment=PYTHONUNBUFFERED=1

[Install]
WantedBy=default.target</code></pre>
<p>Then enable and start it:</p>
<pre><code>systemctl --user daemon-reload
systemctl --user enable mnemosyne-dashboard
systemctl --user start mnemosyne-dashboard</code></pre>
<p>The dashboard will be available at <code>http://localhost:8765/</code> (or your machine&#8217;s LAN IP if you bound to <code>0.0.0.0</code>).</p>
<h3>Configuration</h3>
<p>Config lives at <code>~/.hermes/plugin-data/mnemosyne-dashboard/config.json</code>. Key fields:</p>
<pre><code>{
  "host": "0.0.0.0",
  "port": 8765,
  "db_path": "~/.local/share/mnemosyne/mnemosyne.db",
  "auth_enabled": false,
  "memory_admin_enabled": false
}</code></pre>
<p>Memory admin (supersede, expire, importance updates) is disabled by default. If you enable it on a non-localhost bind address, password auth is required. Admin actions create a SQLite backup and append to an audit log — no hard deletes or raw overwrites are exposed.</p>
<h2>Data Locations</h2>
<table>
<thead>
<tr>
<th>Path</th>
<th>Purpose</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>~/.local/share/mnemosyne/mnemosyne.db</code></td>
<td>Primary database (set via <code>MNEMOSYNE_DATA_DIR</code>)</td>
</tr>
<tr>
<td><code>~/.hermes/mnemosyne/data/mnemosyne.db</code></td>
<td>Default fallback when <code>MNEMOSYNE_DATA_DIR</code> is unset</td>
</tr>
<tr>
<td><code>~/.local/share/pipx/venvs/mnemosyne-memory/</code></td>
<td>pipx virtual environment</td>
</tr>
<tr>
<td><code>~/.hermes/plugin-data/mnemosyne-dashboard/</code></td>
<td>Dashboard config, backups, and audit log</td>
</tr>
</tbody>
</table>
<h2>Troubleshooting</h2>
<h3>MCP server connects but no tools appear</h3>
<p>The <code>mnemosyne-hermes</code> package is missing from the pipx venv. Run Step 2 above. You can confirm by checking the tools/list response — if <code>"tools":[]</code>, the package is missing.</p>
<h3>CLI uses wrong database</h3>
<p>The CLI default is <code>~/.hermes/mnemosyne/data/</code>. Set <code>MNEMOSYNE_DATA_DIR</code> in <code>~/.bashrc</code> (Step 4) to point it at the same path the MCP server uses.</p>
<h3>Tools missing after restart</h3>
<p>The config is probably in the wrong file. Claude Code 2.x reads MCP servers from <code>~/.claude.json</code>, not <code>~/.claude/settings.json</code>. Run <code>claude mcp get mnemosyne</code> — if it says &#8220;not found&#8221;, re-run Step 3.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://deuts.net/2026/06/setting-up-mnemosyne-memory-for-claude-code/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Connecting WordPress MCP via Tailscale</title>
		<link>https://deuts.net/2026/06/connecting-wordpress-mcp-via-tailscale/</link>
					<comments>https://deuts.net/2026/06/connecting-wordpress-mcp-via-tailscale/#respond</comments>
		
		<dc:creator><![CDATA[Claude]]></dc:creator>
		<pubDate>Tue, 16 Jun 2026 17:07:56 +0000</pubDate>
				<category><![CDATA[AI & Automation]]></category>
		<category><![CDATA[Selfhosting]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Claude Code]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MCP]]></category>
		<category><![CDATA[Tailscale]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://deuts.net/?p=13158</guid>

					<description><![CDATA[Most guides for connecting AI assistants to a self-hosted WordPress site via MCP suggest using Cloudflare Tunnel or ngrok to expose the site publicly. This works, but it also reintroduces infrastructure layers that can interfere with MCP: WAFs, bot-fight rules, page caches, and host-level rewrites that intercept REST API requests before WordPress ever handles them. &#8230; <a href="https://deuts.net/2026/06/connecting-wordpress-mcp-via-tailscale/" class="more-link">Continue reading <span class="screen-reader-text">Connecting WordPress MCP via Tailscale</span></a>]]></description>
										<content:encoded><![CDATA[<p>Most guides for connecting AI assistants to a self-hosted WordPress site via MCP suggest using Cloudflare Tunnel or ngrok to expose the site publicly. This works, but it also reintroduces infrastructure layers that can interfere with MCP: WAFs, bot-fight rules, page caches, and host-level rewrites that intercept REST API requests before WordPress ever handles them.</p>
<p>A cleaner alternative, if your machines are already on <a href="https://tailscale.com">Tailscale</a>: skip the public internet entirely.</p>
<p><span id="more-13158"></span></p>
<h2>The Problem with Cloudflare and MCP</h2>
<p>The <code>@automattic/mcp-wordpress-remote</code> package connects to WordPress via the REST API using HTTP Basic Auth (Application Passwords). Any edge layer that interferes with those REST API calls can silently break the connection. Common culprits when routing through Cloudflare:</p>
<ul>
<li>Bot Fight Mode blocking REST API POSTs</li>
<li>Page caches returning stale or HTML responses on JSON endpoints</li>
<li>Host WAFs blocking requests based on User-Agent strings</li>
<li>Security plugins blocking access to the MCP endpoint</li>
</ul>
<h2>The Tailscale Approach</h2>
<p>Since Claude Code runs the MCP client locally, it only needs the WordPress server to be reachable from the local machine — not from Anthropic&#8217;s servers. If both machines are on the same Tailscale network, you can route traffic directly over Tailscale by pinning the domain in <code>/etc/hosts</code>:</p>
<pre><code>100.x.x.x        yourdomain.com
fd7a:xxxx::xxxx  yourdomain.com</code></pre>
<p>Both IPv4 and IPv6 entries are needed. Without the IPv6 entry, DNS can still return Cloudflare&#8217;s AAAA records and route around the pin.</p>
<p>With this in place, <code>yourdomain.com</code> resolves to the Tailscale IP, traffic goes peer-to-peer, and none of the Cloudflare/WAF/cache layers are involved. The SSL certificate remains valid because the hostname matches.</p>
<h2>The Plugin</h2>
<p>The active WordPress MCP plugin is <a href="https://github.com/WordPress/mcp-adapter">WordPress/mcp-adapter</a> (not the older <code>wordpress-mcp</code> repo, which is deprecated). The endpoint lives at:</p>
<pre><code>https://yourdomain.com/wp-json/mcp/mcp-adapter-default-server</code></pre>
<p>Authentication is WordPress Application Passwords (Users → Profile → Application Passwords) via HTTP Basic Auth. XML-RPC is not involved.</p>
<h2>MCP Client Configuration</h2>
<p>In your Claude Code MCP config (<code>~/.claude.json</code>):</p>
<pre><code>{
  "mcpServers": {
    "wordpress": {
      "command": "npx",
      "args": ["@automattic/mcp-wordpress-remote"],
      "env": {
        "WP_API_URL": "https://yourdomain.com/wp-json/mcp/mcp-adapter-default-server",
        "WP_API_USERNAME": "your-wp-username",
        "WP_API_PASSWORD": "xxxx xxxx xxxx xxxx xxxx xxxx",
        "PATH": "/home/user/.nvm/versions/node/v24.x.x/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
      }
    }
  }
}</code></pre>
<p>Two critical details:</p>
<ul>
<li><strong><code>WP_API_URL</code> must be the full endpoint path</strong>, not just the domain. Passing a bare domain puts the package into legacy mode, where it targets <code>/wp-json/wp/v2/wpmcp</code> — the old deprecated plugin&#8217;s endpoint — returning a 404.</li>
<li><strong><code>PATH</code> must be set explicitly</strong> if Node is installed via NVM. Claude Code&#8217;s environment doesn&#8217;t inherit your shell&#8217;s NVM paths, so without this the <code>npx</code> call fails to find Node.</li>
</ul>
<h2>Result</h2>
<p>A successful MCP handshake returns a session ID and server info:</p>
<pre><code>{"protocolVersion":"2024-11-05","serverInfo":{"name":"MCP Adapter Default Server","version":"v1.0.0"}}</code></pre>
<p>No tunnels, no WAF exceptions, no cache exclusion rules — just a direct Tailscale connection to your own server.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://deuts.net/2026/06/connecting-wordpress-mcp-via-tailscale/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>When Security Becomes Friction for Meralco Online</title>
		<link>https://deuts.net/2026/01/when-security-becomes-friction-for-meralco-online/</link>
					<comments>https://deuts.net/2026/01/when-security-becomes-friction-for-meralco-online/#respond</comments>
		
		<dc:creator><![CDATA[deuts]]></dc:creator>
		<pubDate>Sat, 24 Jan 2026 13:40:55 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Meralco]]></category>
		<category><![CDATA[Online]]></category>
		<category><![CDATA[Online Security]]></category>
		<category><![CDATA[security]]></category>
		<guid isPermaLink="false">https://deuts.net/?p=13153</guid>

					<description><![CDATA[Meralco’s online system feels like it was designed with the mindset of a bank, not a utility company. The information involved is basic—who you are, where the service is, and how much the bill is. Still, getting a simple PDF copy of a monthly bill means logging in, clicking through several pages, and repeating the process for each account, even though the bill amount is already shown in notifications.

The security measures themselves are not the issue; the lack of balance is. Blocking keyboard autofill while allowing paste, requiring OTPs just to view a bill, and forcing customers to use the website for something that could be emailed all add friction without real benefit. Security should protect users where it matters, not make routine tasks harder than they need to be.]]></description>
										<content:encoded><![CDATA[<p>Meralco is a good example of a company overdoing online security in places where the actual risk is low.</p>
<p>Meralco is a utility company. It is not a bank, an e-wallet provider, or a financial institution holding customer funds. The information it needs to protect—customer name, service address, and billing amount—is important, but it does not carry the same risk profile as banking credentials or stored monetary value. The security approach should reflect that difference.</p>
<p><span id="more-13153"></span></p>
<h3>A Bill You Can See but Not Easily Get</h3>
<p>When Meralco notifies customers that a monthly bill is available, the notification already displays the bill amount. That means the information is already deemed safe enough to transmit. Despite that, the actual PDF copy of the bill is not included.</p>
<p>To obtain it, customers must log in to the website, navigate through several pages, dismiss pop-ups, and repeat the process for each registered account each month. All this just to download a document that could have been emailed to me in the first place. Encrypt the PDF if you want—I do not care. Just send it.</p>
<h3>Login Restrictions That Add Friction, Not Security</h3>
<p>The login experience also raises questions about proportionality.</p>
<p>Pasting a password is allowed, but keyboard-based autofill—commonly used by password managers to populate both email address and password—is blocked. This forces manual entry of the email address while offering no meaningful improvement in security. It prevents convenience, not misuse.</p>
<p>Logging in from a different device also requires a one-time password sent to a registered mobile number. This is reasonable for high-risk actions, but for viewing or downloading a bill, it feels misaligned with the nature of the transaction. There are no funds to move—only a balance to view.</p>
<h3>Repeating the Same Process, Every Month</h3>
<p>For users managing multiple Meralco accounts under one profile, this experience is multiplied. Using the website for account administration is understandable. Being required to go through the same multi-step process every month, for every account, just to download bills is not.</p>
<p>This is a problem with workflow design, not user behavior.</p>
<h3>A Simpler, More Balanced Approach</h3>
<p>Emailing the monthly bill as a PDF would resolve most of these issues immediately. The website can remain the place for account management and changes. Routine access to a billing document should not require repeated navigation through a heavily restricted interface.</p>
<p>Good digital security should be based on balance—strong where risk is high, and simple where it is not.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://deuts.net/2026/01/when-security-becomes-friction-for-meralco-online/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>n8n alternatives</title>
		<link>https://deuts.net/2025/11/n8n-alternatives/</link>
					<comments>https://deuts.net/2025/11/n8n-alternatives/#respond</comments>
		
		<dc:creator><![CDATA[deuts]]></dc:creator>
		<pubDate>Tue, 25 Nov 2025 17:16:15 +0000</pubDate>
				<category><![CDATA[Selfhosting]]></category>
		<category><![CDATA[ActivePieces]]></category>
		<category><![CDATA[Automation]]></category>
		<category><![CDATA[Langflow]]></category>
		<category><![CDATA[n8n]]></category>
		<category><![CDATA[Windmill]]></category>
		<guid isPermaLink="false">https://deuts.net/?p=13144</guid>

					<description><![CDATA[I recently discovered that there are a few solid, self-hosted alternatives to n8n. Here’s a quick comparison of their GitHub stars and key features (as of Nov. 26, 2025): Platform GitHub Stars Self-hosted Focus / Best Use Case n8n 159k ✅ Yes General-purpose workflow automation with powerful code node. Ideal for complex multi-service automations and &#8230; <a href="https://deuts.net/2025/11/n8n-alternatives/" class="more-link">Continue reading <span class="screen-reader-text">n8n alternatives</span></a>]]></description>
										<content:encoded><![CDATA[<p>I recently discovered that there are a few solid, self-hosted alternatives to n8n. Here’s a quick comparison of their GitHub stars and key features (as of Nov. 26, 2025):</p>
<style>
  .autosize-table {
    width: 100%;
    border-collapse: collapse;
    table-layout: auto; /* allow columns to size based on content */
  }
  .autosize-table th,
  .autosize-table td {
    padding: 6px;
    border: 1px solid #ccc;
  }
  /* Make the last column occupy remaining space */
  .autosize-table td:last-child,
  .autosize-table th:last-child {
    width: 100%;
  }
</style>
<table class="autosize-table">
<thead>
<tr>
<th>Platform</th>
<th>GitHub Stars</th>
<th>Self-hosted</th>
<th>Focus / Best Use Case</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>n8n</strong></td>
<td>159k</td>
<td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td>
<td>General-purpose workflow automation with powerful code node. Ideal for complex multi-service automations and ETL tasks.</td>
</tr>
<tr>
<td><strong>Activepieces</strong></td>
<td>19.3k</td>
<td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td>
<td>Low-code/no-code automation with occasional custom JS support. Good for lighter, simpler workflows.</td>
</tr>
<tr>
<td><strong>Windmill</strong></td>
<td>15.2k</td>
<td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td>
<td>Developer-centric automation using scripts (Python/TypeScript/Go). Great for internal tools and backend workflows.</td>
</tr>
<tr>
<td><strong>Automatisch</strong></td>
<td>13.4k</td>
<td><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/2705.png" alt="✅" class="wp-smiley" style="height: 1em; max-height: 1em;" /> Yes</td>
<td>Simplified Zapier-style automation. Best for small, straightforward tasks when ease and self-hosting matter.</td>
</tr>
</tbody>
</table>
<p><strong>Summary:</strong> n8n remains the most powerful and versatile, while Activepieces and Windmill offer lighter or more code-centric alternatives. Automatisch is best if you just need simple self-hosted automations.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://deuts.net/2025/11/n8n-alternatives/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>WordPress Lost Its Soul</title>
		<link>https://deuts.net/2025/11/wordpress-lost-its-soul/</link>
					<comments>https://deuts.net/2025/11/wordpress-lost-its-soul/#respond</comments>
		
		<dc:creator><![CDATA[deuts]]></dc:creator>
		<pubDate>Sun, 23 Nov 2025 14:55:53 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Wordpress]]></category>
		<guid isPermaLink="false">https://deuts.net/?p=13142</guid>

					<description><![CDATA[WordPress feels more like a marketplace than a community, making it surprisingly hard to find a simple, minimalist blogging theme without blocks or upsells.]]></description>
										<content:encoded><![CDATA[<p>What happened to WordPress?</p>
<p>The whole ecosystem—themes, plugins, and even the support culture—has turned into a marketplace. Everywhere you go, there’s an upsell. Basic features sit behind paywalls. And if you just want to build a straightforward blog, the experience is frustrating.</p>
<p>Finding a minimalist theme with a clean two-column layout, no widget blocks, no theme blocks, no Gutenberg clutter, and no upgrade prompts used to be easy. Now it feels like searching for something that shouldn’t be rare. Most themes are bloated with builders, bundled features, and aggressive pro-version hooks.</p>
<p>The open-source spirit that made WordPress welcoming has given way to commercial noise. WordPress is still free at its core, but the culture around it has shifted. For someone who simply wants a clean, honest blogging theme, it’s hard not to feel like WordPress has lost its soul.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://deuts.net/2025/11/wordpress-lost-its-soul/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Navigating the Challenges of Mobile Payments: A Lesson from GCash Spam SMS</title>
		<link>https://deuts.net/2024/06/navigating-the-challenges-of-mobile-payments-a-lesson-from-gcash-spam-sms/</link>
					<comments>https://deuts.net/2024/06/navigating-the-challenges-of-mobile-payments-a-lesson-from-gcash-spam-sms/#respond</comments>
		
		<dc:creator><![CDATA[deuts]]></dc:creator>
		<pubDate>Fri, 21 Jun 2024 01:22:18 +0000</pubDate>
				<category><![CDATA[Finance]]></category>
		<category><![CDATA[Technology]]></category>
		<category><![CDATA[Digital Wallets]]></category>
		<category><![CDATA[GCash]]></category>
		<category><![CDATA[Maya]]></category>
		<category><![CDATA[Mobile Payment]]></category>
		<category><![CDATA[Paymaya]]></category>
		<category><![CDATA[SMS Marketing]]></category>
		<guid isPermaLink="false">https://deuts.net/?p=9451</guid>

					<description><![CDATA[Paying bills has never been easier, thanks to the advent of mobile payment solutions like GCash and Maya. However, my recent experience with GCash highlighted a significant issue that needs addressing. The Issue with Spam SMS Recently, I was paying for my Globe Postpaid plan and decided to use GCash for the transaction. However, in &#8230; <a href="https://deuts.net/2024/06/navigating-the-challenges-of-mobile-payments-a-lesson-from-gcash-spam-sms/" class="more-link">Continue reading <span class="screen-reader-text">Navigating the Challenges of Mobile Payments: A Lesson from GCash Spam SMS</span></a>]]></description>
										<content:encoded><![CDATA[<p><img fetchpriority="high" decoding="async" src="https://deuts.net/wp-content/uploads/2024/06/gcash-maya.jpg" alt="" width="950" height="633" class="alignnone size-full wp-image-9452" srcset="https://deuts.net/wp-content/uploads/2024/06/gcash-maya.jpg 950w, https://deuts.net/wp-content/uploads/2024/06/gcash-maya-640x426.jpg 640w, https://deuts.net/wp-content/uploads/2024/06/gcash-maya-320x213.jpg 320w, https://deuts.net/wp-content/uploads/2024/06/gcash-maya-768x512.jpg 768w" sizes="(max-width: 950px) 100vw, 950px" /></p>
<p>Paying bills has never been easier, thanks to the advent of mobile payment solutions like GCash and Maya. However, my recent experience with GCash highlighted a significant issue that needs addressing.</p>
<h3>The Issue with Spam SMS</h3>
<p>Recently, I was paying for my Globe Postpaid plan and decided to use GCash for the transaction. However, in the past few days, I’ve been inundated with spam marketing SMS from GCash. The frequency and irrelevance of these messages were frustrating, so I decided to block GCash in my Google Messages app.</p>
<h3>The Unintended Consequence</h3>
<p>When I attempted to pay my bill via GCash, I didn’t receive the OTP (One-Time Password) required to complete the transaction. It quickly dawned on me that GCash was blocked, preventing the OTP from coming through. I unblocked GCash temporarily, but the OTP still took too long to arrive. This delay was unacceptable, especially when trying to complete a time-sensitive transaction.<br />
<span id="more-9451"></span></p>
<h3>Switching to Maya</h3>
<p>Frustrated by the inconvenience, I turned to Maya for my payment. The process was smooth, and I received the OTP without any issues. This experience was a stark contrast to the one I had with GCash and highlighted a crucial lesson for businesses: customer satisfaction is paramount.</p>
<h3>The Impact of Spam SMS</h3>
<p>Spam SMS not only annoy customers but can also lead to significant business losses. When customers are overwhelmed with irrelevant messages, they’re likely to block the sender, missing out on important communications like OTPs. This leads to frustration and can drive customers to competitors, as it did in my case.</p>
<h3>A Call to Action for Businesses</h3>
<p>For businesses utilizing SMS for marketing, it’s crucial to strike a balance. While reaching out to customers is essential, bombarding them with spam can backfire. One effective strategy is to limit marketing messages to a separate account, distinct from the one used for important communications like OTPs. Additionally:</p>
<ol>
<li><strong>Opt-in Preferences</strong>: Allow customers to choose the type of messages they want to receive.</li>
<li><strong>Frequency Control</strong>: Limit the number of marketing messages sent within a certain period.</li>
<li><strong>Relevance</strong>: Ensure that messages are relevant to the customer’s interests and needs.</li>
</ol>
<h3>Conclusion</h3>
<p>My experience underscores the importance of thoughtful and strategic communication with customers. By respecting customer preferences and reducing spam, businesses like GCash can improve customer satisfaction and retain their user base.</p>
<p>In the end, the key takeaway is clear: respect your customers&#8217; communication preferences, or risk losing them to competitors who do.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://deuts.net/2024/06/navigating-the-challenges-of-mobile-payments-a-lesson-from-gcash-spam-sms/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Embracing Text-Based Content: Efficiency and Clarity in Digital Learning</title>
		<link>https://deuts.net/2024/06/embracing-text-based-content-efficiency-and-clarity-in-digital-learning/</link>
					<comments>https://deuts.net/2024/06/embracing-text-based-content-efficiency-and-clarity-in-digital-learning/#respond</comments>
		
		<dc:creator><![CDATA[deuts]]></dc:creator>
		<pubDate>Tue, 18 Jun 2024 14:33:45 +0000</pubDate>
				<category><![CDATA[General]]></category>
		<category><![CDATA[digital learning]]></category>
		<category><![CDATA[efficiency]]></category>
		<category><![CDATA[Leo Laporte]]></category>
		<category><![CDATA[text-based content]]></category>
		<guid isPermaLink="false">https://deuts.net/?p=9436</guid>

					<description><![CDATA[In a digital landscape dominated by videos, sometimes simplicity and speed are all you need. Leo Laporte, the Tech Guy, once lamented the frustration of clicking on a video only to wade through minutes of unnecessary intros and prompts to like, subscribe, and hit the bell icon. Consider scenarios where you&#8217;re in a quiet environment &#8230; <a href="https://deuts.net/2024/06/embracing-text-based-content-efficiency-and-clarity-in-digital-learning/" class="more-link">Continue reading <span class="screen-reader-text">Embracing Text-Based Content: Efficiency and Clarity in Digital Learning</span></a>]]></description>
										<content:encoded><![CDATA[<p><img decoding="async" src="https://deuts.net/wp-content/uploads/2024/06/blog-1024x680.jpg" alt="" width="1024" height="680" class="alignnone size-large wp-image-9437" srcset="https://deuts.net/wp-content/uploads/2024/06/blog-1024x680.jpg 1024w, https://deuts.net/wp-content/uploads/2024/06/blog-640x425.jpg 640w, https://deuts.net/wp-content/uploads/2024/06/blog-320x213.jpg 320w, https://deuts.net/wp-content/uploads/2024/06/blog-768x510.jpg 768w, https://deuts.net/wp-content/uploads/2024/06/blog.jpg 1280w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>In a digital landscape dominated by videos, sometimes simplicity and speed are all you need. Leo Laporte, the Tech Guy, once lamented the frustration of clicking on a video only to wade through minutes of unnecessary intros and prompts to like, subscribe, and hit the bell icon.</p>
<p>Consider scenarios where you&#8217;re in a quiet environment or simply prefer to read instructions quickly. Opening a video might not always be practical or preferred. This blog focuses solely on text-based content, ensuring you can access information swiftly and without distraction.<span id="more-9436"></span></p>
<p>In today&#8217;s fast-paced world, efficiency matters more than ever. Whether troubleshooting a tech issue or seeking information, text-based resources offer a streamlined experience. They allow you to dive straight into content, saving time and boosting productivity.</p>
<p>As we navigate a vast sea of online information, the demand for quick, accessible answers continues to grow. Text-based formats complement videos by delivering information promptly and effectively, catering to users who value direct access without unnecessary frills.</p>
<p>In conclusion, this blog is dedicated to text-based content, prioritizing efficiency, clarity, and immediate access to information. Whether you prefer quiet reading or need swift solutions, text-based resources ensure that valuable insights are just a click away.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://deuts.net/2024/06/embracing-text-based-content-efficiency-and-clarity-in-digital-learning/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Why You Should Avoid Installing Obsidian via Snap on Ubuntu</title>
		<link>https://deuts.net/2024/06/why-you-should-avoid-installing-obsidian-via-snap-on-ubuntu/</link>
					<comments>https://deuts.net/2024/06/why-you-should-avoid-installing-obsidian-via-snap-on-ubuntu/#respond</comments>
		
		<dc:creator><![CDATA[deuts]]></dc:creator>
		<pubDate>Tue, 18 Jun 2024 14:18:59 +0000</pubDate>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[DebPackage]]></category>
		<category><![CDATA[Flatpak]]></category>
		<category><![CDATA[LinuxTips]]></category>
		<category><![CDATA[Obsidian]]></category>
		<category><![CDATA[SnapPackage]]></category>
		<category><![CDATA[Ubuntu]]></category>
		<guid isPermaLink="false">https://deuts.net/?p=9434</guid>

					<description><![CDATA[If you&#8217;re an Ubuntu user and have installed Obsidian, the popular note-taking app, using the Snap package, you might have encountered an unexpected inconvenience: when opening links from your notes, they launch in a separate browser profile labeled as &#8216;Profile 1&#8217;. This profile is distinct from your default browser profile, complete with its own set &#8230; <a href="https://deuts.net/2024/06/why-you-should-avoid-installing-obsidian-via-snap-on-ubuntu/" class="more-link">Continue reading <span class="screen-reader-text">Why You Should Avoid Installing Obsidian via Snap on Ubuntu</span></a>]]></description>
										<content:encoded><![CDATA[<p>If you&#8217;re an Ubuntu user and have installed Obsidian, the popular note-taking app, using the Snap package, you might have encountered an unexpected inconvenience: when opening links from your notes, they launch in a separate browser profile labeled as &#8216;Profile 1&#8217;. This profile is distinct from your default browser profile, complete with its own set of cookies, bookmarks, and extensions.</p>
<p>This behavior can be frustrating, especially if you&#8217;re used to seamlessly integrating your browsing experience with your notes. Here’s why this happens and what you can do about it:</p>
<p><img decoding="async" src="https://deuts.net/wp-content/uploads/2024/06/obsidian-1024x574.png" alt="" width="1024" height="574" class="alignnone size-large wp-image-9435" srcset="https://deuts.net/wp-content/uploads/2024/06/obsidian-1024x574.png 1024w, https://deuts.net/wp-content/uploads/2024/06/obsidian-640x359.png 640w, https://deuts.net/wp-content/uploads/2024/06/obsidian-320x179.png 320w, https://deuts.net/wp-content/uploads/2024/06/obsidian-768x431.png 768w, https://deuts.net/wp-content/uploads/2024/06/obsidian.png 1400w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p><strong>Understanding the Issue: Snap Package Peculiarities</strong></p>
<p>Snap packages are known for their sandboxing approach, which aims to enhance security by isolating applications and their dependencies from the rest of the system. While this isolation can be beneficial for security reasons, it also means that applications installed via Snap may behave differently compared to their counterparts installed via other methods like Flatpak or .deb packages.</p>
<p>One notable difference is how Snap handles application interactions with the system, such as opening external links. In the case of Obsidian installed via Snap, opening links from within your notes triggers the opening of your default browser in a separate profile. This &#8216;Profile 1&#8217; is independent of the profile you typically use for your browsing activities, resulting in a disjointed user experience.<span id="more-9434"></span></p>
<p><strong>Why You Should Consider Alternatives: Flatpak or .deb</strong></p>
<p>To avoid the inconvenience caused by Snap&#8217;s behavior with Obsidian, consider installing the application using alternative methods like Flatpak or downloading the .deb package directly from Obsidian&#8217;s official website. Here’s why these alternatives may be preferable:</p>
<ol>
<li><strong>Consistent User Experience</strong>: Flatpak and .deb packages generally integrate more seamlessly with the Ubuntu desktop environment, preserving your existing browser settings and profiles. When you open links from Obsidian notes, they will launch in your default browser, maintaining your familiar browsing environment.</li>
<li><strong>Ease of Installation</strong>: Installing via Flatpak or .deb is straightforward and ensures that Obsidian behaves predictably within your Ubuntu setup. You won&#8217;t encounter the profile switching issue that Snap packages may introduce.</li>
<li><strong>Community Support and Updates</strong>: While Snap packages are officially supported by Canonical (the company behind Ubuntu), Flatpak and .deb packages also receive robust community support and timely updates from Obsidian developers. This ensures you have access to the latest features and fixes without compromising on usability.</li>
</ol>
<p><strong>Conclusion</strong></p>
<p>While Snap packages offer a convenient way to install applications on Ubuntu, the specific behavior of Obsidian with Snap—opening links in a separate browser profile—can disrupt your workflow. For a smoother and more integrated experience, opting for Flatpak or .deb installation methods is recommended. These alternatives ensure that Obsidian functions seamlessly with your preferred browser settings, avoiding the inconvenience of profile conflicts.</p>
<p>Next time you install Obsidian on your Ubuntu system, consider choosing Flatpak or .deb over Snap to enjoy a cohesive note-taking and browsing experience without unnecessary complications. Your productivity and user satisfaction will thank you for it!</p>
<p>Have you encountered similar issues with Snap packages or found better alternatives for installing applications on Ubuntu? Share your experiences and tips in the comments below!</p>
]]></content:encoded>
					
					<wfw:commentRss>https://deuts.net/2024/06/why-you-should-avoid-installing-obsidian-via-snap-on-ubuntu/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>House of the Dragon Season 1 Recap: Everything You Need to Know Before Season 2</title>
		<link>https://deuts.net/2024/06/house-of-the-dragon-season-1-recap-everything-you-need-to-know-before-season-2/</link>
					<comments>https://deuts.net/2024/06/house-of-the-dragon-season-1-recap-everything-you-need-to-know-before-season-2/#respond</comments>
		
		<dc:creator><![CDATA[deuts]]></dc:creator>
		<pubDate>Thu, 13 Jun 2024 10:50:36 +0000</pubDate>
				<category><![CDATA[Entertainment]]></category>
		<category><![CDATA[Alicent Hightower]]></category>
		<category><![CDATA[Daemon Targaryen]]></category>
		<category><![CDATA[Dance of the Dragons]]></category>
		<category><![CDATA[Dragon battles]]></category>
		<category><![CDATA[Fantasy TV series]]></category>
		<category><![CDATA[Fire and Blood]]></category>
		<category><![CDATA[Game of Thrones]]></category>
		<category><![CDATA[George R.R. Martin]]></category>
		<category><![CDATA[HBO series]]></category>
		<category><![CDATA[House of the Dragon]]></category>
		<category><![CDATA[House of the Dragon recap]]></category>
		<category><![CDATA[House of the Dragon Season 1]]></category>
		<category><![CDATA[House of the Dragon summary]]></category>
		<category><![CDATA[Iron Throne]]></category>
		<category><![CDATA[Medieval drama]]></category>
		<category><![CDATA[Rhaenyra Targaryen]]></category>
		<category><![CDATA[Season 2 preview]]></category>
		<category><![CDATA[Targaryen history]]></category>
		<category><![CDATA[TV series review]]></category>
		<category><![CDATA[Westeros]]></category>
		<guid isPermaLink="false">https://deuts.net/?p=9410</guid>

					<description><![CDATA[Introduction As we eagerly anticipate the release of &#8220;House of the Dragon&#8221; Season 2, it&#8217;s essential to revisit the intricate and dramatic events of Season 1. The series, a prequel to the acclaimed &#8220;Game of Thrones,&#8221; plunges us into the tumultuous history of House Targaryen, nearly 200 years before the rise of Daenerys Targaryen. Season &#8230; <a href="https://deuts.net/2024/06/house-of-the-dragon-season-1-recap-everything-you-need-to-know-before-season-2/" class="more-link">Continue reading <span class="screen-reader-text">House of the Dragon Season 1 Recap: Everything You Need to Know Before Season 2</span></a>]]></description>
										<content:encoded><![CDATA[<h3><img loading="lazy" decoding="async" src="https://deuts.net/wp-content/uploads/2024/06/house-of-the-dragon.jpg" alt="" width="780" height="438" class="alignnone size-full wp-image-9411" srcset="https://deuts.net/wp-content/uploads/2024/06/house-of-the-dragon.jpg 780w, https://deuts.net/wp-content/uploads/2024/06/house-of-the-dragon-640x359.jpg 640w, https://deuts.net/wp-content/uploads/2024/06/house-of-the-dragon-320x180.jpg 320w, https://deuts.net/wp-content/uploads/2024/06/house-of-the-dragon-768x431.jpg 768w" sizes="auto, (max-width: 780px) 100vw, 780px" /></h3>
<h3></h3>
<h3>Introduction</h3>
<p>As we eagerly anticipate the release of &#8220;House of the Dragon&#8221; Season 2, it&#8217;s essential to revisit the intricate and dramatic events of Season 1. The series, a prequel to the acclaimed &#8220;Game of Thrones,&#8221; plunges us into the tumultuous history of House Targaryen, nearly 200 years before the rise of Daenerys Targaryen. Season 1 masterfully sets the stage for the epic civil war known as the Dance of the Dragons, a conflict that threatens to tear the Targaryen dynasty apart. Through political intrigue, personal betrayals, and spectacular dragon battles, the first season captivates and prepares us for the storm that is about to unfold.<span id="more-9410"></span></p>
<h3>Episode 1: &#8220;The Heirs of the Dragon&#8221;</h3>
<p>The series opens with King Viserys I Targaryen sitting on the Iron Throne. He faces the challenge of naming an heir, as his wife, Queen Aemma, is pregnant. However, both Aemma and their newborn son die during childbirth. This tragedy leaves Viserys with no direct male heir. Amidst this turmoil, the king&#8217;s brother, Prince Daemon Targaryen, behaves recklessly. Ultimately, Viserys makes the controversial decision to name his daughter, Princess Rhaenyra, as his heir, despite the precedent of male succession.</p>
<h3>Episode 2: &#8220;The Rogue Prince&#8221;</h3>
<p>Daemon seizes control of Dragonstone, escalating tensions within the kingdom. Rhaenyra begins to navigate her role as heir, asserting her presence and leadership. Meanwhile, Viserys is pressured to remarry to secure the line of succession. He shocks the court by choosing Lady Alicent Hightower, Rhaenyra&#8217;s close friend, over a more politically advantageous match. This decision strains relationships within the court and sets the stage for future conflicts.</p>
<h3>Episode 3: &#8220;Second of His Name&#8221;</h3>
<p>Three years later, Viserys and Alicent&#8217;s son, Prince Aegon, celebrates his second birthday, intensifying the succession debate. Meanwhile, the Stepstones conflict rages on, with Daemon and Lord Corlys Velaryon struggling against the Triarchy. Rhaenyra feels increasingly sidelined as the focus shifts to her half-brother, Aegon. Daemon takes matters into his own hands, launching a daring and brutal attack that leads to a significant victory, solidifying his reputation as a formidable warrior.</p>
<h3>Episode 4: &#8220;King of the Narrow Sea&#8221;</h3>
<p>Daemon returns to King&#8217;s Landing, proclaiming himself the &#8220;King of the Narrow Sea&#8221; after his victories. His relationship with Rhaenyra becomes more complicated as he introduces her to the city&#8217;s more unsavory elements. Their night out leads to scandal, as rumors of impropriety spread. To mitigate the fallout, Viserys hastily arranges Rhaenyra&#8217;s betrothal to Ser Laenor Velaryon. Tensions continue to rise as old alliances are tested and new ones are formed.</p>
<h3>Episode 5: &#8220;We Light the Way&#8221;</h3>
<p>Preparations for Rhaenyra and Laenor&#8217;s wedding bring various factions to King&#8217;s Landing. The celebration is marred by violence when Ser Criston Cole, a knight who has formed a close bond with Rhaenyra, kills Laenor&#8217;s lover, Ser Joffrey Lonmouth, in a fit of rage. This incident heightens the already simmering tensions and casts a shadow over the marriage. Alicent begins to assert her influence more openly, setting the stage for future power struggles.</p>
<h3>Episode 6: &#8220;The Princess and the Queen&#8221;</h3>
<p>A significant time jump reveals Rhaenyra and Laenor have had children, though rumors persist about their true parentage. Alicent and Rhaenyra&#8217;s rivalry deepens as their respective factions vie for influence. The growing tension between the two women is mirrored by the escalating conflict over the succession. The seeds of civil war, known as the Dance of the Dragons, are sown as the kingdom begins to fracture along these fault lines.</p>
<h3>Episode 7: &#8220;Driftmark&#8221;</h3>
<p>The death of Laena Velaryon brings the families together at Driftmark, leading to confrontations and alliances. A violent clash ensues when Alicent&#8217;s son, Aemond, claims the dragon Vhagar, leading to a fight with Rhaenyra&#8217;s sons that results in Aemond losing an eye. The conflict between the families intensifies, with both sides accusing the other of treachery. Viserys struggles to maintain peace, but the divisions run deep.</p>
<h3>Episode 8: &#8220;The Lord of the Tides&#8221;</h3>
<p>Viserys&#8217;s health continues to decline, and the question of succession becomes more urgent. The Velaryons seek to secure their position by proposing marriages between their children and Rhaenyra&#8217;s. Alicent&#8217;s faction, however, maneuvers to place Aegon in a more favorable position. The political intrigue reaches new heights as both sides prepare for the inevitable clash over the Iron Throne.</p>
<h3>Episode 9: &#8220;The Green Council&#8221;</h3>
<p>Upon King Viserys&#8217;s death, Alicent and her father, Otto Hightower, swiftly move to place Aegon on the throne, circumventing Rhaenyra&#8217;s claim. This power grab, known as the Green Council, sets the stage for open conflict. Rhaenyra, unaware of her father&#8217;s death, is vulnerable, and her supporters scramble to consolidate their positions. The kingdom teeters on the brink of civil war as the rival factions prepare for battle.</p>
<h3>Episode 10: &#8220;The Black Queen&#8221;</h3>
<p>Rhaenyra learns of her father&#8217;s death and Alicent&#8217;s betrayal. Enraged and determined to claim her birthright, she declares herself queen and begins rallying her supporters. Daemon and Rhaenyra gather their forces, securing key alliances with the Velaryons and other powerful houses. The first major battle of the civil war erupts, marking the beginning of the Dance of the Dragons. The season ends with a sense of foreboding, as the realm braces for the bloody conflict ahead.</p>
<h3>Final Thoughts</h3>
<p>Season 1 of &#8220;House of the Dragon&#8221; not only reintroduces us to the grandeur and complexity of George R.R. Martin&#8217;s world but also lays a compelling foundation for the conflicts to come. The detailed character arcs and escalating tensions between key players like Rhaenyra Targaryen, Alicent Hightower, and Daemon Targaryen hint at the epic scale of the battles ahead. As alliances shift and rivalries deepen, the stakes are higher than ever for the Iron Throne. With Season 2 on the horizon, fans can expect even more dramatic twists, fierce power struggles, and breathtaking moments as the Dance of the Dragons truly begins. Prepare for a season that promises to be as thrilling and unpredictable as its predecessor.</p>
<hr />
<p>HBO Max subscribers and Plex users alike can start streaming &#8220;House of the Dragon&#8221; Season 2 on June 16, 2024, at 9 p.m. ET, which is June 17, 2024, at 9 a.m. PHT for viewers in the Philippines. Each episode will be released weekly, with the season consisting of eight episodes in total.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://deuts.net/2024/06/house-of-the-dragon-season-1-recap-everything-you-need-to-know-before-season-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
