Commit Graph

137 Commits

Author SHA1 Message Date
Usman Baig
81fafcf711 fix: discard button in sticky save bar instead of browser confirm 2026-03-25 20:51:39 +01:00
Usman Baig
7181d68d85 fix: replace amber unsaved changes bar with simple confirm() dialog 2026-03-25 20:42:02 +01:00
Usman Baig
0de8f927a4 chore: remove debug console.logs from privacy tab 2026-03-25 20:37:32 +01:00
Usman Baig
eb3c3b2738 debug: add console.logs to privacy tab dirty tracking 2026-03-25 20:33:46 +01:00
Usman Baig
93401cc1a1 fix: dirty tracking — prevent SWR revalidation from resetting form state 2026-03-25 20:27:47 +01:00
Usman Baig
9dceca765c feat(settings): sticky save bar appears only when dirty, replaces static button 2026-03-25 20:18:26 +01:00
Usman Baig
9a3fab3535 feat(settings): unsaved changes guard with inline confirmation bar 2026-03-25 20:09:11 +01:00
Usman Baig
1ad68943c8 fix: reset tabs to default when switching settings context 2026-03-25 18:23:58 +01:00
Usman Baig
688d268fbf fix: proper Google/Bunny logos and BunnyCDN status grid in unified integrations 2026-03-25 18:21:50 +01:00
Usman Baig
0f5a3388a0 fix: use correct PageSpeedConfig field name (frequency, not check_frequency) 2026-03-25 18:16:05 +01:00
Usman Baig
1fef7b175c feat(settings): add filtering and pagination to unified audit tab 2026-03-25 18:11:01 +01:00
Usman Baig
8bef4b7c9f feat(settings): add member removal and pending invitations to unified members tab 2026-03-25 18:08:22 +01:00
Usman Baig
b64c4c036f feat(settings): add working delete org to unified workspace general tab 2026-03-25 18:07:21 +01:00
Usman Baig
851c607b7a feat(settings): add invoice list to unified billing tab 2026-03-25 18:07:16 +01:00
Usman Baig
b164160d6a feat(settings): add bunny setup flow and GSC details to unified integrations tab 2026-03-25 18:04:07 +01:00
Usman Baig
ce992e331f fix(settings): show delete account in unified profile tab 2026-03-25 18:02:47 +01:00
Usman Baig
7dc6e0daf5 fix(settings): add remove password button to unified visibility tab 2026-03-25 18:02:39 +01:00
Usman Baig
f844751142 feat(settings): add report/alert create & edit modals to unified tab 2026-03-25 17:52:56 +01:00
Usman Baig
b3ccb58431 feat(settings): add session review to unified bot & spam tab 2026-03-25 17:48:39 +01:00
Usman Baig
d0d7a97102 feat(settings): add retention, excluded paths, pagespeed to unified privacy tab 2026-03-25 17:46:06 +01:00
Usman Baig
4e6837a9ee feat(settings): add framework picker and verification to unified general tab 2026-03-25 17:42:34 +01:00
Usman Baig
45a8adff0f feat(settings): add danger zone to unified site general tab 2026-03-25 17:38:47 +01:00
Usman Baig
c48023be9f fix(settings): global comma shortcut works on all authenticated pages 2026-03-24 17:05:21 +01:00
Usman Baig
e12a3661fa fix(settings): lock site context to current URL, rename Workspace to Organization
- Site context is locked to the site from the current URL — no dropdown
  switcher. If not on a site page, defaults to Organization context.
- Renamed "Workspace" to "Organization" in all user-facing text.
- Removed unused CaretDown import and dropdown state.
2026-03-24 16:52:59 +01:00
Usman Baig
ea2c47b53f feat(settings): Phase 2 — all 15 tabs implemented
Site tabs:
- Visibility (public toggle, share link, password protection)
- Privacy (data collection toggles, geo level, retention info)
- Bot & Spam (filtering toggle, stats cards)
- Reports (scheduled reports + alert channels list with test/pause/delete)
- Integrations (GSC + BunnyCDN connect/disconnect cards)

Workspace tabs:
- Members (member list, invite form with role selector)
- Notifications (dynamic toggles from API categories)
- Audit Log (action log with timestamps)

Account tabs:
- Security (wraps existing ProfileSettings security tab)
- Devices (wraps existing TrustedDevicesCard + SecurityActivityCard)

No more "Coming soon" placeholders. All tabs are functional.
2026-03-23 21:29:49 +01:00
Usman Baig
e55a3c4ce4 fix(settings): fixed modal height prevents bottom-edge twitch on context switch 2026-03-23 21:09:24 +01:00
Usman Baig
d050d32d24 fix(settings): remove flicker and scrollbar flash on context switch 2026-03-23 21:04:31 +01:00
Usman Baig
3c17895d64 feat(settings): unified settings modal with context switcher (Phase 1)
New unified settings modal accessible via `,` keyboard shortcut.
Three-context switcher: Site (with site dropdown), Workspace, Account.
Horizontal tabs per context with animated transitions.

Phase 1 tabs implemented:
- Site → General (name, timezone, domain, tracking script with copy)
- Site → Goals (CRUD with inline create/edit)
- Workspace → General (org name, slug, danger zone)
- Workspace → Billing (plan card, usage, cancel/resume, portal)
- Account → Profile (wraps existing ProfileSettings)

Phase 2 tabs show "Coming soon" placeholder:
- Site: Visibility, Privacy, Bot & Spam, Reports, Integrations
- Workspace: Members, Notifications, Audit Log
- Account: Security, Devices

Old settings pages and profile modal remain functional.
2026-03-23 20:57:20 +01:00
Usman Baig
a3c1af7c95 fix: frontend consistency audit — 55 files cleaned up
Consistency fixes:
- Extract getThisWeekRange/getThisMonthRange to shared lib/utils/dateRanges.ts
  (removed 4 identical copy-pasted definitions)
- Add error boundaries for behavior, cdn, search, pagespeed pages
  (4 new error.tsx files — previously fell through to generic parent error)
- Add "View setup guide" CTA to empty states on journeys and behavior pages
  (previously showed text with no actionable button)
- Fix non-lazy useState initializer in funnel detail page
- Fix Bot & Spam settings header from text-xl to text-2xl (matches all other sections)
- Add useMinimumLoading to PageSpeed skeleton (consistent with all other pages)

Cleanup:
- Remove 438 redundant dark: class prefixes (app is dark-mode only)
  text-neutral-500 dark:text-neutral-400 → text-neutral-400 (206 occurrences)
  text-neutral-900 dark:text-white → text-white (232 occurrences)
- Remove dead @stripe/react-stripe-js and @stripe/stripe-js packages
  (billing migrated to Polar, no code imports Stripe)
- Remove duplicate motion package (framer-motion is the one actually used)
2026-03-23 19:50:16 +01:00
Usman Baig
eca21bf627 feat(billing): update frontend for polar migration
Update billing types, remove invoice preview, replace Stripe invoice
display with Polar orders, update tax ID from array to single object,
remove upcoming invoice amount display.
2026-03-23 16:36:54 +01:00
Usman Baig
24c71f7991 fix: mobile responsiveness across all pages
- SiteNav: add horizontal scroll for 8 tabs on mobile
- NotificationCenter: full-width dropdown on mobile
- ContentStats/Locations/TechSpecs: scrollable tab bars
- FrustrationTable: fix selector text overflow
- FrustrationByPageTable: horizontal scroll on mobile
- CDN: better stat card grid breakpoints
- Home: reduce stat card height, prevent button wrap
- Billing: shorter invoice labels on mobile
- Bump @ciphera-net/ui to 0.2.6 (AppLauncher mobile fix)
2026-03-15 18:15:06 +01:00
Usman Baig
25210013d3 feat: centralise date/time formatting with European conventions
All dates now use day-first ordering (14 Mar 2025) and 24-hour time
(14:30) via a single formatDate.ts module, replacing scattered inline
toLocaleDateString/toLocaleTimeString calls across 12 files.
2026-03-14 13:31:30 +01:00
Usman Baig
d6d42b5759 fix: portal delete modal to body so backdrop-blur covers header
The modal was rendered inside <main> which is a sibling of the
fixed header. Browser compositing didn't apply backdrop-blur
across the header's separate GPU layer. Using createPortal to
render at document.body matches how the delete account modal
works (rendered as sibling to header via SettingsModalWrapper).
2026-03-13 20:35:04 +01:00
Usman Baig
618c4fd5fe fix: bump delete modal z-index to z-[100] to cover fixed header
Header uses fixed z-50 with backdrop-blur which creates its own
stacking context. z-[60] wasn't enough, z-[100] matches the
pattern used by VerificationModal.
2026-03-13 20:29:47 +01:00
Usman Baig
39e06183c3 fix: delete modal overlay z-index above navbar 2026-03-13 20:10:23 +01:00
Usman Baig
6c31f3fc60 fix: show org name in delete modal and fix subscription card visibility
Modal now says "Delete Ciphera?" instead of generic "Delete Organization?".
Subscription cancellation card now shows for any paid plan (solo/team/business)
regardless of subscription_status, which could be 'active' or 'trialing'.
2026-03-13 19:58:01 +01:00
Usman Baig
86077557a8 style: redesign org delete modal to match delete account style
Red border, frosted overlay, destruction items as prominent
red-bordered cards with warning icons instead of small bullet
points. Button text changed to "Delete Forever".
2026-03-13 19:44:03 +01:00
Usman Baig
e86021caf8 fix: await subscription fetch before opening delete modal
The delete button fired loadSubscription() without awaiting it,
so the modal opened with subscription=null and the destruction
summary (sites count, active subscription) never rendered.
2026-03-13 19:35:12 +01:00
Usman Baig
0dd1f00095 fix: fetch subscription data when delete modal opens
Subscription was only loaded on the Billing tab, so the delete
modal showed no destruction summary when opened from General tab.
2026-03-13 18:25:34 +01:00
Usman Baig
84312ebf59 feat: show destruction summary in org delete modal
Lists what will be deleted: site count with analytics data,
member count, active subscription, and notification settings.
Replaces the generic warning with specific impact details.
2026-03-13 18:15:40 +01:00
Usman Baig
37eb49eb37 feat: action-scoped captcha tokens for share access and org settings
Captcha on shared dashboard and organization settings now passes
action-specific identifiers. Bumps @ciphera-net/ui to 0.2.1.
2026-03-11 11:30:21 +01:00
Usman Baig
2776c803f1 fix: use focus-visible for all button/tab/link focus rings across app
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 00:08:09 +01:00
Usman Baig
acede8ca54 feat: rename section to Account, move Danger Zone to own sidebar item
- Rename "Pulse Settings" to "Account"
- Add hideDangerZone prop to hide it from Profile tab
- Add standalone "Danger Zone" item under Account section
- Bump @ciphera-net/ui to ^0.0.92
2026-03-06 12:23:00 +01:00
Usman Baig
6d360cf1ac feat: settings modal improvements — borderless profile, remove descriptions, bump ui to 0.0.91
- Add borderless prop passthrough to ProfileSettings
- Remove section descriptions from SettingsModalWrapper sidebar
- Bump @ciphera-net/ui to ^0.0.91
2026-03-06 11:44:30 +01:00
Usman Baig
7865b41722 refactor: use shared settings components, fix sections
- Use NotificationToggleList and BellIcon from @ciphera-net/ui
- Remove duplicated inline SVG icons and toggle code
- Remove double card borders from content areas
- Remove broken Ciphera Account external links
- Add dedicated Security section (Trusted Devices, Security Activity)
- Bump @ciphera-net/ui to ^0.0.89
2026-03-06 00:20:08 +01:00
Usman Baig
48cf9a1f62 feat: replace settings page with SettingsModal
- Add SettingsModalProvider context and SettingsModalWrapper
- Wire Header onOpenSettings callback via LayoutInner pattern
- Remove old /settings page and SettingsPageClient
- Bump @ciphera-net/ui to ^0.0.88
2026-03-05 22:16:36 +01:00
Usman Baig
b3a303d6df fix: improve session management and UI highlights 2026-03-01 13:53:54 +01:00
Usman Baig
15f82eee00 feat: add email notification preferences and update settings page structure 2026-02-28 20:36:53 +01:00
Usman Baig
7053cf5d5e feat: add security activity and trusted devices management to settings page 2026-02-28 19:58:49 +01:00
Usman Baig
c436680876 feat: add expandable sidebar navigation to settings page
Replace direct SharedProfileSettings rendering with an expandable sidebar
that shows Profile, Security, and Preferences as collapsible sub-items
under Profile & Preferences. Matches the new settings pattern across
all Ciphera frontends.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-28 17:56:06 +01:00