A modern, high-performance wildlife photography portfolio built with Next.js 15, showcasing Houston-area wildlife photography with a focus on SEO, performance, and user experience.
This is a professional wildlife photography portfolio website designed for David Martin, a Houston-based wildlife photographer specializing in birds and nature photography. The site demonstrates modern web development practices with a focus on performance, SEO, and seamless content management.
Live Site: daveypicsstudio.com
- Next.js 15 with App Router and React Server Components
- Incremental Static Regeneration (ISR) with 60-second revalidation
- Image Optimization using Next.js Image component with Contentful integration
- Code Splitting for optimal bundle sizes
- Server-Side Rendering for dynamic content with fast initial loads
- Dark Mode Support with smooth theme transitions using next-themes
- Responsive Design optimized for all devices
- Progressive Enhancement with graceful fallbacks
- Accessible UI Components built with Radix UI primitives
- Modern Animations using Tailwind CSS and Framer Motion patterns
- Contentful CMS Integration for headless content management
- Rich Text Rendering for blog posts and long-form content
- Asset Management with automatic image optimization
- Content Caching strategy for improved performance
- Mock Data Fallbacks for development without CMS access
- Structured Data (JSON-LD) for rich search results
- Open Graph & Twitter Cards for social media sharing
- Dynamic Sitemap Generation for search engine indexing
- Robots.txt Configuration for crawler management
- Semantic HTML with proper heading hierarchy
- Local Business Schema for local SEO
- Contact Form with Nodemailer integration
- Form Validation using React Hook Form and Zod
- Email Templates for professional communication
- CAPTCHA Protection ready integration points
- PostHog Integration for product analytics
- Event Tracking custom implementation
- Session Recording capabilities
- Feature Flags support via PostHog
- Next.js 15.2.4 - React framework with App Router
- React 19 - UI library with latest features
- TypeScript 5 - Type-safe development
- Tailwind CSS 3.4 - Utility-first CSS framework
- Radix UI - Unstyled, accessible component primitives
- Lucide React - Beautiful icon set
- next-themes - Dark mode implementation
- Contentful - Headless CMS
- @contentful/rich-text-react-renderer - Rich text rendering
- date-fns - Date formatting and manipulation
- React Hook Form 7.54 - Performant form handling
- Zod 3.24 - Schema validation
- @hookform/resolvers - Validation integration
- Nodemailer - Email sending functionality
- ESLint - Code linting
- PostCSS - CSS processing
- pnpm - Fast, efficient package manager
davey-pics-studio/
βββ app/ # Next.js App Router
β βββ about/ # About page
β βββ api/ # API routes
β β βββ contact/ # Contact form handler
β β βββ site-config/ # Configuration endpoint
β βββ blog/ # Blog posts
β βββ contact/ # Contact page
β βββ gallery/ # Photo galleries
β βββ parks/ # Photography locations
β βββ services/ # Services offered
β βββ layout.tsx # Root layout with metadata
β βββ page.tsx # Homepage
β βββ sitemap.ts # Dynamic sitemap
β βββ robots.ts # Robots.txt generation
βββ components/ # React components
β βββ ui/ # Radix UI components
β βββ blog-post-card.tsx # Blog post cards
β βββ contact-form.tsx # Contact form
β βββ contentful-image.tsx # Optimized image component
β βββ footer.tsx # Site footer
β βββ navbar.tsx # Navigation bar
β βββ photo-gallery.tsx # Gallery component
β βββ ... # Other components
βββ lib/ # Utility functions
β βββ api.ts # Contentful API functions
β βββ contentful-client.ts # Contentful client setup
β βββ contentful-cache.ts # Caching layer
β βββ image-utils.ts # Image optimization helpers
β βββ utils.ts # General utilities
βββ types/ # TypeScript definitions
β βββ contentful.ts # Contentful type definitions
βββ public/ # Static assets
βββ styles/ # Global styles
βββ middleware.ts # Next.js middleware
- Node.js 18.x or later
- pnpm 8.x or later (or npm/yarn)
- Contentful Account (for CMS functionality)
-
Clone the repository
git clone https://github.com/yourusername/davey-pics-studio.git cd davey-pics-studio -
Install dependencies
pnpm install
-
Set up environment variables
Create a
.env.localfile in the root directory:# Contentful CMS NEXT_PUBLIC_CONTENTFUL_SPACE_ID=your_space_id CONTENTFUL_ACCESS_TOKEN=your_access_token # Email Configuration EMAIL_FROM=your-email@example.com EMAIL_TO=recipient@example.com SMTP_HOST=smtp.gmail.com SMTP_PORT=587 SMTP_USER=your-smtp-user SMTP_PASS=your-smtp-password # Analytics (Optional) NEXT_PUBLIC_POSTHOG_KEY=your_posthog_key NEXT_PUBLIC_POSTHOG_HOST=https://app.posthog.com
-
Run the development server
pnpm dev
-
Open your browser
Navigate to http://localhost:3000
| Variable | Description | Required |
|---|---|---|
NEXT_PUBLIC_CONTENTFUL_SPACE_ID |
Contentful space ID | Yes |
CONTENTFUL_ACCESS_TOKEN |
Contentful access token | Yes |
EMAIL_FROM |
Sender email address | For contact form |
EMAIL_TO |
Recipient email address | For contact form |
SMTP_HOST |
SMTP server host | For contact form |
SMTP_PORT |
SMTP server port | For contact form |
SMTP_USER |
SMTP username | For contact form |
SMTP_PASS |
SMTP password | For contact form |
NEXT_PUBLIC_POSTHOG_KEY |
PostHog API key | Optional |
NEXT_PUBLIC_POSTHOG_HOST |
PostHog host URL | Optional |
- ISR over SSG: Using Incremental Static Regeneration with 60-second revalidation to balance performance with content freshness
- Graceful Degradation: Mock client provides sample data when Contentful is unavailable
- Image Optimization: Leveraging Contentful's image API with Next.js Image component for automatic optimization
- Server Components: Most components are React Server Components for reduced JavaScript bundle
- Suspense Boundaries: Strategic loading states for better perceived performance
- Dynamic Imports: Code splitting for heavy components
- Asset Optimization: Automatic image optimization with WebP/AVIF support
- Structured Data: JSON-LD for LocalBusiness, Organization, and Article schemas
- Dynamic Metadata: Page-specific titles and descriptions
- Semantic HTML: Proper heading hierarchy and ARIA labels
- Local SEO: Location-specific content and schema for Houston/Humble area
The site uses the following Contentful content types:
- Homepage - Hero images and featured content
- Blog Post - Articles with rich text and images
- Photo Gallery - Collections of photographs
- Park/Location - Photography location information
- Service - Photography services offered
- Photographer Info - Contact and bio information
See contentful-content-model.md for detailed schema information.
-
Push your code to GitHub
-
Import project in Vercel
- Connect your GitHub repository
- Vercel will auto-detect Next.js
-
Configure environment variables
- Add all required environment variables in Vercel dashboard
-
Deploy
vercel --prod
pnpm build # Production build
pnpm start # Start production server
pnpm lint # Run ESLintpnpm dev # Start development server
pnpm build # Build for production
pnpm start # Start production server
pnpm lint # Run ESLint- TypeScript for type safety
- ESLint for code quality
- Prettier (recommended) for code formatting
Target metrics for this project:
- Lighthouse Score: 95+ across all categories
- Core Web Vitals: Pass all thresholds
- Time to First Byte: < 200ms (with CDN)
- First Contentful Paint: < 1.5s
- Largest Contentful Paint: < 2.5s
- Environment Variables: Sensitive data stored securely
- CSRF Protection: Built into Next.js forms
- XSS Prevention: React's automatic escaping
- Content Security Policy: Ready for implementation
- Rate Limiting: Ready for API routes
This is a personal portfolio project, but suggestions and bug reports are welcome!
This project is private and proprietary.
David Martin
- Website: daveypicsstudio.com
- Instagram: @davey.pics
- Email: daveypicsstudio@gmail.com
- Location: Humble, Texas (Houston Area)
- Built with Next.js
- UI components from Radix UI
- Icons from Lucide
- Headless CMS by Contentful
- Deployed on Vercel
Note: This project showcases modern web development practices including Server Components, ISR, TypeScript, and comprehensive SEO optimization. It demonstrates proficiency with the Next.js ecosystem and production-ready application architecture.