<?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: zeyd ajraou</title>
    <description>The latest articles on DEV Community by zeyd ajraou (@zeyd_ajraou_209393308a931).</description>
    <link>https://dev.to/zeyd_ajraou_209393308a931</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%2F3712673%2Fcd7317fb-582c-49f3-9e5e-05d7551ef0a9.jpg</url>
      <title>DEV Community: zeyd ajraou</title>
      <link>https://dev.to/zeyd_ajraou_209393308a931</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zeyd_ajraou_209393308a931"/>
    <language>en</language>
    <item>
      <title>How to Build a High-Conversion Dentist Website with Next.js 14 + Tailwind (Source Code)</title>
      <dc:creator>zeyd ajraou</dc:creator>
      <pubDate>Thu, 15 Jan 2026 14:50:20 +0000</pubDate>
      <link>https://dev.to/zeyd_ajraou_209393308a931/how-to-build-a-high-conversion-dentist-website-with-nextjs-14-tailwind-source-code-2mg9</link>
      <guid>https://dev.to/zeyd_ajraou_209393308a931/how-to-build-a-high-conversion-dentist-website-with-nextjs-14-tailwind-source-code-2mg9</guid>
      <description>&lt;p&gt;If you do freelance work, you know the drill: A local business (Dentist, Plumber, Real Estate) needs a website. They have a budget, but they need it &lt;em&gt;yesterday&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;You could use Wix or WordPress, but then you're stuck dealing with slow plugins and security updates forever.&lt;/p&gt;

&lt;p&gt;I prefer building with &lt;strong&gt;Next.js 14 (App Router)&lt;/strong&gt;. It's faster, more secure, and I can charge a premium for "Custom Code."&lt;/p&gt;

&lt;p&gt;I recently built a complete Dentist Website System, and I want to share the architecture and a key component so you can build one too.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Architecture
&lt;/h3&gt;

&lt;p&gt;For a local business site, you don't need complex state management. You need &lt;strong&gt;SEO&lt;/strong&gt; and &lt;strong&gt;Structure&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Here is the folder structure I use for maximum SEO points:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/app
  ├── /services        # Individual service pages (Roots, Whitening)
  ├── /gallery         # Before/After photos (Crucial for dentists)
  ├── /contact         # Booking form + Map
  ├── layout.tsx       # Navbar &amp;amp; Footer persist here
  └── page.tsx         # The High-Conversion Homepage
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;The "Hero" Component&lt;/strong&gt;&lt;br&gt;
The most important part of a dentist site is the Hero Section. It needs 3 things:&lt;/p&gt;

&lt;p&gt;A trustworthy headline.&lt;/p&gt;

&lt;p&gt;A clear "Book Now" Call-to-Action.&lt;/p&gt;

&lt;p&gt;A smiling human face (social proof).&lt;/p&gt;

&lt;p&gt;Here is the clean Tailwind + React code for a responsive Hero section you can copy:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import Link from "next/link";
import { Phone } from "lucide-react";

export default function Hero() {
  return (
    &amp;lt;section className="w-full bg-slate-50 py-12 md:py-24 lg:py-32"&amp;gt;
      &amp;lt;div className="container px-4 md:px-6"&amp;gt;
        &amp;lt;div className="grid gap-6 lg:grid-cols-2 lg:gap-12 xl:grid-cols-2"&amp;gt;
          &amp;lt;div className="flex flex-col justify-center space-y-4"&amp;gt;
            &amp;lt;div className="space-y-2"&amp;gt;
              &amp;lt;h1 className="text-3xl font-bold tracking-tighter text-teal-900 sm:text-5xl xl:text-6xl/none"&amp;gt;
                Gentle Care for Your &amp;lt;span className="text-teal-600"&amp;gt;Perfect Smile&amp;lt;/span&amp;gt;
              &amp;lt;/h1&amp;gt;
              &amp;lt;p className="max-w-[600px] text-gray-500 md:text-xl dark:text-gray-400"&amp;gt;
                Experience modern dentistry in a comfortable environment. We specialize in cosmetic transformations and emergency care.
              &amp;lt;/p&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;div className="flex flex-col gap-2 min-[400px]:flex-row"&amp;gt;
              &amp;lt;Link
                className="inline-flex h-10 items-center justify-center rounded-md bg-teal-600 px-8 text-sm font-medium text-white shadow transition-colors hover:bg-teal-700 focus-visible:outline-none"
                href="/contact"
              &amp;gt;
                Book Appointment
              &amp;lt;/Link&amp;gt;
              &amp;lt;Link
                className="inline-flex h-10 items-center justify-center rounded-md border border-gray-200 bg-white px-8 text-sm font-medium shadow-sm transition-colors hover:bg-gray-100 hover:text-teal-900"
                href="/services"
              &amp;gt;
                View Services
              &amp;lt;/Link&amp;gt;
            &amp;lt;/div&amp;gt;
          &amp;lt;/div&amp;gt;
          {/* On mobile, this image stacks below the text */}
          &amp;lt;div className="flex items-center justify-center"&amp;gt;
             &amp;lt;div className="relative h-[350px] w-[350px] rounded-full bg-teal-100/50 flex items-center justify-center"&amp;gt;
                &amp;lt;span className="text-teal-800 font-medium"&amp;gt;Image Placeholder&amp;lt;/span&amp;gt;
             &amp;lt;/div&amp;gt;
          &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
      &amp;lt;/div&amp;gt;
    &amp;lt;/section&amp;gt;
  );
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Want the full template?&lt;/strong&gt;&lt;br&gt;
I realized I was rebuilding the same "Services Grid," "Contact Form," and "Before/After Gallery" for every client.&lt;/p&gt;

&lt;p&gt;So I bundled the entire project into a Next.js 14 Starter Template.&lt;/p&gt;

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

&lt;p&gt;✅ 5 Pre-built Pages (Home, Services, Gallery, Contact, About)&lt;/p&gt;

&lt;p&gt;✅ Mobile Responsive Navbar (Hamburger menu working)&lt;/p&gt;

&lt;p&gt;✅ Booking Form UI&lt;/p&gt;

&lt;p&gt;✅ TypeScript &amp;amp; Tailwind configured&lt;/p&gt;

&lt;p&gt;If you are a freelancer, you can grab this, customize the colors, and deliver a client site in about 3 hours.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ajraou.gumroad.com/l/nextjs-dental-care" rel="noopener noreferrer"&gt;Download the Dentist Pro Template Here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Happy coding!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>nextjs</category>
      <category>tailwindcss</category>
      <category>freelance</category>
    </item>
    <item>
      <title>The Easiest Way to Setup Supabase SSR in Next.js 14</title>
      <dc:creator>zeyd ajraou</dc:creator>
      <pubDate>Thu, 15 Jan 2026 12:23:13 +0000</pubDate>
      <link>https://dev.to/zeyd_ajraou_209393308a931/the-easiest-way-to-setup-supabase-ssr-in-nextjs-14-b5a</link>
      <guid>https://dev.to/zeyd_ajraou_209393308a931/the-easiest-way-to-setup-supabase-ssr-in-nextjs-14-b5a</guid>
      <description>&lt;p&gt;If you are like me, you are tired of setting up the same Authentication boilerplate for every new project.&lt;/p&gt;

&lt;p&gt;Connecting Next.js 14 (App Router) with Supabase requires a specific setup to handle Cookies correctly during Server-Side Rendering (SSR). If you get it wrong, your user sessions won't persist, or you'll get hydration errors.&lt;/p&gt;

&lt;p&gt;I spent this weekend finalizing a clean &lt;code&gt;server.ts&lt;/code&gt; utility that handles this perfectly. I'm sharing it here so you can just copy-paste it into your &lt;code&gt;utils/supabase&lt;/code&gt; folder.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Code
&lt;/h3&gt;

&lt;p&gt;First, make sure you have the packages installed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; @supabase/ssr @supabase/supabase-js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, create a file at utils/supabase/server.ts and drop this in:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { createServerClient, type CookieOptions } from '@supabase/ssr'
import { cookies } from 'next/headers'

export async function createClient() {
  const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL
  const supabaseAnonKey = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY

  // Return null if Supabase is not configured
  if (!supabaseUrl || !supabaseAnonKey) {
    return null
  }

  const cookieStore = await cookies()

  return createServerClient(
    supabaseUrl,
    supabaseAnonKey,
    {
      cookies: {
        getAll() {
          return cookieStore.getAll()
        },
        setAll(cookiesToSet: { name: string; value: string; options: CookieOptions }[]) {
          try {
            cookiesToSet.forEach(({ name, value, options }) =&amp;gt;
              cookieStore.set(name, value, options)
            )
          } catch {
            // The `setAll` method was called from a Server Component.
            // This can be ignored if you have middleware refreshing
            // user sessions.
          }
        },
      },
    }
  )
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why this works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The magic happens in the setAll method. In Next.js Server Components, you cannot write cookies (only read them). This helper detects that context. If you try to set a cookie from a Server Component, the try/catch block safely ignores it, preventing your app from crashing, while still allowing Middleware to handle the session refresh.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to skip the setup entirely?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I realized I was rewriting this logic (plus Stripe, Tailwind, and Auth forms) every single time I started a project.&lt;/p&gt;

&lt;p&gt;So I built a complete Next.js + Supabase Starter Kit that has all of this pre-configured, including:&lt;/p&gt;

&lt;p&gt;✅ Supabase Auth (Google + Email)&lt;/p&gt;

&lt;p&gt;✅ Stripe Subscription Payments&lt;/p&gt;

&lt;p&gt;✅ Tailwind Dashboard &amp;amp; Landing Page&lt;/p&gt;

&lt;p&gt;✅ Fully Typed (TypeScript)&lt;/p&gt;

&lt;p&gt;It saves about 3-4 days of setup time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ajraou.gumroad.com/l/nextjs-saas-starter" rel="noopener noreferrer"&gt;You can grab the Starter Kit here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;(P.S. I added a discount code FIRST10 for %50 OFF for the first 10 people from this community!)&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>supabase</category>
      <category>typescript</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
