<?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: Shani Tiwari</title>
    <description>The latest articles on DEV Community by Shani Tiwari (@shanitiwari).</description>
    <link>https://dev.to/shanitiwari</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%2F3960905%2F98e8b878-f5a2-4efb-8213-7e636c0cbed3.png</url>
      <title>DEV Community: Shani Tiwari</title>
      <link>https://dev.to/shanitiwari</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shanitiwari"/>
    <language>en</language>
    <item>
      <title>Become pro dev fast with WebTree</title>
      <dc:creator>Shani Tiwari</dc:creator>
      <pubDate>Wed, 19 Aug 2026 14:01:00 +0000</pubDate>
      <link>https://dev.to/shanitiwari/become-pro-dev-fast-with-webtree-4jek</link>
      <guid>https://dev.to/shanitiwari/become-pro-dev-fast-with-webtree-4jek</guid>
      <description>&lt;p&gt;I added a new category to my developer resources website. 👀&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;“Be Pro”&lt;/strong&gt; 🚀&lt;a href="https://webtree.shaniweb.com" rel="noopener noreferrer"&gt;WebTree&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;/p&gt;

&lt;p&gt;You don't always need a 3-hour tutorial to improve your development skills.&lt;/p&gt;

&lt;p&gt;Sometimes, a &lt;strong&gt;10–20 minute problem&lt;/strong&gt; can teach you more because you're actually solving something.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I added 👇
&lt;/h3&gt;

&lt;p&gt;I collected some crazy little websites/tools** where you can practice:&lt;/p&gt;

&lt;p&gt;→ JavaScript&lt;br&gt;
→ React&lt;br&gt;
→ Other development concepts&lt;/p&gt;

&lt;p&gt;Each one gives you a small problem or challenge.&lt;/p&gt;

&lt;p&gt;You try it.&lt;/p&gt;

&lt;p&gt;You get stuck.&lt;/p&gt;

&lt;p&gt;You search.&lt;/p&gt;

&lt;p&gt;You experiment.&lt;/p&gt;

&lt;p&gt;And suddenly you understand something you wouldn't learn by just watching another tutorial. 😅&lt;/p&gt;

&lt;h3&gt;
  
  
  Why I like this approach
&lt;/h3&gt;

&lt;p&gt;We often say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I need to learn more JavaScript.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But instead of consuming more content, try solving &lt;strong&gt;one small problem today.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;10–20 minutes.&lt;br&gt;
One problem.&lt;br&gt;
One new concept understood.&lt;/p&gt;

&lt;p&gt;Do that consistently and your skills compound. 📈&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.tourl"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  I added these under &lt;strong&gt;Be Pro&lt;/strong&gt; on my developer resources website.
&lt;/h3&gt;

&lt;p&gt;Go pick one challenge and try it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't just learn the tech.&lt;br&gt;
Make the tech fight back a little. 😄&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Because getting stuck on a small problem is often where the real learning starts.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Ai in Docs - Saviour of Dev's</title>
      <dc:creator>Shani Tiwari</dc:creator>
      <pubDate>Sun, 16 Aug 2026 05:54:00 +0000</pubDate>
      <link>https://dev.to/shanitiwari/ai-in-docs-saviour-of-devs-409k</link>
      <guid>https://dev.to/shanitiwari/ai-in-docs-saviour-of-devs-409k</guid>
      <description>&lt;h3&gt;
  
  
  AI in docs changed how I learned to build a SaaS. 🤯
&lt;/h3&gt;

&lt;p&gt;I recently built a SaaS using:&lt;/p&gt;

&lt;p&gt;→ Next.js&lt;br&gt;
→ Clerk + custom auth flow&lt;br&gt;
→ PostgreSQL / Neon DB&lt;br&gt;
→ Drizzle ORM&lt;/p&gt;

&lt;p&gt;The interesting part?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I didn't actually know PostgreSQL or SQL queries properly.&lt;/strong&gt; 😅&lt;/p&gt;

&lt;p&gt;And still, I was able to build the flow I needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  What made it easier?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;AI inside documentation.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Normally, the problem is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I know what I want to do… but I don't even know what this feature is called.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So searching docs becomes difficult.&lt;/p&gt;

&lt;p&gt;With AI, I can explain the context:&lt;/p&gt;

&lt;p&gt;“I'm getting this data, I need to connect it with this table, and then return it like this…”&lt;/p&gt;

&lt;p&gt;And AI can help me find:&lt;/p&gt;

&lt;p&gt;→ the right method&lt;br&gt;
→ the right property&lt;br&gt;
→ the right docs page&lt;br&gt;
→ the right way to structure it&lt;/p&gt;

&lt;p&gt;That saved me from spending hours trying to guess the &lt;strong&gt;correct technical keyword&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I learned from this 👇
&lt;/h3&gt;

&lt;p&gt;I don't think developers need to memorize every technology.&lt;/p&gt;

&lt;p&gt;What matters more is understanding the &lt;strong&gt;flow&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Requirement → Data → Logic → Connection → Response&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How data is generated.&lt;br&gt;
How it moves.&lt;br&gt;
What connects to what.&lt;br&gt;
What should happen next.&lt;/p&gt;

&lt;p&gt;Once you understand that, learning the actual technology becomes much easier.&lt;/p&gt;

&lt;h3&gt;
  
  
  So my approach now 🚀
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Understand what I want to build.&lt;/li&gt;
&lt;li&gt;Break the requirement into a simple flow.&lt;/li&gt;
&lt;li&gt;Explain the problem with context.&lt;/li&gt;
&lt;li&gt;Use AI + official docs to find the correct implementation.&lt;/li&gt;
&lt;li&gt;Build it.&lt;/li&gt;
&lt;li&gt;Understand what the code actually did.&lt;/li&gt;
&lt;li&gt;Repeat.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That's how you can &lt;strong&gt;build real projects while learning the technology at the same time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One important nuance though:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AI can help you find the path, but you still need to understand the road you're driving on.&lt;/strong&gt; 😄&lt;/p&gt;

&lt;p&gt;Using AI isn't replacing learning.&lt;/p&gt;

&lt;p&gt;It's making the learning loop much faster.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>learning</category>
      <category>productivity</category>
      <category>saas</category>
    </item>
    <item>
      <title>JSX - 0 to Hero</title>
      <dc:creator>Shani Tiwari</dc:creator>
      <pubDate>Sat, 15 Aug 2026 05:32:00 +0000</pubDate>
      <link>https://dev.to/shanitiwari/jsx-0-to-hero-439h</link>
      <guid>https://dev.to/shanitiwari/jsx-0-to-hero-439h</guid>
      <description>&lt;p&gt;key takeaways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Definition: &lt;em&gt;JSX&lt;/em&gt; stands for &lt;em&gt;JavaScript XML&lt;/em&gt;. It is a syntax extension that allows you to write &lt;em&gt;HTML&lt;/em&gt;-like code directly within &lt;em&gt;JavaScript&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Role of XML: The "XML" in &lt;em&gt;JSX&lt;/em&gt; refers to the ability to define custom tags, providing the flexibility to create reusable UI components.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Purpose: It was introduced to solve the problem of separating UI logic from markup, which was common in older template-based libraries. It keeps rendering logic and UI logic in the same place.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Readability: &lt;em&gt;JSX&lt;/em&gt; serves as a visual aid, making the code more readable and intuitive to write compared to using pure &lt;em&gt;JavaScript&lt;/em&gt; functions like &lt;code&gt;React.createElement&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;JavaScript Integration: You can embed any valid &lt;em&gt;JavaScript&lt;/em&gt; expression inside &lt;em&gt;JSX&lt;/em&gt; by wrapping it in curly braces.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Compilation: Browsers cannot read &lt;em&gt;JSX&lt;/em&gt; directly. Tools like &lt;em&gt;Babel&lt;/em&gt; act as a translator, converting &lt;em&gt;JSX&lt;/em&gt; into &lt;em&gt;JavaScript&lt;/em&gt; function calls that produce &lt;em&gt;React&lt;/em&gt; elements.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Single Parent Requirement: A &lt;em&gt;JSX&lt;/em&gt; expression must always return a single parent element. If you need to return multiple items without adding an extra node, you can use &lt;em&gt;React Fragments&lt;/em&gt; (empty tags).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Camel Case Attributes: Most &lt;em&gt;HTML&lt;/em&gt; attributes in &lt;em&gt;JSX&lt;/em&gt; must be written in camel case (e.g., &lt;code&gt;onClick&lt;/code&gt;), because &lt;em&gt;JSX&lt;/em&gt; is closer to &lt;em&gt;JavaScript&lt;/em&gt; than traditional &lt;em&gt;HTML&lt;/em&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Exceptions: Some attributes like &lt;code&gt;class&lt;/code&gt; become &lt;code&gt;className&lt;/code&gt;, and &lt;code&gt;for&lt;/code&gt; becomes &lt;code&gt;htmlFor&lt;/code&gt; to avoid conflicts with &lt;em&gt;JavaScript&lt;/em&gt; reserved keywords. &lt;em&gt;Aria&lt;/em&gt; and &lt;em&gt;data&lt;/em&gt; attributes remain unchanged.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Security:&lt;/strong&gt; &lt;em&gt;JSX&lt;/em&gt; helps prevent injection attacks by automatically escaping data, which prevents malicious code from being executed when rendering content.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;File Extensions:&lt;/strong&gt; Using a &lt;code&gt;.jsx&lt;/code&gt; extension is a hint to build tools like &lt;em&gt;Babel&lt;/em&gt; that the file contains &lt;em&gt;JSX&lt;/em&gt; code, but it is technically optional if your environment is configured correctly.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>beginners</category>
      <category>frontend</category>
      <category>javascript</category>
      <category>react</category>
    </item>
    <item>
      <title>🧑‍💻 5 Tools Every Beginner Developer Should Understand</title>
      <dc:creator>Shani Tiwari</dc:creator>
      <pubDate>Thu, 13 Aug 2026 10:12:00 +0000</pubDate>
      <link>https://dev.to/shanitiwari/5-tools-every-beginner-developer-should-understand-5aph</link>
      <guid>https://dev.to/shanitiwari/5-tools-every-beginner-developer-should-understand-5aph</guid>
      <description>&lt;h1&gt;
  
  
  🧑‍💻 5 Tools Every Beginner Developer Should Understand
&lt;/h1&gt;

&lt;p&gt;If you're starting to build real-world apps, you'll eventually hear terms like &lt;strong&gt;ORM, ODM, Webhooks, Clerk, Drizzle, LocalTunnel&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here's what they actually mean 👇&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Drizzle ORM 🗄️
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Drizzle&lt;/strong&gt; helps your JavaScript/TypeScript code communicate with a SQL database without writing raw SQL everywhere.&lt;/p&gt;

&lt;p&gt;Think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Your code → Drizzle → PostgreSQL&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of manually writing SQL, you can work with your database using TypeScript.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. ORM / ODM 🔄
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;ORM = Object-Relational Mapper&lt;/strong&gt;&lt;br&gt;
Used with SQL databases like PostgreSQL/MySQL.&lt;/p&gt;

&lt;p&gt;It maps:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;code&gt;JavaScript/TypeScript objects ↔ Database tables&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;ODM = Object-Document Mapper&lt;/strong&gt;&lt;br&gt;
Usually used with NoSQL databases like MongoDB.&lt;/p&gt;

&lt;p&gt;So:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;SQL → ORM&lt;br&gt;
MongoDB/Document DB → ODM&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Drizzle is an &lt;strong&gt;ORM&lt;/strong&gt;.&lt;/p&gt;


&lt;h3&gt;
  
  
  3. Webhook 🔔
&lt;/h3&gt;

&lt;p&gt;A webhook lets another service &lt;strong&gt;notify your application when something happens&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;User signs up on Clerk → Clerk sends webhook → Your server creates the user in your database.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Instead of your app constantly asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Did something happen?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The service tells your app:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Hey, something just happened!”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h3&gt;
  
  
  4. Clerk 🔐
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Clerk handles authentication and user management&lt;/strong&gt; for your application.&lt;/p&gt;

&lt;p&gt;It can handle things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sign up&lt;/li&gt;
&lt;li&gt;Login&lt;/li&gt;
&lt;li&gt;Email verification&lt;/li&gt;
&lt;li&gt;Sessions&lt;/li&gt;
&lt;li&gt;User profiles&lt;/li&gt;
&lt;li&gt;Social login&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So you don't have to build authentication completely from scratch.&lt;/p&gt;


&lt;h3&gt;
  
  
  5. LocalTunnel 🌐
&lt;/h3&gt;

&lt;p&gt;Your local app normally lives at:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;localhost:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Other people/services on the internet can't normally access it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;LocalTunnel gives your local server a temporary public URL.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;localhost:3000
       ↓
LocalTunnel
       ↓
https://something.loca.lt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is especially useful when testing &lt;strong&gt;webhooks locally&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  🧠 Easy way to remember
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Clerk&lt;/strong&gt; → Who are you? 🔐&lt;br&gt;
&lt;strong&gt;Drizzle&lt;/strong&gt; → How do I talk to my database? 🗄️&lt;br&gt;
&lt;strong&gt;ORM/ODM&lt;/strong&gt; → How does my code map to database data? 🔄&lt;br&gt;
&lt;strong&gt;Webhook&lt;/strong&gt; → Tell me when something happens. 🔔&lt;br&gt;
&lt;strong&gt;LocalTunnel&lt;/strong&gt; → Let the internet reach my local app. 🌐&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>database</category>
      <category>javascript</category>
      <category>typescript</category>
    </item>
    <item>
      <title>My First SAAS Building Experience</title>
      <dc:creator>Shani Tiwari</dc:creator>
      <pubDate>Tue, 11 Aug 2026 23:00:00 +0000</pubDate>
      <link>https://dev.to/shanitiwari/my-first-saas-building-experience-2k76</link>
      <guid>https://dev.to/shanitiwari/my-first-saas-building-experience-2k76</guid>
      <description>&lt;h1&gt;
  
  
  My First SaaS Building Experience 🚀
&lt;/h1&gt;

&lt;p&gt;I started building my first serious SaaS project with:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Next.js + Clerk + Neon + Drizzle ORM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I had used Next.js before, but never at this level. This project quickly became less about &lt;em&gt;building an app&lt;/em&gt; and more about &lt;strong&gt;learning how real applications actually work.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1. It started with a tutorial
&lt;/h2&gt;

&lt;p&gt;Initially, I was following a tutorial to understand the basics of building a SaaS.&lt;/p&gt;

&lt;p&gt;The stack was new to me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Clerk&lt;/li&gt;
&lt;li&gt;Neon&lt;/li&gt;
&lt;li&gt;Drizzle ORM&lt;/li&gt;
&lt;li&gt;RBAC&lt;/li&gt;
&lt;li&gt;Database + authentication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At first, things felt pretty straightforward.&lt;/p&gt;

&lt;p&gt;Clerk authentication was especially easy because of its built-in flow and good documentation.&lt;/p&gt;

&lt;p&gt;But that didn't last long. 😅&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Then I reached the database
&lt;/h2&gt;

&lt;p&gt;This was where things became interesting.&lt;/p&gt;

&lt;p&gt;I'm not very good with SQL, and &lt;strong&gt;Neon + Drizzle was completely new to me.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The tutorial was using &lt;strong&gt;Prisma&lt;/strong&gt;, but I ran into problems setting up an account with Prisma.&lt;/p&gt;

&lt;p&gt;I had two choices:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stop and follow the exact tutorial setup&lt;/strong&gt;&lt;br&gt;
or&lt;br&gt;
&lt;strong&gt;figure out Drizzle myself.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I chose the second one.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. The turning point 🔥
&lt;/h2&gt;

&lt;p&gt;I started reading the Drizzle documentation.&lt;/p&gt;

&lt;p&gt;Then more documentation.&lt;/p&gt;

&lt;p&gt;Then debugging.&lt;/p&gt;

&lt;p&gt;Then changing things.&lt;/p&gt;

&lt;p&gt;Then breaking them again. 😅&lt;/p&gt;

&lt;p&gt;One of my biggest struggles was understanding &lt;strong&gt;how to properly define the database schema and relationships.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;But eventually, I got the Drizzle setup working and started connecting it with Neon.&lt;/p&gt;

&lt;p&gt;That was probably the biggest turning point of this project.&lt;/p&gt;

&lt;p&gt;I wasn't just copying the tutorial anymore.&lt;/p&gt;

&lt;p&gt;I was &lt;strong&gt;figuring out how to replace one technology with another and make it work myself.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  4. The smallest moment felt huge 📩
&lt;/h2&gt;

&lt;p&gt;One of my favorite moments so far was receiving the &lt;strong&gt;email verification code from my own project.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It sounds small.&lt;/p&gt;

&lt;p&gt;But seeing an authentication flow that I had configured and debugged actually work felt really satisfying.&lt;/p&gt;

&lt;p&gt;That's when it felt like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Okay... I'm actually building a SaaS.”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  5. What I'm actually learning
&lt;/h2&gt;

&lt;p&gt;The biggest lesson hasn't been learning another library.&lt;/p&gt;

&lt;p&gt;It's learning how to &lt;strong&gt;learn a technology when someone isn't showing me every step.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I'm learning to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Read documentation properly&lt;/li&gt;
&lt;li&gt;Debug unfamiliar errors&lt;/li&gt;
&lt;li&gt;Understand schemas and relationships&lt;/li&gt;
&lt;li&gt;Work with ORMs&lt;/li&gt;
&lt;li&gt;Connect authentication with databases&lt;/li&gt;
&lt;li&gt;Understand RBAC&lt;/li&gt;
&lt;li&gt;Make decisions when the tutorial doesn't match my setup&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And probably the most important one:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't depend completely on the tutorial.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A tutorial can show you &lt;em&gt;one way&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Your job as a developer is to understand &lt;strong&gt;why it works and how to build your own way.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Where I am now 🚧
&lt;/h2&gt;

&lt;p&gt;The project is still being built.&lt;/p&gt;

&lt;h3&gt;
  
  
  Done:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ Next.js setup&lt;/li&gt;
&lt;li&gt;✅ Clerk authentication&lt;/li&gt;
&lt;li&gt;✅ Email verification&lt;/li&gt;
&lt;li&gt;✅ Basic auth flow&lt;/li&gt;
&lt;li&gt;✅ Neon + Drizzle setup&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Still working on:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;🔨 Webhooks&lt;/li&gt;
&lt;li&gt;🔨 Database CRUD&lt;/li&gt;
&lt;li&gt;🔨 RBAC implementation&lt;/li&gt;
&lt;li&gt;🔨 Completing the SaaS&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. The real takeaway
&lt;/h2&gt;

&lt;p&gt;I'm still learning and the project is nowhere near finished.&lt;/p&gt;

&lt;p&gt;But this experience has already changed how I approach learning.&lt;/p&gt;

&lt;p&gt;Earlier, I wanted to &lt;strong&gt;finish tutorials&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now I want to reach the point where the tutorial ends and think:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Cool. Now let me figure out the rest.”&lt;/strong&gt; 🚀&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>database</category>
      <category>learning</category>
      <category>nextjs</category>
      <category>saas</category>
    </item>
    <item>
      <title>Small Update, Big Difference</title>
      <dc:creator>Shani Tiwari</dc:creator>
      <pubDate>Tue, 11 Aug 2026 06:37:00 +0000</pubDate>
      <link>https://dev.to/shanitiwari/small-update-big-difference-3no2</link>
      <guid>https://dev.to/shanitiwari/small-update-big-difference-3no2</guid>
      <description>&lt;p&gt;&lt;a href="https://shani-tiwari.framer.website" rel="noopener noreferrer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Spent some time polishing my Framer template:&lt;/p&gt;

&lt;p&gt;→ ✨ Better animations &amp;amp; interactions&lt;/p&gt;

&lt;p&gt;→ 🌓 Refined shadows + UI details&lt;/p&gt;

&lt;p&gt;→ 🛠️ Fixed project card elements&lt;/p&gt;

&lt;p&gt;→ 💬 Added tooltips&lt;/p&gt;

&lt;p&gt;→ 🔗 Added social links&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.tourl"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But I’m stuck on one thing:&lt;/p&gt;

&lt;p&gt;The second section of project cards.&lt;/p&gt;

&lt;p&gt;Desktop looks good — but how should I present them on mobile?&lt;/p&gt;

&lt;p&gt;👉 Stack them?&lt;/p&gt;

&lt;p&gt;👉 Horizontal scroll?&lt;/p&gt;

&lt;p&gt;👉 Show fewer cards?&lt;/p&gt;

&lt;p&gt;Still figuring out the cleanest solution without making the mobile UI feel crowded.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://shani-tiwari.framer.template" rel="noopener noreferrer"&gt;https://shani-tiwari.framer.template&lt;/a&gt;&lt;/p&gt;

</description>
      <category>design</category>
      <category>showdev</category>
      <category>ui</category>
      <category>website</category>
    </item>
    <item>
      <title>🔐 Access Control — 5 ways to decide “Who can access what?</title>
      <dc:creator>Shani Tiwari</dc:creator>
      <pubDate>Sun, 09 Aug 2026 02:05:39 +0000</pubDate>
      <link>https://dev.to/shanitiwari/access-control-5-ways-to-decide-who-can-access-what-2ab4</link>
      <guid>https://dev.to/shanitiwari/access-control-5-ways-to-decide-who-can-access-what-2ab4</guid>
      <description>&lt;p&gt;🔐 Access Control — 5 ways to decide “Who can access what?”&lt;/p&gt;

&lt;p&gt;RBAC   asks  “What is your role?” &lt;/p&gt;

&lt;p&gt;ReBAC asks  “How are you related?” &lt;/p&gt;

&lt;p&gt;PBAC   asks  “What does the policy say?” &lt;/p&gt;

&lt;p&gt;ABAC   asks  “What are your attributes?” &lt;/p&gt;

&lt;p&gt;FGAC   asks  “Exactly what are you allowed to touch?”&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;RBAC — Role-Based Access Control&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Permissions are based on the user's role.&lt;br&gt;
→ A Developer can access code, while an Admin can manage users.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ReBAC — Relationship-Based Access Control&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Permissions are based on the relationship between the user and resource.&lt;br&gt;
→ You can edit a GitHub repo because you are its owner.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;PBAC — Policy-Based Access Control&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Access is decided by rules/policies defined by the system.&lt;br&gt;
→ Allow deployment only when the branch is main and tests have passed.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ABAC — Attribute-Based Access Control&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Access depends on attributes of the user, resource, or request.&lt;br&gt;
→ Allow access if role = developer and environment = staging.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;FGAC — Fine-Grained Access Control&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Permissions are controlled at a very specific level, rather than giving broad access.&lt;br&gt;
→ A developer can edit user.name but cannot access user.password.&lt;/p&gt;

&lt;p&gt;Now you know something new, feel free to ask question or search for more information and grow.&lt;/p&gt;

&lt;p&gt;Connect: &lt;/p&gt;

&lt;p&gt;Github - &lt;a href="https://github.com/shani-tiwari" rel="noopener noreferrer"&gt;https://github.com/shani-tiwari&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;IG - &lt;a href="https://instagram.com/shani.develops" rel="noopener noreferrer"&gt;https://instagram.com/shani.develops&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;X - &lt;a href="https://x.com/shanidevelops" rel="noopener noreferrer"&gt;https://x.com/shanidevelops&lt;/a&gt; &lt;/p&gt;

</description>
      <category>webdev</category>
      <category>security</category>
      <category>architecture</category>
      <category>learning</category>
    </item>
    <item>
      <title>Webtree - Resources Hub for Dev's</title>
      <dc:creator>Shani Tiwari</dc:creator>
      <pubDate>Sun, 31 May 2026 08:40:12 +0000</pubDate>
      <link>https://dev.to/shanitiwari/webtree-resources-hub-for-devs-25e</link>
      <guid>https://dev.to/shanitiwari/webtree-resources-hub-for-devs-25e</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/github-2026-05-21"&gt;GitHub Finish-Up-A-Thon Challenge&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;why I built it - As an developer I had many bookmark folders having multiple websites for assets, fonts, videos, design ideas, UI library etc...to not waste my time in searching for websites when needed, but once I lost 1 saved website &amp;amp; that's my fav. one, my go to website for animation inspiration but i lost it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;By the time i'm also thinking about building something by my own and not another tutorial project, so i build...&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Webtree - a place where you get 140+ categorized dev resources &amp;amp; u can directly save them, visit , copy link, share them.&lt;br&gt;
your saved websites goes to personal collection.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;As a dev I hate creating account for an tool - so in webtree, there's nothing to stop you. you go &amp;amp; get access for free resource library.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Live Link - &lt;a href="https://webtree.shaniweb.com" rel="noopener noreferrer"&gt;https://webtree.shaniweb.com&lt;/a&gt;&lt;br&gt;
home page - &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F44ghfcq3zk3qd5vnb4cf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F44ghfcq3zk3qd5vnb4cf.png" alt=" " width="799" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;about page - &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhi88j2x5n3ydylmnqg74.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhi88j2x5n3ydylmnqg74.png" alt=" " width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reviews page -&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6k37ol25hhqhtwvpn54g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6k37ol25hhqhtwvpn54g.png" alt=" " width="800" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Collection page - &lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4kianbhxnmj619ebq4az.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4kianbhxnmj619ebq4az.png" alt=" " width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;--- project started with 7-8 categories and 40-50 websites that's already in my saved.&lt;br&gt;
--- But as i got reviews and suggestions on X, linkedin, the website, categories increases with 15 category and 140+ websites.&lt;/p&gt;

&lt;p&gt;X - &lt;a href="https://x.com/shanidevelops" rel="noopener noreferrer"&gt;https://x.com/shanidevelops&lt;/a&gt;&lt;br&gt;
linkedin- &lt;a href="https://linkedin.com/in/theshanitiwari" rel="noopener noreferrer"&gt;https://linkedin.com/in/theshanitiwari&lt;/a&gt;&lt;br&gt;
ig - &lt;a href="https://instagram.com/shani.develops" rel="noopener noreferrer"&gt;https://instagram.com/shani.develops&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with GitHub Copilot
&lt;/h2&gt;

</description>
      <category>devchallenge</category>
      <category>githubchallenge</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
