Interactive portfolio website showcasing creative web development and animation techniques
Live Site: www.albinotonnina.com
- Interactive SVG Animations - Complex scene transitions with scroll-based animations
- Responsive Design - Optimized for desktop and mobile viewing
- Performance Optimized - Webpack 5 with code splitting and asset optimization
- Modern React - Built with React 18 and modern JavaScript
- Custom Animation Engine - Scroll-triggered animations with D3 interpolation
- Advanced SVG Rendering - Preserved gradient definitions and complex illustrations
This portfolio is licensed under CC BY-NC-ND 4.0. You are welcome to view, run, and experiment with the code locally for learning purposes. However, you may not modify and redistribute it, such as using it as your own portfolio by changing the name or content.
- Node.js
>=22.x - Yarn (recommended) or npm
# Clone the repository
git clone https://github.com/albinotonnina/albinotonnina.com.git
cd albinotonnina.com
# Install dependencies
yarn install# Start development server
yarn dev
# Open browser to http://localhost:8080The development server includes:
- Hot module replacement
- Fast refresh for React components
- Source maps for debugging
- Optimized SVG processing
- Animation Debugger - Press
Ctrl/Cmd + Dto toggle real-time animation info
For the best development experience, I recommend using VS Code with the following extensions:
- Stylelint - CSS linting integration
- Prettier - Code formatting
- Tailwind CSS IntelliSense - CSS class completion
- CSS Peek - Navigate to CSS definitions
- HTML CSS Class Completion - Auto-complete CSS classes
The project includes VS Code configuration for:
- β Format on save for consistent code style
- β CSS syntax highlighting with proper language association
- β Integrated linting with error highlighting
- β Auto-fix on save for Stylelint issues
# Build for production
yarn build
# Analyze bundle size
yarn analyze# Run tests
yarn test
# Run tests in watch mode
yarn test --watch# Lint JavaScript files
yarn lint
# Fix auto-fixable JavaScript issues
yarn lint:fix
# Lint CSS files
yarn lint:css
# Fix auto-fixable CSS issues
yarn lint:css:fix
# Format all files with Prettier
yarn format| Command | Description |
|---|---|
yarn dev |
Start development server with hot reload |
yarn build |
Build for production |
yarn analyze |
Analyze bundle size |
yarn test |
Run test suite |
yarn lint |
Lint JavaScript files |
yarn lint:fix |
Fix auto-fixable JavaScript issues |
yarn lint:css |
Lint CSS files |
yarn lint:css:fix |
Fix auto-fixable CSS issues |
yarn format |
Format all files with Prettier |
- React 18 - UI library with modern hooks
- Webpack 5 - Module bundler with advanced optimization
- Babel - JavaScript compiler with modern syntax support
- PostCSS - CSS processing with modern features
- D3 Interpolate - Smooth animation transitions
- SVG Filter - Dynamic SVG effects and filters
- Custom Animation Engine - Scroll-based scene transitions
- Complex SVG Illustrations - Hand-crafted vector graphics
- ESLint - Code linting with modern Babel parser and comprehensive rules
- Prettier - Code formatting with consistent style
- Stylelint - CSS linting with PostCSS support
- Jest - Testing framework
- Webpack Bundle Analyzer - Bundle size analysis
- VS Code Integration - Configured for optimal development experience
src/
βββ scene/ # Main interactive scene components
β βββ index.js # Scene component with SVG rendering
β βββ scene.svg # Complex interactive SVG illustration
β βββ transitions.js # Animation definitions
β βββ tickFunction.js # Animation engine
β βββ animationDebugger.js # Development animation debugger
β βββ calculateStyles.js # Animation style calculations
β βββ transition-utilities.js # Animation utility functions
βββ styles/ # CSS and styling
β βββ main.css # Main application styles
β βββ ...
βββ subtitles/ # Text content and subtitles
βββ images/ # Static assets
βββ utils/ # Utility functions
β βββ svg-id-processor.js # SVG processing utilities
βββ index.js # Application entry point
# Configuration files
βββ .eslintrc # ESLint configuration
βββ .prettierrc # Prettier configuration
βββ .stylelintrc # Stylelint configuration
βββ webpack.config.babel.js # Webpack configuration
βββ jest.config.js # Jest test configuration
βββ .vscode/ # VS Code workspace configuration
βββ settings.json # Editor settings
βββ extensions.json # Recommended extensions
- Scroll-triggered animations with precise timing control
- Gradient preservation during complex transformations
- Performance optimized rendering for large SVG files
- Cross-browser compatible animation engine
- React 18 with createRoot API
- Functional components with hooks
- Performance optimized with React.memo
- Clean separation of concerns
- Development/Production optimized builds
- Code splitting for optimal loading
- Asset optimization with modern loaders
- SVG processing with @svgr/webpack
- Fast development with filesystem caching
The project includes custom solutions for preserving SVG gradient stop-color attributes during animations. The animation system has been modified to prevent opacity inheritance issues that could break gradient definitions.
The project includes a powerful real-time animation debugger to help understand and modify the complex scene transitions:
Toggle Debugger: Press Ctrl/Cmd + D in the browser
Features:
- π Real-time timing and progress information
- π Current scene and animation state
- π Complete scene timeline with status indicators
- π― List of currently active animated elements
- π Scene-by-scene breakdown with timing details
Console Commands:
// Available in browser console
animationDebugger.jumpToScene("company"); // Jump to specific scene
animationDebugger.listScenes(); // Show all available scenes
animationDebugger.exportState(); // Export current state as JSON
animationDebugger.logState(); // Log detailed state infoFor detailed debugging information, see ANIMATION_DEBUG.md.
The project follows modern development practices:
Code Quality Standards:
- All JavaScript follows ESLint rules with modern Babel parser
- CSS follows Stylelint standards with PostCSS support
- Consistent formatting enforced by Prettier
- Comprehensive test coverage for utility functions
Development Workflow:
- Before committing, run
yarn lintandyarn lint:cssto check for issues - Use
yarn formatto ensure consistent code formatting - Fix linting issues with
yarn lint:fixandyarn lint:css:fixwhen possible - Test changes thoroughly using the animation debugger
- Maintain clean code with proper separation of concerns
File Organization:
- Animation logic separated into focused modules
- Utility functions extracted for reusability
- CSS organized with clear naming conventions
- Test files co-located with source code
- Use the debugger to understand current animation state
- Modify timing in the
SCENE_TIMINGobject intransitions.js - Add new animations using the existing generator patterns
- Test changes with the real-time debugger feedback
This project has been successfully modernized with the following improvements:
- React 18 with latest features and concurrent mode support
- Webpack 5 with improved bundling and tree-shaking
- Modern build tools (Babel 7, PostCSS, CSS optimization)
- Animation system refactor for improved maintainability
- Development tooling with hot module replacement and source maps
- Real-time animation debugger available in development mode only
- Toggle with Ctrl/Cmd+D to show/hide the debug overlay
- Zero production overhead - debug code is completely excluded from production builds
- Console API available at
window.animationDebuggerin development
- Production build size reduced by ~88% (181KB β 23KB) through effective tree-shaking
- Development-only features properly excluded from production
- SVG optimizations with proper gradient and animation preservation
- ESLint with modern Babel parser and comprehensive linting rules
- Prettier for consistent code formatting across the project
- Stylelint for CSS linting with PostCSS and modern CSS support
- VS Code integration with proper syntax highlighting and format-on-save
- Automated formatting and linting with pre-configured scripts
- Development workflow optimized for modern JavaScript/CSS development
This project is licensed under CC BY-NC-ND 4.0.
You are free to:
- Share β copy and redistribute the material in any medium or format
Under the following terms:
- Attribution β You must give appropriate credit
- NonCommercial β You may not use the material for commercial purposes
- NoDerivatives β You may not distribute modified material
Albino Tonnina
- Website: albinotonnina.com
- Email: albinotonnina@gmail.com
- LinkedIn: linkedin.com/in/albinotonnina
- GitHub: @albinotonnina
While this is a personal portfolio project, feedback and suggestions are welcome! Please feel free to open an issue or reach out directly.
Built with β€οΈ and lots of β