From 698aaffbbaac16ffca8ad028ef19430040e96ed7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADctor=20Falc=C3=B3n?= Date: Mon, 10 Aug 2026 08:54:21 +0200 Subject: [PATCH] feat(feedback): move feedback and roadmap links from Canny to UserJot (#748) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## What Replaces Canny (`whisper-money.canny.io`) with UserJot (`whispermoney.userjot.com`) everywhere it is linked in the app. | Surface | Before | After | | --- | --- | --- | | User dropdown → **Feedback** | `whisper-money.canny.io/feature-requests` | `whispermoney.userjot.com/` | | User dropdown → **Roadmap** | `whisper-money.canny.io/` | `whispermoney.userjot.com/roadmap` | | Jan 2026 update email | both Canny URLs | `/roadmap` + root | Canny's board root was the feedback list and `/feature-requests` the submission board; UserJot inverts that. The root is the cross-board "All Feedback" feed — it covers both the Features and Bugs boards and carries the *Give Feedback* button, so it is a superset of the old `/feature-requests` destination. `/roadmap` is a real dedicated page, which Canny never had. A repo-wide grep confirms no `canny` reference remains. Nothing else linked it — not the README, the landing page, the privacy/terms pages, or the drip emails. The new vitest case pins both hrefs, so an accidental revert fails the build. ## Testing - `user-menu-content.test.tsx` — 3/3 green. - Browser QA on the running app: logged in, opened the dropdown, clicked **Feedback** and **Roadmap**, and confirmed each opens the right UserJot page in a new tab (`rel="noopener noreferrer"` intact). Repeated at a 390×844 mobile viewport. See the demo below. ## Demo ## Follow-ups (outside this repo) - **The UserJot workspace still has demo seed posts.** "Shared access for family accounts" (Emily Roberts) is the only card under **In Progress**, so every user clicking Roadmap sees a fake item presented as actively being built — and it duplicates the real imported post "Multi-tenant support for families or companies". "Custom tags for transactions" (Sam Wilson) is in the feed too. Worth deleting before this ships. - **Canny is still live** and still serves its 17 posts. It has no URL redirect feature, so already-sent emails, Discord pins and search results will keep landing there. Close or rename the boards with a pointer to UserJot, and reconcile the import (Canny 17 vs UserJot Planned 5 / In Progress 1 / Done 11) before decommissioning. - **The Bugs board has no entry point.** The Support dialog still routes bug reports to Discord/email, so `/board/bugs` sits empty. Either point Support at it or drop the board. - **No SSO.** UserJot supports JWT identification; without it users need a second account to vote. Same as Canny, but the migration is the natural moment to add it. --- .../js/components/user-menu-content.test.tsx | 19 +++++++++++++++++++ resources/js/components/user-menu-content.tsx | 4 ++-- .../updates/first-update-jan-2026.blade.php | 4 ++-- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/resources/js/components/user-menu-content.test.tsx b/resources/js/components/user-menu-content.test.tsx index b22a8f69..aa9ecae0 100644 --- a/resources/js/components/user-menu-content.test.tsx +++ b/resources/js/components/user-menu-content.test.tsx @@ -103,6 +103,25 @@ describe('UserMenuContent', () => { ); }); + it('links feedback and roadmap to UserJot', () => { + render( + , + ); + + expect( + screen + .getByRole('link', { name: /feedback/i }) + .getAttribute('href'), + ).toBe('https://whispermoney.userjot.com/'); + expect( + screen.getByRole('link', { name: /roadmap/i }).getAttribute('href'), + ).toBe('https://whispermoney.userjot.com/roadmap'); + }); + it('triggers the support callback when the support item is clicked', () => { const onOpenSupport = vi.fn(); diff --git a/resources/js/components/user-menu-content.tsx b/resources/js/components/user-menu-content.tsx index 58de8a70..48f12970 100644 --- a/resources/js/components/user-menu-content.tsx +++ b/resources/js/components/user-menu-content.tsx @@ -116,7 +116,7 @@ export function UserMenuContent({ ## Why This Matters