Skip to content

Count every commune's notices and put what needs you first (app review batch 5, Home and notices) - #32

Merged
EmotiveImpact merged 10 commits into
mainfrom
claude/app-review-home-notices
Oct 12, 2026
Merged

EmotiveImpact merged 10 commits into
mainfrom
claude/app-review-home-notices

Conversation

@EmotiveImpact

Copy link
Copy Markdown
Owner

Before: the bell counted only the open commune's notices, so a reminder or payment report from another commune showed nothing, even on Home. Home's Needs you listed every open expense you paid for alongside your unpaid shares, late jobs and pledges, sorted only by date, and This Hub built its list another way. Activity rows read "Inspection: Created" without saying whether it was a task, event, note or expense, and with no time of day. Screens showing someone who had left wrote "Former member" or "the bill payer", although the snapshot keeps their name. The sidebar carried the reminder allowance under your name, a blank name showed "MC" in its avatar, the saved splits filters sat apart without showing which was selected, and text over a bright commune photo dropped to between 1.6:1 and 2.7:1.

After: the bell adds up every commune's unread notices on every screen, and Notices lists the open commune first, then each other commune under its name. Needs you puts what only you can do first (payments someone says they sent, your unpaid shares, your late tasks and your pledges due) and keeps what others owe you in a quieter "Waiting on others" group, built by one rule on Home and This Hub. Activity rows name the record's type with a coloured chip, show the time and are grouped by day. Former members are named, with "(left)" where it matters. The reminder allowance shows where reminders are sent, a blank name shows "?", the saved splits filters match Funds' chips, and text over a white stand-in photo now measures at least 4.6:1 for small text.

This is the last of three pull requests for batch 5 of the app review fixes. It is built on #31 (getting around), so review that first; the diff here shows only this part.

What changed, by finding

Finding Change
34 Migration 0039 adds each commune's unread count to the commune list the app already reads each minute, and my_unread_notices() returns the unread notices of every commune the caller belongs to, with the sender's name. The bell adds up every commune's count on every screen. Notices lists the open commune first, then each other commune with unread notices under its name, fetched only when Notices opens; a failed fetch offers Try again. Opening another commune's notice marks it read, refreshes that commune and switches to it before opening the record.
32 One rule, needsYou() in apps/web/src/live/model.ts, builds Needs you on Home and This Hub: payments someone says they have sent, which only the bill payer can confirm, then your unpaid shares (marked overdue when late), your tasks that are late or due today, then your pledges due, the earliest first within each. What others owe you, and payments you said you sent, sit in a quieter "Waiting on others" group. Home shows up to 6 actions and 4 waiting rows with "And N more", This Hub's count covers actions only, and Home lists pending payment reports for communes that aren't open (0039).
49 Each activity event carries its record type (expense, repayment, fund, pledge, contribution, recurring, template, task, event, note, member or announcement), worked out by 0039 from the record it is about, so older events get one too. Activity and All activity show a coloured chip and the type word (money in slate, plans in sage, shared things in cream) with the time, under Today, Yesterday or the date. Home's Recent activity shows the type with the day and time.
Former members (found while checking batch 3) One helper, personName, names anyone the snapshot knows and adds "(left)" where it matters that they are no longer a member: Settle, the expense, pay and breakdown windows, Funds, Recurring, saved splits, Members, announcements, Notices, and note and task history. "Former member" remains only for someone the snapshot does not know.
55 A name with no letters shows "?" in its avatar instead of "MC". The reminder allowance leaves the sidebar, which now shows only the role; it stays in account settings, on an expense its payer can nudge from and in the reminder confirmation. Once a fifth or less is left, Settle, the expense window and an admin's fund window say how many are left, or when the next one comes back, wherever a Nudge or Chase is offered.
46 Saved splits' Active and Archived filters use the same chips as Funds, side by side, with the selected one marked.
58 The shade under each commune photo is now darkest where the text sits, measured up from the bottom, while the top of the photo is as light as before. The type labels and the Hub's buttons have their own small dark backdrop, and the status lines and a trip's Area and Stay are less faded. Over a white stand-in photo, small text now measures at least 4.6:1, large text 3.2:1 and the buttons 5.1:1. You chose to keep this darker shade on 9 October.

Not in this batch: Home's Recent activity is typed but not grouped by day, and the grey text on Hub panels (--hub-muted, about 4.2:1) stays as it is for now.

Releasing

Nothing hosted was touched. Migration 0039 is local only and follows 0038. Everything in it adds to what is there, so the previous client keeps working. Apply it and refresh the Data API schema cache before deploying this client, which calls my_unread_notices when another commune has unread notices.

Needs the owner

  • The design reference page (apps/web/reference/design-language/index.html) now shows "Admin" alone in the account line, where it showed "Admin · 58 reminders left", to match the sidebar. Say if you would rather the reference stayed as it was.

How it was checked

On the final branch:

  • 602 web tests in 56 files, including the new notices-across-communes (8), needs-you (4), activity-log (5), former-members (6), reminder-allowance (5) and cover-contrast (14). The contrast test fails against the old stylesheets.
  • 27 database tests through run-local.sh, including the new notices_and_activity.sql; 2 more need a Neon branch.
  • 21 local API suites on a disposable database and port, including the new notices-and-activity.mjs, and the reminder worker's unit tests and 4 database suites.
  • Typechecks for the web app, local API and worker, a production build, and the secret scan.

In Chromium, on a disposable database with three communes: the bell read "Notifications, 4 unread" from Home, and Notices listed 14 Park Street first, then Studio East and Lisbon long weekend under their names. This Hub's Needs you put Jordan's reported payment first, then the shares owed, with Rent, Electricity and the sofa under Waiting on others. An older expense named "Lena Fischer (left)". Covers were compared over bright and dark photos before and after. No page errors.

How

needsYou() works only from the snapshot and the commune summaries, so Home and This Hub share it and its tests. 0039 changes the shared database functions in place with checked anchors, so it fails loudly instead of applying if one of them has changed underneath it. The contrast test reads the shade and colour values from the stylesheets and lays them over white, so a later style change that drops below the rule fails CI. docs/HANDOFF.md, docs/DESIGN-LANGUAGE.md, infra/neon/README.md and infra/local/README.md record the changes and migration 0039.

🤖 Generated with Claude Code

https://claude.ai/code/session_01A6P7aTcMBccooYYr4xYnVS


Generated by Claude Code

claude added 10 commits October 9, 2026 18:20
Migration 0039 adds unreadNotices to the commune list and to the
snapshot's commune, so the bell can count every commune from the list the
app already reads each minute, and a public.my_unread_notices() read for
Notices to show unread notices from other communes, in the snapshot's
shape with the sender's name and a pledge notice's open fund. Each
activity event in the snapshot now carries recordType (expense, repayment,
fund, pledge, contribution, recurring, template, task, event, note, member
or announcement), and the overview summary keeps a share's pending
payment report so Home can list it for the bill payer. The shared
functions are patched in place with checked anchors.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A6P7aTcMBccooYYr4xYnVS
…mune

The bell counted only the open commune's notices, so a notice from another
commune showed nothing, even on Home. The commune list the app already reads
each minute now carries each commune's unread count (0039), and the bell adds
them up on every screen. Notices lists the open commune first, then each other
commune with unread notices under its name, read from the new
GET /api/notices/unread (my_unread_notices on Neon) only when Notices opens.
Opening a notice from another commune marks it read there, refreshes that
commune and switches to it before opening the record.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A6P7aTcMBccooYYr4xYnVS
Activity rows read "Inspection: Created" without saying whether it was a
task, event, note or expense, and with no time of day. Each row now carries
the record type the snapshot names (0039), falling back to the event's area,
and shows it as a coloured icon chip and a word (money in slate, plans in
sage, shared things in cream). Activity and All activity group their rows
under Today, Yesterday or the date and show the time each was recorded;
Home's recent activity shows the type with the day and time. Notices'
commune headings share the new day heading style.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A6P7aTcMBccooYYr4xYnVS
Home listed every open expense you paid for alongside your unpaid shares,
late jobs and pledges, sorted only by date, and This Hub built its list
another way. One rule (needsYou) now builds both: payments someone says
they have sent, which only the bill payer can confirm, then your unpaid
shares, your tasks that are late or due today, then your pledges due, the
earliest date first within each. What others owe you, and payments you said
you sent, sit in a quieter Waiting on others group with nothing to do. The
counts on This Hub include only what needs you. Home reads other communes'
pending payment reports from their summaries (0039).

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A6P7aTcMBccooYYr4xYnVS
Settle, expenses, templates, recurring bills, pledges, announcements,
notices, note and task history fell back to "Former member", "Member" or
"the bill payer" for someone who had left, because they looked people up
among current members only, while the snapshot keeps everyone's name
(0031). One helper, personName, now names anyone the snapshot knows, adds
"(left)" where it matters that they are no longer a member (who owes or is
owed, shares, template participants, bill payers, pledges), and keeps the
generic words only for someone the snapshot does not know.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A6P7aTcMBccooYYr4xYnVS
… reminders are sent

A name with no letters now shows "?" in its avatar instead of "MC".

The allowance leaves the sidebar's account line, which now shows only the
role. The meter stays in account settings and on an expense its payer can
nudge from, and the confirmation still shows what is left. Once a fifth of
the allowance or less is left, Settle's You're owed column, the expense
window and an admin's fund window say how many are left, or when the next
one comes back.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A6P7aTcMBccooYYr4xYnVS
The Active and Archived filters were toolbar buttons, which the toolbar
pushed apart, and both looked the same whichever was on. They now use the
chip control Funds uses, side by side, with the selected one marked.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A6P7aTcMBccooYYr4xYnVS
Measured over a white stand-in photo, the label, title and buttons on
Home's cards and the Hub hero dropped to between 1.6:1 and 2.7:1.

The shade under each photo is now darkest where the text sits, measured up
from the bottom so it follows the text, while the top of the photo is as
light as before. The type labels and the Hub's buttons have their own small
dark backdrop, the Home status lines and a trip's Area and Stay are a
little less faded. Small text now reaches at least 4.6:1, large text 3.2:1
and the buttons 5.1:1, even over white. tests/cover-contrast.test.ts
measures each line from the stylesheets.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A6P7aTcMBccooYYr4xYnVS
The sidebar's account line now shows the role alone, with the reminder
allowance where reminders are sent, so the HTML reference shows "Admin" where
it showed "Admin · 58 reminders left", and its test checks that.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A6P7aTcMBccooYYr4xYnVS
- infra/neon/README.md: 0039 joins the local-only range and the release
  steps, with what it adds and when to deploy the client.
- infra/local/README.md: 0039 in the local setup order.
- DESIGN-LANGUAGE.md: the contrast rule for text over cover photos, which the
  owner approved, activity rows with a type chip, and filter chips.
- HANDOFF.md: a Start here entry for notices across communes, Needs you,
  activity types, former members' names, the reminder allowance and the
  photo shade.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01A6P7aTcMBccooYYr4xYnVS
@vercel

vercel Bot commented Oct 9, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
commune-web Error Error Oct 9, 2026 6:34pm UTC

Copy link
Copy Markdown
Owner Author

The Vercel preview for commune-web shows Error here, as it has on every branch since 6 October. It is the project or account issue explained on #24 (app review finding 45), not this diff: the Web app check, which builds the app, passes on this head (a3db9b2). It needs someone with the Vercel login to read a failed deployment's log.


Generated by Claude Code

@EmotiveImpact
EmotiveImpact changed the base branch from claude/app-review-navigation to main October 12, 2026 02:01
@EmotiveImpact
EmotiveImpact marked this pull request as ready for review October 12, 2026 02:01
@EmotiveImpact
EmotiveImpact merged commit 920f720 into main Oct 12, 2026
6 of 7 checks passed
@chatgpt-codex-connector

chatgpt-codex-connector Bot commented Oct 12, 2026 •

Copy link
Copy Markdown

Codex Review Summary

This comment shows the latest Codex review activity on this pull request.

Review Status Commit Review trigger
📝 Code Review ✅ Completed 2026-10-12T02:02:27.529725Z a3db9b2 Draft marked ready
ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review" or "@codex security review".

Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings.

This branch had an error being deployed

1 failed deployment
Preview — a3db9b2a Deployed Oct 9, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants