Overview
SplitBox is built as a modern, lightweight browser application with minimal dependencies. The stack emphasizes performance, type safety, and developer experience.Core Technologies
React 19
Version:^19.2.0
React 19 provides the UI foundation with modern features:
- Concurrent rendering for smooth UI updates during heavy processing
- Automatic batching for efficient state updates
- Improved TypeScript support with better type inference
- Enhanced hooks for cleaner component logic
TypeScript
Version:~5.9.3
Full TypeScript coverage ensures type safety across the codebase:
- Strict type checking enabled
- Interface-driven component props
- Type definitions for all utilities and workers
- Path alias support (
@/→src/)
Vite
Version:^7.3.1
Ultra-fast build tool and development server:
- Lightning-fast HMR (Hot Module Replacement)
- SWC-based React plugin (
@vitejs/plugin-react-swc) for faster transforms - Optimized builds with automatic code splitting
- Dev server running on port 8080
vite.config.ts
Styling & UI
Tailwind CSS
Version:^3.4.19
Utility-first CSS framework:
- Responsive design utilities
- Custom CSS variables integration
- PostCSS and Autoprefixer for compatibility
- Minimal config with content scanning
tailwindcss:^3.4.19postcss:^8.5.6autoprefixer:^10.4.24
Custom Design System
Built with CSS variables defined inindex.css:
- Color system: Theme-aware custom properties
- Typography: Bodoni Moda (display), Hanken Grotesk (body), Fira Code (mono)
- Theme switching: Dark/light modes via
data-themeattribute - Animations: Custom keyframe animations in CSS
Icons
Custom inline SVG system viaCustomIcon component - no icon library dependencies.
Libraries & Utilities
Sonner
Version:^2.0.7
Toast notification system:
- Minimal, accessible notifications
- Promise-based API
- Auto-dismiss with configurable duration
- Used for copy confirmations and error messages
JSZip
Version:^3.10.1
Client-side ZIP generation:
- Creates downloadable ZIP archives
- Exports all batches with manifest
- No server dependency for file packaging
- Runs entirely in the browser
Development Tools
ESLint
Version:^9.39.1
Code quality and consistency:
@eslint/js:^9.39.1eslint-plugin-react-hooks:^7.0.1- Enforces Rules of Hookseslint-plugin-react-refresh:^0.4.24- HMR compatibility checkstypescript-eslint:^8.48.0- TypeScript-specific lintingglobals:^16.5.0- Global variable definitions
Vitest
Version:^4.0.18
Fast unit testing framework:
- Vite-native test runner
- Compatible with Vitest API
- JSDOM environment for browser simulation
- Watch mode for interactive development
vitest:^4.0.18jsdom:^27.4.0
TypeScript Tooling
@types/node:^24.10.1- Node.js type definitions@types/react:^19.2.7- React type definitions@types/react-dom:^19.2.3- React DOM type definitions
Build Pipeline
Development Workflow
- Vite starts dev server on port 8080
- SWC compiles React components
- PostCSS processes Tailwind utilities
- HMR enables instant updates
Production Build
- TypeScript compiler checks types (
tsc -b) - Vite bundles and optimizes code
- PostCSS processes and minifies CSS
- Output written to
dist/
Testing Pipeline
- Vitest loads test files
- JSDOM provides browser environment
- Tests execute with coverage reporting
Browser APIs
SplitBox leverages modern browser APIs:- Web Workers API - Background processing for splits
- Clipboard API - Copy batch contents
- Blob API - File downloads
- localStorage - Theme preference persistence
Notable Absences
SplitBox intentionally avoids common dependencies:- No state management library - Uses React’s built-in state
- No routing library - Single-page application
- No UI component library - Custom components only
- No icon library - Custom inline SVG system
- No backend - Fully client-side
- No analytics - Privacy-first, no tracking
Dependency Philosophy
The minimal dependency approach provides:- Smaller bundle size - Faster load times
- Fewer security vulnerabilities - Less attack surface
- Reduced maintenance - Fewer breaking changes
- Better performance - No unnecessary abstractions
- Full control - Custom implementations tailored to needs
Version Pinning
Dependencies use caret (^) ranges for minor/patch updates:
~) for stricter patch-only updates.