Personal portfolio of Shalev Shaul, a Full-Stack Developer with expertise in UI/UX, animation, and modern frontend architecture.
| Next.js 15 | App Router, Server Components, generateMetadata |
| TypeScript | Strict mode throughout |
| Tailwind CSS v4 | CSS custom property design tokens, dark / light mode |
| Framer Motion | Scroll-driven animations, shared motion system |
| React Three Fiber | 3D WebGL hero canvas |
| next-intl | EN / HE bilingual + full RTL layout |
| Vercel | Deployment |
Live WebGL icosphere built with React Three Fiber - lazy-loaded, SSR disabled, with PerformanceMonitor for auto quality scaling on slow devices.
Unified motion system via lib/motion.ts. All scroll reveals use shared variants with whileInView, stagger, and full prefers-reduced-motion support.
Full RTL layout support via next-intl. Every string lives in /messages - no hardcoded text in components.
CSS custom property token system powered by next-themes. Dark is the primary aesthetic; light mode is a clean white counterpart.
generateMetadata on every route, OpenGraph tags, JSON-LD Person schema, hreflang for EN/HE, sitemap and robots.txt.
WCAG 2.1 AA compliant - logical heading hierarchy, keyboard navigable, :focus-visible rings, aria-label on all icon buttons, reduced-motion aware animations.
Submitting the contact form triggers a full n8n automation pipeline — no manual handling required:
- The sender receives an instant confirmation email
- A detailed email notification and a Telegram message are dispatched simultaneously for immediate awareness
- The submission is logged to Google Sheets in real time for a clean record of all inquiries
- A follow-up reminder fires automatically after 12 hours if the inquiry hasn't been responded to yet
- Google Analytics - page view and event tracking
- Microsoft Clarity - session recording and heatmaps
app/[locale]/ # All routes under /en or /he
components/
layout/ # Navbar, Footer, ThemeToggle, LangToggle
sections/ # Hero, About, Skills, Services, Projects, Contact
three/ # HeroCanvas (R3F, SSR disabled)
ui/ # Button, SectionWrapper, ProjectRow, TechTag…
data/ # projects.ts, skills.ts
lib/ # motion.ts (shared variants), skillIcons.ts
messages/ # en.json, he.json
public/projects/ # Project screenshots (.webp)
- Projects -
data/projects.ts.featured: true→ full-width row.scrollDurationcontrols hover-scroll speed per project. - Skills -
data/skills.ts(skillsRow1/skillsRow2). - Copy -
messages/en.jsonandmessages/he.json.
