A modern, elegant personal website built with pure HTML, CSS, and JavaScript, featuring interactive magnetic field physics and comprehensive test coverage.
- ๐ฏ Interactive Magnetic Field: Real-time physics simulation with ripple effects
- ๐ Dark/Light Theme: Toggle between themes with automatic system preference detection
- ๐ฑ Responsive Design: Fully responsive design that works on all devices
- ๐จ Smooth Animations: Hover effects, button animations, and parallax effects
- โจ๏ธ Keyboard Shortcuts:
Ctrl/Cmd + K: Toggle themeSpace: Say hello
- ๐พ Persistent Settings: Theme preference saved to localStorage
- ๐งช Comprehensive Testing: 100% test coverage with 118 unit tests
- ๐ Performance Optimized: Smooth 60fps animations with efficient rendering
personal-website/
โโโ index.html # Main HTML file
โโโ about.html # About page
โโโ styles.css # CSS styles and animations
โโโ script.js # JavaScript functionality
โโโ package.json # Project dependencies and scripts
โโโ jest.config.js # Jest testing configuration
โโโ jest.setup.js # Jest test environment setup
โโโ .gitignore # Git ignore rules
โโโ __tests__/ # Test files directory
โ โโโ utils.test.js # Utility function tests
โ โโโ physics.test.js # Physics engine tests
โ โโโ ripple-manager.test.js # Ripple system tests
โ โโโ grid-manager.test.js # Grid system tests
โ โโโ renderer.test.js # Canvas rendering tests
โ โโโ ui-components.test.js # UI component tests
โ โโโ notification-manager.test.js # Notification tests
โ โโโ keyboard-shortcuts.test.js # Keyboard event tests
โโโ README.md # This file
- Node.js (v14 or higher)
- npm (comes with Node.js)
-
Clone the repository
git clone <repository-url> cd personal-website
-
Install dependencies
npm install
-
Run tests (optional but recommended)
npm test -
Open in browser
- Simply open
index.htmlin your web browser - Or use a local server:
python -m http.server 8000
- Simply open
This project includes comprehensive unit testing with 100% test coverage:
- 8 test suites with 118 tests
- Utils: Distance calculations, angle normalization, DOM interaction detection
- PhysicsEngine: Magnetic force calculations, line updates, physics simulation
- RippleManager: Ripple creation, force calculations, state management
- GridManager: Grid line generation, responsive sizing, canvas handling
- Renderer: Canvas drawing operations, ripples, lines, dots
- UIComponents: Theme switching, hover effects, ripple animations
- NotificationManager: Toast notifications, animations, cleanup
- KeyboardShortcuts: Event handling, theme toggle, greeting system
# Run all tests
npm test
# Run tests with coverage report
npm test -- --coverage
# Run tests in watch mode
npm test -- --watch
# Run specific test file
npm test -- __tests__/physics.test.jsTest Suites: 8 passed, 8 total
Tests: 118 passed, 118 total
Snapshots: 0 total
Time: 0.534 s
- HTML5: Semantic markup and accessibility
- CSS3: Modern styling with CSS Grid, Flexbox, and custom properties
- Vanilla JavaScript: No frameworks or libraries
- Canvas API: Real-time graphics and physics rendering
- Jest: Comprehensive testing framework
- JSDOM: DOM simulation for testing
- Google Fonts: Inter font family for typography
- Real-time Simulation: Lines respond to mouse/touch position
- Ripple Effects: Dynamic ripple creation with physics-based forces
- Smooth Animations: 60fps rendering with optimized performance
- Responsive Grid: Adaptive grid system that scales with screen size
- Automatic Detection: Respects system dark/light mode preference
- Manual Toggle: Keyboard shortcut (Ctrl/Cmd + K) or button click
- Persistent Storage: Theme preference saved across sessions
- Smooth Transitions: CSS transitions for theme changes
- Theme Toggle:
Ctrl/Cmd + K - Greeting:
Space(when not focused on input elements) - Accessibility: Full keyboard navigation support
- CSS Custom Properties: Easy theme switching and maintainable code
- Smooth Animations: CSS transitions and keyframe animations
- Modern Typography: Inter font with proper font weights and spacing
- Accessibility: Proper semantic HTML and keyboard navigation
- Performance: Optimized animations and minimal JavaScript footprint
- Chrome (latest)
- Firefox (latest)
- Safari (latest)
- Edge (latest)
npm test # Run test suite
npm test -- --watch # Run tests in watch mode
npm test -- --coverage # Generate coverage report- 100% Test Coverage: All core functionality is tested
- ESLint Ready: Code follows JavaScript best practices
- Modular Architecture: Clean separation of concerns
- Performance Optimized: Efficient rendering and memory management
The website is built to be easily customizable:
- Colors: Modify CSS custom properties in
:root - Typography: Change the Google Fonts import in
index.html - Content: Update the HTML content in
index.html - Animations: Adjust timing and effects in
styles.css - Physics: Tune magnetic field parameters in
script.js
- Multi-touch Support - Create multiple ripples simultaneously with touch gestures
- Physics Playground - Different force types (gravity wells, repulsion, attraction zones)
- 3D Effects - Add depth, perspective, and 3D transformations to the magnetic field
- Interactive Resume - Hover sections to see details with magnetic attraction effects
- Dynamic Theme - Automatically adjust theme based on Seattle's weather conditions
- Hidden Easter Eggs - Secret interactions and discoveries throughout the site
- Mini-games - Fun interactive games using the magnetic field mechanics
- Achievement System - Unlock new visual effects and interactions
- Konami Code - Classic easter egg implementation
- Hidden Patterns - Draw specific shapes to trigger special effects
- Audio Reactivity - Microphone input for sound-based interactions
- Gesture Recognition - Hand tracking and gesture controls
- Device Sensors - Accelerometer, gyroscope, and proximity sensor integration
- Particle Systems - Floating particles and trail effects
- WebGL Integration - GPU-accelerated rendering for complex effects
This project is open source and available under the MIT License.
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Write tests for your changes
- Ensure all tests pass (
npm test) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Lines of Code: ~1,500+ (including tests)
- Test Coverage: 100%
- Dependencies: 0 runtime dependencies
- Build Time: 0 (no build process required)
- Bundle Size: Minimal (vanilla JS)
Built with โค๏ธ by Baran Usluel | VR Software Engineer at Meta Reality Labs