Calculate charged-particle stopping powers (dE/dx) and CSDA ranges directly in the browser — no installation required. Select a particle, a target material, and an energy range; get numerical results and interactive plots instantly. Based on the libdedx library, running fully client-side via WebAssembly.
| URL | What's there | Deployment | |
|---|---|---|---|
| v2 (development) | aptg.github.io/web_dev | Open beta candidate — Stage 7 complete; Stage 8 user-feedback cycle active | Continuous on master |
| v1.1.0 (stable) | aptg.github.io/web | Last stable release — fully functional but based on the old React stack | Released 1 April 2022 |
v1.1.0 (April 2022) has several limitations: no unit handling, React 17 class components with no TypeScript, and plots that do not meet the needs of typical physics workflows.
v2 is a ground-up rewrite addressing all of the above. It is also an experiment in AI-assisted (vibe-coded) development — the codebase is written by AI agents (GitHub Copilot, Claude Code, opencode) guided by spec-driven prompts, with human review. Stage 7 (E2E tests, UI polish, WASM error handling, and external .webdedx data) is complete; the app is now entering Stage 8 open beta and user feedback. v2.0.0 will replace the stable site on first production release.
- PSTAR (NIST) — proton stopping powers
- ATIMA — similar scope, different library
Prerequisites: Docker (for the WASM build), Node.js 24+, pnpm.
Build the WASM module (requires Docker; pulls emscripten/emsdk:5.0.5, ~2 min on first run). The parentheses run this in a subshell so your terminal stays in the project root:
(cd wasm && ./build.sh)Back in the project root, install dependencies and start the dev server:
pnpm install && pnpm devOpen http://localhost:5173.
Playwright serves the built app with pnpm preview, so the safe local flow is:
pnpm build
pnpm test:e2epnpm build now runs node scripts/deploy.cjs via prebuild, so
static/deploy.json is generated automatically and no extra manual step is
needed before E2E.
To maintain a secure and clean codebase, follow these rules when managing dependencies and addressing security vulnerabilities:
- Prefer Direct Upgrades: If
pnpm auditor Dependabot flags a vulnerability in a transitive dependency, prefer upgrading the direct dependency that pulls it in. Do not jump to adding overrides immediately. - Minimal Overrides: Only use overrides as a last resort if no compatible upstream release exists.
- Workspace-Level Configuration: Define overrides in the root
pnpm-workspace.yamlunder theoverrides:key (rather thanpackage.json'spnpm.overridesblock) for workspace-wide consistency, and keep lockfile config aligned with that source to avoidERR_PNPM_LOCKFILE_CONFIG_MISMATCH. - Document Overrides: Every override must be documented. Use standard YAML comments directly above each override entry in
pnpm-workspace.yaml. The comment must reference the GHSA ID it mitigates and link to the upstream issue tracking the proper fix.
| Redesign plan | Stage-by-stage implementation plan and current status |
| Project vision | Target audience, core use cases, design principles |
| Feature specs | Per-feature specs with acceptance criteria |
| WASM API contract | TypeScript ↔ libdedx interface |
| Deployment | GitHub Pages pipeline and CI |
| AI changelog | Log of all AI-assisted sessions |
Developed by Piotr Połeć and Marek Ślązak under supervision of Leszek Grzanka