From 39651135b35a4352823df15e68a74db86a0c5b87 Mon Sep 17 00:00:00 2001
From: ordinarthur <@arthurbarre.js@gmail.com>
Date: Mon, 20 Apr 2026 16:28:03 +0200
Subject: [PATCH] feat(web): header chip opens Account; drop Home footer
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Top-right DeviceChip now navigates to /settings — same destination as
the old footer "Account" link, one less piece of chrome. Pricing stays
reachable from the Account page via the existing "Compare" link in the
Free plan panel. Profile editing moves into the Account section so the
capability isn't lost when the chip stops opening the edit modal.
Co-Authored-By: Claude Opus 4.7
---
web/src/pages/Home.tsx | 33 ++++++-------------------------
web/src/pages/Settings.tsx | 40 +++++++++++++++++++++++++++++++++++---
2 files changed, 43 insertions(+), 30 deletions(-)
diff --git a/web/src/pages/Home.tsx b/web/src/pages/Home.tsx
index ff8e741..49249a2 100644
--- a/web/src/pages/Home.tsx
+++ b/web/src/pages/Home.tsx
@@ -1,4 +1,4 @@
-import { useCallback, useState } from "react";
+import { useCallback } from "react";
import { Link } from "react-router-dom";
import { useSignaling } from "../hooks/useSignaling";
import { useStore } from "../stores/useStore";
@@ -27,7 +27,6 @@ function HomeConnected() {
const setError = useStore((s) => s.setError);
const { deviceName, avatar } = useProfileStore();
- const [showProfileEdit, setShowProfileEdit] = useState(false);
const selectedPeer = peers.find((p) => p.peerId === selectedPeerId) ?? null;
@@ -87,11 +86,7 @@ function HomeConnected() {
Peer to peer · Encrypted
- setShowProfileEdit(true)}
- />
+
{error && (
@@ -145,23 +140,8 @@ function HomeConnected() {
-
- {showProfileEdit && (
- setShowProfileEdit(false)} />
- )}
-
{incomingRequest && (
void;
}) {
return (
-
+
);
}
diff --git a/web/src/pages/Settings.tsx b/web/src/pages/Settings.tsx
index a13cc72..de7d9de 100644
--- a/web/src/pages/Settings.tsx
+++ b/web/src/pages/Settings.tsx
@@ -2,6 +2,7 @@ import { useEffect, useState } from "react";
import { Link, useSearchParams } from "react-router-dom";
import { useAuthStore } from "../stores/useAuthStore";
import { useProfileStore } from "../stores/useProfileStore";
+import ProfileSetup from "../components/ProfileSetup";
import {
deleteTransfer,
listInboxTransfers,
@@ -29,6 +30,7 @@ export default function Settings() {
const [searchParams] = useSearchParams();
const signedIn = searchParams.get("signed_in") === "1";
const error = searchParams.get("error");
+ const [editingProfile, setEditingProfile] = useState(false);
useEffect(() => {
loadUser();
@@ -79,12 +81,44 @@ export default function Settings() {
Your identity
-
-
Email
-
{user.email}
+
+
+
+ {profile.avatar ? (
+

+ ) : (
+
+ ◦
+
+ )}
+
+
+ This device
+
+
{profile.deviceName}
+
+
+
+ {editingProfile && (
+
setEditingProfile(false)} />
+ )}
+