Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
de6fffb
added translators' names in the Community block in the Settings
Maitrog Jul 3, 2026
eabca0e
build: add TypeScript Vite extension build
Maitrog Jul 3, 2026
c62b1fa
build: harden extension packaging
Maitrog Jul 3, 2026
94645c1
feat: add typed equalizer domain logic
Maitrog Jul 3, 2026
a5ff5ce
feat: add typed shortcuts and autostart domains
Maitrog Jul 3, 2026
c34810f
feat: add typed extension boundaries
Maitrog Jul 3, 2026
caddf56
fix: harden typed extension boundaries
Maitrog Jul 3, 2026
a1c4495
feat: migrate background service worker to TypeScript
Maitrog Jul 3, 2026
a32f199
fix: close fire-and-forget background message channels
Maitrog Jul 3, 2026
de518af
feat: migrate content scripts to bundled TypeScript
Maitrog Jul 3, 2026
a73fba2
fix: stop content spectrum when disabled
Maitrog Jul 3, 2026
3295e3b
fix: gate content spectrum on enabled state
Maitrog Jul 4, 2026
9b46a1c
fix: gate spectrum restart after filter changes
Maitrog Jul 4, 2026
9ecaf91
feat: migrate localization and theme services
Maitrog Jul 4, 2026
9eeb344
feat: migrate equalizer canvas state
Maitrog Jul 4, 2026
2c3f454
fix: refresh equalizer canvas theme colors
Maitrog Jul 4, 2026
92f6b26
build: bundle extension entries independently
Maitrog Jul 4, 2026
c081c87
feat: migrate popup app to explicit TypeScript modules
Maitrog Jul 4, 2026
1853697
chore: finalize TypeScript Vite migration
Maitrog Jul 4, 2026
4a6bfdd
fix: stop spectrum vizualisation when point counts was changed
Maitrog Jul 5, 2026
c160669
fix: spectrum visualization wasn't changing in real time
Maitrog Jul 5, 2026
1c3472c
test: rename some tests
Maitrog Jul 5, 2026
a88276f
test: delete tests for chrome storage
Maitrog Jul 5, 2026
12b50c2
chore: remove obsolete JavaScript files
Maitrog Jul 5, 2026
8d123b2
fix: tamil language has been returned
Maitrog Jul 5, 2026
70a26d3
ci: added test running
Maitrog Jul 8, 2026
752e0af
refactor: replace hardcoded gain storage key
Maitrog Jul 8, 2026
0a2ba2f
feat: added spectrum visualization for window mod
Maitrog Jul 8, 2026
ab501b1
feat: added the ability to stop audio capturing on a specific tab
Maitrog Jul 8, 2026
661be12
refactor: changed gain calculation from db
Maitrog Jul 9, 2026
6fc99fa
doc: removed reference to google analytics from PRIVACY.md
Maitrog Jul 9, 2026
2bc16c0
fix: resolve issue that translation wasn't being applied for transla…
Maitrog Jul 9, 2026
1e040db
feat: added default audio presets with the ability to hide them
Maitrog Jul 9, 2026
6801b5e
chore: updated localization's stings
Maitrog Jul 10, 2026
4a7da5e
chore: updated .gitignore
Maitrog Jul 10, 2026
a05182c
chore: updated .gitignore
Maitrog Jul 11, 2026
693d29f
refactor(redesign): added enable/disable icon button
Maitrog Jul 11, 2026
086347f
feat(redesign): updated ux, added modal window for saving preset
Maitrog Jul 14, 2026
08b5cd0
refactor: removed ny theme
Maitrog Jul 14, 2026
52b808b
fix: added glow effect for enable button
Maitrog Jul 15, 2026
fe7d3db
fix: donation link has been reterned
Maitrog Jul 15, 2026
24015cf
refactor: clean up
Maitrog Jul 16, 2026
5c82d7e
refactor: checkbox redesign
Maitrog Jul 16, 2026
3c4c100
fix: enable button glow effect disappeared after changing the settings
Maitrog Jul 16, 2026
edecf22
feat: define onboarding guide sequence
Maitrog Jul 17, 2026
d79f572
feat: add onboarding spotlight overlay
Maitrog Jul 17, 2026
f0fded4
feat: launch onboarding after installation
Maitrog Jul 17, 2026
9a0c379
feat: localize onboarding guide
Maitrog Jul 17, 2026
2058e56
fix: polish onboarding guide
Maitrog Jul 17, 2026
8e3a0be
fix: onbording style fixes
Maitrog Jul 19, 2026
34b8fa4
fix: restart incomplete onboarding
Maitrog Jul 19, 2026
338ad46
fix: changed the spotlight on the 7th onboarding's step
Maitrog Jul 19, 2026
ca8db8c
feat: schedule donation reminders
Maitrog Jul 19, 2026
412c1c1
feat: show donation reminder modal
Maitrog Jul 19, 2026
105761a
feat: localize donation reminder
Maitrog Jul 19, 2026
948ccf1
fix: focus donation reminder action
Maitrog Jul 19, 2026
784556a
feat: show google form with question after deletion
Maitrog Jul 22, 2026
cabeb4f
refactor: clean up
Maitrog Jul 22, 2026
41268f3
chore: fix locales formatting
Maitrog Jul 22, 2026
1a142d0
Merge branch 'main' of https://github.com/Maitrog/volume-equalizer-ex…
Maitrog Jul 22, 2026
7dad1c6
Merge branch 'main' into version_2_0
Maitrog Jul 22, 2026
c901085
chore: support Lao localization
Maitrog Jul 22, 2026
8299d45
docs: added AGENTS.md
Maitrog Jul 22, 2026
cbd1738
build: version 2.0
Maitrog Jul 22, 2026
649cc99
fix: added Lao translator to translators
Maitrog Jul 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Tests

on:
push:
branches:
- main
pull_request: {}

jobs:
test:
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@v4

- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 24
cache: npm

- name: Install dependencies
run: npm ci

- name: Run tests
run: npm test
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,7 @@ dist
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
.pnp.*
**/docs
**/.worktrees
**/.superpowers
69 changes: 69 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Repository Guidelines

## Project Structure & Module Organization

- Core browser extension manifest lives in `manifest.json`; popup markup is in `popup.html` and pulls styles from `resources/styles/popup.css` plus icons/images in `resources/icons` and `resources/images`.

- All runtime logic is TypeScript modules in `src/`.

- Localized strings sit in `_locales/<lang>/messages.json`; keep keys consistent across languages and match `__MSG_*__` tokens in markup and scripts.

## Build, Test, and Development Commands

- `npm ci` (or `npm install`): installs dev dependencies; there is no bundler or transpile step.

- `npm build`: runs build using vite with custom script (`tools/buildExtension.mjs`)

- `lint:locales`: validates length of strings and lines count for some buttons

- `npm test`: runs unit tests using vitest

- Packaging: zip `dist/` for store uploads after build; avoid including `node_modules/`.

## Do not patch symptoms

- When fixing bugs, do not add quick workarounds whose only purpose is to make the current case pass.

- Treat such changes as a temporary stub, not a real solution.

- Your goal is to find and fix the actual root cause of the error. Before changing code, investigate why the failure happens, where the incorrect assumption is, and what part of the system is responsible.

Avoid fixes like:

- swallowing errors without understanding them

- adding special cases just to satisfy one scenario

- forcing values into a valid shape without knowing why they are invalid

- retrying, ignoring, or bypassing failing logic

- making the code “just work” while leaving the underlying issue unresolved

A correct fix should explain and address the real cause of the bug, not merely hide its effects.

## Avoid redundant validation layers

- Normalize and validate external input once at the boundary where it enters the system, then pass the resolved value through internal functions.

- Do not call the same fallback/validation helper repeatedly through nested helper chains unless the value can be modified or become invalid between calls.

## Coding Style & Naming Conventions

- Use 2-space indentation, semicolons, and `const`/`let` over `var`; prefer arrow functions and early returns to mirror existing files.

- File names are camel case (`drawSpectrum.ts` style); functions and variables use `camelCase`. Keep DOM ids/classes in `kebab-case` as seen in `popup.html`.

- Favor double quotes in TS/JS/JSON to stay consistent with current code and locale files.

## Testing Guidelines

- No automated test suite yet; run manual checks after changes: reload the unpacked extension, open the popup, tweak bands, toggle mute/reset, and confirm spectrum drawing updates without console errors.

- Verify localization by switching the browser language and checking visible strings against `_locales` entries; default locale is `en`.

- When touching audio logic, test across multiple tabs and sites to confirm content scripts register via `background.js` and settings persist in `chrome.storage`.

## Localization

- When adding UI text, create English copy first at the end of `_locales/en/messages.json`, then mirror keys across other locales and translate values; avoid hardcoded strings in markup or scripts.
3 changes: 0 additions & 3 deletions PRIVACY.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,6 @@ All user settings are stored locally in your browser. No data is stored on exter
## Cookies
We may use cookies to enhance user experience, store preferences, and improve functionality. You can disable cookies in your browser settings.

## Analytics
We use Google Analytics to analyze usage trends and improve our services.

## Security
We take strong security measures to protect user data from unauthorized access and ensure data integrity.

Expand Down
7 changes: 7 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,13 @@ You can help translate EQ Toolkit on [Weblate](https://hosted.weblate.org/projec

[![Translation status](https://hosted.weblate.org/widget/eq-toolkit-chrome-extension/svg-badge.svg)](https://hosted.weblate.org/engage/eq-toolkit-chrome-extension/)

## Development
1. Install dependencies with `npm ci`.
2. Build the extension with `npm run build`.
3. Load `dist/` as an unpacked extension from your browser extensions page.

Run `npm run typecheck` and `npm test` before packaging changes.

## Support
The extention are provided for free. If you like the project, I would appreciate your [support](https://www.donationalerts.com/r/maitrog).

Expand Down
80 changes: 73 additions & 7 deletions _locales/bn/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"message": "EQ Toolkit - অডিও ইকুয়ালাইজার"
},
"extDescription": {
"message": "EQ Toolkit অডিও নিয়ন্ত্রণের জন্য একটি বিনামূল্যের ও ওপেন-সোর্স এক্সটেনশন।"
"message": "যেকোনো ট্যাবের অডিও ইকুয়ালাইজার ও ভলিউম বুস্টার: বেস বাড়ান, সাউন্ড টিউন করুন, প্রিসেট সেভ করুন।"
},
"gain_slider_label": {
"message": "পরিবর্ধন:"
Expand All @@ -23,21 +23,24 @@
"save_preset_button_label": {
"message": "প্রিসেট সংরক্ষণ করুন"
},
"enter_preset_name": {
"message": "নাম লিখুন"
},
"settings_title": {
"message": "সেটিংস"
},
"presets_settings_title": {
"message": "প্রিসেট"
},
"hide_default_presets_label": {
"message": "ডিফল্ট প্রিসেট লুকান"
},
"community_settings_title": {
"message": "কমিউনিটি"
},
"help_with_translation_label": {
"message": "অনুবাদে সাহায্য করুন:"
},
"translators_label": {
"message": "অনুবাদকরা:"
},
"source_code_label": {
"message": "সোর্স কোড:"
},
Expand All @@ -48,7 +51,7 @@
"message": "প্রিসেট রপ্তানি করুন"
},
"enable_spectrum_setting_option": {
"message": "স্পেকট্রাম ভিজুয়ালাইজেশন সক্রিয় করুন, পৃষ্ঠা পুনরায় লোড করতে হবে (উচ্চ CPU ব্যবহার)"
"message": "স্পেকট্রাম ভিজুয়ালাইজেশন সক্রিয় করুন"
},
"points_count_setting_option": {
"message": "EQ পয়েন্টের সংখ্যা"
Expand Down Expand Up @@ -78,7 +81,7 @@
"message": "ইকুয়ালাইজার ইতিমধ্যে একটি উইন্ডোতে খোলা আছে"
},
"support_me": {
"message": "আমাকে সমর্থন করুন"
"message": "আমাকে সমর্থন করুন:"
},
"settings_button_tooltip": {
"message": "সেটিংস"
Expand Down Expand Up @@ -142,5 +145,68 @@
},
"shortcut_duplicate_error": {
"message": "এই শর্টকাটটি ইতিমধ্যে অন্য কমান্ডে ব্যবহৃত হচ্ছে।"
},
"global_controls_title": {
"message": "সামগ্রিক নিয়ন্ত্রণ"
},
"preset_controls_title": {
"message": "প্রিসেট নিয়ন্ত্রণ"
},
"save": {
"message": "সংরক্ষণ করুন"
},
"save_preset_modal_title": {
"message": "প্রিসেট সংরক্ষণ করুন"
},
"preset_name_label": {
"message": "প্রিসেটের নাম"
},
"preset_name_empty_error": {
"message": "প্রিসেটের নাম লিখুন।"
},
"preset_name_reserved_error": {
"message": "এই নামটি একটি অন্তর্নির্মিত প্রিসেটের জন্য সংরক্ষিত।"
},
"preset_name_duplicate_error": {
"message": "এই নামে একটি প্রিসেট ইতিমধ্যে বিদ্যমান।"
},
"guide_back": {
"message": "পিছনে"
},
"guide_next": {
"message": "পরবর্তী"
},
"guide_skip": {
"message": "এড়িয়ে যান"
},
"guide_finish": {
"message": "শেষ করুন"
},
"guide_theme_dark": {
"message": "গাঢ়"
},
"guide_theme_light": {
"message": "হালকা"
},
"guide_shortcuts_hint": {
"message": "সেটিংসে এই শর্টকাটগুলো পরিবর্তন করতে পারেন।"
},
"guide_canvas_hint": {
"message": "ইকুয়ালাইজার সাজাতে পয়েন্ট টানুন। সেটিংসে পয়েন্টের সংখ্যা পরিবর্তন করুন।"
},
"guide_volume_hint": {
"message": "সামগ্রিক ভলিউম সামঞ্জস্য করতে এই স্লাইডার ব্যবহার করুন।"
},
"guide_presets_hint": {
"message": "এখানে বর্তমান সেটআপ সংরক্ষণ করুন বা একটি প্রিসেট প্রয়োগ করুন।"
},
"donation_reminder_title": {
"message": "ডেভেলপারকে সহায়তা করুন"
},
"donation_reminder_message": {
"message": "এই এক্সটেনশনটি আপনার কাজে লাগলে, এর উন্নয়নে সহায়তা করতে পারেন।"
},
"donation_reminder_link": {
"message": "উন্নয়নে সহায়তা করুন"
}
}
}
80 changes: 73 additions & 7 deletions _locales/de/messages.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"message": "EQ Toolkit - Audio-Equalizer"
},
"extDescription": {
"message": "EQ Toolkit ist eine kostenlose Open-Source-Erweiterung zur Audiosteuerung."
"message": "Audio-Equalizer und Lautstärke-Booster für jeden Tab: Bass verstärken, Sound anpassen, Presets speichern."
},
"gain_slider_label": {
"message": "Verstärkung:"
Expand All @@ -23,21 +23,24 @@
"save_preset_button_label": {
"message": "Preset speichern"
},
"enter_preset_name": {
"message": "Name eingeben"
},
"settings_title": {
"message": "Einstellungen"
},
"presets_settings_title": {
"message": "Voreinstellungen"
},
"hide_default_presets_label": {
"message": "Standard-Presets ausblenden"
},
"community_settings_title": {
"message": "Community"
},
"help_with_translation_label": {
"message": "Bei der Übersetzung helfen:"
},
"translators_label": {
"message": "Übersetzer:"
},
"source_code_label": {
"message": "Quellcode:"
},
Expand All @@ -48,7 +51,7 @@
"message": "Voreinstellungen exportieren"
},
"enable_spectrum_setting_option": {
"message": "Spektrumvisualisierung aktivieren, Seite muss neu geladen werden (hohe CPU-Last)"
"message": "Spektrumvisualisierung aktivieren"
},
"points_count_setting_option": {
"message": "Anzahl der EQ-Punkte"
Expand Down Expand Up @@ -78,7 +81,7 @@
"message": "Der Equalizer ist bereits in einem Fenster geöffnet"
},
"support_me": {
"message": "Unterstütze mich"
"message": "Unterstütze mich:"
},
"settings_button_tooltip": {
"message": "Einstellungen"
Expand Down Expand Up @@ -142,5 +145,68 @@
},
"shortcut_duplicate_error": {
"message": "Dieses Tastenkürzel wird bereits von einem anderen Befehl verwendet."
},
"global_controls_title": {
"message": "Globale Steuerelemente"
},
"preset_controls_title": {
"message": "Voreinstellungen"
},
"save": {
"message": "Speichern"
},
"save_preset_modal_title": {
"message": "Voreinstellung speichern"
},
"preset_name_label": {
"message": "Name der Voreinstellung"
},
"preset_name_empty_error": {
"message": "Geben Sie einen Namen für die Voreinstellung ein."
},
"preset_name_reserved_error": {
"message": "Dieser Name ist für eine integrierte Voreinstellung reserviert."
},
"preset_name_duplicate_error": {
"message": "Eine Voreinstellung mit diesem Namen existiert bereits."
},
"guide_back": {
"message": "Zurück"
},
"guide_next": {
"message": "Weiter"
},
"guide_skip": {
"message": "Überspringen"
},
"guide_finish": {
"message": "Fertig"
},
"guide_theme_dark": {
"message": "Dunkel"
},
"guide_theme_light": {
"message": "Hell"
},
"guide_shortcuts_hint": {
"message": "Du kannst diese Tastenkürzel in den Einstellungen ändern."
},
"guide_canvas_hint": {
"message": "Ziehe die Punkte, um den Equalizer einzustellen. Die Anzahl kannst du in den Einstellungen ändern."
},
"guide_volume_hint": {
"message": "Mit diesem Regler passt du die Gesamtlautstärke an."
},
"guide_presets_hint": {
"message": "Hier kannst du die aktuelle Einstellung speichern oder ein Preset anwenden."
},
"donation_reminder_title": {
"message": "Unterstütze den Entwickler"
},
"donation_reminder_message": {
"message": "Wenn dir diese Erweiterung hilft, kannst du ihre Entwicklung unterstützen."
},
"donation_reminder_link": {
"message": "Entwicklung unterstützen"
}
}
}
Loading
Loading