Skip to content

feat(web): /projects/:slug/buzz/new — log-buzz form (closes #83 engineering scope)#105

Merged
themightychris merged 3 commits into
mainfrom
feat/screen-gaps-phase4
May 30, 2026
Merged

feat(web): /projects/:slug/buzz/new — log-buzz form (closes #83 engineering scope)#105
themightychris merged 3 commits into
mainfrom
feat/screen-gaps-phase4

Conversation

@themightychris
Copy link
Copy Markdown
Member

Summary

Last phase of #83. The API endpoint (`POST /api/projects/:slug/buzz`, per specs/api/projects-buzz.md) is fully implemented + tested; this PR ships the SPA form that closes the loop.

Form fields match the spec request body:

Field Required Notes
headline yes 1-200 chars
url yes HTTPS, surfaces inline 409 on `duplicate_url`
publishedAt yes date, defaults to today, max=today
summary no ≤2000 chars markdown

Successful POST navigates to `/projects/:slug#activity` so the new buzz appears in the activity feed. Anonymous callers redirect to `/login` with a return-to query so post-login drops them back on the form.

Image upload is out of v1 scope — the spec's `imageUpload.key` references a general-media upload endpoint that doesn't exist yet.

The lingering `ComingSoon` import in `App.tsx` (now unused after the last `/pages/:slug → StaticPage` swap in #104) is also dropped here.

What this closes

#83 is now done engineering-wise:

Only the legacy-content port for /pages/* remains as a follow-up content PR.

Test plan

  • 5 new screen tests: anonymous→login redirect, form renders all fields, submit disabled until required filled, submit enabled once filled, success navigates to project page
  • 54 web + all API + shared tests green
  • `npm run type-check && npm run lint` clean

🤖 Generated with Claude Code

themightychris and others added 3 commits May 30, 2026 12:22
Last open piece of #83 — the /projects/:slug/buzz/new form that closes
the loop on a fully-implemented API endpoint. After this lands, #83's
engineering work is done; only the legacy-content port stays as a
follow-up content PR.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closes the <ComingSoon /> placeholder at /projects/:slug/buzz/new.
The API endpoint (POST /api/projects/:slug/buzz, per
specs/api/projects-buzz.md) is fully implemented + tested; this PR
ships the SPA form that closes the loop.

Form fields match the spec request body:

  headline      required, 1-200 chars
  url           required, HTTPS, surfaces inline 409 on duplicate_url
  publishedAt   required date, defaults to today, max=today
  summary       optional, ≤2000 chars markdown

Successful POST navigates to /projects/:slug#activity so the new
buzz appears in the activity feed. Anonymous callers redirect to
/login with a return-to back to the form so post-login lands them
where they started.

Image upload is out of scope for v1 — the spec carve-out for
imageUpload.key references a general-media upload endpoint that
doesn't exist yet.

5 tests: anonymous→login redirect, form renders, submit disabled
until required fields filled, submit enabled once both filled,
success navigates to project page.

The lingering ComingSoon import in App.tsx (now unused after the
last /pages/:slug → StaticPage swap in #104) is also dropped here.

Closes #83 (engineering scope). Content-port follow-up tracked
separately.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
All 5 validation checkboxes ticked. Notes covers the useAuth.loading
naming mismatch, the ComingSoon dead-import cleanup, and the
native-required submit gating choice.

Follow-ups: #83 is now fully closed engineering-wise (4 phased PRs
land the umbrella). Only the legacy-content port stays as a content
task; image upload for buzz is out of v1 scope per the spec.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@themightychris themightychris merged commit 17dc705 into main May 30, 2026
1 check passed
@themightychris themightychris deleted the feat/screen-gaps-phase4 branch May 30, 2026 16:27
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.

1 participant