Professional chess position visualizer with ultra-HD export capabilities
- π Table of Contents
- π Overview
- β¨ Features
- πΌ Demo & Screenshots
- π Quick Start
- π Project Structure
- π οΈ Technology Stack
- π Browser Support
- π Security & Privacy
- π€ Contributing
- π License
- π¨βπ» Author
- π Acknowledgments
- π§ Support & Contact
- FAQ
Chess Diagram Generator is a modern web application for creating high-quality chess diagrams from FEN notation.
It is built for chess players, coaches, authors, streamers, and developers who need fast, precise, and customizable board visuals.
- Full FEN notation support with validation
- Multi-FEN input (up to 10 positions)
- Ultra-HD PNG & JPEG export (up to 12,800Γ12,800px)
- Batch export & clipboard copy
- 23 professional piece sets
- Advanced color picker & themes
- Favorites, history & famous positions
- Board flip & coordinates
Live demo: https://chess-viewer-site.vercel.app
Node.js >= 16
npm >= 8# Clone the repository
git clone https://github.com/BilgeGates/chess_viewer.git
# Navigate to project directory
cd chess_viewer
# Install dependencies
npm install
# or
yarn install
# Start development server
npm start
# or
yarn startThe application will automatically open at http://localhost:3000
# Create optimized production build
npm run build
# Preview production build locally
npm run preview
# Deploy to Vercel (requires Vercel CLI)
vercel --prodComplete File Tree (Click to expand)
chess_viewer/
β
βββ π public/
β βββ index.html
β
βββ π src/
β β
β βββ π components/
β β β
β β βββ π board/ # Chess Board Rendering
β β β βββ BoardSquare.jsx # Single square component (memoized)
β β β βββ BoardGrid.jsx # 8Γ8 grid layout
β β β βββ ChessBoard.jsx # Main board with Canvas rendering
β β β βββ MiniChessPreview.jsx # Thumbnail for history
β β β βββ index.js
β β β
β β βββ π controls/ # Control Panel System
β β β β
β β β βββ π atoms/ # Atomic components
β β β β βββ FENInputField.jsx
β β β β βββ FamousPositionButton.jsx
β β β β βββ index.js
β β β β
β β β βββ π modals/ # Modal dialogs
β β β β βββ AdvancedFENInputModal.jsx
β β β β βββ ExportSettingsModal.jsx
β β β β βββ FENHistoryModal.jsx
β β β β βββ ThemeModal.jsx
β β β β βββ index.js
β β β β
β β β βββ ControlPanel.jsx # Main control container
β β β βββ BoardSizeControl.jsx
β β β βββ DisplayOptions.jsx
β β β βββ ExportSettings.jsx
β β β βββ FENInput.jsx
β β β βββ PieceSelector.jsx
β β β βββ ThemeSelector.jsx
β β β βββ index.js
β β β
β β βββ π ui/ # Reusable UI Components
β β β β
β β β βββ π base/ # Base components
β β β β βββ Badge.jsx
β β β β βββ Button.jsx
β β β β βββ Card.jsx
β β β β βββ Checkbox.jsx
β β β β βββ Input.jsx
β β β β βββ Modal.jsx
β β β β βββ Select.jsx
β β β β βββ SearchableSelect.jsx
β β β β βββ RangeSlider.jsx
β β β β βββ index.js
β β β β
β β β βββ π color-picker/ # Advanced color picker
β β β β β
β β β β βββ π parts/ # Picker components
β β β β β βββ ColorCanvas.jsx
β β β β β βββ ColorInput.jsx
β β β β β βββ ColorPalettes.jsx
β β β β β βββ ColorSwatch.jsx
β β β β β βββ HueSlider.jsx
β β β β β βββ PrimaryActions.jsx
β β β β β βββ SelectedPreview.jsx
β β β β β βββ ThemePresetCard.jsx
β β β β β βββ index.js
β β β β β
β β β β βββ π views/ # Picker views
β β β β β βββ ThemeMainView.jsx
β β β β β βββ ThemeAdvancedPickerView.jsx
β β β β β βββ ThemeSettingsView.jsx
β β β β β βββ index.js
β β β β β
β β β β βββ ColorPicker.jsx
β β β β βββ PickerModal.jsx
β β β β βββ index.js
β β β β
β β β βββ ActionButtons.jsx
β β β βββ ExportProgress.jsx
β β β βββ NotificationContainer.jsx
β β β βββ UserGuide.jsx
β β β βββ index.js
β β β
β β βββ π layout/ # Layout components
β β βββ Navbar.jsx
β β βββ Footer.jsx
β β βββ index.js
β β
β βββ π pages/ # Application pages
β β βββ HomePage.jsx
β β βββ AboutPage.jsx
β β βββ DownloadPage.jsx
β β βββ SupportPage.jsx
β β βββ index.js
β β
β βββ π hooks/ # Custom React hooks
β β βββ useChessBoard.js # FEN parsing & validation
β β βββ usePieceImages.js # Image loading & caching
β β βββ useFENHistory.js # History management
β β βββ useTheme.js # Theme state
β β βββ useNotifications.js # Toast system
β β βββ useLocalStorage.js # Persistent storage
β β βββ useColorState.js # Color picker state
β β βββ useColorConversion.js # Color utilities
β β βββ useCanvasPicker.js # Canvas interactions
β β βββ useOutsideClick.js # Click outside detection
β β βββ index.js
β β
β βββ π utils/ # Utility functions
β β βββ fenParser.js # FEN validation & parsing
β β βββ colorUtils.js # Color conversions
β β βββ coordinateCalculations.js # Board coordinates
β β βββ canvasExporter.js # Export logic
β β βββ imageOptimizer.js # Canvas optimization
β β βββ index.js
β β
β βββ π constants/ # Application constants
β β βββ chessConstants.js # Piece sets, themes, positions
β β βββ index.js
β β
β βββ π routes/ # Routing configuration
β β βββ Router.jsx
β β
β βββ App.jsx # Root component
β βββ index.js # Entry point
β βββ index.css # Global styles
β
βββ π .env # Environment variables
βββ π .gitignore
βββ π postcss.config.js
βββ π tailwind.config.js
βββ π package.json
βββ π package-lock.json
βββ π vercel.json # Vercel deployment config
βββ π README.md
βββ π CONTRIBUTING.md
βββ π ARCHITECTURE.md
βββ π SECURITY.md
βββ π CODE_OF_CONDUCT.md
βββ π FAQ.md
βββ π LICENSE
|
React (18+ compatible, built with 19.x) UI Framework |
JavaScript ES6+ Language |
Tailwind CSS 3.3.5 Styling |
HTML5 Canvas Rendering |
Node.js 16+ Runtime |
- Rendering: HTML5 Canvas
- Optimization: React.memo, useCallback, useMemo
- Storage: localStorage (browser native)
- Deployment: Vercel (Edge + CDN)
| Browser | Version | Status |
|---|---|---|
| Chrome | 90+ | β Tested |
| Firefox | 88+ | β Tested |
| Safari | 14+ | β Expected to work |
| Edge | 90+ | β Expected to work |
| Opera | 76+ | β Expected to work |
- HTML5 Canvas API
- ES6+ JavaScript
- CSS Grid & Flexbox
- Clipboard API (optional)
- localStorage API
This project follows a privacy-first, zero-backend architecture.
All functionality runs entirely in the user's browser with no external data flow.
- β No server-side data storage
- β Client-side processing only
- β No cookies, trackers, or fingerprinting
- β No third-party analytics or telemetry
- β No user data is collected, stored, or transmitted
- No authentication or user accounts
- No sensitive or personal data processed
- No external APIs or background requests
- Attack surface limited to static client-side execution only
Chess Diagram Generator will never upload, sync, or share your data.
All positions, exports, favorites, and settings remain local to your device.
We welcome contributions! Please see CONTRIBUTING.md for detailed guidelines.
# 1. Fork the repository
# 2. Create your feature branch
git checkout -b feature/amazing-feature
# 3. Commit your changes
git commit -m 'Add amazing feature'
# 4. Push to the branch
git push origin feature/amazing-feature
# 5. Open a Pull RequestThis project is licensed under the MIT License - see the LICENSE file for details.
MIT License
Copyright (c) 2026 Khatai Huseynzada
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
This project wouldn't be possible without these amazing resources:
|
Lichess Lichess piece SVGs |
React Team Amazing framework |
Tailwind Labs Beautiful utilities |
Lucide Icons Icon library |
- Lichess.org - Inspiration and FEN notation standards
- Vercel - Hosting and deployment platform
| Channel | Link |
|---|---|
| π Bug Reports | GitHub Issues |
| π‘ Feature Requests | GitHub Discussions |
| π§ Email | [email protected] |
Responses on a best-effort basis
How do I report a bug?
- Check if the issue already exists in GitHub Issues
- If not, create a new issue with:
- Clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Screenshots (if applicable)
- Browser and OS information
Can I use this commercially?
Yes! This project is MIT licensed, which means you can use it for commercial purposes.
Just include the license notice in your project.
How do I add a new piece set?
- Add piece images to
/public/pieces/[set-name]/ - Update
PIECE_SETSinsrc/constants/chessConstants.js - Submit a pull request with your changes
Can I export to SVG format?
Currently only PNG and JPEG are supported.
SVG export is planned for version 4.0.0.
You can track progress in Issue #1.
Β© 2026 Khatai Huseynzada. Licensed under MIT.
