Skip to content

Commit 835f80e

Browse files
rubenmarcusclaudegreptile-apps[bot]
authored
feat(docs): seo blog, enriched content, blog images, npm size reduction (#197)
* docs: add SEO marketing plan and full docs.md generator - Add comprehensive SEO & marketing strategy doc with 35+ article roadmap, 4-tier keyword strategy, and social media playbook - Add build script to generate a single docs.md from all 39 doc pages - Hook script into docs build so docs.md stays up to date - Serve at /docs.md for easy single-file download Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(docs): add download docs button with .md and .txt options Adds a DownloadDocs component to the docs intro page with two download buttons: .md (full formatted docs) and .txt (llms-full.txt). Styled to match the quantum theme. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * Update docs/scripts/generate-full-docs.cjs Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com> * fix(docs): skip fenced code blocks when bumping headings The heading bumper was running on every line including fenced code blocks, turning shell comments like "# Install" into "## Install". Now tracks fence state and only bumps actual markdown headings. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(docs): enable blog, add 11 posts, and set up i18n for 10 languages - Enable blog in Docusaurus config with reading time and sidebar - Add 11 SEO-optimized blog posts written in Ruben's dev voice - Set up i18n for pt, es, fr, tr, de, ar, zh-Hans, ja, ko with RTL support - Translate all UI strings (code.json, navbar, footer, sidebar, blog) for 9 locales - Add README translations for all 9 non-English languages with language selector - Fix broken internal links in existing blog posts Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(docs): move locale switcher to footer and add blog images - Remove localeDropdown from navbar (caused 404s and URL concatenation) - Add Languages section to footer with absolute URLs for all 10 locales - Generate branded blog images (1200x630 og:image) for all 11 posts - Build verified: all 10 locales build successfully Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat(docs): growth sprint — remove i18n, enrich blog, reduce npm size - Remove all i18n: delete 45 translation JSON files, 9 translated READMEs, strip locale config from docusaurus.config.ts - Enrich 11 blog posts with terminal output, cross-links, Ralph Wiggum humor, and stronger CTAs - Regenerate blog images with Ralph character composites via ImageMagick - Reduce npm package size ~52% by excluding source maps in files field - Add .npmignore for additional exclusions (docs/, projects/, tests) - Add dev.to article draft (1,277 words) in docs/articles/ Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * docs: blog redesign, humanize content, add SEO descriptions - Custom BlogListPage with image card grid (no sidebar/pagination) - Humanize 11 blog posts: fix AI patterns, choppy sentences, add voice - Add description to all 14 blog post frontmatters for SEO snippets - Fix slug: ten-github-issues → automating-entire-workflows - Unique card images: ralph/1-6.jpg for newest posts - Dynamic footer version from package.json - Sync automating-entire-workflows with dev.to article - Credit Geoffrey Huntley as Ralph Wiggum technique creator - Remove inline images from post bodies (cards only) - Delete obsolete v0.1.0 release post Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * feat: add Remotion social videos + regenerate blog cards with logos - Set up Remotion project (social-content/) for programmatic video generation - Twitter thread video: 9 slides, 1080x1080px, 30s with fade-in animations - LinkedIn carousel video: 9 slides, 1080x1350px, 45s with slide transitions - BlogCard still: 1200x630px PNG with branded dark theme - Shared design system: colors, fonts, FadeIn, SlideContainer components - Update generate-blog-images.sh with logo overlay support - Add Figma logo to figma-to-code card image - Add Linear logo to linear-workflow card image - Fix auto-mode-github title: "Automating Entire Workflows" - Regenerate all 11 blog card images Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> * fix(docs): correct CLI commands, fix blog cards, humanize writing, remove social-content - Fix CLI command syntax across all blog posts and landing pages (--github/--linear/--notion → --from <source> --project <name>) - Fix 5 blog posts using generic /img/ralph/ thumbnails → proper /img/blog/ cards - Update Linear card title to "Ship Linear Tasks with AI" - Create new connect-your-tools card (was reusing Linear image) - Regenerate all 12 blog card images - Humanize AI writing patterns across all 14 blog posts (remove choppy fragments, merge isolated sentences, smooth transitions) - Fix stale "10 issues went to lunch" link texts - Remove dev.to duplicate article, add docs/articles/ to .gitignore - Delete social-content/ Remotion project - Remove unused dev.to image asset Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com> Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
1 parent 4921867 commit 835f80e

52 files changed

Lines changed: 1811 additions & 359 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,3 +25,8 @@ projects/
2525

2626
refs/
2727
refs/*
28+
29+
# Internal content (social media drafts, marketing plans, articles)
30+
docs/SEO_MARKETING_PLAN.md
31+
docs/articles/
32+
content/

.npmignore

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Source maps (not needed for CLI tool consumers)
2+
dist/**/*.js.map
3+
dist/**/*.d.ts.map
4+
5+
# Dev/repo files
6+
docs/
7+
projects/
8+
.github/
9+
*.test.*
Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,84 +1,84 @@
11
---
22
slug: why-autonomous-coding
3-
title: Why Autonomous AI Coding Loops Are the Future
4-
authors: [ralph]
5-
tags: [ai, coding, automation, future]
3+
title: Why autonomous AI coding loops work
4+
authors: [ruben]
5+
tags: [ai, coding, automation]
6+
description: I spent months copy-pasting between ChatGPT and my editor before I realized the loop itself was the problem, not the AI.
7+
image: /img/blog/ralph-wiggum-technique.png
68
---
79

8-
# Why Autonomous AI Coding Loops Are the Future
9-
10-
The way we write software is changing. Fast.
10+
I spent months copy-pasting code between ChatGPT and my editor before I realized I was the bottleneck.
1111

1212
<!-- truncate -->
1313

14-
## The Problem with Traditional AI Coding Assistants
14+
## The back-and-forth tax
1515

16-
Most AI coding tools today work like this: you ask a question, get an answer, copy-paste, tweak, repeat. It's helpful, but it's still *you* doing the heavy lifting. You're the one:
16+
You know the drill. Open ChatGPT, describe what you want, get some code back, paste it into your editor, run it, something breaks, copy the error, go back to the chat, paste the error, get a new version, paste that in. I was doing this maybe 15-20 times a day. For months.
1717

18-
- Breaking down the task
19-
- Managing context
20-
- Iterating on solutions
21-
- Running tests
22-
- Fixing errors
18+
And every round trip you lose a little bit of context. The model half-forgets what it suggested two messages ago. You lose track of which version you pasted where. Meanwhile you're the one running tests, reading stack traces, deciding what to try next.
2319

24-
What if the AI could do all of that autonomously?
20+
At some point I realized the AI was doing the easy part -- generating code -- and I was doing everything else. Basically a clipboard manager with opinions.
2521

26-
## Enter Autonomous Coding Loops
22+
## What if the agent just... kept going?
2723

28-
ralph-starter takes a different approach. Instead of being a passive assistant, it runs **autonomous coding loops**:
24+
So the idea behind ralph-starter is stupid simple. Instead of you being the middleman, the agent does the whole thing:
2925

3026
```bash
31-
ralph-starter run "add user authentication" --loops 5 --test --commit
27+
ralph-starter run "add user authentication with JWT" --loops 5 --test --commit
3228
```
3329

34-
Here's what happens:
30+
It reads your codebase, writes code, runs your tests. If something fails, it reads the error and fixes it. Then runs tests again. Over and over until things pass or it runs out of loops. You just... go do something else.
3531

36-
1. **Loop 1**: Analyzes the codebase and requirements
37-
2. **Loop 2**: Implements the core functionality
38-
3. **Loop 3**: Adds tests and validation
39-
4. **Loop 4**: Fixes any issues found
40-
5. **Loop 5**: Polishes and commits
32+
Here's a real run from last week:
4133

42-
Each loop builds on the previous one. The AI learns from test failures, linter errors, and build issues—then fixes them automatically.
34+
```
35+
Loop 1: Read codebase, generated auth middleware and routes
36+
→ Tests: 3 failed (missing bcrypt import, wrong token expiry, no error handler)
4337
44-
## Why This Matters
38+
Loop 2: Fixed imports, updated token config, added error handling
39+
→ Tests: 1 failed (error handler not catching expired tokens)
4540
46-
### 1. Context Persistence
47-
Traditional chat-based coding loses context. You start fresh each time. Autonomous loops maintain full context across iterations.
41+
Loop 3: Added expired token case to error handler
42+
→ Tests: passed
43+
→ Lint: 2 warnings (unused import, missing return type)
4844
49-
### 2. Validation-Driven Development
50-
Every change runs through your test suite. Bad code doesn't survive.
45+
Loop 4: Cleaned up lint issues
46+
→ Tests: passed, Lint: passed, Build: passed
47+
→ Committed: feat: add JWT authentication
48+
```
5149

52-
### 3. Cost Efficiency
53-
You pay for results, not conversation. A task that might take 20 back-and-forth messages gets done in 3-5 focused loops.
50+
Four loops, zero copy-pasting, zero babysitting. I reviewed the diff after and it was clean -- I made coffee during loop 2.
5451

55-
## The Specification-First Workflow
52+
## Why this works better than chatting
5653

57-
The real magic happens when you combine autonomous loops with specs from your existing tools:
54+
The big difference is context. In a chat, the model kind of forgets what it tried two messages ago. In a loop, the agent sees everything -- its own previous attempts, the full test output, the whole history. It doesn't start over each time.
5855

59-
```bash
60-
# From a GitHub issue
61-
ralph-starter run --github "owner/repo#42"
56+
And errors become free instructions, which is the part that really clicked for me. When `TypeError: Cannot read properties of undefined` shows up in the test output, the agent gets that exact string -- you don't have to describe the problem. It reads the stack trace and acts on it. That is the stuff I was doing manually before, and honestly the agent is better at it than me because it does not skip lines.
6257

63-
# From a Linear ticket
64-
ralph-starter run --linear "PROJ-123"
58+
A chat session might take 15-20 messages to land on working code. A loop usually finishes in 3-5 iterations because each one does real work, validates it, and course-corrects. You're paying for results, not conversation.
6559

66-
# From a Notion page
67-
ralph-starter run --notion "page-id"
68-
```
60+
## Where it actually works (and where it doesn't)
6961

70-
Your specs live where your team already works. ralph-starter fetches them and turns them into working code.
62+
This is not magic though. It works really well when you have:
7163

72-
## What's Next
64+
- **A clear spec.** "Add password reset flow per the design in issue #42" works great. "Make the auth better" does not.
65+
- **Tests.** Even crappy ones. Tests give the agent a finish line. Without them it's just vibes.
66+
- **A linter and type checker.** More automated checks = more signal for the agent to self-correct.
7367

74-
We're just getting started. The future includes:
68+
The tasks where I've had the best results: implementing a well-scoped feature from a GitHub issue, fixing a bug with a reproducible test case, refactoring code that has good coverage.
7569

76-
- **Multi-agent collaboration**: Specialized agents working together
77-
- **Learning from feedback**: Improving based on your review comments
78-
- **CI/CD integration**: Autonomous loops triggered by events
70+
Where it falls apart: vague requirements with no tests, greenfield projects with no structure yet, anything that needs human judgment about UX. I tried it on a "redesign the dashboard" task once and... yeah. Don't do that.
71+
72+
## It gets even better with real specs
73+
74+
One more thing that made a huge difference. Instead of writing a prompt from scratch, you can point it at an actual GitHub issue:
75+
76+
```bash
77+
ralph-starter run --from github --project myorg/api --issue 42 --loops 5 --test --commit
78+
```
7979

80-
The question isn't whether AI will write most code—it's how we'll orchestrate it.
80+
This fetches the full issue body, comments, linked context -- all of it. The agent gets the same spec your team wrote for a human developer. Except it doesn't skim. It reads the whole thing, every comment, every acceptance criterion. Honestly it's more thorough than I am.
8181

8282
---
8383

84-
Ready to try autonomous coding? [Get started with ralph-starter](/intro).
84+
If you want to try it, [the quickstart takes about two minutes](/docs/intro).
Lines changed: 52 additions & 78 deletions
Original file line numberDiff line numberDiff line change
@@ -1,120 +1,105 @@
11
---
22
slug: connect-your-tools
3-
title: "Connect Your Tools: From Spec to Code in One Command"
4-
authors: [ralph]
3+
title: From spec to code in one command
4+
authors: [ruben]
55
tags: [integrations, github, linear, notion, workflow]
6+
description: Your specs already live in GitHub, Linear, or Notion. One command pulls them into ralph-starter and starts coding.
7+
image: /img/blog/connect-your-tools.png
68
---
79

8-
# Connect Your Tools: From Spec to Code in One Command
9-
10-
Your specifications already exist. They're in GitHub issues, Linear tickets, Notion docs, and markdown files. Why copy-paste them into an AI chat?
10+
Every feature you build starts with a spec that already exists somewhere. GitHub issue, Linear ticket, Notion doc. It's already written. The annoying part is getting it into your AI tool without losing half of it.
1111

1212
<!-- truncate -->
1313

14-
## The Copy-Paste Problem
15-
16-
Here's a typical workflow with AI coding assistants:
14+
## The problem I kept running into
1715

18-
1. Open your GitHub issue
19-
2. Copy the description
20-
3. Paste into AI chat
21-
4. Copy linked context
22-
5. Paste that too
23-
6. Ask the AI to implement
24-
7. Copy the code back
25-
8. Create a branch, commit, push
26-
9. Update the issue
16+
I'd open a GitHub issue, read through the description and comments, mentally summarize it, then type a prompt for Claude that captured... maybe 60% of what was actually in the issue. The linked design doc? Forgot to include it. The acceptance criteria someone added in comment #3? Missed that too.
2717

28-
That's a lot of manual work. And context gets lost along the way.
18+
The spec was right there. I was just a really bad copy-paster. And you know what's dumb? I did this for months before it occurred to me that a script could just fetch the issue directly.
2919

30-
## One Command, Full Context
20+
## So I made it one command
3121

32-
ralph-starter connects directly to your tools:
22+
ralph-starter just pulls the spec directly and feeds it to the agent:
3323

3424
```bash
35-
# Fetch from GitHub and implement
36-
ralph-starter run --github "myorg/myrepo#123" --commit --pr
25+
ralph-starter run --from github --project myorg/api --issue 42 --loops 5 --test --commit
26+
```
3727

38-
# Fetch from Linear
39-
ralph-starter run --linear "PROJ-456" --commit
28+
What happens here: it authenticates with GitHub using your existing `gh` CLI session, grabs issue #42 -- body, all comments, labels, linked references, everything -- and hands it all to the coding agent. Then the agent implements the feature, runs your tests after each loop, and commits when everything passes.
4029

41-
# Fetch from Notion
42-
ralph-starter run --notion "abc123" --commit
43-
```
30+
No tab-switching, no summarizing, no "let me paste the relevant parts." The agent gets the raw spec, the whole thing.
4431

45-
Everything flows automatically:
46-
- **Spec** → fetched from your tool
47-
- **Context** → linked files, comments, attachments
48-
- **Implementation** → autonomous coding loops
49-
- **Validation** → tests, lint, build
50-
- **Delivery** → commit, push, PR
32+
## GitHub issues and PRs
5133

52-
## Supported Integrations
34+
This is the one I use the most, by far. Just point it at an issue:
5335

54-
### GitHub Issues & PRs
36+
```bash
37+
ralph-starter run --from github --project owner/repo --issue 123
38+
```
39+
40+
It pulls the title, body, comments, file references. If the issue links to other issues, those come along too. Basically the agent sees everything your team wrote -- which is usually way more context than what I'd remember to paste.
41+
42+
PRs work the same way, which is great for when you get review feedback and don't want to fix 12 nits by hand:
5543

5644
```bash
57-
ralph-starter run --github "owner/repo#123"
45+
ralph-starter run --from github --project owner/repo --issue 456 --loops 3 --test
5846
```
5947

60-
Fetches:
61-
- Issue/PR title and body
62-
- Comments and discussion
63-
- Linked files and references
64-
- Labels and metadata
48+
## Linear tickets
6549

66-
### Linear Tickets
50+
If your team uses Linear, same deal:
6751

6852
```bash
69-
ralph-starter run --linear "PROJ-123"
53+
ralph-starter run --from linear --project PROJ --issue PROJ-123 --commit
7054
```
7155

72-
Fetches:
73-
- Ticket title and description
74-
- Sub-issues and parent context
75-
- Attachments and links
76-
- Priority and status
56+
Grabs the ticket description, sub-issues, attachments, priority. One thing I've noticed: Linear tickets tend to be really well-structured compared to GitHub issues, so the agent gets cleaner input and the results are usually better on the first try. Not always, but noticeably.
57+
58+
## Notion pages
7759

78-
### Notion Pages
60+
For teams that write everything in Notion (I've been there):
7961

8062
```bash
81-
ralph-starter run --notion "page-id"
63+
ralph-starter run --from notion --project "page-id" --loops 5 --test
8264
```
8365

84-
Fetches:
85-
- Page content (markdown converted)
86-
- Linked databases
87-
- Child pages
88-
- Embedded files
66+
The page content gets converted to markdown, and child pages and linked databases come along for the ride. This is especially nice for those longer specs -- you know, the ones with 3 sections and a table and a "Notes from the last meeting" block. Try pasting all of that into a chat window. Actually, don't.
8967

90-
### Local Files & URLs
68+
## Local files and URLs
69+
70+
Sometimes the spec is just a markdown file in your repo:
9171

9272
```bash
93-
# Local spec file
94-
ralph-starter run --from ./specs/auth-feature.md
73+
ralph-starter run --from ./specs/auth-feature.md --test --commit
74+
```
9575

96-
# Remote URL
76+
Or a URL:
77+
78+
```bash
9779
ralph-starter run --from "https://example.com/spec.md"
9880
```
9981

100-
## Combining Sources
82+
## Combining sources (this is the good part)
10183

102-
Need context from multiple places? Combine them:
84+
OK so the thing I actually use the most in practice is combining a GitHub issue with extra local context:
10385

10486
```bash
10587
ralph-starter run \
106-
--github "owner/repo#123" \
107-
--from ./additional-context.md \
88+
--from github --project owner/repo --issue 123 \
89+
--context ./docs/api-conventions.md \
10890
--loops 5 \
91+
--test \
10992
--commit
11093
```
11194

112-
## Authentication
95+
The agent gets the issue spec plus your project conventions in one shot. This is where the quality jumps noticeably. Before I started doing this, the agent would generate code that worked but didn't follow our patterns -- wrong naming conventions, different error handling style, that kind of thing. Now it matches the rest of the codebase on the first try most of the time.
11396

114-
Set up once, use everywhere:
97+
## Setting up auth
98+
99+
One-time setup, takes like 30 seconds:
115100

116101
```bash
117-
# GitHub (uses gh CLI)
102+
# GitHub (uses your existing gh CLI login)
118103
gh auth login
119104

120105
# Linear
@@ -124,17 +109,6 @@ ralph-starter config set linear.apiKey lin_api_xxx
124109
ralph-starter config set notion.token secret_xxx
125110
```
126111

127-
## What's Next
128-
129-
We're adding more integrations:
130-
- Jira
131-
- Asana
132-
- Trello
133-
- Slack threads
134-
- Discord messages
135-
136-
Your workflow, your tools, your way.
137-
138112
---
139113

140-
Ready to connect? Check out the [integrations guide](/sources/overview).
114+
The full list of supported sources is in the [integrations guide](/docs/sources/overview).

0 commit comments

Comments
 (0)