Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
30 changes: 29 additions & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,35 @@ On merge, CI will:
4. Create a git tag and GitHub release
5. Commit the updated changelog

## [Unreleased]
## [Unreleased:minor]

### Added

- **Per-site Webflow Configuration**: Site-level settings for connected Webflow
workspaces
- Site list shows connected Webflow sites with search and pagination
- Per-site schedule dropdown (None/6h/12h/24h/48h) creates schedulers
automatically
- Per-site "Run on Publish" toggle manages site-specific webhooks
- Sites sorted by last updated with configuration persisted in
`webflow_site_settings` table
- OAuth callback now redirects to site configuration modal for initial setup

### Changed

- **Webflow webhook registration**: Moved from bulk registration during OAuth to
per-site toggle control
- Webhook handler now validates `auto_publish_enabled` before triggering cache
warming jobs
- Improved domain resolution for Webflow API v2 (custom domains as objects,
constructed default from shortName)

### Fixed

- Fixed schedule dropdown not working due to Webflow API v2 returning custom
domains as objects instead of strings
- Fixed auto-publish toggle not responding to clicks (hidden checkbox event
handling)

## [0.22.4] – 2026-01-04

Expand Down
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,11 @@

# Blue Banded Bee 🐝

A comprehensive website health and performance tool designed to monitor your site's health by detecting broken links, identifying slow pages, and speeding up slow pages by warming cache for optimal performance after publishing, and ensure your visitors always get the best experience. Works with any site and integrates seamlessly with Webflow, Shopify and WordPress.
A comprehensive website health and performance tool designed to monitor your
site's health by detecting broken links, identifying slow pages, and speeding up
slow pages by warming cache for optimal performance after publishing, and ensure
your visitors always get the best experience. Works with any site and integrates
seamlessly with Webflow, Shopify and WordPress.

Schedule your site audit as often as you need and when your site is published.

Expand Down
261 changes: 258 additions & 3 deletions dashboard.html
Original file line number Diff line number Diff line change
Expand Up @@ -1559,6 +1559,25 @@
.bb-tooltip-close:hover {
color: #374151;
}

/* Toggle switch styles */
.bb-toggle input:checked + .bb-toggle-slider {
background-color: #3b82f6;
}
.bb-toggle input:checked + .bb-toggle-slider:before {
transform: translateX(18px);
}
.bb-toggle-slider:before {
position: absolute;
content: "";
height: 16px;
width: 16px;
left: 3px;
bottom: 3px;
background-color: white;
transition: 0.3s;
border-radius: 50%;
}
</style>

<!-- Google tag (gtag.js) -->
Expand Down Expand Up @@ -2541,6 +2560,241 @@ <h2 class="bb-modal-title">⚙️ Notification Channels</h2>
</div>
</div>

<!-- Site Configuration (shown after connection is established) -->
<div
id="webflowSitesConfig"
style="
display: none;
margin-top: 20px;
background: #f9fafb;
border: 1px solid #e5e7eb;
border-radius: 8px;
padding: 16px;
"
>
<div
style="
display: flex;
justify-content: space-between;
align-items: center;
margin-bottom: 12px;
"
>
<h4 style="margin: 0; font-size: 15px; color: #374151">
Configure Sites
</h4>
<button
id="webflowSitesRefresh"
class="bb-button bb-button-outline"
bbb-action="webflow-sites-refresh"
style="font-size: 12px; padding: 4px 10px"
title="Refresh sites list"
aria-label="Refresh sites list"
>
Refresh
</button>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
</div>

<!-- Search box (shown when >5 sites) -->
<div
id="webflowSitesSearchBox"
style="display: none; margin-bottom: 12px"
>
<input
type="text"
id="webflowSiteSearch"
placeholder="Search sites..."
aria-label="Search Webflow sites"
style="
width: 100%;
padding: 8px 12px;
border: 1px solid #d1d5db;
border-radius: 6px;
font-size: 14px;
"
/>
</div>

<!-- Sites list -->
<div id="webflowSitesList">
<!-- Template for each site row -->
<div
class="webflow-site-row"
bbb-template="webflow-site"
style="
display: none;
background: white;
border: 1px solid #e5e7eb;
border-radius: 6px;
padding: 12px;
margin-bottom: 8px;
"
>
<div
style="
display: flex;
justify-content: space-between;
align-items: center;
flex-wrap: wrap;
gap: 8px;
"
>
<div style="flex: 1; min-width: 150px">
<span
class="site-name"
style="font-weight: 500; font-size: 14px"
></span>
<span
class="site-domain"
style="color: #6b7280; font-size: 12px; margin-left: 8px"
></span>
</div>
<div
style="
display: flex;
align-items: center;
gap: 12px;
flex-wrap: wrap;
"
>
<!-- Schedule dropdown -->
<div style="display: flex; align-items: center; gap: 6px">
<label style="font-size: 12px; color: #6b7280"
>Schedule:</label
>
<select
class="site-schedule"
bbb-action="site-schedule-change"
aria-label="Schedule frequency for site"
style="
padding: 4px 8px;
border: 1px solid #d1d5db;
border-radius: 4px;
font-size: 13px;
background: white;
cursor: pointer;
"
>
<option value="">None</option>
<option value="6">Every 6 hours</option>
<option value="12">Every 12 hours</option>
<option value="24">Every 24 hours</option>
<option value="48">Every 48 hours</option>
</select>
</div>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
<!-- Auto-publish toggle -->
<div style="display: flex; align-items: center; gap: 6px">
<label style="font-size: 12px; color: #6b7280"
>Run on Publish:</label
>
<label
class="bb-toggle"
style="
position: relative;
display: inline-block;
width: 40px;
height: 22px;
"
>
<input
type="checkbox"
class="site-autopublish"
style="
position: absolute;
opacity: 0;
width: 0;
height: 0;
"
/>
Comment thread
coderabbitai[bot] marked this conversation as resolved.
<span
class="bb-toggle-slider"
style="
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
transition: 0.3s;
border-radius: 22px;
"
></span>
</label>
</div>
Comment on lines +2686 to +2724
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

Add aria-label to toggle checkbox for accessibility.

The toggle checkbox lacks programmatic association with the "Run on Publish:" label text. The visual label (line 2687-2688) is a separate element, and the checkbox itself (lines 2699-2707) has no aria-label, so screen reader users won't know what the toggle controls.

🔎 Suggested fix
                     <div style="display: flex; align-items: center; gap: 6px">
                       <label style="font-size: 12px; color: #6b7280"
                         >Run on Publish:</label
                       >
                       <label
                         class="bb-toggle"
                         style="
                           position: relative;
                           display: inline-block;
                           width: 40px;
                           height: 22px;
                         "
                       >
                         <input
                           type="checkbox"
                           class="site-autopublish"
+                          aria-label="Run on Publish"
                           style="
                             position: absolute;
                             opacity: 0;
                             width: 0;
                             height: 0;
                           "
                         />
                         <span
                           class="bb-toggle-slider"
                           style="
                             position: absolute;
                             cursor: pointer;
                             top: 0;
                             left: 0;
                             right: 0;
                             bottom: 0;
                             background-color: #ccc;
                             transition: 0.3s;
                             border-radius: 22px;
                           "
                         ></span>
                       </label>
                     </div>
🤖 Prompt for AI Agents
In dashboard.html around lines 2686 to 2724 the checkbox toggle for "Run on
Publish:" is not programmatically associated with the visible label; add an
accessible association by either giving the input a unique id and replacing the
visual label with a <label for="..."> that wraps or references that id, or by
adding an appropriate aria-label (e.g., aria-label="Run on Publish") on the
input element so screen readers can identify the control; ensure the
id/aria-label text matches the visible label and keep markup semantics intact.

</div>
</div>
<!-- Status indicator -->
<div
class="site-status"
style="
display: none;
margin-top: 8px;
font-size: 12px;
color: #6b7280;
"
></div>
</div>

<!-- Loading state -->
<div
id="webflowSitesLoading"
style="text-align: center; padding: 20px; color: #6b7280"
>
Loading sites...
</div>

<!-- Empty state for sites -->
<div
id="webflowSitesEmpty"
style="
display: none;
text-align: center;
padding: 20px;
color: #6b7280;
"
>
No sites found in this Webflow workspace.
</div>
</div>

<!-- Pagination (shown when >10 configured sites) -->
<div
id="webflowSitesPagination"
style="
display: none;
margin-top: 12px;
padding-top: 12px;
border-top: 1px solid #e5e7eb;
text-align: center;
"
>
<button
id="webflowSitesPrevPage"
class="bb-button bb-button-outline"
bbb-action="webflow-sites-prev"
style="font-size: 12px; padding: 4px 12px; margin-right: 8px"
aria-label="Previous page of Webflow sites"
disabled
>
Previous
</button>
<span
id="webflowSitesPageInfo"
style="font-size: 13px; color: #6b7280; margin: 0 8px"
></span>
<button
id="webflowSitesNextPage"
class="bb-button bb-button-outline"
bbb-action="webflow-sites-next"
style="font-size: 12px; padding: 4px 12px; margin-left: 8px"
aria-label="Next page of Webflow sites"
>
Next
</button>
Comment thread
simonsmallchua marked this conversation as resolved.
</div>
</div>
Comment thread
coderabbitai[bot] marked this conversation as resolved.

<!-- Empty state / Connect button -->
<div
id="webflowEmptyState"
Expand Down Expand Up @@ -2744,6 +2998,10 @@ <h2 class="bb-modal-title">Create Organisation</h2>
}
}

// Setup notifications modal handlers BEFORE OAuth callbacks
// (callbacks may need to open the modal)
setupNotificationsModal();

// Initialize Slack integration
if (window.setupSlackIntegration) {
window.setupSlackIntegration();
Expand All @@ -2760,9 +3018,6 @@ <h2 class="bb-modal-title">Create Organisation</h2>
window.handleWebflowOAuthCallback();
}

// Setup notifications modal handlers
setupNotificationsModal();

console.log(
"Dashboard initialized successfully with unified auth system"
);
Expand Down
Loading
Loading