<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>FreeToolNet</title><description>Hands-on notes on AI tools, n8n automation and self-hosting, with real configs, errors and fixes.</description><link>https://freetoolnet.site/</link><item><title>Why ipconfig /flushdns didn&apos;t fix it: stale DNS after moving a domain</title><link>https://freetoolnet.site/posts/flushdns-did-not-fix-stale-dns-after-moving-a-domain/</link><guid isPermaLink="true">https://freetoolnet.site/posts/flushdns-did-not-fix-stale-dns-after-moving-a-domain/</guid><description>After pointing a domain at a new server, one machine kept loading the old site even after flushing DNS. The stale record was in the ISP&apos;s resolver, not on the machine. Here is how to prove that in three commands.</description><pubDate>Sat, 14 Nov 2026 03:30:00 GMT</pubDate></item><item><title>Subdomains returned NXDOMAIN after I moved DNS to Cloudflare</title><link>https://freetoolnet.site/posts/subdomains-nxdomain-after-moving-dns-to-cloudflare/</link><guid isPermaLink="true">https://freetoolnet.site/posts/subdomains-nxdomain-after-moving-dns-to-cloudflare/</guid><description>After switching nameservers to Cloudflare, 16 of my self-hosted subdomains stopped resolving. The apps were fine. The A records had not been carried over.</description><pubDate>Fri, 13 Nov 2026 19:30:00 GMT</pubDate></item><item><title>Moving a domain apex from Vercel to a VPS with nginx and certbot</title><link>https://freetoolnet.site/posts/move-domain-apex-from-vercel-to-vps-nginx-certbot-noindex-mirror/</link><guid isPermaLink="true">https://freetoolnet.site/posts/move-domain-apex-from-vercel-to-vps-nginx-certbot-noindex-mirror/</guid><description>How I moved my apex domain from Vercel to a self-hosted Next.js container: rebuild as indexable, add an nginx vhost, change one A record, run certbot, keep a noindex mirror.</description><pubDate>Thu, 12 Nov 2026 03:30:00 GMT</pubDate></item><item><title>Building a Next.js Docker image on a low-memory VPS with temporary swap</title><link>https://freetoolnet.site/posts/build-nextjs-docker-image-on-low-memory-vps-with-temporary-swap/</link><guid isPermaLink="true">https://freetoolnet.site/posts/build-nextjs-docker-image-on-low-memory-vps-with-temporary-swap/</guid><description>My VPS had about 2.4 GB of free RAM and no swap. I added a 4 GB swapfile for the Next.js build, removed it afterwards, and later moved the build off the server.</description><pubDate>Wed, 11 Nov 2026 03:30:00 GMT</pubDate></item><item><title>Deploy a Docker site to a VPS with GitHub Actions, GHCR and SSH</title><link>https://freetoolnet.site/posts/github-actions-ghcr-ssh-deploy-docker-site-to-vps/</link><guid isPermaLink="true">https://freetoolnet.site/posts/github-actions-ghcr-ssh-deploy-docker-site-to-vps/</guid><description>The workflow I use to build an image on GitHub, push it to GHCR and restart the container on my VPS over SSH, with the two things that made the first runs fail.</description><pubDate>Tue, 10 Nov 2026 03:30:00 GMT</pubDate></item><item><title>Running a GPU-first Gradio app CPU-only on a 2 vCPU VPS</title><link>https://freetoolnet.site/posts/running-a-gpu-first-gradio-app-cpu-only-on-a-small-vps/</link><guid isPermaLink="true">https://freetoolnet.site/posts/running-a-gpu-first-gradio-app-cpu-only-on-a-small-vps/</guid><description>An open-source Gradio app defaulted to CUDA and NVENC. I packaged it for a VPS with no GPU: CPU torch wheels, a baked-in model, a login and a memory cap.</description><pubDate>Tue, 10 Nov 2026 03:30:00 GMT</pubDate></item><item><title>A single-user notes app on FastAPI with files in an S3 bucket</title><link>https://freetoolnet.site/posts/single-user-notes-app-fastapi-files-in-s3-bucket/</link><guid isPermaLink="true">https://freetoolnet.site/posts/single-user-notes-app-fastapi-files-in-s3-bucket/</guid><description>How I built a private notes app: FastAPI, SQLite for text, a self-hosted S3 bucket for files, and a storage key that can only touch that one bucket.</description><pubDate>Mon, 09 Nov 2026 03:30:00 GMT</pubDate></item><item><title>RustFS console behind nginx: broken login and 429 errors, fixed</title><link>https://freetoolnet.site/posts/rustfs-console-behind-nginx-login-redirect-and-429-fix/</link><guid isPermaLink="true">https://freetoolnet.site/posts/rustfs-console-behind-nginx-login-redirect-and-429-fix/</guid><description>A root redirect in nginx broke sign-in to the RustFS console, and a blanket rate limit returned 429s right after login. Two nginx map blocks fixed both.</description><pubDate>Sun, 08 Nov 2026 03:30:00 GMT</pubDate></item><item><title>Replacing MinIO with RustFS for self-hosted S3 on a small VPS</title><link>https://freetoolnet.site/posts/replacing-minio-with-rustfs-self-hosted-s3-on-a-vps/</link><guid isPermaLink="true">https://freetoolnet.site/posts/replacing-minio-with-rustfs-self-hosted-s3-on-a-vps/</guid><description>I needed S3-compatible storage next to n8n on one VPS and did not want to install MinIO. RustFS in one container, behind nginx, uses about 60–90 MB of RAM.</description><pubDate>Sat, 07 Nov 2026 03:30:00 GMT</pubDate></item><item><title>One n8n error workflow that emails me when any workflow fails</title><link>https://freetoolnet.site/posts/n8n-error-workflow-email-alerts-with-gmail-api/</link><guid isPermaLink="true">https://freetoolnet.site/posts/n8n-error-workflow-email-alerts-with-gmail-api/</guid><description>A four-node n8n error workflow that sends failure emails through the Gmail API, plus the patterns I use so failures clean up after themselves and carry a useful message.</description><pubDate>Fri, 06 Nov 2026 03:30:00 GMT</pubDate></item><item><title>n8n form submitted by script: values are null, use field-0 keys</title><link>https://freetoolnet.site/posts/n8n-form-trigger-post-fields-are-null-use-field-0-keys/</link><guid isPermaLink="true">https://freetoolnet.site/posts/n8n-form-trigger-post-fields-are-null-use-field-0-keys/</guid><description>I posted to an n8n hosted form from a script and every value arrived as null. The form expects multipart keys field-0, field-1, not the labels. The reply is also not the final result.</description><pubDate>Thu, 05 Nov 2026 03:30:00 GMT</pubDate></item><item><title>n8n 2.x &quot;Unrecognized node type&quot; for Execute Command: use a sidecar</title><link>https://freetoolnet.site/posts/n8n-unrecognized-node-type-execute-command-use-a-sidecar/</link><guid isPermaLink="true">https://freetoolnet.site/posts/n8n-unrecognized-node-type-execute-command-use-a-sidecar/</guid><description>n8n 2.x excludes the Execute Command node by default, so my workflow would not activate. I left it disabled and moved the shell work into a small HTTP sidecar on a private Docker network.</description><pubDate>Wed, 04 Nov 2026 03:30:00 GMT</pubDate></item><item><title>Generate n8n workflows from a Python script and deploy by API</title><link>https://freetoolnet.site/posts/generate-n8n-workflows-from-python-and-deploy-with-the-api/</link><guid isPermaLink="true">https://freetoolnet.site/posts/generate-n8n-workflows-from-python-and-deploy-with-the-api/</guid><description>I build seven n8n workflows from one Python file and push them with the n8n public API. Here are the helpers, the deploy calls, and the expression bug that cost me the most time.</description><pubDate>Tue, 03 Nov 2026 03:30:00 GMT</pubDate></item><item><title>Watch Playwright tests run live on a VPS with noVNC and nginx</title><link>https://freetoolnet.site/posts/watch-playwright-tests-live-novnc-docker-nginx-auth-request/</link><guid isPermaLink="true">https://freetoolnet.site/posts/watch-playwright-tests-live-novnc-docker-nginx-auth-request/</guid><description>How I run headed Playwright tests on a headless server and watch the real browser in a web page: Xvfb, x11vnc and noVNC in one container, locked behind nginx auth_request.</description><pubDate>Mon, 02 Nov 2026 03:30:00 GMT</pubDate></item><item><title>Sandboxing an AI agent web app in Docker behind nginx basic auth</title><link>https://freetoolnet.site/posts/sandbox-ai-agent-web-app-docker-nginx-basic-auth/</link><guid isPermaLink="true">https://freetoolnet.site/posts/sandbox-ai-agent-web-app-docker-nginx-basic-auth/</guid><description>The Docker flags, mounts and resource caps I use to run an AI agent app with shell access on a shared 2 vCPU VPS, plus the localhost-bind problem that needed a one-line patch.</description><pubDate>Sun, 01 Nov 2026 03:30:00 GMT</pubDate></item><item><title>Android emulator with KVM on GitHub Actions: workflow and a caching trap</title><link>https://freetoolnet.site/posts/android-emulator-kvm-github-actions-instrumented-tests/</link><guid isPermaLink="true">https://freetoolnet.site/posts/android-emulator-kvm-github-actions-instrumented-tests/</guid><description>A working GitHub Actions workflow that boots a hardware-accelerated Android emulator and runs instrumented tests in about three minutes, and why AVD snapshot caching made it worse.</description><pubDate>Sat, 31 Oct 2026 03:30:00 GMT</pubDate></item><item><title>Self-host a Search Console MCP server behind an nginx bearer token</title><link>https://freetoolnet.site/posts/self-host-search-console-mcp-server-nginx-bearer-token/</link><guid isPermaLink="true">https://freetoolnet.site/posts/self-host-search-console-mcp-server-nginx-bearer-token/</guid><description>I put the open-source mcp-gsc server on a VPS in a locked-down container, gated it with an nginx bearer token, and hit a map hash error that broke nginx for every site.</description><pubDate>Fri, 30 Oct 2026 03:30:00 GMT</pubDate></item></channel></rss>