Skip to Content
Browse all templates at capricorn.build →
Next.jsTemplatesAstra Dental

Astra Dental Template

Professional dental clinic website template built with Next.js 16, React 19, and Tailwind CSS v4.

Overview

Astra is designed for dental clinics and healthcare providers who need a professional web presence with appointment booking, service showcases, and content management.

Live Preview: View Demo 

Tech Stack

TechnologyVersionPurpose
Next.js16.0.3React framework
React19.2.0UI library
TypeScript5.xType safety
Tailwind CSS4.xStyling
Framer Motion12.xAnimations & transitions
next-mdx-remote5.xMDX content rendering
Phosphor Icons1.4.xIcon library

Quick Start

cd astra-template npm install npm run dev # Open http://localhost:3000

Pages Included (12+)

PageRouteDescription
Homepage/Hero, services, testimonials, CTA sections
About/aboutCompany info, mission, values
Services/servicesService listing grid
Service Detail/services/[slug]Individual service pages (MDX)
Team/teamTeam member profiles
Case Studies/case-studiesPatient success stories listing
Case Study Detail/case-studies/[slug]Individual case studies (MDX)
Blog/blogBlog post listing
Blog Post/blog/[slug]Individual blog posts (MDX)
Pricing/pricingService pricing tables
Testimonials/testimonialsClient reviews page
FAQ/faqAccordion FAQ section
Contact/contactContact form
Appointment/appointmentBooking form
404/404Custom not found page

Project Structure

astra-template/ ├── app/ │ ├── globals.css # Theme colors & global styles │ ├── layout.tsx # Root layout │ ├── not-found.tsx # 404 page │ └── (marketing)/ # Route group │ ├── layout.tsx # Marketing layout │ ├── page.tsx # Homepage │ ├── about/page.tsx │ ├── appointment/page.tsx │ ├── blog/ │ │ ├── page.tsx # Blog listing │ │ └── [slug]/page.tsx # Blog post │ ├── case-studies/ │ │ ├── page.tsx # Case studies listing │ │ └── [slug]/page.tsx # Case study detail │ ├── contact/page.tsx │ ├── faq/page.tsx │ ├── pricing/page.tsx │ ├── services/ │ │ ├── page.tsx # Services listing │ │ └── [slug]/page.tsx # Service detail │ ├── team/page.tsx │ └── testimonials/page.tsx ├── components/ │ ├── forms/ │ │ ├── BookingForm.tsx │ │ ├── ContactForm.tsx │ │ └── NewsletterForm.tsx │ ├── layout/ │ │ ├── Header.tsx │ │ └── Footer.tsx │ ├── sections/ │ │ ├── home/ # Homepage sections │ │ │ ├── Hero.tsx │ │ │ ├── Services.tsx │ │ │ ├── About.tsx │ │ │ ├── BeforeAfter.tsx │ │ │ ├── Testimonials.tsx │ │ │ ├── Team.tsx │ │ │ ├── Pricing.tsx │ │ │ ├── Blog.tsx │ │ │ ├── FAQ.tsx │ │ │ ├── Booking.tsx │ │ │ ├── CTA.tsx │ │ │ └── Banner.tsx │ │ ├── about/ │ │ ├── blog/ │ │ ├── case-studies/ │ │ ├── contact/ │ │ ├── faq/ │ │ ├── services/ │ │ ├── team/ │ │ └── testimonials/ │ ├── shared/ │ │ ├── PageHero.tsx │ │ ├── PageTransition.tsx │ │ ├── Breadcrumbs.tsx │ │ ├── BlogCard.tsx │ │ ├── ServiceCard.tsx │ │ ├── CaseStudyCard.tsx │ │ ├── TeamMemberCard.tsx │ │ ├── TestimonialCard.tsx │ │ ├── PricingCard.tsx │ │ ├── CTACard.tsx │ │ ├── ValueCard.tsx │ │ ├── VideoCard.tsx │ │ ├── Logo.tsx │ │ ├── SocialLinks.tsx │ │ └── TrustLogos.tsx │ └── ui/ │ ├── Accordion.tsx │ ├── Button.tsx │ ├── Icon.tsx │ ├── Input.tsx │ ├── Select.tsx │ └── Textarea.tsx ├── config/ │ ├── site.config.ts # Business info │ ├── navigation.config.ts # Menu structure │ └── seo.config.ts # SEO defaults ├── content/ │ ├── blog/ # MDX blog posts │ │ ├── benefits-of-dental-implants.mdx │ │ ├── child-first-dentist-visit.mdx │ │ ├── invisalign-vs-braces.mdx │ │ ├── oral-health-overall-wellness.mdx │ │ ├── overcome-dental-anxiety.mdx │ │ ├── teeth-whitening-guide.mdx │ │ └── tips-for-healthy-teeth.mdx │ ├── case-studies/ # MDX case studies │ │ ├── overcoming-anxiety.mdx │ │ ├── restoring-confidence.mdx │ │ ├── smile-makeover.mdx │ │ └── transforming-smiles.mdx │ ├── services/ # MDX services │ │ ├── cosmetic-dentistry.mdx │ │ ├── dental-implants.mdx │ │ ├── emergency-dental.mdx │ │ ├── orthodontics.mdx │ │ ├── preventive-care.mdx │ │ └── teeth-whitening.mdx │ ├── team.ts # Team members │ ├── testimonials.ts # Reviews │ ├── pricing.ts # Pricing plans │ ├── faq.ts # FAQ items │ ├── values.ts # Company values │ ├── benefits.ts # Service benefits │ ├── contact.ts # Contact info │ └── partners.ts # Trust logos ├── lib/ │ ├── mdx.ts # MDX utilities │ ├── mdx-components.tsx # Custom MDX components │ ├── utils.ts # Helper functions │ └── types/index.ts # TypeScript types └── public/ └── images/

Configuration

Site Config (config/site.config.ts)

export const siteConfig = { name: "Astra Dental", description: "Professional dental care for the whole family", url: "https://yourdomain.com", // Contact phone: "(555) 123-4567", email: "info@astradental.com", address: "123 Dental Way, Suite 100, City, State 12345", // Business hours hours: { weekdays: "8:00 AM - 6:00 PM", saturday: "9:00 AM - 2:00 PM", sunday: "Closed", }, // Social links social: { facebook: "https://facebook.com/astradental", instagram: "https://instagram.com/astradental", twitter: "https://twitter.com/astradental", linkedin: "https://linkedin.com/company/astradental", }, };
export const navigationConfig = { mainNav: [ { label: "Home", href: "/" }, { label: "Services", href: "/services" }, { label: "About", href: "/about" }, { label: "Team", href: "/team" }, { label: "Blog", href: "/blog" }, { label: "Contact", href: "/contact" }, ], ctaButton: { label: "Book Appointment", href: "/appointment", }, };

Content Management

MDX Content

Astra uses MDX for content that needs individual pages.

Blog Posts (content/blog/*.mdx)

--- title: "5 Tips for Healthy Teeth" slug: "tips-for-healthy-teeth" excerpt: "Simple daily habits for a healthier smile." date: "2024-01-15" author: "Dr. Jane Smith" image: "/images/blog/healthy-teeth.jpg" tags: ["dental care", "tips", "oral health"] readTime: "5 min read" --- Your blog content here...

Required frontmatter:

FieldTypeDescription
titlestringPost title
slugstringURL path
excerptstringShort description
datestringPublication date (YYYY-MM-DD)
authorstringAuthor name
imagestringFeatured image path

Optional:

FieldTypeDescription
tagsstring[]Post tags
readTimestringEstimated read time

Services (content/services/*.mdx)

--- title: "Teeth Whitening" slug: "teeth-whitening" excerpt: "Professional whitening for a brighter smile." icon: "Sparkle" image: "/images/services/whitening.jpg" price: "From $299" duration: "1-2 hours" featured: true order: 1 --- Service description and details...

Required frontmatter:

FieldTypeDescription
titlestringService name
slugstringURL path
excerptstringShort description
iconstringPhosphor icon name
imagestringService image

Optional:

FieldTypeDescription
pricestringStarting price
durationstringTreatment time
featuredbooleanShow on homepage
ordernumberDisplay order

Case Studies (content/case-studies/*.mdx)

--- title: "Complete Smile Makeover" slug: "smile-makeover" excerpt: "Transforming Sarah's confidence with veneers." patient: "Sarah M." age: "34" treatment: "Veneers & Whitening" duration: "3 months" beforeImage: "/images/cases/sarah-before.jpg" afterImage: "/images/cases/sarah-after.jpg" featured: true --- Case study details...

Required frontmatter:

FieldTypeDescription
titlestringCase title
slugstringURL path
excerptstringBrief description
patientstringPatient name/initials
treatmentstringTreatment performed
durationstringTreatment duration
beforeImagestringBefore photo
afterImagestringAfter photo

TypeScript Content

Team (content/team.ts)

export interface TeamMember { id: string; name: string; role: string; bio: string; image: string; specialties?: string[]; education?: string[]; social?: { linkedin?: string; twitter?: string; }; } export const team: TeamMember[] = [ { id: "dr-jane-smith", name: "Dr. Jane Smith", role: "Lead Dentist & Founder", bio: "Dr. Smith has over 20 years of experience...", image: "/images/team/jane-smith.jpg", specialties: ["Cosmetic Dentistry", "Implants"], education: ["DDS, UCLA", "Cosmetic Certification"], }, ];

Testimonials (content/testimonials.ts)

export interface Testimonial { id: string; name: string; content: string; rating: number; treatment?: string; image?: string; } export const testimonials: Testimonial[] = [ { id: "1", name: "John D.", content: "Amazing experience! The team was so professional...", rating: 5, treatment: "Dental Implants", }, ];

Pricing (content/pricing.ts)

export interface PricingPlan { id: string; name: string; description: string; price: string; features: string[]; highlighted?: boolean; cta?: string; } export const pricing: PricingPlan[] = [ { id: "cleaning", name: "Basic Cleaning", description: "Regular dental checkup", price: "$99", features: ["Exam", "Cleaning", "X-rays"], }, ];

FAQ (content/faq.ts)

export interface FAQ { id: string; question: string; answer: string; category?: string; } export const faq: FAQ[] = [ { id: "insurance", question: "Do you accept insurance?", answer: "Yes, we accept most major dental plans...", category: "Insurance", }, ];

Components

Forms

import { BookingForm, ContactForm, NewsletterForm } from "@/components/forms"; <BookingForm /> <ContactForm /> <NewsletterForm />

UI Components

import { Button, Input, Select, Textarea, Accordion, Icon } from "@/components/ui"; // Buttons <Button>Primary</Button> <Button variant="secondary">Secondary</Button> <Button variant="outline">Outline</Button> // Icons (Phosphor) <Icon name="Tooth" size={24} /> <Icon name="Phone" /> <Icon name="Calendar" />

Shared Components

import { PageHero, PageTransition, Breadcrumbs, BlogCard, ServiceCard, TeamMemberCard, TestimonialCard, PricingCard, CaseStudyCard, } from "@/components/shared";

Page Transitions

Astra includes smooth page transitions using Framer Motion:

import { PageTransition } from "@/components/shared"; export default function Page() { return ( <PageTransition> <YourPageContent /> </PageTransition> ); }

Icons

Astra uses Phosphor Icons. Browse available icons at phosphoricons.com .

import { Icon } from "@/components/ui"; // Usage <Icon name="Tooth" /> <Icon name="Phone" /> <Icon name="MapPin" /> <Icon name="Calendar" /> <Icon name="Star" /> <Icon name="Heart" />

Common icons used in Astra:

  • Tooth — Dental/services
  • Phone — Contact
  • MapPin — Location
  • Calendar — Appointments
  • Clock — Hours/duration
  • Star — Ratings
  • User — Team/patients
  • ChatCircle — Testimonials

Styling

Theme Colors (app/globals.css)

:root { /* Primary brand color */ --primary: #0ea5e9; --primary-dark: #0284c7; /* Secondary accent */ --secondary: #8b5cf6; /* Backgrounds */ --background: #ffffff; --background-secondary: #f8fafc; /* Text */ --foreground: #0f172a; --foreground-muted: #64748b; /* Functional */ --success: #22c55e; --warning: #f59e0b; --error: #ef4444; }

Customization Checklist

  1. config/site.config.ts — Business name, phone, email, address, hours
  2. config/navigation.config.ts — Menu items
  3. app/globals.css — Brand colors
  4. content/team.ts — Your team members
  5. content/services/*.mdx — Your services
  6. content/pricing.ts — Your prices
  7. content/testimonials.ts — Real reviews
  8. content/faq.ts — Your FAQs
  9. content/blog/*.mdx — Your blog posts
  10. content/case-studies/*.mdx — Your case studies
  11. public/images/ — Replace all placeholder images

Deployment

Astra works with any Next.js hosting:

npm run build npm start

Support


Quick Links:

Last updated on