All projects

Rails Site & AI Article Generator.

A Ruby on Rails lead-generation site for a sister developer-hiring brand, where I added a CMS-backed blog and a five-stage AI article generator.

I synced the blog from Strapi by webhook, with a table of contents, reading progress, editor's picks and author cards, and added 150 developer profile pages and styled XML sitemaps. The AI writer is one background job, started from a Strapi panel. It runs five stages (web-search research, writing, expansion only if the draft is under 2,500 words, a strict review and a deterministic clean-up), logs the token cost of every call and saves the article back to Strapi as a draft.

Role
Sole active developer · Softaims
Time
2026
Stack
Ruby on Rails · Turbo · Stimulus · GoodJob
Access
Private: company project

Constraints

Articles had to be long, accurate and on-brand, with the AI spend visible, and nothing could reach the live blog without an editor's sign-off.

Key decision

I took the hard rules away from the model: a plain-code clean-up makes sure no tool is listed twice, the counts in the title and the list agree, the slug follows one pattern, outside links are nofollow and there are no dashes. A model misses these however the prompt is worded. The job only ever writes a Strapi draft, never the published article, and the Strapi panel shows its progress.

One background job, five stages, every call costedsimplified · example valuesusage kept: 1 call
Researchweb searchWritethe draftExpandif < 2,500wordsReviewstrictClean-updeterministicStrapidraftfor editors
  1. Research: Started from a Strapi panel, one background job begins by researching the topic with web search. The call's token usage is kept for the cost log.
  2. Write: The same job then writes the article from that research.
  3. Expand: If the draft is under 2,500 words, it's expanded. Otherwise this stage is skipped.
  4. Review: A strict AI editor checks it against the house rules and fixes what it finds.
  5. Clean-up: A deterministic clean-up finishes it: plain code, no AI call, so nothing to cost.
  6. Done: Five stages in one background job. The article is saved back to Strapi as a draft, and the cost of every AI call is logged.

Research. Started from a Strapi panel, one background job begins by researching the topic with web search. The call's token usage is kept for the cost log.

150 developer profile pages · a five-stage AI writer with every call costed

Stack

Ruby on Rails · Turbo · Stimulus · GoodJob · Strapi · OpenAI · Tailwind CSS

Want to talk about this build?

I'm open to remote full-time roles and freelance work, and happy to walk through the decisions behind it.