From e4ea3ad2bc466c383b82008c62419cf90589948d Mon Sep 17 00:00:00 2001
From: Claude
Date: Tue, 20 Oct 2026 10:07:03 +0000
Subject: [PATCH] Add Buy me a coffee links
- extension: a discreet link only on the "Your bookmarks are tidy!"
screen, plain link (no remote script, allowed by the extension CSP)
- README badge and Support section, landing page section with a
CSS button, store description line
- .github/FUNDING.yml for the Sponsor button on GitHub
Co-Authored-By: Claude Opus 5.5
Claude-Session: https://claude.ai/code/session_01EgB2BE6SAL3zHCu6oLk3Tw
---
.github/FUNDING.yml | 1 +
README.md | 6 ++++++
docs/index.html | 8 ++++++++
main.js | 9 +++++++++
store/listing.md | 2 ++
style.css | 5 +++++
tab-duplicates.js | 3 ++-
7 files changed, 33 insertions(+), 1 deletion(-)
create mode 100644 .github/FUNDING.yml
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml
new file mode 100644
index 0000000..98cc39e
--- /dev/null
+++ b/.github/FUNDING.yml
@@ -0,0 +1 @@
+buy_me_a_coffee: giurrero
diff --git a/README.md b/README.md
index 1859775..2a20130 100644
--- a/README.md
+++ b/README.md
@@ -24,6 +24,7 @@
+

@@ -105,6 +106,11 @@ the Chrome API, and is tested with node:
node --test
```
+## Support
+
+Bookmark Cleaner is free and will stay free. If it saved you some time, you
+can [buy me a coffee ☕](https://www.buymeacoffee.com/giurrero) — thank you!
+
## License
[MIT](LICENSE) © Ruggero Turra
diff --git a/docs/index.html b/docs/index.html
index 72bdc62..d05359e 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -111,6 +111,9 @@
summary { font-weight: 600; cursor: pointer; }
details p { margin: 10px 0 0; color: var(--muted); }
code { padding: 1px 6px; border-radius: 6px; background: var(--accent-soft); font-size: 0.9em; }
+ .coffee { display: inline-block; padding: 12px 22px; border-radius: 10px; background: #FFDD00;
+ color: #000; font-weight: 600; text-decoration: none; }
+ .coffee:hover { background: #ffd000; }
footer { margin-top: 64px; padding: 32px 0; border-top: 1px solid var(--border); color: var(--muted); text-align: center; font-size: 15px; }
@@ -179,6 +182,11 @@ Frequently asked questions
Does it work with synced bookmarks and other browsers?
It works on all the bookmarks in your Chrome profile, including those synced from other devices. It requires Chrome 104 or later and should also work in other Chromium-based browsers such as Edge and Brave.
+
+ Support the project
+ Bookmark Cleaner is free, open source and without ads. If it saved you some time, you can buy me a coffee — thank you!
+ ☕ Buy me a coffee
+
diff --git a/main.js b/main.js
index 53fb54c..7498d55 100644
--- a/main.js
+++ b/main.js
@@ -72,6 +72,15 @@ function emptyState(title, text, extra) {
]);
}
+var SUPPORT_URL = "https://www.buymeacoffee.com/giurrero";
+
+// discreet link to support the project, shown when there is nothing to clean
+function supportLink() {
+ return element("p", { className: "support" }, [
+ element("a", { href: SUPPORT_URL, target: "_blank", rel: "noopener", textContent: "\u2615 Like Bookmark Cleaner? Buy me a coffee" })
+ ]);
+}
+
// message at the bottom of the page, with an Undo button while there is
// something to undo
var toastTimer = null;
diff --git a/store/listing.md b/store/listing.md
index 9827dd5..c388a87 100644
--- a/store/listing.md
+++ b/store/listing.md
@@ -63,6 +63,8 @@ No analytics, no tracking, and your bookmarks are never sent anywhere. Bookmark
FREE AND OPEN SOURCE
MIT license. Source code, issues and ideas: https://github.com/wiso/chrome-duplicates
+
+Like it? You can buy me a coffee: https://www.buymeacoffee.com/giurrero
```
## What's new in 0.3.0
diff --git a/style.css b/style.css
index 1de4d06..43e6d4c 100644
--- a/style.css
+++ b/style.css
@@ -695,6 +695,11 @@ dialog p {
color: var(--muted);
}
+.empty .support {
+ margin-top: 20px;
+ font-size: 13px;
+}
+
/* small windows */
@media (max-width: 640px) {
diff --git a/tab-duplicates.js b/tab-duplicates.js
index f43fdfd..9374b67 100644
--- a/tab-duplicates.js
+++ b/tab-duplicates.js
@@ -102,7 +102,8 @@ TABS.duplicates = (function() {
container.replaceChildren(emptyState("Your bookmarks are tidy!",
document.getElementById("normalize").checked
? "No duplicated bookmarks found."
- : "No duplicated bookmarks found. Turn on smart matching to also find links that differ only slightly."));
+ : "No duplicated bookmarks found. Turn on smart matching to also find links that differ only slightly.",
+ supportLink()));
}
else if (!visible.length) {
container.replaceChildren(emptyState("Nothing matches the filter",