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 π΅