<?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: Aryan Dani</title>
    <description>The latest articles on DEV Community by Aryan Dani (@aryan-dani).</description>
    <link>https://dev.to/aryan-dani</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%2F3252659%2Fc498d662-0ffb-4f02-82c0-2273f5793f8b.png</url>
      <title>DEV Community: Aryan Dani</title>
      <link>https://dev.to/aryan-dani</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/aryan-dani"/>
    <language>en</language>
    <item>
      <title>Spar with a Friend</title>
      <dc:creator>Aryan Dani</dc:creator>
      <pubDate>Mon, 05 Oct 2026 03:13:10 +0000</pubDate>
      <link>https://dev.to/aryan-dani/spar-with-a-friend-1834</link>
      <guid>https://dev.to/aryan-dani/spar-with-a-friend-1834</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-weekend-2026-10-01"&gt;Hacktoberfest Weekend Challenge: Build for a Friend&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Spar with a Friend&lt;/strong&gt; is a local practice partner for &lt;strong&gt;Sobaan&lt;/strong&gt;, my debate classmate.&lt;/p&gt;

&lt;p&gt;Sobaan knows the motion. He still locks up when a group discussion or a viva turns toward him. The words show up later, on the walk out of the room, which is the wrong time. A cloud chatbot makes that worse: every half-finished point leaves his laptop, and the reply is usually a tidy essay he cannot use while someone is waiting for him to speak.&lt;/p&gt;

&lt;p&gt;Spar is a rehearsal room on his own machine.&lt;/p&gt;

&lt;p&gt;He picks a campus topic (placements vs CGPA, mandatory attendance, a viva where he defends one design choice), chooses a tone (patient, firm, or rapid-fire) and a difficulty (beginner or intermediate), then walks Opening, Rebuttal, and Closing against an open-weight model. Before the round, a practice card gives him three moves for the freeze, including "My point is X because Y." After Closing, he gets a short report: what landed, three things to try next, and a note on filler words. Past rounds stay in a local SQLite file, so he can reread them with the wifi off.&lt;/p&gt;

&lt;p&gt;Success for him is small and specific: finish a ten-minute round and leave with feedback he would actually read between classes.&lt;/p&gt;

&lt;p&gt;This is built on &lt;a href="https://github.com/aryan-dani/debate-bot" rel="noopener noreferrer"&gt;DebateBot&lt;/a&gt;, which already had the debate shape (stages, Live Arena, scoring). The weekend change was to make the open model the thing that runs the product, and to aim that product at Sobaan.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;There is no hosted URL on purpose. The demo is a local round: no API key, and no internet after the model is pulled.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ollama pull llama3.2:3b
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env
&lt;span class="nb"&gt;cd &lt;/span&gt;backend
python &lt;span class="nt"&gt;-m&lt;/span&gt; venv venv
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt
python &lt;span class="nt"&gt;-m&lt;/span&gt; uvicorn main:app &lt;span class="nt"&gt;--reload&lt;/span&gt; &lt;span class="nt"&gt;--port&lt;/span&gt; 8000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;In a second terminal:&lt;br&gt;
&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;frontend
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Open &lt;a href="http://localhost:5173" rel="noopener noreferrer"&gt;http://localhost:5173&lt;/a&gt;. The navbar badge should say &lt;strong&gt;Local · Ollama&lt;/strong&gt;. &lt;strong&gt;Start friend practice&lt;/strong&gt;, pick a campus topic, and run Opening, Rebuttal, and Closing in Live Arena. &lt;strong&gt;Finish round &amp;amp; get report&lt;/strong&gt; writes a short coaching note and saves the round in local SQLite.&lt;/p&gt;

&lt;p&gt;If Ollama is not running, the setup screen shows an install checklist. It does not call Groq.&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/aryan-dani/debate-bot" rel="noopener noreferrer"&gt;https://github.com/aryan-dani/debate-bot&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/aryan-dani/debate-bot" rel="noopener noreferrer"&gt;https://github.com/aryan-dani/debate-bot&lt;/a&gt;&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/aryan-dani" rel="noopener noreferrer"&gt;
        aryan-dani
      &lt;/a&gt; / &lt;a href="https://github.com/aryan-dani/debate-bot" rel="noopener noreferrer"&gt;
        debate-bot
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;DebateBot → Spar with a Friend&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b8cadaa967891081f8f165695470689986c028821dd8a040132f6e661795dc0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/b8cadaa967891081f8f165695470689986c028821dd8a040132f6e661795dc0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c7565" alt="License"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/8820d9bf84e23754356b5b0fd887a8966f98510a9ba4fabb01907b7c6c4e03b4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e31322d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/8820d9bf84e23754356b5b0fd887a8966f98510a9ba4fabb01907b7c6c4e03b4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e31322d626c7565" alt="Python"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/c452f04049319e8034e9cafb933d98b9917de8dd345ad4c9d58ae5f4f3754cd4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f72656163742d31382d626c7565"&gt;&lt;img src="https://camo.githubusercontent.com/c452f04049319e8034e9cafb933d98b9917de8dd345ad4c9d58ae5f4f3754cd4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f72656163742d31382d626c7565" alt="React"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/783a4450d197f105e4f0068c1897027f2a44c79362fd576267bcfd0bfb14c2ec/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c4c4d2d4f6c6c616d612532306c6f63616c2d6379616e"&gt;&lt;img src="https://camo.githubusercontent.com/783a4450d197f105e4f0068c1897027f2a44c79362fd576267bcfd0bfb14c2ec/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c4c4d2d4f6c6c616d612532306c6f63616c2d6379616e" alt="Local"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;DebateBot&lt;/strong&gt; is the base project. The hackathon product is &lt;strong&gt;Spar with a Friend&lt;/strong&gt;: a local, open-weight practice partner so a friend can rehearse debates and GDs without sending speech to a cloud chat app.&lt;/p&gt;
&lt;p&gt;Open-source AI at the core:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open-weight model&lt;/strong&gt; via &lt;a href="https://ollama.com" rel="nofollow noopener noreferrer"&gt;Ollama&lt;/a&gt; (default &lt;code&gt;llama3.2:3b&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open agent harness&lt;/strong&gt; via &lt;a href="https://langchain-ai.github.io/langgraph/" rel="nofollow noopener noreferrer"&gt;LangGraph&lt;/a&gt; (Opening → Rebuttal → Closing + Live Arena)&lt;/li&gt;
&lt;li&gt;Optional Groq cloud fallback only — &lt;strong&gt;never required&lt;/strong&gt; to run the demo&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Friend story (fill before handoff)&lt;/h2&gt;
&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Name&lt;/td&gt;
&lt;td&gt;Sobaan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Relation&lt;/td&gt;
&lt;td&gt;debate classmate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Problem&lt;/td&gt;
&lt;td&gt;Freezes in group discussions; needs patient GD/viva practice&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Constraints&lt;/td&gt;
&lt;td&gt;Weak laptop, no paid APIs, no cloud transcripts&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Success&lt;/td&gt;
&lt;td&gt;Finish a 10-min practice round and get kind, specific feedback&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;p&gt;Friend profile lives in &lt;a href="https://github.com/aryan-dani/debate-bot/backend/coaching.py" rel="noopener noreferrer"&gt;&lt;code&gt;backend/coaching.py&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Key Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Friend Practice setup&lt;/strong&gt;: one screen for provider status, tone, difficulty, campus presets, practice card&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Arena&lt;/strong&gt;: user vs local AI through…&lt;/li&gt;
&lt;/ul&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/aryan-dani/debate-bot" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The pieces that matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;backend/llm_provider.py&lt;/code&gt; — Ollama by default, Groq only if you opt in&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;backend/graph.py&lt;/code&gt; — LangGraph nodes for the dual-AI debate, Live Arena counter, and end-of-round report&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;backend/coaching.py&lt;/code&gt; — Sobaan's profile, campus presets, tone, difficulty, practice card&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;backend/history.py&lt;/code&gt; — local SQLite sessions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;frontend/src/components/PracticeSetup.jsx&lt;/code&gt; — one-screen start&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;The open pieces are the runtime, not a sticker on a closed API.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open-weight model, local inference.&lt;/strong&gt; The default provider is Ollama with &lt;code&gt;llama3.2:3b&lt;/code&gt; (about 2 GB, so it fits an 8 GB laptop). &lt;code&gt;LLM_PROVIDER=ollama&lt;/code&gt; is the default in &lt;code&gt;.env.example&lt;/code&gt;. &lt;code&gt;GROQ_API_KEY&lt;/code&gt; is optional and unused in the demo. If Ollama is stopped, &lt;code&gt;/api/live-counter&lt;/code&gt; returns 503 with a checklist. It does not fall back to Groq.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open agent harness.&lt;/strong&gt; LangGraph still owns the flow. A full debate is a graph: proposition opening, opposition opening, both rebuttals, both closings. Live Arena is a counter node. The report is its own node. Prompts live in &lt;code&gt;graph.py&lt;/code&gt;. Coaching tone lives in &lt;code&gt;coaching.py&lt;/code&gt;, so the agent's behavior changes without rewriting the app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App around that core.&lt;/strong&gt; FastAPI exposes the graphs. React (Vite) is the practice screen, Live Arena, and scoring view. History is SQLite on disk. There is no analytics SDK. With Ollama selected, transcripts are not sent to a third-party chat API.&lt;/p&gt;

&lt;p&gt;Stack: Python, FastAPI, LangGraph, LangChain's Ollama chat client, React. Run it with &lt;code&gt;uvicorn&lt;/code&gt; and &lt;code&gt;npm run dev&lt;/code&gt;. No cloud host is required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;A closed chat app can generate a counterargument. It cannot do the thing Sobaan actually needs.&lt;/p&gt;

&lt;p&gt;He is shy about logging practice speech. A cloud model means the freeze, the filler words, and the half-finished point all leave the laptop. Local Ollama means the rehearsal stays on the machine. After &lt;code&gt;ollama pull&lt;/code&gt;, the round still works with the wifi off.&lt;/p&gt;

&lt;p&gt;He also does not have a budget for API tokens, and a debate-class laptop is not a 70B box. &lt;code&gt;llama3.2:3b&lt;/code&gt; is small enough to run and open enough to swap (&lt;code&gt;llama3.2:1b&lt;/code&gt; if RAM is tighter) without asking a vendor for permission.&lt;/p&gt;

&lt;p&gt;The coach itself had to be editable. Patient versus rapid-fire, beginner versus intermediate, and a practice card aimed at freezing are prompt and graph changes, not a fine-tune and not a closed assistant we cannot inspect. LangGraph keeps those stages as nodes we can read and change.&lt;/p&gt;

&lt;p&gt;Open innovation here is not a license badge. It is the difference between a private practice room and a chatbot that bills you and keeps the transcript.&lt;/p&gt;

&lt;h2&gt;
  
  
  What they said
&lt;/h2&gt;

&lt;p&gt;We prep in the same debate class. Sobaan knows the motion and still goes quiet once the discussion turns to him. He does not want those practice rounds sitting in a cloud chat. The useful version of feedback, for him, is short: what landed, what to try next, and whether the fillers took over. That is the report at the end of Closing.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;I built this in Cursor, turning an existing Groq-backed DebateBot into the local coach above. I don't have a DevRelay export for this session.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;Entering the main Weekend Challenge only. The project runs on local Ollama and LangGraph, not on a partner runtime, so I am not submitting for the partner prize categories.&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>weekendchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>I Built a 'Fourth Clover' for Writers: A Minimalist Next.js Blogging Platform 🍀</title>
      <dc:creator>Aryan Dani</dc:creator>
      <pubDate>Wed, 28 Jan 2026 01:48:40 +0000</pubDate>
      <link>https://dev.to/aryan-dani/i-built-a-fourth-clover-for-writers-a-minimalist-nextjs-blogging-platform-oja</link>
      <guid>https://dev.to/aryan-dani/i-built-a-fourth-clover-for-writers-a-minimalist-nextjs-blogging-platform-oja</guid>
      <description>&lt;h2&gt;
  
  
  The Noise of the Modern Web
&lt;/h2&gt;

&lt;p&gt;We live in a noisy digital world.&lt;/p&gt;

&lt;p&gt;Everywhere you go, there are pop-ups, cluttered sidebars, paywalls, and algorithmic distractions screaming for your attention. As a developer and a writer, I missed the days when the web was just &lt;strong&gt;content&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I wanted a place that felt rare. Special. Like finding a four-leaf clover in a field of three.&lt;/p&gt;

&lt;p&gt;So, I built &lt;strong&gt;&lt;a href="https://github.com/aryan-dani/The-Fourth-Clover" rel="noopener noreferrer"&gt;The Fourth Clover&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is The Fourth Clover?
&lt;/h2&gt;

&lt;p&gt;The Fourth Clover is a modern, minimalist blogging platform designed specifically for writers and thinkers who value clarity over clutter.&lt;/p&gt;

&lt;p&gt;It isn't just another CMS. It is a carefully crafted experience that focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Typography&lt;/strong&gt;: I used beautiful serif fonts (Charter &amp;amp; Playfair Display) so that reading feels like reading a book, not a screen.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Focus&lt;/strong&gt;: A distraction-free environment where the UI fades away, leaving just you and your words.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aesthetics&lt;/strong&gt;: A unique "circular" and monochrome design system that feels premium and calm.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And the best part? It is &lt;strong&gt;completely Open Source&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🛠️ The Tech Stack
&lt;/h2&gt;

&lt;p&gt;I didn't just want it to look good; I wanted it to be &lt;strong&gt;fast&lt;/strong&gt; and &lt;strong&gt;scalable&lt;/strong&gt;. Here is the powerhouse stack running under the hood:&lt;/p&gt;

&lt;h3&gt;
  
  
  Frontend: Next.js 13+ (App Router)
&lt;/h3&gt;

&lt;p&gt;I leveraged the latest &lt;strong&gt;Next.js App Router&lt;/strong&gt; for server-side rendering and optimal SEO. The app feels instant because almost everything that can be server-rendered, is server-rendered.&lt;/p&gt;

&lt;h3&gt;
  
  
  Styling: Tailwind CSS &amp;amp; shadcn/ui
&lt;/h3&gt;

&lt;p&gt;For the UI, I used &lt;strong&gt;Tailwind CSS&lt;/strong&gt; for handling the layout and custom design system. To ensure accessibility and functional interactive components (like dialogs and dropdowns), I integrated &lt;strong&gt;shadcn/ui&lt;/strong&gt; (built on Radix UI). This combination allowed me to move fast without breaking accessibility.&lt;/p&gt;

&lt;h3&gt;
  
  
  Backend: Supabase
&lt;/h3&gt;

&lt;p&gt;The entire backend is powered by &lt;strong&gt;Supabase&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Postgres Database&lt;/strong&gt;: For structured, relational data (Authors, Posts, Comments).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auth&lt;/strong&gt;: Seamless Google OAuth via Supabase Auth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Storage&lt;/strong&gt;: Image uploads and management.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  State Management: React Hook Form &amp;amp; Zod
&lt;/h3&gt;

&lt;p&gt;Forms are hard. For the complex post editor, I used &lt;strong&gt;React Hook Form&lt;/strong&gt; paired with &lt;strong&gt;Zod&lt;/strong&gt; for schema validation. This ensures that every post is validated before it ever hits the database.&lt;/p&gt;

&lt;h2&gt;
  
  
  🌟 Key Features
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. The Distraction-Free Editor
&lt;/h3&gt;

&lt;p&gt;The crown jewel of the project. I wanted an editor that gets out of your way.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Autosave&lt;/strong&gt;: Never lose your work. The editor saves to local draft every few seconds if changes are detected.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real-time Stats&lt;/strong&gt;: Word count and reading time update as you type.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scheduled Publishing&lt;/strong&gt;: You can write now and schedule the post to go live later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean Interface&lt;/strong&gt;: Just you and your words. Settings like tags and excerpts are tucked away until you need them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Social Features
&lt;/h3&gt;

&lt;p&gt;Writing is social. I recently completed "Phase 2," which introduces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Threaded Comments&lt;/strong&gt;: A Reddit-style nested comment system.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Likes &amp;amp; Reactions&lt;/strong&gt;: Real-time feedback on your posts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Profile Stats&lt;/strong&gt;: See how your posts are performing.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Performance First
&lt;/h3&gt;

&lt;p&gt;The site scores highly on Core Web Vitals. Images are optimized, fonts are loaded efficiently, and the database queries are fine-tuned with proper indexing.&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Get Involved
&lt;/h2&gt;

&lt;p&gt;This project is a labor of love, and it is just getting started. I have a roadmap filled with exciting features, and I would love for the community to be a part of it.&lt;/p&gt;

&lt;h3&gt;
  
  
  How you can help:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Star the Repository&lt;/strong&gt;: This helps us gain visibility and reach more developers.&lt;br&gt;
👉 &lt;strong&gt;&lt;a href="https://github.com/aryan-dani/The-Fourth-Clover" rel="noopener noreferrer"&gt;https://github.com/aryan-dani/The-Fourth-Clover&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Report Bugs&lt;/strong&gt;: Found something broken? Open an issue!&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Contribute&lt;/strong&gt;: Fork the repo, pick up a "good first issue," and open a PR. I review all PRs!&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Building &lt;strong&gt;The Fourth Clover&lt;/strong&gt; reminded me why I love web development. It’s the perfect intersection of &lt;strong&gt;engineering&lt;/strong&gt; and &lt;strong&gt;art&lt;/strong&gt;. Technology should empower us to express ourselves, not get in the way.&lt;/p&gt;

&lt;p&gt;If you are looking for a new project to study, a platform to write on, or a codebase to contribute to, I invite you to join us.&lt;/p&gt;

&lt;p&gt;Happy Coding! 🍀&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/aryan-dani/The-Fourth-Clover" rel="noopener noreferrer"&gt;https://github.com/aryan-dani/The-Fourth-Clover&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Live Demo&lt;/strong&gt;: &lt;a href="https://fourthclover.bio" rel="noopener noreferrer"&gt;https://fourthclover.bio&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>nextjs</category>
      <category>react</category>
      <category>opensource</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
