External press, articles, social posts about a project. Was laddr's ProjectBuzz. See data-model.md.
| Method | Path | Auth | Summary |
|---|---|---|---|
GET |
/api/projects/:slug/buzz |
public | List a project's buzz, newest first. |
POST |
/api/projects/:slug/buzz |
user | Log a new buzz item. |
PATCH |
/api/projects/:slug/buzz/:buzzSlug |
poster | staff | Edit a buzz item. |
DELETE |
/api/projects/:slug/buzz/:buzzSlug |
poster | staff | Remove a buzz item. |
GET |
/api/project-buzz |
public | Global buzz feed. |
Buzz is keyed in URLs by its own slug (derived from headline) so URLs like /projects/foo/buzz/inquirer-praises-foo stay stable across edits.
| Param | Type | Notes |
|---|---|---|
page, perPage |
int | Default perPage = 20. |
sort |
sort | Default -publishedAt. Allowed: publishedAt, createdAt. |
{
"success": true,
"data": [ProjectBuzz, ...]
}Any signed-in user can log buzz on any project (laddr precedent). The poster is recorded.
{
"headline": "The Inquirer praises Project X",
"url": "https://www.inquirer.com/...",
"publishedAt": "2026-04-12",
"summary": "Optional excerpt or quote.",
"imageUpload": { "key": "buzz-uploads/abc-123.jpg" } // optional; from prior upload endpoint
}| Field | Required | Notes |
|---|---|---|
| headline | yes | 1–200 chars. |
| url | yes | HTTPS. Unique within (projectId, url). |
| publishedAt | yes | Date or datetime. Date-only normalized to T00:00:00Z. |
| summary | no | ≤ 2,000 chars markdown. |
| imageUpload.key | no | Gitsheets attachment key from a prior upload (separate endpoint, not in v1 for general media; for buzz, allow direct multipart upload alongside the create call). Stored under project-buzz/<projectSlug>/<buzzSlug>/image.jpg. See behaviors/storage.md. |
{ "success": true, "data": ProjectBuzz }409 conflictwitherror.code = "duplicate_url"— URL already logged for this project
Editable fields: headline, url, publishedAt, summary, imageUpload. Slug regenerates only when explicitly requested via ?regenerateSlug=true to avoid silently breaking shared URLs.
{ "success": true, "data": ProjectBuzz }Hard delete. The image attachment (if any) is removed from the gitsheets data repo as part of the same commit.
Global feed of buzz across all projects.
| Param | Type | Notes |
|---|---|---|
page, perPage |
int | Default perPage = 30. |
since |
iso8601 | |
tag |
string | Filter to projects matching the tag. |
{
"success": true,
"data": [ProjectBuzz, ...]
}{
"id": "<uuid>",
"slug": "inquirer-praises-foo",
"project": { "slug": "squadquest", "title": "SquadQuest" },
"postedBy": PersonAvatar | null,
"headline": "The Inquirer praises Foo",
"url": "https://...",
"publishedAt": "2026-04-12T00:00:00Z",
"summary": "Excerpt.",
"summaryHtml": "<p>Excerpt.</p>",
"imageUrl": "/api/attachments/project-buzz/squadquest/inquirer-praises-foo/image.jpg" | null,
"permissions": {
"canEdit": false,
"canDelete": false
},
"createdAt": "...",
"updatedAt": "..."
}