Professional Portfolio β React + TypeScript application focused on performance, accessibility, and responsive design.
- About
- Architecture Overview
- Technologies
- Folder Structure
- Core Features
- Setup
- Run Locally
- Testing
- Deployment
- Future Improvements
- Author
Read the full Portuguese version here: README.pt-BR.md
This portfolio project by NΓcolas Harnisch demonstrates advanced skills in:
- React componentization with
TypeScript - Responsive design with
Tailwind CSS - Accessibility and keyboard-first navigation
- Smooth transitions with
framer-motion - Internationalization (i18n) with
LanguageContext(English/Portuguese) - Interactive 3D elements with
Spline - Dynamic Star Background for immersive UI
- Performance-focused architecture with
React.lazyandSuspense - Custom hooks and optimized UI rendering
The site includes sections: Hero, About, Experience, Tech Stack, Projects, and Footer.
- Vite + React + TypeScript: fast development server and production build.
- Component-based architecture: UI and logic separation.
- Context API:
LanguageContext(i18n),theme-provider(dark/light mode). - Custom hooks:
useMobile(mobile breakpoint detection)useScrollAnimation(entry animation on scroll)useTypingEffect(typewriter effect in Hero)useToast(toast notifications)
- Interactive 3D:
Splineintegration for high-end visual engagement. - Code Splitting: Heavy components (Spline, sections) are lazy-loaded to optimize initial TTI/LCP.
- React 18
- TypeScript
- Vite
- Tailwind CSS
- Framer Motion
- Lucide React
- shadcn/ui (design system)
- Spline 3D (3D scenes)
- Lucide React (icons)
- HSL Theming (Glassmorphism & Airy Premium)
- ESLint
- Prettier
- Husky (git hooks, optional)
- Vitest + Testing Library
src/
βββ components/
β βββ ui/ # Reusable UI components
β βββ About.tsx
β βββ Experience.tsx
β βββ Footer.tsx
β βββ Hero.tsx
β βββ Navbar.tsx
β βββ NavLink.tsx
β βββ ProjectCard.tsx
β βββ Projects.tsx
β βββ SplineScene.tsx # 3D interactive scene
β βββ StarBackground.tsx # Dynamic background
β βββ TechStack.tsx
β βββ WhatsAppButton.tsx
βββ contexts/
β βββ LanguageContext.tsx
β βββ theme-provider.tsx
βββ hooks/
β βββ use-mobile.tsx
β βββ use-scroll-animation.tsx
β βββ use-typing-effect.tsx
β βββ use-toast.ts
βββ lib/
β βββ utils.ts
βββ locales/
β βββ translations.ts
βββ pages/
β βββ Index.tsx
β βββ NotFound.tsx
βββ App.tsx
βββ main.tsx
βββ index.css
βββ vite-env.d.ts
- Fixed top navbar with smooth section scrolling
- Mobile menu toggle
- Active section indicator based on scroll position
- 320px mobile-first responsive support
- Typewriter effect using
useTypingEffect - CTA links: CV (Google Drive), LinkedIn, GitHub, Email
- Interactive 3D Robot/Scene (Spline)
- Persistent dark/light theme toggle with transition effects
- Dynamic Star Background following theme colors
- Timeline style experience section
- Skills and education highlights
- Buttons for downloading CV and contacting author
- Categorized stack cards
- Interactive chips and context-aware display
- Project cards with descriptions, tags, and links
- Dark mode style support on cards
- Search/filter hooks (if configured)
- Quick WhatsApp access button
- Detailed footer with navigation and social presence
- Multi-language support toggle (PT/EN) integrated in Navbar
- Keyboard focus styles and skip-to-content model
- High contrast and responsive typography
- Node.js v18+ recommended
- npm 10+ or pnpm
git clone https://github.com/NicolasHarnisch/Portifolio.git
cd Portifolio
npm installnpm run devOpen: http://localhost:5173
npm run build
npm run previewInstall test dependencies:
npm install -D vitest @testing-library/react @testing-library/jest-domRun tests:
npm run testnpm install -g vercel
vercel- Connect repository
- Build command:
npm run build - Publish directory:
dist
- Optional: setup with
gh-pagespackage
- Add unit tests and E2E tests
- Improve SEO with metadata and sitemap
- Add more content sections (blog/case studies)
- Add analytics and CI/CD pipeline
- GitHub: https://github.com/NicolasHarnisch
- LinkedIn: https://linkedin.com/in/nicolasharnisch
- Email: [email protected]