Toolbox is a Frappe Framework web application of small, focused utilities. It owns the whole
site, so each tool sits at the site root: /calculator, not /toolbox/calculator.
The site needs no account. There is no signup, no login, and no user record. Every visitor is a Guest, and the page renders the same for all of them.
Results are deterministic, and Toolbox uses no AI. Most calculations run in the browser. Toolbox also states the limits of its data. A fetch time is never shown as a source update time, and reference data is never labeled "live".
A browser can install Toolbox as a PWA. Then 26 of the 33 tools work with no connection. The four dataset lookups still need one, and the currency converter falls back to the rates it stored last.
Toolbox has 33 tools in seven categories. Each tool has its own URL.
| Category | Tools |
|---|---|
| Calculate (7) | Calculator · EMI Calculator · Compound Interest Calculator · SIP Calculator · CAGR Calculator · Future Value Calculator · Break-Even Calculator |
| Convert (11) | Length Converter · Area Converter · Volume Converter · Weight Converter · Temperature Converter · Speed Converter · Time Unit Converter · Data Storage Converter · Fuel Consumption Converter · Currency Converter · Time Zone Converter |
| Health (4) | BMI Calculator · BMR Calculator · TDEE Calculator · Pace Calculator |
| India (4) | GST Calculator · HSN & SAC Lookup · PIN Code Search · IFSC Code Search |
| Time (3) | Timer · Stopwatch · Countdown Timer |
| Information (2) | Dictionary · Script Conversion |
| Media (2) | Audio Recorder · Audio Editor |
Nothing on the server, and almost nothing in the browser.
Preferences use sessionStorage, so they end with the browser tab. No tool keeps a record of what
was worked out in it.
Two values use localStorage, and only two:
- The theme. It stops a returning dark-mode visitor from seeing a white page first.
- The European Central Bank rate table. It lets the currency converter work on the first offline visit of a session.
Both hold public data, and neither one names anybody.
Each dataset-backed tool ships its data through a versioned, checksum-verified manifest, and shows the "last updated" date of the source itself. The live site lists the same information at frappe.tools/data-sources.
| Data | Source | License |
|---|---|---|
| PIN codes | Department of Posts, via data.gov.in | Government Open Data License – India |
| Bank IFSC codes | Razorpay IFSC, derived from RBI and NPCI publications | Public domain |
| HSN & SAC codes | CBIC GST classification, compiled by India Compliance | GNU General Public License v3 |
| Dictionary | Princeton WordNet 3.1 | WordNet License |
| Currency rates | European Central Bank | Reference rates, for information only |
| India map outline | geoBoundaries ADM1 | CC BY 2.5 IN |
The HSN and SAC lookup reads the release that Toolbox imports itself, so it needs no ERPNext or India Compliance install. The India Compliance project compiles the dataset. It is not a runtime dependency.
cd $PATH_TO_YOUR_BENCH
bench get-app $URL_OF_THIS_REPO --branch develop
bench install-app toolboxRun these commands from apps/toolbox.
yarn install
yarn dev # Vite dev server
yarn build # production assets
yarn test # frontend unit tests (Vitest)
yarn test:e2e # browser tests (Playwright)
yarn verify # Vitest, build, Python tests, then PlaywrightRun the Python tests from the bench root.
bench --site <site> run-tests --app toolboxLet the dataset sync finish before you run the Python tests. migrate queues the sync, and an
import holds row locks that the integration tests wait for.
Run the full Playwright matrix on its own. Two matrices at once, or one beside a build, starve the single web server, and every test then fails on a navigation timeout that reads like a real regression.
The application icons are generated, not drawn by hand. Run python scripts/generate_icons.py
after any change to the geometry, then python scripts/build_og_card.py to rebuild the social
card from the new 512px icon.
This app uses pre-commit for formatting and linting. Install
pre-commit and enable it:
cd apps/toolbox
pre-commit installRuff formats and lints the Python. ESLint checks the JavaScript and Vue files.
Do not run pre-commit run --all-files. It includes the Prettier hook, and the installed version
reformats the whole frontend against its own conventions. Run one hook at a time instead:
pre-commit run ruff --all-files
pre-commit run ruff-format --all-files
pre-commit run eslint --all-filesWrite JavaScript and Vue with single quotes, no semicolons, and two-space indentation.
