diff --git a/frontend/app/trees/[id]/persons/[personId]/page.tsx b/frontend/app/trees/[id]/persons/[personId]/page.tsx
index 8c0bad2..211796f 100644
--- a/frontend/app/trees/[id]/persons/[personId]/page.tsx
+++ b/frontend/app/trees/[id]/persons/[personId]/page.tsx
@@ -535,6 +535,16 @@ export default function PersonDetailPage() {
setEditingPerson(true);
}
+ // Quick one-click sex setter — no need to open the full edit form. PATCH is
+ // exclude_unset on the backend, so sending only `gender` leaves the rest.
+ async function setGender(value: "male" | "female" | null) {
+ await api.PATCH("/api/v1/trees/{tree_id}/persons/{person_id}", {
+ params: { path: { tree_id: treeId, person_id: personId } },
+ body: { gender: value },
+ });
+ load();
+ }
+
async function savePerson() {
const { error } = await api.PATCH("/api/v1/trees/{tree_id}/persons/{person_id}", {
params: { path: { tree_id: treeId, person_id: personId } },
@@ -711,16 +721,35 @@ export default function PersonDetailPage() {
{person.primary_name ?? "Unnamed person"}
- {person.gender === "male" && (
-
- ♂
-
- )}
- {person.gender === "female" && (
-
- ♀
-
- )}
+
+ {/* One-click sex setter — no edit mode needed. Active = current; click it again to clear. */}
+
+
+
{isSelf && (