Live at: https://stringforge.io For archers, bowyers, and technicians who want to see the physics in real time.
v4.0.0 ย ยทย React 19 + TypeScript ย ยทย Vite ย ยทย Zustand ย ยทย Tailwind v4
181 tests passing ย ยทย PWA installable ย ยทย Works offline
StringForge is a browser-based physics simulator built for archers, bow techs, and bowyers who want to see what's actually happening when they change string materials, add speed weights, swap arrow shafts, or adjust nock height.
Every slider you move recalculates the full physics pipeline in real time โ string vibration modes, arrow velocity, energy distribution, ballistic trajectory, noise levels โ rendered in crisp SVG with zero plugins.
| ๐๏ธ 4 Bow Families | Compound (cam let-off), Recurve, Longbow, Crossbow |
| ๐งต 7 String Materials | BCY-X, 452X, 8190, D97, Dacron B-50, Fast Flight, 8125 โ real specs |
| ๐น 15 Arrow Shafts | Full builder: shaft + point + nock + fletching + wrap โ FOC & dynamic spine |
| โ๏ธ 8 Speed Weights | Brass & tungsten, drag-to-position, see exact fps tradeoff |
| ๐ 15 Bow Database | Mathews, Hoyt, Bowtech, PSE, Prime, Elite, Bear, Win&Win + more |
| ๐จ 7 Themes | Midnight, Neon, Dracula, Nord, Monokai, Catppuccin, High Contrast |
This isn't a toy calculator. Every number on screen comes from a real model.
fโ = (n / 2L) ร โ(T / ฮผ)
8 harmonic modes animated in real time. Place weights at antinodes to kill specific frequencies โ watch the damping happen live.
v = โ(2 ร ฮท ร E_stored / m_virtual)
where m_virtual = m_arrow + m_string/3
Force-draw curves computed via numerical integration. Efficiency factors calibrated per bow type.
F_drag = ยฝ ร Cd ร ฯ ร A ร vยฒ
Euler-integrated trajectory with quadratic drag, gravity, and wind. KE & momentum tables every 10 yards out to 100.
| Metric | Value |
|---|---|
| IBO compound speed | ~300 fps (70# / 30" / 350 gr) |
| String mass (24-strand BCY-X) | 70โ90 gr |
| Speed penalty | ~1.8 fps per 10 gr added |
| Fundamental frequency | 120โ160 Hz |
Full control panel on the left, animated string visualizer with weight positions, real-time stats bar across the top.
See exactly where every ft-lb goes: arrow KE, limb KE, string KE, hysteresis, vibration, and sound losses.
Vibration decay waterfall, calibrated dB noise estimate, and per-harmonic amplitude bars with weight placement guide.
All 7 themes swap instantly via CSS custom properties. No reload.
- 4 bow types with distinct force-draw profiles and efficiency curves
- 7 real string materials โ stretch, creep, mass-per-strand all from manufacturer data
- Strand count & tension affect fundamental frequency, harmonic spectrum, everything
- Brace height modeling โ see how it shifts stored energy and arrow speed
- 15 real-world shafts โ Easton, Gold Tip, Carbon Express, Victory, Black Eagle
- Dial in point weight, nock weight, fletching, wraps โ down to the grain
- Instant FOC calculation, static & dynamic spine, spine match recommendations
- Wind-adjusted ballistic tables with KE and momentum at every distance
- Paper tune diagnostic โ reads your tear pattern and tells you what's wrong
- Bare shaft comparison โ see point-of-impact shift vs fletched
- Walk-back tune โ detects rest alignment issues at distance
- Setup optimizer โ recommends nock height, rest position, arrow spine
- Vibration decay waterfall โ time-frequency visualization of post-shot ring
- Calibrated dB estimate โ peak and sustained noise with real-world comparisons
- Play Twang โ Web Audio synthesis of your exact string's harmonic profile
- Whisper Quiet badge โ earn it by getting noise below threshold
- 15-bow database โ specs from Mathews, Hoyt, Bowtech, PSE, Elite, Bear, Win&Win, Gillo, Howard Hill, TenPoint, Ravin + more
- 6 arrow presets โ Hunting Heavy, Hunting Standard, Hunting Light, Outdoor Target, Indoor Target, 3D
- Save/load profiles โ snapshot your entire setup to localStorage
- Share links โ base64-encoded URL shares your full config in one click
- Guided wizard โ takes your purpose, experience, arm span โ recommends draw weight, length, spine, shaft
- 11-step guided tour โ walks new users through every feature
- Version-aware: re-triggers on updates so you discover new stuff
- Full ARIA roles โ landmark regions, tablist navigation, live regions, skip-nav link
- High Contrast theme โ pure black + white + bright green for maximum readability
- PWA installable โ add to home screen, works offline via service worker
- State persistence โ every slider position auto-saved to localStorage
| Layer | Tech |
|---|---|
| โ๏ธ UI | React 19 + TypeScript (strict) |
| โก Build | Vite โ sub-second HMR, tree-shaken production builds |
| ๐ง State | Zustand โ single store, debounced localStorage persistence |
| ๐จ Styling | Tailwind CSS v4 + CSS custom properties for runtime theming |
| ๐ Charts | Pure inline SVG โ scales perfectly, razor sharp at any zoom |
| ๐งฎ Physics | Web Worker with auto-fallback to main thread |
| ๐ฆ Code Split | React.lazy() + Suspense โ 9 lazy-loaded components, ~25% smaller initial bundle |
| ๐งช Unit Tests | Vitest โ 145 tests across 6 test files |
| ๐ญ E2E Tests | Playwright โ 31 tests: smoke, a11y (axe-core), themes |
| ๐ธ Visual Regression | Playwright screenshots โ 5 baselines across 3 themes |
| ๐ CI/CD | GitHub Actions โ unit โ E2E on every push/PR |
| ๐ฑ PWA | manifest.json + service worker (network-first caching) |
| ๐ Tour | react-joyride โ theme-matched, version-aware |
git clone https://github.com/stringforge/stringforge.git
cd stringforge
npm install
npm run devOpen http://localhost:5173 and start tuning.
npm run build # Production build
npm run preview # Preview production build
npm test # Run all 145 unit tests
npm run test:e2e # Run 31 Playwright E2E + accessibility tests
npm run test:a11y # Run accessibility tests only (axe-core)
npm run test:visual # Run visual regression tests
npm run test:all # Run everything (unit + E2E + a11y)
npm run test:e2e:ui # Interactive Playwright UI mode
npm run lint # ESLint checke2e/
โโโ helpers.ts # Tour dismissal, theme setting, physics wait
โโโ app-loads.spec.ts # Core layout and rendering tests
โโโ bow-configuration.spec.ts # Bow type switching and physics updates
โโโ tab-navigation.spec.ts # Tab ARIA attributes and panel loading
โโโ wizard-flow.spec.ts # Setup wizard, glossary, docs modals
โโโ theme-switching.spec.ts # All 7 themes load and apply correctly
โโโ accessibility.spec.ts # axe-core WCAG 2.0 AA scans
โโโ visual.spec.ts # Screenshot baselines for regression
.github/workflows/
โโโ test.yml # CI pipeline: unit โ E2E + a11y on push/PR
src/
โโโ lib/
โ โโโ physics.ts # Core physics engine โ bow profiles, force-draw, velocity
โ โโโ physics.worker.ts # Web Worker entry point
โ โโโ usePhysicsWorker.ts # React hook โ worker with auto-fallback
โ โโโ arrow.ts # Arrow builder โ shafts, FOC, spine, ballistics
โ โโโ audio.ts # Sound synthesis, vibration waterfall, draw cycle
โ โโโ bows.ts # Bow database, profiles, presets, share links
โ โโโ glossary.ts # 28 archery terms + wizard recommendation engine
โ โโโ themes.ts # 7 themes with full color token system
โ โโโ persist.ts # localStorage state persistence
โ โโโ version.ts # Single source of truth for version
โโโ components/
โ โโโ StringVisualizer/ # Animated SVG string with harmonic modes
โ โโโ ControlPanel/ # Sliders, bow type picker, material selector
โ โโโ StatsBar/ # Real-time speed, energy, mass, frequency readout
โ โโโ DrawCycle/ # Animated draw sequence visualization
โ โโโ SoundAnalysis/ # Waterfall, dB meter, Play Twang
โ โโโ BowDatabase/ # Searchable bow specs + arrow presets
โ โโโ Profiles/ # Save/load/delete user profiles
โ โโโ ShareExport/ # Share links + text report export
โ โโโ Glossary/ # Modal glossary with search
โ โโโ Wizard/ # Multi-step setup wizard
โ โโโ Tour/ # Guided tour (react-joyride)
โ โโโ Tuning/ # Paper tune, bare shaft, walk-back, optimizer
โ โโโ Layout/ # Header, hamburger menu
โโโ store.ts # Zustand store โ params, weights, arrow, tuning
โโโ App.tsx # Root โ lazy loading, tabs, layout, ARIA
- Fork the repo
- Create a feature branch (
git checkout -b feature/my-thing) - Write tests for new physics or UI features
- Make sure all tests pass (
npm run test:all) - Open a PR with a clear description
MIT โ do what you want, just don't claim you invented bowstring physics.
Built with ๐น by StringForge.io
Because if you can't measure it, you can't tune it.



