Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/scripts/post-twitter.js
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ async function postTwitter({ context }) {
// );

// Wait for a random amount of time
const getRandomDelay = () => Math.floor(Math.random() * 55000 + 5000);
const getRandomDelay = () => Math.floor(Math.random() * 10000 + 5000);
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
await sleep(getRandomDelay());

Expand Down
6 changes: 6 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -133,6 +133,7 @@ assert find_test_files("foo.ts", all_files, None) == ["foo.test.ts"]
10. `gh pr create --title "PR title" --body "PR description" --assignee @me`
- Technical, descriptive title. **No `## Test plan`**.
- **Two posts** (last section, customer-facing only): GitAuto (product voice) + Wes (personal voice, don't emphasize "GitAuto")
- Format: `## Social Media Post (GitAuto)` and `## Social Media Post (Wes)` headers (parsed by `extract-social-posts.js`)
- Guidelines: No em dashes (—). Under 280 chars. No marketing keywords. No negative framing. No internal names. No small numbers — use relative language. Honest stories. Vary openers — check recent posts first.
11. If Sentry issue: `python3 scripts/sentry/get_issue.py AGENT-XXX` then `python3 scripts/sentry/resolve_issue.py AGENT-XXX ...`
12. **Blog post** in `../website/app/blog/posts/`:
Expand Down Expand Up @@ -160,6 +161,11 @@ assert find_test_files("foo.ts", all_files, None) == ["foo.test.ts"]
- Body: `# Title`, what happened, root cause, fix, prevention. 300-600 words.
- If model failure: explain WHY the model failed and what gap GitAuto fills.
- Language-agnostic framing with parallel examples.
- **Blog cover image** (REQUIRED): One image at `../website/public/og/blog/{slug}.png` (1200x630) serves three purposes: OG meta tags, Dev.to `main_image`, and in-post cover (rendered by `app/blog/[slug]/layout.tsx`). Non-blog OG images are auto-generated by `generate-og-images.yml`.
- **Literal and obvious, not artsy**: Search for the post's core concept directly. E.g., "let your agent forget" → "eraser chalkboard" (literal), NOT "sand wind disappearing" (too abstract/pretentious). Keep it simple and immediately recognizable.
- Unsplash API: `source .env && curl "https://api.unsplash.com/search/photos?query=QUERY&orientation=landscape&client_id=$UNSPLASH_ACCESS_KEY"`, download with `?w=1200&h=630&fit=crop&crop=entropy`
- Convert to PNG: `sips -s format png downloaded.jpg --out ../website/public/og/blog/{slug}.png`
- Dev.to crops to 1000x420 — keep important content centered.
13. **Docs page** in `../website/app/docs/`: Create new or update existing. Browse for best-fit category. New pages: 3 files (`page.tsx`, `layout.tsx`, `jsonld.ts`).

## CRITICAL: Fixing Foxquilt PRs
Expand Down
Loading