Dulus
An AI agent for your desktop and terminal, on any model you choose. Hosted models run on Fuel, paid in $DULUS.
Free online calculators for the trades: superheat and subcooling, refrigerant PT charts, voltage drop and epoxy coverage, plus offline phone apps.
OtherHTML · PythonGitHub @andronaftOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Free calculators for HVAC, electrical and floor coating by Dre Dev
Loading the full README.
Read the full README ↗Free calculators for the trades (HVAC, electrical, floor coating) that promote the Dre Dev apps.
build.py generates the static site into site/. It is served at https://zhukovskyi.space/calculators/: in the my_space repo run python3 tools/sync_calculators.py, then ./deploy.sh.docs/ (GitHub Pages, the old address andronaft.github.io/dredev-tools) holds only redirect pages to the new address. Commit and push it when the list of pages changes.~/Desktop/mobile_sub_app/*), so the build runs only on that machine. Commit the regenerated site/ and docs/ after every build.config.json: site URL, store links and the beta tester group. Fill a link in, run python3 build.py, commit, push.assets/calc.js mirrors the apps' Dart engines (PT interpolation, voltage drop, coating coverage). Keep them in step.trust.py): methodology.html, verification.html (checked examples) and changelog.html. Add a line to CHANGES in trust.py whenever a formula or a number changes.verification.json: rows from the sources next to the expected answer. build.py runs them through assets/calc.js (tools/verify.mjs, needs node) and stops if one is off. Change "checked" only after reading the sources again: that date is printed on the calculator pages.lastmod.json: hash and date of each page's content, so the sitemap's lastmod and dateModified move only when a page really changes. Commit it with site/.zhukovskyi.space/apps/<slug>/. config.json still decides the buttons: set google_play_live or app_store_url and the "Become a tester" button becomes a store link.python3 build.py && python3 -m unittest discover tests && node --test "tests/*.test.mjs"./usr/bin/python3 tools/og_image.py writes assets/og.jpg.build.py with one call each: pages_hvac.py (the superheat and subcooling calculator for all refrigerants, opened on one of them with #r-454b in the address; six refrigerant pages with their own text in SPECIFICS; the body of the PT chart pages, comparisons, target superheat, guides, the HVAC hub) and pages_electrical.py (ampacity chart, wire size by distance, voltage drop references, the electrical hub). Shared pieces are in pagekit.py; their script and print styles are assets/ref-pages.js and assets/ref-pages.css.refdata.py holds every fact that is not a pressure (GWP, safety class source, lubricant, what a refrigerant replaces) with the page it was read on and the check date. No source, no entry: the page then leaves the field out.python3 -m unittest discover -s tests (needs Node). They rebuild the site, run the real assets/calc.js in Node and compare it and the app repos' source tables with the numbers on the pages, then check the sitemap, the section navigation and every internal link.pages_hobby.py and pages_trades.py, with shared pieces in calcs_common.py; build.py wires them in with calcs_more.build(), which also adds their rows to the methodology, the changelog and the category menu. The maths is in calc_math.py (static tables) and assets/calc-more.js (live calculators); both mirror the apps' Dart engines. Slab sizes and pool volumes are rows of one table on one page, not pages of their own: a row's link (#20x20, #15000-gallons) loads that size into the calculator, and ?size=20x20 or ?gallons=15000 does the same from outside. Do not generate a page per size.embed/ holds bare copies of some calculators for iframes on other sites (pages_embed.py). They only work once the server stops sending X-Frame-Options: SAMEORIGIN for /calculators/embed/.tests/test_calc_math.py pins the control values of the apps' own unit tests for calc_math.py and checks assets/calc-more.js against it through node; tests/test_site.py checks the built hobby and trade pages.