Esti'mate is a browser extension (tested on recent Firefox and Chrome) based on the WebExtensions API. It provides cool new features for making estimates on Harvest:
- Project management calculation
- Description templates
- Todo/Reminder list
- Summary table
Download the latest version from our official download page:
- Firefox: Self-distributed signed
.xpiwith auto-updates - Chrome/Edge/Brave: Unsigned
.zipfor manual installation
For historical reference:
- Node.js 22 LTS (required for reproducible builds)
- npm 10.x (comes with Node.js 22)
Note for Mozilla reviewers: This project uses Node.js 22 LTS. An .nvmrc file is included. Run nvm use to switch to the correct version.
-
Clone the repository:
git clone https://github.com/antistatique/esti-mate.git cd esti-mate -
Install dependencies (use npm to ensure reproducible builds via package-lock.json):
npm ci
Build the extension using Rollup:
npm run buildThis compiles all source files and copies assets to the dist/ directory, ready for browser loading.
To reproduce the exact build:
- Environment: Ubuntu 24.04 LTS (or compatible Linux), Node.js 22 LTS, npm 10.x
- Extract the source code package
- Install dependencies with locked versions:
npm ci
- Build:
npm run build
- Compare: The
dist/directory should match the extension package contents
npm run watch # Build with file watching for development
npm run start # Run extension in Firefox (requires web-ext installed globally)Firefox:
- Build the extension:
npm run build - Go to
about:debuggingβ This Firefox β Load Temporary Add-on - Select any file in the
dist/folder
Chrome:
- Build the extension:
npm run build - Go to
chrome://extensions - Enable "Developer mode"
- Click "Load unpacked" and select the
dist/folder
Currently, the project doesn't have automated tests. Manual testing should be performed:
- Test each feature of the extension thoroughly
- Test on both Firefox and Chrome to ensure cross-browser compatibility
- Test with different Harvest estimates to cover various scenarios
Linting:
npm run lint:fix # Fix auto-fixable ESLint issuesBuilding for stores:
npm run lint # Lint the built extension (web-ext lint)Contributions are welcome! Please feel free to submit a Pull Request.
Check the full documentation to see how to setup the Airtable's template feature.
This extension is self-distributed for internal use. It's no longer published to public stores.
Bump the version (automatically syncs package.json and manifest.json):
npm run version:patch # 3.0.4 β 3.0.5
npm run version:minor # 3.0.4 β 3.1.0
npm run version:major # 3.0.4 β 4.0.0Set up environment variables in .env.local:
export WEB_EXT_API_KEY=user:12345678:123
export WEB_EXT_API_SECRET=your-secret-here
export WEB_EXT_CHANNEL=unlistedGet API credentials from: https://addons.mozilla.org/en-US/developers/addon/api/key/
Sign the extension:
source .env.local
npm run sign:firefoxThis creates: releases/esti-mate-vX.X.X.xpi (signed by Mozilla, ready for distribution)
Note: Signing can take 2-10 minutes depending on AMO server load.
Build the Chrome package:
npm run build
cd dist && zip -r ../releases/esti-mate-vX.X.X.zip . && cd ..This creates: releases/esti-mate-vX.X.X.zip (unsigned, for manual installation)
Tag, push, and create the release:
git tag vX.X.X
git push origin vX.X.X
gh release create vX.X.X \
releases/esti-mate-vX.X.X.xpi \
releases/esti-mate-vX.X.X.zip \
--title "vX.X.X" \
--notes "Release notes here"Firefox: Users automatically get updates via https://esti-mate.antistatique.io/updates.xml
Chrome: No auto-update. Users must manually download and reinstall from https://esti-mate.antistatique.io
Users download from: https://esti-mate.antistatique.io
This page automatically fetches the latest release from GitHub and provides download links.
Note: Version numbers are automatically synchronized between package.json and manifest.json.
See PRIVACY.md for our privacy policy.
TL;DR:
- No tracking or analytics
- Optional features (Airtable, spellcheck) transmit data only if you configure them
- All data storage is local to your browser
This project is licensed under the MIT License.