<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: mu mu</title>
    <description>The latest articles on DEV Community by mu mu (@mu_mu_a59cda279f381242dc5).</description>
    <link>https://dev.to/mu_mu_a59cda279f381242dc5</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4056135%2Fe66c3956-24c4-4918-b54b-95f482fda082.png</url>
      <title>DEV Community: mu mu</title>
      <link>https://dev.to/mu_mu_a59cda279f381242dc5</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mu_mu_a59cda279f381242dc5"/>
    <language>en</language>
    <item>
      <title>How I Built and Deployed an Anonymous Sanctuary Web App with $0 Cost</title>
      <dc:creator>mu mu</dc:creator>
      <pubDate>Wed, 19 Aug 2026 06:30:51 +0000</pubDate>
      <link>https://dev.to/mu_mu_a59cda279f381242dc5/how-i-built-and-deployed-an-anonymous-sanctuary-web-app-with-0-cost-64h</link>
      <guid>https://dev.to/mu_mu_a59cda279f381242dc5/how-i-built-and-deployed-an-anonymous-sanctuary-web-app-with-0-cost-64h</guid>
      <description>&lt;p&gt;Every developer loves side projects, but recurring infrastructure costs can quickly turn a fun experiment into a financial burden.&lt;/p&gt;

&lt;p&gt;When building Ask A Monk—a quiet, algorithm-free digital sanctuary—my goal was simple: create a modern, high-performance Web App with $0 monthly hosting and backend costs, while maintaining strict privacy and sub-second performance.&lt;/p&gt;

&lt;p&gt;Here is the exact $0 tech stack, free-tier setup, and architecture decisions I used to bring this project to life.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The $0 Tech Stack Breakdown
To achieve zero operational costs without sacrificing scalability, I combined several generous free-tier services:&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Provider / Technology&lt;/th&gt;
&lt;th&gt;Free Tier Limits / Usage&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Frontend Framework&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Next.js (App Router)&lt;/td&gt;
&lt;td&gt;Open-source, React Server Components&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Hosting &amp;amp; Edge CDN&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Vercel&lt;/td&gt;
&lt;td&gt;100GB Bandwidth, unlimited Serverless executions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Database &amp;amp; Auth&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Supabase (PostgreSQL)&lt;/td&gt;
&lt;td&gt;500MB Database, 50,000 monthly active users&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Styling&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Tailwind CSS&lt;/td&gt;
&lt;td&gt;Open-source, static purge during build&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;DNS &amp;amp; Security&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Cloudflare&lt;/td&gt;
&lt;td&gt;Free SSL, DDoS protection, edge caching&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;ol&gt;
&lt;li&gt;How to Stay Within Free Tier Limits
Optimized Database Usage (Supabase)
Database storage can fill up quickly if not managed carefully. To keep the PostgreSQL instance lightweight:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Strict Character Limits: Enforce input boundaries (e.g., max 6,000 characters) directly at the database level using PostgreSQL constraints.&lt;/p&gt;

&lt;p&gt;No Image / File Storage: Stick strictly to text payloads. By eliminating file uploads, storage footprint remains under a few megabytes even with thousands of entries.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="c1"&gt;-- Enforce text payload limits to preserve free storage&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;thoughts&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="n"&gt;UUID&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="n"&gt;gen_random_uuid&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="nb"&gt;TIMESTAMP&lt;/span&gt; &lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="nb"&gt;TIME&lt;/span&gt; &lt;span class="k"&gt;ZONE&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'utc'&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="k"&gt;CHECK&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;char_length&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;6000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bandwidth &amp;amp; Serverless Optimization (Vercel)&lt;br&gt;
To prevent hitting Vercel’s execution or bandwidth caps:&lt;/p&gt;

&lt;p&gt;Leverage Incremental Static Regeneration (ISR): Serve cached static pages to visitors instead of triggering serverless functions on every single page view.&lt;/p&gt;

&lt;p&gt;Zero Heavy Libraries: Avoid loading bloated analytics, tracking scripts, or massive UI frameworks. Keep the total page payload under 50KB Gzipped.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Result: Ask A Monk
By combining Next.js, Supabase, and Vercel, Ask A Monk runs completely free of charge while achieving exceptional performance:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Monthly Server Cost: $0.00&lt;/p&gt;

&lt;p&gt;Lighthouse Performance Score: 100 / 100&lt;/p&gt;

&lt;p&gt;Average Page Load Speed: &amp;lt; 300ms&lt;/p&gt;

&lt;p&gt;Instead of chasing user tracking or ad revenue to cover server bills, Ask A Monk exists purely as a quiet, distraction-free space for human reflection.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;br&gt;
You don't need a massive budget or complex cloud infrastructure to launch a meaningful web project. By choosing light frameworks and optimizing your database schemas, you can build and sustain side projects indefinitely for $0.&lt;/p&gt;

&lt;p&gt;Live Project: Experience the sub-second, minimal web application at askamonk.online.&lt;/p&gt;

&lt;p&gt;Discussion: What is your favorite $0 tech stack for side projects? Share your recommendations in the comments!&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>sideprojects</category>
      <category>webdev</category>
    </item>
    <item>
      <title>The Death of Quiet Web: How Social Media Algorithms Ruined Writing (And How to Fix It)</title>
      <dc:creator>mu mu</dc:creator>
      <pubDate>Wed, 19 Aug 2026 06:26:11 +0000</pubDate>
      <link>https://dev.to/mu_mu_a59cda279f381242dc5/the-death-of-quiet-web-how-social-media-algorithms-ruined-writing-and-how-to-fix-it-22mm</link>
      <guid>https://dev.to/mu_mu_a59cda279f381242dc5/the-death-of-quiet-web-how-social-media-algorithms-ruined-writing-and-how-to-fix-it-22mm</guid>
      <description>&lt;p&gt;We used to write to think. Now, we write to trigger algorithms.&lt;/p&gt;

&lt;p&gt;Over the past decade, the internet has transitioned from a space of quiet personal expression into a high-stakes attention economy. Platforms no longer encourage thoughtful reflection; instead, they optimize for instantaneous reactions, rage, and endless scrolling.&lt;/p&gt;

&lt;p&gt;As a result, many of us are experiencing severe algorithm fatigue and a decline in our ability to hold deep, uninterrupted thoughts.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Cost of the "Engagement-First" Web
Modern social media platforms rely on feedback loops designed to maximize screen time. This mechanism subtly rewrites how we express ourselves:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instant Validation vs. Deep Reflection: Likes, shares, and follower counts reward short-term emotional spikes over slow, considered writing.&lt;/p&gt;

&lt;p&gt;Algorithm-Driven Homogenization: Content creators write what the feed favors, leading to formulaic posts and sensational titles.&lt;/p&gt;

&lt;p&gt;Loss of Digital Sanctuaries: Without private or low-pressure digital spaces, writing becomes a public performance rather than a tool for personal clarity.&lt;/p&gt;

&lt;p&gt;This relentless pace is fueling widespread interest in Digital Wellbeing and the Slow Web movement—a demand for technology that respects human cognitive limits rather than exploiting them.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What Is the "Quiet Web"?
The Quiet Web (or Small Web) is an architectural and design philosophy aimed at building calm, intentional internet spaces.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Unlike mainstream social platforms, a quiet web application prioritizes:&lt;/p&gt;

&lt;p&gt;Asynchronous Communication: No urgency, no live notifications, and no expectation of instant replies.&lt;/p&gt;

&lt;p&gt;Zero Algorithmic Sorting: Content is presented chronologically or in static, peaceful formats without hidden recommendations.&lt;/p&gt;

&lt;p&gt;Privacy by Design: No tracking pixels, no user profiling, and no public vanity metrics (like follower counts or like counters).&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A Practical Alternative: Ask A Monk
To test whether the web can still serve as a peaceful space for human thought, I built Ask A Monk—an algorithm-free, minimalist digital sanctuary.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of building another feed designed to keep users hooked, Ask A Monk operates on a few strict boundaries:&lt;/p&gt;

&lt;p&gt;No Accounts or Profiles: Users can write anonymously without constructing a digital persona.&lt;/p&gt;

&lt;p&gt;No Social Metrics: There are no likes, shares, or public follower counts.&lt;/p&gt;

&lt;p&gt;Human-Centric Interaction: A simple, distraction-free environment dedicated solely to reflection and asynchronous writing.&lt;/p&gt;

&lt;p&gt;Conclusion: Reclaiming Our Attention&lt;br&gt;
The Internet does not have to be noisy to be useful. By choosing tools that respect our mental bandwidth, we can build a healthier, more sustainable relationship with technology.&lt;/p&gt;

&lt;p&gt;Explore the Project: If you need a break from algorithmic feeds, feel free to leave or read a quiet thought at askamonk.online.&lt;/p&gt;

&lt;p&gt;Discussion: How do you protect your attention and focus in an algorithm-dominated internet? Let's share ideas in the comments below.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Building a Lightweight Web App with Next.js &amp; Supabase: Zero-Tracking &amp; Sub-Second Loading</title>
      <dc:creator>mu mu</dc:creator>
      <pubDate>Wed, 19 Aug 2026 06:23:58 +0000</pubDate>
      <link>https://dev.to/mu_mu_a59cda279f381242dc5/building-a-lightweight-web-app-with-nextjs-supabase-zero-tracking-sub-second-loading-4062</link>
      <guid>https://dev.to/mu_mu_a59cda279f381242dc5/building-a-lightweight-web-app-with-nextjs-supabase-zero-tracking-sub-second-loading-4062</guid>
      <description>&lt;p&gt;In an era where web applications are bloated with multi-megabyte JavaScript bundles, aggressive analytics, and intrusive tracking scripts, building for the Small Web and IndieWeb feels like a breath of fresh air.&lt;/p&gt;

&lt;p&gt;If you are building a privacy-first side project or simply want your stack to load in under 300ms, combining Next.js (App Router) with Supabase is one of the most effective solutions.&lt;/p&gt;

&lt;p&gt;In this tutorial, we will break down how to design a zero-tracking, sub-second web architecture, using Ask A Monk—a quiet, algorithm-free digital sanctuary—as our real-world case study.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Core Architecture Philosophy
To achieve sub-second page loads and complete privacy, we adhere to three technical principles:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Zero External Tracking: No Google Analytics or heavy client-side SDKs.&lt;/p&gt;

&lt;p&gt;Minimal Client Bundle: Leverage React Server Components (RSC) to push execution to the edge.&lt;/p&gt;

&lt;p&gt;Anonymous Supabase Auth &amp;amp; RLS: Handle asynchronous user interactions securely without demanding personal data.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Optimizing Next.js App Router for Sub-Second Loads
Server Components First&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keep pages as React Server Components (RSC) by default. Only isolate interactive elements into small client modules using 'use client'.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;TypeScript&lt;/span&gt;
&lt;span class="c1"&gt;// app/page.tsx - Fully Server-Rendered&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;QuietThoughtFeed&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@/components/QuietThoughtFeed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;SubmitForm&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@/components/SubmitForm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;revalidate&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="c1"&gt;// Incremental Static Regeneration (ISR)&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="k"&gt;default&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;HomePage&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;main&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;max-w-xl mx-auto px-4 py-12&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;h1&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-2xl font-serif&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;Ask&lt;/span&gt; &lt;span class="nx"&gt;A&lt;/span&gt; &lt;span class="nx"&gt;Monk&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/h1&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt; &lt;span class="nx"&gt;className&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;text-neutral-400 mb-8&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="nx"&gt;An&lt;/span&gt; &lt;span class="nx"&gt;algorithm&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;free&lt;/span&gt; &lt;span class="nx"&gt;quiet&lt;/span&gt; &lt;span class="nx"&gt;space&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/p&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;
      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* Interactive Client Component */&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;SubmitForm&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;

      &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="cm"&gt;/* Server Rendered Feed */&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nx"&gt;QuietThoughtFeed&lt;/span&gt; &lt;span class="o"&gt;/&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="sr"&gt;/main&lt;/span&gt;&lt;span class="err"&gt;&amp;gt;
&lt;/span&gt;  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Payload Reduction&lt;/p&gt;

&lt;p&gt;Use &lt;a class="mentioned-user" href="https://dev.to/next"&gt;@next&lt;/a&gt;/font to self-host variable fonts.&lt;/p&gt;

&lt;p&gt;Rely on minimal Tailwind CSS with pre-purged unused utilities.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Privacy-First Supabase Architecture &amp;amp; RLS
Anonymous Database Schema&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Here is a simplified PostgreSQL schema with Row Level Security (RLS) for anonymous posts:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SQL&lt;/span&gt;
&lt;span class="c1"&gt;-- Create anonymous thoughts table&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;thoughts&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="n"&gt;UUID&lt;/span&gt; &lt;span class="k"&gt;PRIMARY&lt;/span&gt; &lt;span class="k"&gt;KEY&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="n"&gt;gen_random_uuid&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="n"&gt;created_at&lt;/span&gt; &lt;span class="nb"&gt;TIMESTAMP&lt;/span&gt; &lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="nb"&gt;TIME&lt;/span&gt; &lt;span class="k"&gt;ZONE&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'utc'&lt;/span&gt;&lt;span class="p"&gt;::&lt;/span&gt;&lt;span class="nb"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;now&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;content&lt;/span&gt; &lt;span class="nb"&gt;TEXT&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt; &lt;span class="k"&gt;CHECK&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;char_length&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;6000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;is_public&lt;/span&gt; &lt;span class="nb"&gt;BOOLEAN&lt;/span&gt; &lt;span class="k"&gt;DEFAULT&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt; &lt;span class="k"&gt;NOT&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- Enable Row Level Security&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;TABLE&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;thoughts&lt;/span&gt; &lt;span class="n"&gt;ENABLE&lt;/span&gt; &lt;span class="k"&gt;ROW&lt;/span&gt; &lt;span class="k"&gt;LEVEL&lt;/span&gt; &lt;span class="k"&gt;SECURITY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- Allow public read access&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;POLICY&lt;/span&gt; &lt;span class="nv"&gt;"Allow public read access"&lt;/span&gt; 
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;thoughts&lt;/span&gt; &lt;span class="k"&gt;FOR&lt;/span&gt; &lt;span class="k"&gt;SELECT&lt;/span&gt; 
&lt;span class="k"&gt;USING&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;is_public&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;-- Allow public insert&lt;/span&gt;
&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;POLICY&lt;/span&gt; &lt;span class="nv"&gt;"Allow public insert"&lt;/span&gt; 
&lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;public&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;thoughts&lt;/span&gt; &lt;span class="k"&gt;FOR&lt;/span&gt; &lt;span class="k"&gt;INSERT&lt;/span&gt; 
&lt;span class="k"&gt;WITH&lt;/span&gt; &lt;span class="k"&gt;CHECK&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Lightweight Supabase Client Setup&lt;/p&gt;

&lt;p&gt;Instantiate the Supabase client without session bloat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="nx"&gt;TypeScript&lt;/span&gt;
&lt;span class="c1"&gt;// lib/supabase.ts&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;createClient&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;@supabase/supabase-js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;supabaseUrl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NEXT_PUBLIC_SUPABASE_URL&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;supabaseAnonKey&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;process&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;env&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;NEXT_PUBLIC_SUPABASE_ANON_KEY&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;supabase&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;createClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;supabaseUrl&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;supabaseAnonKey&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="na"&gt;auth&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;persistSession&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="c1"&gt;// Disables local storage session bloat for anonymous visitors&lt;/span&gt;
  &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;});&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Real-World Case Study: Ask A Monk
We put these exact performance and privacy principles into practice with Ask A Monk.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;First Contentful Paint (FCP): &amp;lt; 0.3s&lt;/p&gt;

&lt;p&gt;Total Blocking Time (TBT): 0ms&lt;/p&gt;

&lt;p&gt;Lighthouse Score: 100 / 100 (Performance, Accessibility, Best Practices, SEO)&lt;/p&gt;

&lt;p&gt;Bundle Size: &amp;lt; 45KB Gzipped&lt;/p&gt;

&lt;p&gt;Instead of harvesting user metrics or building addictive feedback loops, Ask A Monk provides a distraction-free environment for human reflection, demonstrating that modern web dev doesn't need heavy trackers to be functional and meaningful.&lt;/p&gt;

&lt;p&gt;Conclusion&lt;br&gt;
Building fast, lightweight, and respectful web applications is not only good for SEO and performance—it restores trust between creators and visitors.&lt;/p&gt;

&lt;p&gt;Live Demo: Test the sub-second loading in action at askamonk.online.&lt;/p&gt;

&lt;p&gt;Tech Stack: Next.js, Tailwind CSS, Supabase, Vercel Edge Network.&lt;/p&gt;

&lt;p&gt;Are you building for the Small Web or IndieWeb? Share your favorite performance techniques below!&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>performance</category>
      <category>privacy</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why I Built a Zero-AI, Zero-Algorithm Q&amp;A Space for Distraction-Free Thoughts</title>
      <dc:creator>mu mu</dc:creator>
      <pubDate>Fri, 31 Jul 2026 07:08:19 +0000</pubDate>
      <link>https://dev.to/mu_mu_a59cda279f381242dc5/why-i-built-a-zero-ai-zero-algorithm-qa-space-for-distraction-free-thoughts-509l</link>
      <guid>https://dev.to/mu_mu_a59cda279f381242dc5/why-i-built-a-zero-ai-zero-algorithm-qa-space-for-distraction-free-thoughts-509l</guid>
      <description>&lt;p&gt;Have you ever opened social media, scrolled for 30 minutes, and closed it feeling even more drained than before?&lt;/p&gt;

&lt;p&gt;Between AI-generated slop, rage-baiting algorithms, and endless ads, the internet often feels less like a space for connection and more like a loud, neon-lit casino.&lt;/p&gt;

&lt;p&gt;A few weeks ago, after feeling overwhelmed by digital noise, I decided to code a small, quiet, dark-themed Q&amp;amp;A corner for myself and fellow web users who miss the simpler web.&lt;/p&gt;

&lt;p&gt;It's called &lt;strong&gt;Ask A Monk&lt;/strong&gt;:&lt;/p&gt;

&lt;h2&gt;
  
  
  🔗 &lt;strong&gt;&lt;a href="https://askamonk.online" rel="noopener noreferrer"&gt;https://askamonk.online&lt;/a&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;🧘 What makes it different?&lt;/p&gt;

&lt;p&gt;Inspired by the quiet atmosphere of a monastery, I built Ask A Monk around three core principles:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Zero AI &amp;amp; Zero Algorithms&lt;/strong&gt;: Every question and response comes from a real human being. There are no recommendation engines pushing controversial content to keep you hooked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complete Anonymity&lt;/strong&gt;: No accounts, no sign-ups, and no social pressure for likes or upvotes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distraction-Free UX&lt;/strong&gt;: A minimalist dark UI with warm typography that is gentle on your eyes.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;🛠️ The Tech &amp;amp; Philosophy&lt;/p&gt;

&lt;p&gt;I wanted to build something that feels fast, light, and completely free of modern bloatware. The interface focuses strictly on readable content and seamless navigation.&lt;/p&gt;

&lt;p&gt;Whether you're looking for perspective on a personal dilemma or simply want to draw a quiet daily thought, it's a space meant for slowing down.&lt;/p&gt;

&lt;p&gt;Feel free to stop by, draw a quote, or leave a question:&lt;br&gt;
👉[&lt;a href="https://askamonk.online" rel="noopener noreferrer"&gt;Visit Ask A Monk&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;I'd genuinely love to hear your thoughts on the UI, UX, or the overall concept. How do you escape the noise on the modern web?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>javascript</category>
      <category>design</category>
    </item>
  </channel>
</rss>
