diff --git a/PROJECT_INSTRUCTIONS.md b/PROJECT_INSTRUCTIONS.md index c88b345..a19eb2f 100644 --- a/PROJECT_INSTRUCTIONS.md +++ b/PROJECT_INSTRUCTIONS.md @@ -162,6 +162,8 @@ For `app/api/**/[param]/route.ts`: - Touch: long-press affordance for item-level actions when no visible button. - Mouse: hover affordance on interactive rows/cards. - Tap targets remain >= 40px on mobile. +- Avoid redundant nearby labels. If a tab, section title, count chip, row label, or control state already communicates the meaning, do not repeat it with an eyebrow label, explanatory zero-state sentence, or duplicate card label. +- Prefer compact label/value rows for dense settings controls instead of stacked labels with large vertical gaps. - Modal overlays must close on outside click/tap. - For every frontend action that manipulates database state, show a toast/bubble notification with basic outcome details (action + target + success/failure). - Frontend destructive actions should use the shared `ConfirmSlideModal` pattern instead of browser `confirm()` unless there is a documented exception. diff --git a/frontend/src/components/manage/ManageHousehold.jsx b/frontend/src/components/manage/ManageHousehold.jsx index 173bac8..39ae6a4 100644 --- a/frontend/src/components/manage/ManageHousehold.jsx +++ b/frontend/src/components/manage/ManageHousehold.jsx @@ -402,7 +402,6 @@ export default function ManageHousehold() {
-

Household

Identity

@@ -447,7 +446,6 @@ export default function ManageHousehold() {
-

Entry Rules

Invite Links

@@ -471,9 +469,7 @@ export default function ManageHousehold() { {inviteLoading ? (

Loading invite settings...

- ) : pendingRequests.length === 0 ? ( -

No pending join requests right now.

- ) : ( + ) : pendingRequests.length > 0 ? (
{pendingRequests.map((request) => { const requesterLabel = getRequesterLabel(request); @@ -509,7 +505,7 @@ export default function ManageHousehold() { ); })}
- )} + ) : null}