Skip to content

Commit 777522f

Browse files
ccross2claude
andcommitted
docs: document content queue system — decisions, trade-offs, limitations
Adds Social Content Queue section to CLAUDE.md covering: - Architecture (queue file, post script, cron) - 4 design decisions with rationale and trade-offs - Voice validation rules - Known limitations (no retry, no threads, JSON not DB, uptime dep) - Remaining work checklist Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
1 parent a559c2d commit 777522f

File tree

1 file changed

+74
-0
lines changed

1 file changed

+74
-0
lines changed

CLAUDE.md

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,6 +439,79 @@ Brand system v3 shipped tokens and assets (c68b171) but nothing in the site cons
439439
- OG image doesn't include the mark (satori limitation)
440440
- `.btn-peak` duplicates `.btn-primary` base styles — acceptable at current scale, but if more button variants emerge, consider a shared base class
441441

442+
## Social Content Queue (2026-03-28)
443+
444+
Automated daily thesis/vision posts for `@sovren_software` via a content queue system.
445+
446+
### Architecture
447+
448+
| Component | Path | Purpose |
449+
|-----------|------|---------|
450+
| Queue file | `scripts/content-queue.json` | 30 scheduled posts with status tracking |
451+
| Post script | `scripts/daily-post.js` | Reads queue, posts next due item via Twitter API v2, marks posted |
452+
| Cron | `0 14 * * *` (10 AM ET) | Sources `~/.claude/secrets.env`, runs daily-post.js |
453+
454+
### Commands
455+
456+
```bash
457+
npm run post # Post next due item
458+
npm run post:dry # Preview without posting
459+
npm run post:list # Show full queue status
460+
node scripts/daily-post.js --add "text" --category thesis # Append new post
461+
```
462+
463+
### Design Decisions
464+
465+
**D1: Thesis-only auto-scheduling**
466+
- **Decision:** Only sovereignty thesis / vision / philosophy posts are auto-scheduled. All product announcements, technical content, and build-in-public posts are manual and founder-driven.
467+
- **Rationale:** Account data showed 3 authentic posts (509-1,394 views) vastly outperformed 556 automated ones (0-57 views). Automated product posts risk being poorly timed or contradicting the founder's manual narrative. Technical depth is reserved for long-form X articles, benchmarks, demos, and videos.
468+
- **Trade-off:** Slower product content cadence, but higher quality and timing control.
469+
470+
**D2: Milestone-aligned sequencing**
471+
- **Decision:** 30 posts are sequenced in 4 weekly arcs that prime the audience for upcoming product milestones.
472+
- **Rationale:** Thesis posts build narrative context so that manual product drops land on prepared ground.
473+
- **Sequence:** Week 1 (hardware sovereignty → OpenHome) → Week 2 (agent identity → Passport SDK) → Week 3 (convergence bridge) → Week 4 (coordination ceiling → DACU demo).
474+
475+
**D3: Content lives in sovren-website, not mr-haven**
476+
- **Decision:** Brand-level social content and posting infrastructure lives in this repo.
477+
- **Rationale:** `@sovren_software` is the umbrella brand. `mr-haven` is one product underneath it. Brand assets belong at the brand level.
478+
479+
**D4: Credentials via secrets.env, not dotenv**
480+
- **Decision:** Cron sources `~/.claude/secrets.env` directly. No dotenv package for credential loading.
481+
- **Rationale:** Twitter API credentials (`TWITTER_API_KEY`, `TWITTER_API_SECRET`, `TWITTER_ACCESS_TOKEN`, `TWITTER_ACCESS_SECRET`) are already available via direnv in interactive sessions and via secrets.env for cron. Adding dotenv would duplicate existing infrastructure.
482+
483+
### Voice Rules (enforced by daily-post.js)
484+
485+
- Under 280 characters
486+
- No emojis (regex check)
487+
- No exclamation marks
488+
- No hype words (excited, amazing, incredible, revolutionary, game-changing, LFG, wagmi)
489+
- Declarative, terse, no hedging
490+
491+
### Known Limitations
492+
493+
- **No retry on failure.** If the Twitter API is down at 10 AM ET, the post is skipped until the next cron run (tomorrow). The post remains "pending" and will be picked up the next day.
494+
- **No thread support.** Each post is standalone. Threading requires the reply API (Pro tier, available but not wired).
495+
- **Queue is JSON, not a database.** Fine for 30-60 posts. If the queue grows past ~200 posts, consider SQLite.
496+
- **Cron depends on machine uptime.** If the-first is off at 14:00 UTC, the post is missed. No catch-up mechanism.
497+
- **No analytics feedback loop.** The script does not read engagement data. Weekly manual review via X Analytics is needed to adjust content.
498+
499+
### Remaining Work
500+
501+
- [ ] Fix @sovren_software bio: remove `**` markdown artifacts + trailing comma (manual, X settings)
502+
- [ ] Delete old automated/reply-farming posts from the profile (manual, ~30-45 min)
503+
- [ ] Monitor first week of posts for delivery confirmation (`/tmp/sovren-post.log`)
504+
- [ ] After 30 days: review analytics, draft next batch, evaluate X article timing
505+
- [ ] Consider adding `--retry` flag for transient API failures
506+
- [ ] Wire threading support for multi-part posts when needed
507+
508+
### Dependencies
509+
510+
- `twitter-api-v2` (devDependency) — Twitter API v2 client
511+
- Environment: `TWITTER_API_KEY`, `TWITTER_API_SECRET`, `TWITTER_ACCESS_TOKEN`, `TWITTER_ACCESS_SECRET`
512+
513+
---
514+
442515
## Backlog (external systems — not actionable from this repo)
443516

444517
These require access to external dashboards, registrars, or depend on work that doesn't exist yet:
@@ -454,6 +527,7 @@ These require access to external dashboards, registrars, or depend on work that
454527
- Update `@TheCesarCross` bio: "Augmentum OS" → "Esver OS"
455528

456529
### Completed
530+
- [x] Daily content queue system — 30 thesis posts, auto-post via cron at 10 AM ET, Twitter API v2 (2026-03-28)
457531
- [x] Brand v3 integration — nav mark, `.btn-peak` CTA class, peak accent on awakening CTAs, OG image regenerated (2026-03-18)
458532
- [x] Brand system v3 — hexagonal knot mark, violet atmosphere dark mode, peak state accent, warm text (2026-03-18)
459533
- [x] Favicon SVG updated to hexagonal knot on violet-black (2026-03-18)

0 commit comments

Comments
 (0)