A modern, responsive photography portfolio website built with Next.js 15, TypeScript, and Tailwind CSS. Designed to showcase professional HD photography with fine art prints and photo licensing capabilities.
- Home - Hero section, featured photos, services overview
- Gallery - Responsive grid with search and category filtering
- About - Photographer bio, equipment, achievements
- Contact - Contact form with FAQ section
- Dark, modern theme optimized for photo showcase
- Fully responsive (mobile, tablet, desktop)
- Smooth animations and transitions
- Professional gradient accents
- Accessible UI with semantic HTML
- Photo licensing tiers (Personal, Commercial, Extended, Exclusive)
- Digital product options (Web, Full Resolution, RAW files)
- Contact form for inquiries
- API endpoint for form submissions
- Framework: Next.js 15 (App Router)
- Language: TypeScript
- Styling: Tailwind CSS
- Form Validation: Client & server-side
- Mobile Menu: Responsive hamburger menu
- SEO: Meta tags, Open Graph, sitemap ready
src/
βββ app/ # Next.js App Router
β βββ layout.tsx # Root layout
β βββ page.tsx # Home page
β βββ gallery/ # Gallery page
β βββ about/ # About page
β βββ contact/ # Contact page
β βββ api/
β βββ contact/ # Contact form API
βββ components/ # Reusable React components
β βββ Header.tsx # Navigation header
β βββ Footer.tsx # Footer
β βββ GalleryCard.tsx # Photo card
β βββ ContactForm.tsx # Contact form
βββ lib/ # Utilities & data
β βββ photos.ts # Sample photo data
β βββ utils.ts # Helper functions
βββ styles/
β βββ globals.css # Tailwind + custom styles
βββ types/
βββ index.ts # TypeScript interfaces
public/
βββ images/ # Image assets (placeholder)
- Node.js 18+
- npm or yarn
# Install dependencies
npm install
# Run development server
npm run dev
# Build for production
npm run build
# Start production server
npm startOpen http://localhost:3000 in your browser.
Create .env.local file:
# Site Configuration
NEXT_PUBLIC_SITE_URL=https://yoursite.com
NEXT_PUBLIC_SITE_NAME=Your Photo Portfolio
# Contact Form (optional - for email integration)
NEXT_PUBLIC_EMAIL_SERVICE=sendgrid
SENDGRID_API_KEY=your_key_here
EMAIL_FROM=photos@yoursite.com
EMAIL_TO=your-email@example.com- Update photographer info in
src/app/about/page.tsx - Modify photo data in
src/lib/photos.ts - Add real images to
public/images/ - Update social links in
src/components/Header.tsxandsrc/components/Footer.tsx - Adjust colors in
tailwind.config.ts
- Responsive grid layout (1-3 columns)
- Real-time search across titles, descriptions, and tags
- Category filtering (Landscape, Portrait, Wildlife, etc.)
- Photo cards with hover effects
- Pricing and licensing info
- Client and server-side validation
- Email validation
- Success/error notifications
- Accessible form fields
- Optional phone number field
/api/contact- POST endpoint for contact form- Form validation and error handling
- Ready for email service integration
- Push code to GitHub
- Import project in Vercel
- Configure environment variables
- Deploy with one click
- Netlify
- Railway
- Fly.io
- AWS Amplify
See plan.md for detailed deployment instructions.
- β Meta tags and descriptions
- β Open Graph tags for social sharing
- β Mobile-friendly responsive design
- β Performance optimized images
- β Fast page loads with Next.js
- β Accessibility best practices
- Performance: 90+
- Accessibility: 90+
- Best Practices: 90+
- SEO: 100
npm run dev # Start development server
npm run build # Build for production
npm start # Start production server
npm run lint # Run ESLint- ESLint configuration included
- TypeScript strict mode enabled
- Consistent code formatting with Tailwind
- Semantic HTML structure
- Image lightbox/modal viewer
- Dark/light mode toggle
- Blog section
- Advanced search and filtering
- Shopping cart for prints
- Payment integration
- Social media integration (Instagram, 500px, Facebook)
- Print-on-demand integration
- Digital file licensing
See plan.md for complete roadmap.
Β© 2025 Photo Portfolio. All rights reserved.
For questions or issues, please contact through the contact page.
Built with Next.js, React, TypeScript, and Tailwind CSS