<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Privacy on Aquasp's blog</title><link>https://aquasp.blog/tag/privacy/</link><description>Recent content in Privacy on Aquasp's blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Tue, 23 Dec 2025 20:23:05 +0000</lastBuildDate><atom:link href="https://aquasp.blog/tag/privacy/index.xml" rel="self" type="application/rss+xml"/><item><title>Ditch the Official App: Use Your Mi Band Privately with Open-Source Alternatives</title><link>https://aquasp.blog/ditch-the-official-app-use-your-mi-band-privately-with-open-source-alternatives/</link><pubDate>Tue, 23 Dec 2025 20:23:05 +0000</pubDate><guid>https://aquasp.blog/ditch-the-official-app-use-your-mi-band-privately-with-open-source-alternatives/</guid><description>&lt;p&gt;If you love wearing a wearable device like a Mi Band but want to protect your privacy (like me), there&amp;rsquo;s a great way to do it!&lt;/p&gt;&#10;&lt;h2 id="check-device-compatibility-first"&gt;Check Device Compatibility First&#10;&lt;/h2&gt;&lt;p&gt;The first step is to verify if your device is supported. Xiaomi and Huawei devices generally have the best compatibility. I recommend checking two popular alternatives:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;GadgetBridge&lt;/strong&gt;: Fully open-source and highly privacy-focused. It works reliably, though the UI isn&amp;rsquo;t the most modern or beautiful.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Notify for Mi Band&lt;/strong&gt;: Offers a much nicer, more polished UI (in my opinion), but it&amp;rsquo;s not open-source and the Pro version (ad-free) costs about $3.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Privacy-wise, both options are far superior to the official Xiaomi app—no constant data sharing with servers.&lt;/p&gt;&#10;&lt;p&gt;It&amp;rsquo;s almost ironic that Chinese-brand devices end up providing better privacy options than many Western brands when paired with these alternatives. This is likely just a side effect of their popularity and competitive pricing.&lt;/p&gt;&#10;&lt;h2 id="extract-the-authentication-token"&gt;Extract the Authentication Token&#10;&lt;/h2&gt;&lt;p&gt;Unfortunately, you&amp;rsquo;ll need the official app temporarily. Download the &lt;strong&gt;Xiaomi Mi Fitness&lt;/strong&gt; app, pair your band, create a Xiaomi account, and update the firmware to the latest version*.&lt;/p&gt;&#10;&lt;p&gt;Once that&amp;rsquo;s done, you need to extract the authentication (auth) token from Xiaomi. The easiest method right now is using the &lt;strong&gt;Notify for Mi Band&lt;/strong&gt; app.&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Download Notify for Mi Band from the Google Play Store (there are two versions, ensure that you are downloading the correct one for your device)&lt;/li&gt;&#10;&lt;li&gt;Start the setup process in the app.&lt;/li&gt;&#10;&lt;li&gt;You&amp;rsquo;ll see two options for getting the token: &lt;strong&gt;Offline&lt;/strong&gt; and &lt;strong&gt;Online&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;The offline method requires exporting logs from the official Mi Fitness app and extracting the token from them. I tried this several times, but it never worked for me—I couldn&amp;rsquo;t even find the relevant logs manually.&lt;/p&gt;&#10;&lt;p&gt;So, I strongly recommend the &lt;strong&gt;online method&lt;/strong&gt;:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Log in with your Xiaomi account email and password.&lt;/li&gt;&#10;&lt;li&gt;Xiaomi will send a verification code to your email.&lt;/li&gt;&#10;&lt;li&gt;Enter the code, and the app will automatically retrieve the token for you.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="final-steps-switch-over-and-uninstall-the-official-app"&gt;Final Steps: Switch Over and Uninstall the Official App&#10;&lt;/h2&gt;&lt;p&gt;After getting the token:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Enter it in Notify for Mi Band (or GadgetBridge, if you&amp;rsquo;re using that).&lt;/li&gt;&#10;&lt;li&gt;Grant all necessary permissions.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Uninstall the official Mi Fitness app immediately&lt;/strong&gt;.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;The band can only connect and sync with one app at a time. Keeping the official app installed will cause connection issues or prevent proper syncing with your chosen alternative.&lt;/p&gt;&#10;&lt;p&gt;Now you&amp;rsquo;re all set! Customize notifications, enable/disable features as you like, find your phone or band, install free watchfaces, and track steps, calories, and heart rate—all in a clean, beautiful UI with no privacy compromises.&lt;/p&gt;&#10;&lt;p&gt;One minor issue I&amp;rsquo;ve noticed: sleep tracking is not syncing properly. I&amp;rsquo;m not sure if this is specific to the Mi Band 10, a firmware quirk, or a setting I changed. The data still shows correctly on the band itself, so it&amp;rsquo;s just a sync problem. Personally, I don&amp;rsquo;t mind—I mainly use my Mi Band for a convenient clock, flashlight,quick heart rate checks during workouts and changing music on a bluetooth speaker.&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;At least for the Mi Band 10, the latest firmware (as of Dec 2025) hasn&amp;rsquo;t broken compatibility with Notify for Mi Band.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;</description></item><item><title>How to Self Host your own Piped Instance</title><link>https://aquasp.blog/how-to-self-host-your-own-piped-instance/</link><pubDate>Mon, 08 Dec 2025 23:58:10 +0000</pubDate><guid>https://aquasp.blog/how-to-self-host-your-own-piped-instance/</guid><description>&lt;h2 id="introduction"&gt;Introduction&#10;&lt;/h2&gt;&lt;p&gt;Piped is a privacy-first, open-source alternative YouTube front-end. No Google tracking, no ads (even on videos that normally have unskippable ones), and it works perfectly with SponsorBlock and dearrow.&lt;/p&gt;&#10;&lt;p&gt;Self-hosting your own instance is incredibly easy with Docker and takes less than 20 minutes.&lt;/p&gt;&#10;&lt;h2 id="requirements"&gt;Requirements&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;A domain (or subdomain)&lt;/li&gt;&#10;&lt;li&gt;A cheap KVM VPS with Docker support (avoid OpenVZ — old kernel)&lt;/li&gt;&#10;&lt;li&gt;~$3–6/month is more than enough (1 CPU, 1–2 GB RAM)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Great cheap providers in 2025:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;RackNerd&lt;/li&gt;&#10;&lt;li&gt;Hostinger (my affiliate if you want to support &lt;a class="link" href="https://hostinger.com.br/?REFERRALCODE=waterdownfall&amp;amp;ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://hostinger.com.br?REFERRALCODE=waterdownfall&lt;/a&gt;)&lt;/li&gt;&#10;&lt;li&gt;Cloudcone, Hetzner Cloud, BuyVM, etc.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="step-1-secure--prepare-your-vps"&gt;Step 1: Secure &amp;amp; Prepare Your VPS&#10;&lt;/h2&gt;&lt;p&gt;(SSH keys only, firewall, etc. — do this first!)&lt;/p&gt;&#10;&lt;p&gt;Then install Docker (Ubuntu/Debian example):&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt update &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt install -y ca-certificates curl gnupg lsb-release&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Add Docker repo&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo mkdir -p /etc/apt/keyrings&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#34;deb [arch=&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;dpkg --print-architecture&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;&lt;span style="color:#e6db74"&gt; signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu &lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;lsb_release -cs&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;&lt;span style="color:#e6db74"&gt; stable&amp;#34;&lt;/span&gt; &amp;gt; /etc/apt/sources.list.d/docker.list&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt update&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="step-2-deploy-piped-with-the-official-docker-setup"&gt;Step 2: Deploy Piped with the Official Docker Setup&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;cd /opt&#10;git clone https://github.com/TeamPiped/Piped-Docker&#10;cd Piped-Docker&#10;./configure-instance.sh&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;During the script:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Choose &lt;strong&gt;Caddy&lt;/strong&gt; as reverse proxy (easiest + automatic SSL)&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;Enter your domain and subdomains:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Frontend → piped.yourdomain.com&lt;/li&gt;&#10;&lt;li&gt;Backend API → pipedapi.yourdomain.com&lt;/li&gt;&#10;&lt;li&gt;Proxy → pipedproxy.yourdomain.com&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="step-3-point-dns-to-your-vps"&gt;Step 3: Point DNS to Your VPS&#10;&lt;/h2&gt;&lt;p&gt;Create three A records at your DNS provider:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;piped.yourdomain.com → VPS_IP&#10;pipedapi.yourdomain.com → VPS_IP&#10;pipedproxy.yourdomain.com → VPS_IP&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="step-4-launch-everything"&gt;Step 4: Launch Everything&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;docker compose up -d&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That’s it!&#10;After DNS propagates (usually &amp;lt; 10 minutes), your private YouTube will be live at:&lt;/p&gt;&#10;&lt;p&gt;&lt;a class="link" href="https://piped.yourdomain.com/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://piped.yourdomain.com&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Caddy automatically handles free Let’s Encrypt SSL — no manual certbot needed.&lt;/p&gt;&#10;&lt;h2 id="step-5-optional-check-logs"&gt;Step 5: (Optional) Check Logs&#10;&lt;/h2&gt;&lt;p&gt;Bash&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;# See what Caddy is doing&#10;docker logs -f caddy&#10;&#10;# Or any other container&#10;docker logs -f piped-frontend&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="bonus-tips"&gt;Bonus Tips&#10;&lt;/h2&gt;&lt;ul&gt;&#10;&lt;li&gt;Want to make it public? Just share the URL — anyone can use your instance.&lt;/li&gt;&#10;&lt;li&gt;Want it private? Block it with Cloudflare firewall rules or basic auth in Caddy.&lt;/li&gt;&#10;&lt;li&gt;Pair it with the &lt;strong&gt;LibreTube&lt;/strong&gt; (Android) app for the full de-Googled experience.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;You now have your own ad-free, tracking-free, SponsorBlock-enabled YouTube — fully under your control.&lt;/p&gt;&#10;&lt;p&gt;Thanks for reading!&lt;/p&gt;&#10;</description></item><item><title>How to setup your own email server</title><link>https://aquasp.blog/how-to-setup-your-own-email-server/</link><pubDate>Mon, 08 Dec 2025 23:35:02 +0000</pubDate><guid>https://aquasp.blog/how-to-setup-your-own-email-server/</guid><description>&lt;h2 id="introduction"&gt;Introduction&#10;&lt;/h2&gt;&lt;p&gt;Want your own ultra-private email like &lt;a class="link" href="" &gt;name@yourdomain.com&lt;/a&gt; with a beautiful webmail interface?&#10;This guide walks you through setting up a full mail server in under an hour using Luke Smith’s legendary &lt;strong&gt;EmailWiz&lt;/strong&gt; script + &lt;strong&gt;Roundcube&lt;/strong&gt; webmail — all on a $2–3/month VPS.&lt;/p&gt;&#10;&lt;p&gt;Everything is free, open-source, and 100% under your control.&lt;/p&gt;&#10;&lt;h2 id="step-0-grab-a-cheap-vps"&gt;Step 0: Grab a Cheap VPS&#10;&lt;/h2&gt;&lt;p&gt;Good providers with frequent sales:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Contabo&lt;/li&gt;&#10;&lt;li&gt;LowEndTalk “Offers” section&lt;/li&gt;&#10;&lt;li&gt;Hostinger (my affiliate if you want to support me -&amp;gt; &lt;a class="link" href="https://hostinger.com.br/?REFERRALCODE=waterdownfall&amp;amp;ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://hostinger.com.br?REFERRALCODE=waterdownfall&lt;/a&gt;)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Requirements:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Any location (USA works fine)&lt;/li&gt;&#10;&lt;li&gt;Debian 10 or 11 (we’ll use Debian 10 in this guide)&lt;/li&gt;&#10;&lt;li&gt;At least 1 GB RAM (2 GB+ recommended)&lt;/li&gt;&#10;&lt;li&gt;Set hostname during signup to your domain (e.g., sobremail.com)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Wait for deployment → grab root password from email → SSH in.&lt;/p&gt;&#10;&lt;h2 id="step-1-basic-vps-hardening"&gt;Step 1: Basic VPS Hardening&#10;&lt;/h2&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ssh root@your-vps-ip&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt update &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; apt upgrade -y&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Change root password:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;passwd&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Create and upload an SSH key (do this from your local machine):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;ssh-copy-id root@your-vps-ip&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Now disable password login:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;nano /etc/ssh/sshd_config&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Change:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;PasswordAuthentication no&#10;UsePAM no&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;systemctl restart sshd&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Only your SSH key works now — much safer.&lt;/p&gt;&#10;&lt;h2 id="step-2-install-emailwiz-the-magic-script"&gt;Step 2: Install EmailWiz (the magic script)&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;apt install curl nginx python3-certbot-nginx -y&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Point these DNS records to your VPS IP:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;yourdomain.com → VPS IP (A record)&lt;/li&gt;&#10;&lt;li&gt;mail.yourdomain.com → VPS IP (A record)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Run Luke’s script:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;curl -LO lukesmith.xyz/emailwiz.sh&#10;sh emailwiz.sh&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Follow the prompts:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Say Yes/Y to everything&lt;/li&gt;&#10;&lt;li&gt;When asked for “System mail name” → enter ONLY yourdomain.com (NOT mail.yourdomain.com!)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Wait ~5–10 minutes. When it finishes, it gives you three DNS records to add:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;DKIM TXT record (mail._domainkey.yourdomain.com)&lt;/li&gt;&#10;&lt;li&gt;DMARC TXT record (_dmarc.yourdomain.com)&lt;/li&gt;&#10;&lt;li&gt;SPF TXT record (root domain)&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Add them at your DNS provider (Cloudflare, Namecheap, etc.).&lt;/p&gt;&#10;&lt;h2 id="step-3-set-up-reverse-dns-critical-for-deliverability"&gt;Step 3: Set Up Reverse DNS (Critical for Deliverability!)&#10;&lt;/h2&gt;&lt;p&gt;In Cloudcone panel → Networking → rDNS → set to yourdomain.com&#10;&lt;strong&gt;Do NOT enable IPv6&lt;/strong&gt; (Cloudcone doesn’t support IPv6 rDNS yet — it will hurt deliverability).&lt;/p&gt;&#10;&lt;h2 id="step-4-create-your-first-mailbox"&gt;Step 4: Create Your First Mailbox&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;useradd -G mail -m yourusername&#10;passwd yourusername&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Your email is now: &lt;a class="link" href="mailto:yourusername@yourdomain.com" &gt;yourusername@yourdomain.com&lt;/a&gt;&lt;/p&gt;&#10;&lt;p&gt;Test in Thunderbird/IMAP client:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;IMAP: mail.yourdomain.com (port 993, SSL/TLS)&lt;/li&gt;&#10;&lt;li&gt;SMTP: mail.yourdomain.com (port 465, SSL/TLS)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="step-5-install-roundcube-webmail"&gt;Step 5: Install Roundcube Webmail&#10;&lt;/h2&gt;&lt;p&gt;Add backports + PHP 8.x repo:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;apt install -y lsb-release ca-certificates apt-transport-https software-properties-common gnupg2&#10;echo &amp;#34;deb https://packages.sury.org/php/ $(lsb_release -sc) main&amp;#34; | tee /etc/apt/sources.list.d/sury-php.list&#10;wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add -&#10;apt update&#10;apt install -y php8.0-fpm php8.0-common php8.0-gd php8.0-imap php8.0-mysql php8.0-curl php8.0-zip php8.0-xml php8.0-mbstring php8.0-intl mariadb-server&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Secure MySQL:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;mysql_secure_installation&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Create Roundcube database:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;mysql -u root -p&#10;CREATE DATABASE roundcube;&#10;CREATE USER &amp;#39;roundcubeuser&amp;#39;@&amp;#39;localhost&amp;#39; IDENTIFIED BY &amp;#39;strongpassword&amp;#39;;&#10;GRANT ALL ON roundcube.* TO &amp;#39;roundcubeuser&amp;#39;@&amp;#39;localhost&amp;#39;;&#10;FLUSH PRIVILEGES;&#10;EXIT;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Download &amp;amp; extract Roundcube (latest complete version):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;cd /var/www&#10;wget https://github.com/roundcube/roundcubemail/releases/download/1.6.9/roundcubemail-1.6.9-complete.tar.gz&#10;tar xvf roundcubemail-1.6.9-complete.tar.gz&#10;mv roundcubemail-1.6.9 roundcube&#10;rm roundcubemail-1.6.9-complete.tar.gz&#10;chown -R www-data:www-data /var/www/roundcube/temp /var/www/roundcube/logs&#10;mysql roundcube &amp;lt; /var/www/roundcube/SQL/mysql.initial.sql&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Nginx config for Roundcube (/etc/nginx/sites-enabled/roundcube):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;server {&#10; listen 80;&#10; listen [::]:80;&#10; server_name yourdomain.com;&#10; root /var/www/roundcube;&#10; index index.php;&#10;&#10; location / {&#10; try_files $uri $uri/ /index.php;&#10; }&#10;&#10; location ~ \.php$ {&#10; include fastcgi_params;&#10; fastcgi_pass unix:/run/php/php8.0-fpm.sock;&#10; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;&#10; }&#10;&#10; location ~* \.(jpg|jpeg|gif|png|webp|svg|woff|woff2|ttf|css|js|ico|xml)$ {&#10; expires 360d;&#10; access_log off;&#10; }&#10;}&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Test &amp;amp; reload Nginx, then get SSL:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;nginx -t &amp;amp;&amp;amp; systemctl reload nginx&#10;certbot --nginx -d yourdomain.com&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Visit &lt;a class="link" href="https://yourdomain.com/installer" target="_blank" rel="noopener"&#10; &gt;https://yourdomain.com/installer&lt;/a&gt; → follow the wizard:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Database: roundcube, user roundcubeuser, password you set&lt;/li&gt;&#10;&lt;li&gt;IMAP host: localhost&lt;/li&gt;&#10;&lt;li&gt;SMTP host: localhost&lt;/li&gt;&#10;&lt;li&gt;Default host: mail.yourdomain.com&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Enable all plugins &lt;strong&gt;except Enigma&lt;/strong&gt; (it breaks identities in older versions).&lt;/p&gt;&#10;&lt;p&gt;After finishing, delete the installer:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;rm -rf /var/www/roundcube/installer&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="step-6-quality-of-life-tweaks"&gt;Step 6: Quality-of-Life Tweaks&#10;&lt;/h2&gt;&lt;p&gt;Edit /var/www/roundcube/config/config.inc.php:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;// Login with just username (no need to type @domain.com)&#10;$config[&amp;#39;username_domain&amp;#39;] = &amp;#39;yourdomain.com&amp;#39;;&#10;&#10;// Stay logged in for 6 months&#10;$config[&amp;#39;session_lifetime&amp;#39;] = 259200;&#10;&#10;// Disable Enigma if you enabled it&#10;// Remove &amp;#39;enigma&amp;#39; from $config[&amp;#39;plugins&amp;#39;] array&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Increase attachment size:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;nano /etc/php/8.0/fpm/php.ini&#10;&lt;/code&gt;&lt;/pre&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;upload_max_filesize = 50M&#10;post_max_size = 50M&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Then:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;systemctl restart php8.0-fpm&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="step-7-brute-force-protection-with-fail2ban"&gt;Step 7: Brute-Force Protection with Fail2Ban&#10;&lt;/h2&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;apt install fail2ban -y&#10;cd /var/www/roundcube/plugins&#10;wget https://github.com/texxasrulez/roundcube_fail2ban/archive/refs/tags/1.4.zip&#10;unzip 1.4.zip&#10;mv roundcube_fail2ban-1.4 fail2ban&#10;rm 1.4.zip&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Enable in Roundcube config (config.inc.php):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;$config[&amp;#39;plugins&amp;#39;][] = &amp;#39;fail2ban&amp;#39;;&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Add jail (/etc/fail2ban/jail.local – create if missing):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;[roundcube]&#10;enabled = true&#10;port = http,https&#10;filter = roundcube&#10;action = iptables-multiport[name=roundcube, port=&amp;#34;http,https&amp;#34;]&#10;logpath = /var/www/roundcube/logs/errors.log&#10;maxretry = 5&#10;bantime = 3600&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Create filter (/etc/fail2ban/filter.d/roundcube.conf):&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;[Definition]&#10;failregex = IMAP Error: Login failed for .* from &amp;lt;HOST&amp;gt;&#10;ignoreregex =&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Restart:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;systemctl restart fail2ban php8.0-fpm&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Done! Your webmail is now protected.&lt;/p&gt;&#10;&lt;h2 id="final-result"&gt;Final Result&#10;&lt;/h2&gt;&lt;p&gt;You now have:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Full email server with DKIM, SPF, DMARC&lt;/li&gt;&#10;&lt;li&gt;Beautiful, fast Roundcube webmail&lt;/li&gt;&#10;&lt;li&gt;Zero Google/Microsoft involvement&lt;/li&gt;&#10;&lt;li&gt;Login once every 6 months&lt;/li&gt;&#10;&lt;li&gt;Brute-force protection&lt;/li&gt;&#10;&lt;li&gt;All for ~$50/year&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Welcome to real email freedom.&lt;/p&gt;&#10;&lt;p&gt;Thanks for reading! 😊&lt;/p&gt;&#10;</description></item><item><title>How to use AI privately at Brave browser (2 methods)</title><link>https://aquasp.blog/how-to-use-ai-privately-at-brave-browser-2-methods/</link><pubDate>Mon, 08 Dec 2025 23:15:59 +0000</pubDate><guid>https://aquasp.blog/how-to-use-ai-privately-at-brave-browser-2-methods/</guid><description>&lt;hr&gt;&#10;&lt;h2 id="introduction"&gt;Introduction&#10;&lt;/h2&gt;&lt;p&gt;Brave Browser 1.69 introduced a game-changing feature: you can now connect &lt;strong&gt;Leo&lt;/strong&gt; (Brave’s built-in AI assistant) to &lt;strong&gt;any&lt;/strong&gt; model you want — including fully local models or third-party APIs.&#10;This means you get an always-available AI sidebar with zero subscription and total control over privacy and cost.&lt;/p&gt;&#10;&lt;p&gt;Here are the two best methods I’ve tested (one ultra-private, one smarter but cloud-based).&lt;/p&gt;&#10;&lt;h2 id="method-1--maximum-privacy-run-a-local-model-with-ollama-no-gpu-needed"&gt;Method 1 – Maximum Privacy: Run a Local Model with Ollama (No GPU Needed)&#10;&lt;/h2&gt;&lt;p&gt;You can run a surprisingly capable model completely offline, even on very modest hardware.&#10;The current sweet spot is &lt;strong&gt;Google’s Gemma 2 2B&lt;/strong&gt; — it’s tiny (~1.4 GB), runs great on CPU, and works perfectly even with just 4–6 GB of RAM free.&lt;/p&gt;&#10;&lt;h3 id="step-1-install-ollama"&gt;Step 1: Install Ollama&#10;&lt;/h3&gt;&lt;p&gt;Download and install Ollama from the official site: &lt;a class="link" href="https://ollama.com/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://ollama.com&lt;/a&gt;&#10;(It has native packages for Windows, macOS, and Linux.)&lt;/p&gt;&#10;&lt;h3 id="step-2-download-gemma-2-2b"&gt;Step 2: Download Gemma 2 2B&#10;&lt;/h3&gt;&lt;p&gt;Open a terminal and run:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ollama pull gemma2:2b&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;(If you use Docker: docker exec -it ollama ollama pull gemma2:2b)&lt;/p&gt;&#10;&lt;h3 id="step-3-verify-its-running"&gt;Step 3: Verify it’s running&#10;&lt;/h3&gt;&lt;p&gt;Open &lt;a class="link" href="http://localhost:11434/?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;http://localhost:11434&lt;/a&gt; in your browser.&#10;You should see “Ollama is running” — that’s all you need.&lt;/p&gt;&#10;&lt;h3 id="step-4-add-the-model-to-brave-leo"&gt;Step 4: Add the model to Brave Leo&#10;&lt;/h3&gt;&lt;ol&gt;&#10;&lt;li&gt;Open Brave → Settings → Leo&lt;/li&gt;&#10;&lt;li&gt;Click &lt;strong&gt;Add new model&lt;/strong&gt;&lt;/li&gt;&#10;&lt;li&gt;Fill in the details exactly like this:&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Label&lt;/strong&gt; → anything you want (e.g., “Gemma 2 2B Local”)&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Model Request Name&lt;/strong&gt; → gemma2:2b&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Server Endpoint&lt;/strong&gt; → http://localhost:11434/v1/chat/completions&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;API Key&lt;/strong&gt; → leave empty&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;(Optional but recommended) Set this model as your &lt;strong&gt;default&lt;/strong&gt; for new chats.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Done! You now have a fully private, offline AI inside Brave that uses almost no resources.&lt;/p&gt;&#10;&lt;h2 id="method-2--smarter-answers-cloud-use-cryptotalksai-pay-as-you-go-no-subscription"&gt;Method 2 – Smarter Answers (Cloud): Use CryptoTalks.ai (Pay-as-you-go, No Subscription)&#10;&lt;/h2&gt;&lt;p&gt;If you want access to the absolute best models (GPT-4o, Claude 3.5 Sonnet, Gemini 1.5 Flash, Llama 3.1 405B, etc.) without creating accounts at OpenAI/Anthropic/Google, CryptoTalks.ai is currently the best option.&#10;You pay only for what you use and can fund the account with Bitcoin or Lightning.&lt;/p&gt;&#10;&lt;h3 id="step-1-create-an-account--get-your-token"&gt;Step 1: Create an account &amp;amp; get your token&#10;&lt;/h3&gt;&lt;p&gt;Go to &lt;a class="link" href="https://cryptotalks.ai/signup?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://cryptotalks.ai/signup&lt;/a&gt; → sign up → copy your API token (keep it safe!).&lt;/p&gt;&#10;&lt;h3 id="step-2-add-a-tiny-amount-of-credit"&gt;Step 2: Add a tiny amount of credit&#10;&lt;/h3&gt;&lt;p&gt;Deposit any amount via Bitcoin or Lightning. Even $1–2 lasts a very long time for personal use.&lt;/p&gt;&#10;&lt;h3 id="step-3-add-the-models-to-brave-leo"&gt;Step 3: Add the model(s) to Brave Leo&#10;&lt;/h3&gt;&lt;p&gt;Same process as before, just different values:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Label&lt;/strong&gt; → e.g., “Claude 3.5 Sonnet”, “GPT-4o”, etc.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Model Request Name&lt;/strong&gt; → exact model ID from their docs, examples:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;openai/chatgpt-4o-latest&lt;/li&gt;&#10;&lt;li&gt;anthropic/claude-3.5-sonnet&lt;/li&gt;&#10;&lt;li&gt;google/gemini-flash-1.5&lt;/li&gt;&#10;&lt;li&gt;meta-llama/llama-3.1-405b-instruct&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Server Endpoint&lt;/strong&gt; → &lt;a class="link" href="https://cryptotalks.ai/v1/chat/completions/" target="_blank" rel="noopener"&#10; &gt;https://cryptotalks.ai/v1/chat/completions/&lt;/a&gt;&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;API Key&lt;/strong&gt; → paste your token&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;You can add as many models as you want and switch between them instantly in the Leo sidebar.&lt;/p&gt;&#10;&lt;p&gt;Pro tip: Check current model rankings at &lt;a class="link" href="https://artificialanalysis.ai/models?ref=aquasp.blog" target="_blank" rel="noopener"&#10; &gt;https://artificialanalysis.ai/models&lt;/a&gt; to pick the best one for your needs.&lt;/p&gt;&#10;&lt;h2 id="real-world-use"&gt;Real-World Use&#10;&lt;/h2&gt;&lt;p&gt;With Leo + your own model you can:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Summarize long articles or YouTube videos in one click&lt;/li&gt;&#10;&lt;li&gt;Explain complex code snippets&lt;/li&gt;&#10;&lt;li&gt;Draft emails or messages&lt;/li&gt;&#10;&lt;li&gt;Translate on the fly&lt;/li&gt;&#10;&lt;li&gt;All without ever leaving the browser and without sending data to big tech&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;When I’m on battery and want zero extra power draw → I switch to the local Gemma 2 2B.&#10;When I need maximum intelligence → I switch to Claude 3.5 Sonnet or GPT-4o via CryptoTalks.&lt;/p&gt;&#10;&lt;h2 id="conclusion"&gt;Conclusion&#10;&lt;/h2&gt;&lt;p&gt;Brave just turned every browser into a private, customizable AI workstation.&#10;Pick Method 1 for 100% privacy and zero cost, or Method 2 when you want the absolute best answers available today.&lt;/p&gt;&#10;&lt;p&gt;Either way — welcome to the future of browsing.&lt;/p&gt;&#10;&lt;p&gt;Thanks for reading! 😊&lt;/p&gt;&#10;</description></item></channel></rss>