Usman Baig
e5ac1893dc
fix: lock left panel, only right side scrolls
2026-03-26 23:17:18 +01:00
Usman Baig
75bf071d98
feat: split checkout layout with auto-cycling feature slideshow
2026-03-26 23:10:14 +01:00
Usman Baig
48f71ee65b
fix: checkout UI polish — brand colors, Pulse Select, logo, touched-only errors, no skeletons
2026-03-26 22:33:30 +01:00
Usman Baig
742c24fa6b
fix: prevent auth flash on checkout, skip subscription guard on success return
2026-03-26 22:21:59 +01:00
Usman Baig
0f41eb4df4
fix: allow mollie.js in CSP, hide app header on checkout page
2026-03-26 21:38:47 +01:00
Usman Baig
6be8952fbe
fix: checkout page polish, metadata, and typescript fixes
2026-03-26 21:31:56 +01:00
Usman Baig
58ac7b9cc5
feat: pricing and welcome CTAs now redirect to /checkout page
2026-03-26 21:30:17 +01:00
Usman Baig
89575c9fcb
feat: add checkout page shell with auth guard and success polling
2026-03-26 21:26:32 +01:00
Usman Baig
94d0b3498f
feat: add country and vat id fields to checkout flow
2026-03-26 20:27:07 +01:00
Usman Baig
952cebc59a
perf: lazy-load Chart component — prevents main thread freeze on page load
2026-03-26 11:48:58 +01:00
Usman Baig
97b9486382
fix: org-settings redirect uses router.back() to stay on current page
2026-03-26 11:11:13 +01:00
Usman Baig
4a950f7070
fix: wrap org-settings redirect in Suspense for useSearchParams
2026-03-26 10:55:55 +01:00
Usman Baig
6b33483c81
fix: remove SettingsModalProvider import and wrapper from layout
2026-03-26 10:53:48 +01:00
Usman Baig
cc3047edba
refactor: replace legacy settings pages with redirect handlers + delete unused files
...
- /sites/:id/settings → redirect handler for GSC OAuth callback + deep links
- /org-settings → redirect handler for tab deep links
- Deleted: OrganizationSettings.tsx, SettingsModalWrapper.tsx, settings-modal-context.tsx
2026-03-26 10:50:36 +01:00
Usman Baig
61a106eed6
refactor: replace all legacy settings links with unified modal openers
2026-03-26 10:47:51 +01:00
Usman Baig
0cb13e08fd
refactor(settings): wire all settings entry points to unified modal
2026-03-25 18:10:42 +01:00
Usman Baig
294629edfe
fix: downsize all page h1 headers — top bar now has primary title
2026-03-25 17:17:12 +01:00
Usman Baig
48b404eb37
fix: remove duplicate h1 from uptime page — title now in top bar
2026-03-25 17:11:48 +01:00
Usman Baig
de10fb5daf
fix: use max-w-7xl (1280px) instead of full-width — better readability
2026-03-24 23:21:57 +01:00
Usman Baig
d6627413b8
feat: full-width content — remove max-w-6xl from all site pages and skeletons
2026-03-24 23:16:36 +01:00
Usman Baig
5a03e1f9a5
fix: skeleton loading states match actual page layouts
...
- PageSpeed: show 4 gauge rings, screenshot, legend, metrics grid, trend chart
- Uptime: match real layout with status card, 90-day bar, 4-col detail grid
- Remove duplicate local skeletons in behavior components, use shared library
- Strip light-mode classes from dark-only app
2026-03-24 21:17:21 +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
cd347ea072
feat: add illustrations to 404, error page, and welcome flow
...
- 404 page: replace large "404" text with page-not-found illustration
- ErrorDisplay: replace warning icon with server-down illustration
- Welcome step 1 (no orgs): welcome illustration
- Welcome step 4 (add site): website-setup illustration
- Welcome step 5 (done): confirmed illustration
All SVGs dark-themed with brand orange accent.
2026-03-23 15:40:01 +01:00
Usman Baig
c07c020015
feat(home): add illustration to home page empty state
...
Replace globe icon with setup-analytics illustration on the home page
when no sites are created.
2026-03-23 15:28:52 +01:00
Usman Baig
645e3e78ef
feat(empty-states): add undraw illustrations to empty state screens
...
Add brand-orange recolored SVG illustrations from undraw to five empty
states: sites list, dashboard chart, funnels, journeys, and behavior.
2026-03-23 15:23:26 +01:00
Usman Baig
cbb7445d74
feat(pagespeed): click score gauges to scroll to diagnostics category
2026-03-23 14:55:05 +01:00
Usman Baig
8c3b77e8e5
Revert "fix(pagespeed): make frequency interactive and show next check time"
...
This reverts commit 01c50ab971 .
2026-03-23 14:46:10 +01:00
Usman Baig
01c50ab971
fix(pagespeed): make frequency interactive and show next check time
...
- Replace dead frequency badge with inline dropdown selector
- Add "Next in Xh" indicator from next_check_at
- Demote "Disable" button to subtle text link (was competing with Run Check)
- Add cursor-pointer to prev/next history arrows
- Narrow filmstrip fade to avoid covering content
2026-03-23 14:43:41 +01:00
Usman Baig
55a08301f4
fix(build): extract FAVICON_SERVICE_URL to prevent server-side createContext error
...
The share/[id] layout is a server component that imported FAVICON_SERVICE_URL
from icons.tsx, pulling in the entire React icon registry and triggering
createContext on the server. Moved the constant to its own favicon.ts module.
2026-03-23 13:29:53 +01:00
Usman Baig
31471792f8
feat(pagespeed): move frequency selector to site settings
...
Revert inline frequency toggle from pagespeed page. Add PageSpeed
Monitoring section to site settings under the Data tab with a Select
dropdown for Daily/Weekly/Monthly. Shows "Not enabled" when PSI is off.
2026-03-23 11:58:09 +01:00
Usman Baig
a0ef570137
feat(pagespeed): inline frequency selector in hero footer
...
Replace static frequency badge with a pill toggle (Daily/Weekly/Monthly)
matching the Mobile/Desktop tab style. Updates config via API on click.
Read-only badge shown for non-admin users.
2026-03-23 11:51:40 +01:00
Usman Baig
8d9a3f3592
feat(pagespeed): add check history navigation with prev/next arrows
...
Navigate between historical checks using ◀ ▶ arrows in the hero
footer bar. Shows formatted date when viewing historical data,
"Last checked X ago" when on latest. Fetches full audit data via
getPageSpeedCheck when navigating to a historical check.
2026-03-23 11:34:05 +01:00
Usman Baig
d02d8429e2
fix(pagespeed): contain visx chart within card bounds
2026-03-23 11:26:18 +01:00
Usman Baig
98fcce4647
feat(pagespeed): switch trend chart from Recharts to visx for dashboard consistency
2026-03-23 10:54:09 +01:00
Usman Baig
bba25c722a
feat(pagespeed): manual check section, consistent dot indicators
...
- Add "Additional items to manually check" collapsed section
- Replace triangle/square severity icons with consistent filled circles
- Empty circle (border only) for informative/unscored audits
2026-03-22 23:45:36 +01:00
Usman Baig
354331646b
fix(pagespeed): order accessibility sub-groups: names/labels → contrast → best practices
2026-03-22 23:38:58 +01:00
Usman Baig
d232a8a6d1
feat(pagespeed): sort audits by severity + insights before diagnostics
...
Sort order within each sub-group: red → orange → empty → green.
Sub-groups sorted so insights come before diagnostics.
2026-03-22 23:25:11 +01:00
Usman Baig
9d1d2dbb80
fix(pagespeed): issue count excludes informative/unscored audits
...
Only audits with a real score (non-null) count toward the issue total.
Informative audits (score: null) are shown but not counted.
2026-03-22 22:11:49 +01:00
Usman Baig
98429f82f5
feat(pagespeed): render audit sub-group headers in diagnostics
...
Group audits within each category by sub-group (e.g., "Names and
Labels", "Contrast") with small uppercase headers, matching the
pagespeed.web.dev layout.
2026-03-22 22:03:13 +01:00
Usman Baig
a0173636d4
fix(pagespeed): show empty circle for unscored/informative audits
...
Null scores now show ○ (informative) instead of ▲ (poor), matching
pagespeed.web.dev's "Unscored" indicator for informative audits.
2026-03-22 21:08:50 +01:00
Usman Baig
dfcf6bebde
fix(pagespeed): show all 4 category cards including those with 0 issues
2026-03-22 20:59:52 +01:00
Usman Baig
5003175305
redesign(pagespeed): equal gauges in hero + category gauges in diagnostics
...
- Hero: 4 equal 90px ScoreGauges in a row with screenshot on right
- Diagnostics: each category card gets a 56px gauge header with score
and issue count, matching pagespeed.web.dev's category sections
- Legend and metadata moved to footer bar in hero card
2026-03-22 20:55:55 +01:00
Usman Baig
ab6008daf9
fix(pagespeed): parse markdown links + handle more audit item fields
...
- AuditDescription: converts [text](url) to clickable links
- AuditItem: handles href, text/linkText, source.url from PSI API
2026-03-22 20:52:50 +01:00
Usman Baig
8b95620ec1
polish(pagespeed): mini gauges, animated tab switcher, filmstrip title
...
- Replace compact dot+number scores with 64px ScoreGauge circles
- ScoreGauge scales font/stroke/spacing for small sizes
- Add "Page Load Timeline" header to filmstrip section
- Replace pill toggle with animated underline tabs (matches dashboard)
2026-03-22 20:43:11 +01:00
Usman Baig
783530940e
polish(pagespeed): design consistency pass
...
- Filmstrip: dark mode bg fix, consistent card padding, scroll fade
- Metrics: font-semibold to match uptime page
- Hero: tighter compact scores, smaller legend, centered alignment
- Chart: hide x-axis when single day, height matches uptime (h-40)
- Diagnostics: hide categories with zero failures, muted display values
- Skeleton: matches new hero layout
2026-03-22 20:19:07 +01:00
Usman Baig
dd0700cbea
fix(pagespeed): poll silently without triggering SWR re-renders
...
Use direct API fetch for polling instead of mutateLatest() which was
causing the page to flicker and clear data every 5 seconds. SWR cache
is only updated once when new results arrive.
2026-03-22 19:56:00 +01:00
Usman Baig
8649f37bb9
feat(pagespeed): split diagnostics by category (Performance, Accessibility, Best Practices, SEO)
...
Each Lighthouse category gets its own card with failing audits sorted
by impact and collapsed passed audits. Matches pagespeed.web.dev layout.
2026-03-22 19:52:49 +01:00
Usman Baig
fcbf21b715
feat(pagespeed): render page load filmstrip between hero and metrics
...
Horizontal scrollable filmstrip showing page rendering progression
with timing labels. Appears between the score hero and metrics card.
2026-03-22 19:43:44 +01:00