From 908b8c09009751fd9879d3a0f3d047a8e02c1aef Mon Sep 17 00:00:00 2001 From: Usman Baig Date: Fri, 27 Feb 2026 12:50:05 +0100 Subject: [PATCH] chore: update CHANGELOG.md to include the addition of an App Switcher in the User Menu for easier navigation between Ciphera products, along with dependency updates for @ciphera-net/ui --- CHANGELOG.md | 1 + app/layout-content.tsx | 32 +++++++++++++++++++++++++++++++- package-lock.json | 8 ++++---- package.json | 2 +- 4 files changed, 37 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 42288dd..41d1fc5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), ### Added +- **App Switcher in User Menu.** Click your profile in the top right and you'll now see a "Ciphera Apps" section. Expand it to quickly jump between Pulse, Drop (file sharing), and your Ciphera Account settings. This makes it easier to discover and navigate between Ciphera products without signing in again. - **Faster billing page loading.** Your subscription details now load much quicker when you visit the billing page. Previously, several requests to our payment provider were made one after another, which could add 1-2 seconds to the page load. Now these happen simultaneously, cutting the wait time significantly. If any request takes too long, we gracefully continue so you always see your billing information without frustrating delays. - **Faster funnel analysis for multi-step conversions.** We've significantly improved how conversion funnels are calculated. Instead of scanning your data multiple times for each step in a funnel, we now do it in a single efficient pass. This means complex funnels with multiple steps load almost instantly instead of taking seconds—or even timing out. We've also added a reasonable limit of 5 steps per funnel to ensure optimal performance. - **More reliable database connections under heavy load.** We've optimized how Pulse manages its database connections to handle much higher traffic without issues. By increasing the connection pool size and improving how connections are reused, your dashboard stays responsive even when thousands of users are viewing analytics simultaneously. We also added better monitoring so we can detect and address connection issues before they affect you. diff --git a/app/layout-content.tsx b/app/layout-content.tsx index 727254f..8e5c48a 100644 --- a/app/layout-content.tsx +++ b/app/layout-content.tsx @@ -2,7 +2,7 @@ import { OfflineBanner } from '@/components/OfflineBanner' import { Footer } from '@/components/Footer' -import { Header } from '@ciphera-net/ui' +import { Header, type CipheraApp } from '@ciphera-net/ui' import NotificationCenter from '@/components/notifications/NotificationCenter' import { useAuth } from '@/lib/auth/context' import { useOnlineStatus } from '@/lib/hooks/useOnlineStatus' @@ -16,6 +16,34 @@ import { useRouter } from 'next/navigation' const ORG_SWITCH_KEY = 'pulse_switching_org' +// * Available Ciphera apps for the app switcher +const CIPHERA_APPS: CipheraApp[] = [ + { + id: 'pulse', + name: 'Pulse', + description: 'Your current app — Privacy-first analytics', + icon: '/pulse_icon_no_margins.png', + href: 'https://pulse.ciphera.net', + isAvailable: false, // * Current app + }, + { + id: 'drop', + name: 'Drop', + description: 'Secure file sharing', + icon: '/drop_icon_no_margins.png', + href: 'https://drop.ciphera.net', + isAvailable: true, + }, + { + id: 'auth', + name: 'Ciphera Account', + description: 'Manage your account settings', + icon: '/auth_icon_no_margins.png', + href: 'https://auth.ciphera.net', + isAvailable: true, + }, +] + export default function LayoutContent({ children }: { children: React.ReactNode }) { const auth = useAuth() const router = useRouter() @@ -87,6 +115,8 @@ export default function LayoutContent({ children }: { children: React.ReactNode showPricing={true} topOffset={showOfflineBar ? `${barHeightRem}rem` : undefined} rightSideActions={auth.user ? : null} + apps={CIPHERA_APPS} + currentAppId="pulse" customNavItems={ <> {!auth.user && ( diff --git a/package-lock.json b/package-lock.json index 1d89a05..7472ae8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,7 +8,7 @@ "name": "pulse-frontend", "version": "0.11.1-alpha", "dependencies": { - "@ciphera-net/ui": "^0.0.64", + "@ciphera-net/ui": "^0.0.66", "@ducanh2912/next-pwa": "^10.2.9", "@radix-ui/react-icons": "^1.3.0", "@simplewebauthn/browser": "^13.2.2", @@ -1543,9 +1543,9 @@ } }, "node_modules/@ciphera-net/ui": { - "version": "0.0.64", - "resolved": "https://npm.pkg.github.com/download/@ciphera-net/ui/0.0.64/1630605518a705ba9e74f003b9c66646bcc699ac", - "integrity": "sha512-xY+yALuCqWtsH78t6xmy2JQnQ8WFSlihElHnetFr6GQp9mOTCA5rlQq+a8hyg4xW7uXtIbKmPBxVnH5TlH9lBQ==", + "version": "0.0.66", + "resolved": "https://npm.pkg.github.com/download/@ciphera-net/ui/0.0.66/a70ac6be09bae9522063f0a741f711b189540dd4", + "integrity": "sha512-Ui8ehDiOkceiojoM4UULXDE12QrZCWDQYyhylncw1+AyyfyA3mdBsJiwiRtiHiOqDHFuckuDEnFSLOMozwFIJg==", "dependencies": { "@radix-ui/react-icons": "^1.3.0", "clsx": "^2.1.0", diff --git a/package.json b/package.json index 0463c28..1e42bc6 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,7 @@ "type-check": "tsc --noEmit" }, "dependencies": { - "@ciphera-net/ui": "^0.0.64", + "@ciphera-net/ui": "^0.0.66", "@ducanh2912/next-pwa": "^10.2.9", "@radix-ui/react-icons": "^1.3.0", "@simplewebauthn/browser": "^13.2.2",