A modern, responsive portfolio website built with Next.js 15, featuring full internationalization (Hebrew/English) and dark/light themes.
- Bilingual Support: Full Hebrew and English translations with RTL/LTR layout switching
- Dark/Light Themes: Complete theming system with smooth transitions
- Responsive Design: Mobile-first approach with breakpoint-based layouts
- Smooth Scrolling: Navigation with smooth scroll to sections
- Modern Animations: Framer Motion animations throughout the site
- Navigation: Fixed navbar with smooth scrolling, theme toggle, and language switcher
- Hero Section: Full-width hero with call-to-action and animated elements
- About Section: Personal description with rotating profile image animation
- Work Section: Genre showcase with alternating layouts and progress bars
- Best Tracks: Responsive grid of track cards with YouTube integration
- Services: Service cards with gradient icons and hover effects
- Contact/Collaborate: Contact form with Zod validation and animated submissions
- Footer: Social media links and site information
- Framework: Next.js 15 with App Router
- Styling: Tailwind CSS v4 with CSS custom properties
- Components: shadcn/ui component library
- Animations: Framer Motion
- Forms: React Hook Form with Zod validation
- Internationalization: next-intl
- Theming: next-themes
- Icons: Lucide React
src/
├── app/
│ ├── [locale]/ # Internationalized routes
│ │ ├── layout.tsx # Locale-specific layout
│ │ └── page.tsx # Main portfolio page
│ ├── globals.css # Global styles and theme variables
│ └── layout.tsx # Root layout
├── components/
│ ├── globals/ # App-wide components
│ │ ├── theme-provider.tsx
│ │ ├── ThemeToggle.tsx
│ │ └── language-toggle.tsx
│ ├── sections/ # Page sections
│ │ ├── navigation.tsx
│ │ ├── hero.tsx
│ │ ├── about.tsx
│ │ ├── work.tsx
│ │ ├── best-tracks.tsx
│ │ ├── services.tsx
│ │ ├── contact.tsx
│ │ └── footer.tsx
│ └── ui/ # Reusable UI components
│ ├── button.tsx
│ ├── card.tsx
│ ├── input.tsx
│ ├── textarea.tsx
│ └── label.tsx
├── lib/
│ ├── i18n/ # Internationalization
│ │ ├── config.ts
│ │ └── request.ts
│ └── utils.ts # Utility functions
├── messages/ # Translation files
│ ├── en.json # English translations
│ └── he.json # Hebrew translations
└── middleware.ts # Next.js middleware for i18n
The portfolio supports Hebrew and English with:
- Complete translation coverage for all text content
- RTL layout support for Hebrew
- Locale-aware routing (
/en,/he) - Language toggle in navigation
- Direction-aware component layouts
- Add new keys to
messages/en.jsonandmessages/he.json - Use
useTranslations()hook in components:
const t = useTranslations("sectionName");
// Usage: {t("keyName")}Built with comprehensive dark/light theme support:
- CSS custom properties for all colors
- Semantic color tokens (primary, secondary, accent, etc.)
- Theme-aware components
- Smooth theme transitions
- System theme detection
All themes use semantic color tokens defined in globals.css:
--background,--foreground--primary,--primary-foreground--secondary,--secondary-foreground--muted,--muted-foreground--accent,--accent-foreground--card,--card-foreground--border,--input,--ring
Mobile-first approach with breakpoints:
- sm: 640px
- md: 768px
- lg: 1024px
- xl: 1280px
- Grid layouts that adapt to screen size
- Flexible spacing and typography scaling
- Touch-friendly navigation on mobile
- Optimized image loading with Next.js Image
Framer Motion animations include:
- Page load animations with staggered reveals
- Hover effects on interactive elements
- Scroll-triggered animations
- Rotating image borders and floating elements
- Form submission states
- Smooth page transitions
The contact form features:
- Zod schema validation
- Real-time error display
- Loading states during submission
- Success/error feedback
- Accessible form controls
- Name: Minimum 2 characters
- Email: Valid email format
- Message: Minimum 10 characters
-
Install dependencies:
pnpm install
-
Run development server:
pnpm dev
-
Build for production:
pnpm build
-
Start production server:
pnpm start
Add to .env.local:
# Add any API keys or configuration here
NEXT_PUBLIC_YOUTUBE_API_KEY=your_youtube_api_key- Colors: Modify theme variables in
globals.css - Translations: Update
messages/en.jsonandmessages/he.json - Content: Edit section components in
src/components/sections/ - Styling: Adjust Tailwind classes or add custom CSS
- next: ^15.5.2
- react: ^19.1.0
- typescript: ^5
- tailwindcss: ^4
- @radix-ui/react-*: Various UI primitives
- lucide-react: ^0.542.0
- class-variance-authority: ^0.7.1
- clsx: ^2.1.1
- tailwind-merge: ^3.3.1
- next-intl: ^4.3.6
- next-themes: ^0.4.6
- framer-motion: ^12.23.12
- react-hook-form: ^7.62.0
- @hookform/resolvers: ^5.2.1
- zod: ^4.1.5
- Static generation for optimal loading
- Image optimization with Next.js Image
- Code splitting by route
- Efficient animation loading
- Minimal bundle size
© 2024 Tal Shimoni. All rights reserved.
Portfolio built with love for music and technology 🎵