<?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: Abhishek Kashyap</title>
    <description>The latest articles on DEV Community by Abhishek Kashyap (@abhishek_kashyap_b7002b10).</description>
    <link>https://dev.to/abhishek_kashyap_b7002b10</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3733091%2Fe634fdc6-dab0-43a1-9d3d-dc2a9a78db97.png</url>
      <title>DEV Community: Abhishek Kashyap</title>
      <link>https://dev.to/abhishek_kashyap_b7002b10</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abhishek_kashyap_b7002b10"/>
    <language>en</language>
    <item>
      <title>How I built a SaaS for Restaurants using Next.js 15 &amp; Supabase (and how you can too)</title>
      <dc:creator>Abhishek Kashyap</dc:creator>
      <pubDate>Mon, 26 Jan 2026 14:09:33 +0000</pubDate>
      <link>https://dev.to/abhishek_kashyap_b7002b10/how-i-built-a-saas-for-restaurants-using-nextjs-15-supabase-and-how-you-can-too-bg1</link>
      <guid>https://dev.to/abhishek_kashyap_b7002b10/how-i-built-a-saas-for-restaurants-using-nextjs-15-supabase-and-how-you-can-too-bg1</guid>
      <description>&lt;p&gt;I'm a 3rd-year engineering student, and recently I took on a freelance challenge: Build a Digital Menu system for a local restaurant.&lt;/p&gt;

&lt;p&gt;The requirement was simple: The owner wanted to update prices on his phone, and customers should see the changes instantly via a QR code.&lt;/p&gt;

&lt;p&gt;Here is how I architected the solution using the Next.js 15 App Router and Supabase.&lt;/p&gt;

&lt;p&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%2Fgd5sy8g5co09ascydwtj.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%2Fgd5sy8g5co09ascydwtj.png" alt=" " width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Database (Supabase)&lt;br&gt;
I needed a relational DB. I set up two main tables:&lt;/p&gt;

&lt;p&gt;restaurants (id, name, logo)&lt;/p&gt;

&lt;p&gt;menu_items (id, name, price, restaurant_id)&lt;/p&gt;

&lt;p&gt;The Security (RLS Policies)&lt;br&gt;
This was the tricky part. I didn't want Restaurant A to edit Restaurant B's menu. I used Supabase RLS (Row Level Security) to enforce this:&lt;/p&gt;

&lt;p&gt;create policy "Owners can update their own items"&lt;br&gt;
on menu_items&lt;br&gt;
for update&lt;br&gt;
using ( auth.uid() = owner_id );&lt;br&gt;
Now, the frontend is secure by default.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The Frontend (Next.js 15)
I used Server Actions for the mutations. When the owner changes a price, it calls a Server Action that writes directly to Supabase and revalidates the cache path.
'use server'
export async function updatePrice(id, newPrice) {
const supabase = createClient();
await supabase.from('menu_items').update({ price: newPrice }).eq('id', id);
revalidatePath('/dashboard');
}&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The Result&lt;br&gt;
The app is blazing fast. The restaurant owner loves it because they don't have to reprint paper menus anymore.&lt;/p&gt;

&lt;p&gt;Want the Source Code?&lt;br&gt;
I realized many freelancers struggle with this same setup (Auth + Database + Dashboard). So, I cleaned up the code and packaged it as a Starter Kit.&lt;/p&gt;

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

&lt;p&gt;Full Admin Dashboard&lt;/p&gt;

&lt;p&gt;QR Code Generator&lt;/p&gt;

&lt;p&gt;Mobile-Optimized Menu View&lt;/p&gt;

&lt;p&gt;Agency License (Sell to clients &amp;amp; keep 100% profit)&lt;/p&gt;

&lt;p&gt;I'm launching it today with a student discount (₹1,000 OFF).&lt;/p&gt;

&lt;p&gt;👉 Get the Source Code here: &lt;a href="https://abhinova343.gumroad.com/l/restrosaas" rel="noopener noreferrer"&gt;https://abhinova343.gumroad.com/l/restrosaas&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me know if you have questions about the Next.js 15 setup in the comments!&lt;/p&gt;

&lt;h1&gt;
  
  
  nextjs #supabase #webdev #javascript
&lt;/h1&gt;

</description>
      <category>nextjs</category>
      <category>saas</category>
      <category>showdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
