<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: blanfort77-ship-it</title>
    <description>The latest articles on DEV Community by blanfort77-ship-it (@blanfort77shipit).</description>
    <link>https://dev.to/blanfort77shipit</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4102235%2Fbeb0565d-ce10-4186-a55c-a6a1a93a8b95.png</url>
      <title>DEV Community: blanfort77-ship-it</title>
      <link>https://dev.to/blanfort77shipit</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/blanfort77shipit"/>
    <language>en</language>
    <item>
      <title>You have 45 session descriptions due Friday</title>
      <dc:creator>blanfort77-ship-it</dc:creator>
      <pubDate>Tue, 01 Sep 2026 01:15:25 +0000</pubDate>
      <link>https://dev.to/blanfort77shipit/you-have-45-session-descriptions-due-friday-23gb</link>
      <guid>https://dev.to/blanfort77shipit/you-have-45-session-descriptions-due-friday-23gb</guid>
      <description>&lt;p&gt;The program locked yesterday. Forty-five accepted sessions across four tracks. Every one needs a short description for the website, a trimmed version for the printed schedule, and two or three promo posts to run in the weeks before doors open. Six track chairs submitted the abstracts, which means six different writing styles — three of them 400-word academic paragraphs, one of them a bulleted list, one of them a single run-on sentence written at an airport.&lt;/p&gt;

&lt;p&gt;This is the part of event marketing nobody staffs for. Sponsorship has an owner. Registration has an owner. The 180 small pieces of copy that turn a spreadsheet of accepted talks into a program people actually browse get absorbed by whoever has the calendar space, usually in one miserable week.&lt;/p&gt;

&lt;p&gt;The information problem is already solved. The abstracts contain what the sessions are about. What they lack is shape: consistent length, consistent voice, and a consistent answer to "should I go to this one?"&lt;/p&gt;

&lt;h2&gt;
  
  
  What the loop looks like
&lt;/h2&gt;

&lt;p&gt;Here is a submitted abstract, lightly typical of the genre:&lt;/p&gt;

&lt;p&gt;Session: Migrating legacy SCADA telemetry to time-series storage without downtime. Speaker: Dana Ruiz, Principal Engineer, Halden Water Authority. Level: Intermediate. Abstract: This session will discuss our two-year effort to move approximately 1,900 sensor tags off a proprietary historian onto an open time-series backend, including the dual-write period, the tag-mapping problems we did not anticipate, and the rollback procedure we fortunately never needed to use.&lt;/p&gt;

&lt;p&gt;You already have that in a spreadsheet or an Airtable base. The point of using an API rather than a chat window is that you never touch the 45 rows individually — you write one brief and iterate over the export:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://content-gen-api-csuh.onrender.com/v1/generate &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &lt;/span&gt;&lt;span class="nv"&gt;$CONTENT_GEN_KEY&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "brief": "Session description for a conference program. Second person, present tense. No hype adjectives. Final sentence names who should attend. Use only the facts below. Title: Migrating legacy SCADA telemetry to time-series storage without downtime. Speaker: Dana Ruiz, Principal Engineer, Halden Water Authority. Level: Intermediate. Abstract: Two-year effort moving ~1,900 sensor tags off a proprietary historian onto an open time-series backend, including the dual-write period, unanticipated tag-mapping problems, and the rollback procedure.",
    "contentType": "marketing",
    "tone": "professional",
    "length": 55
  }'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;brief&lt;/code&gt; and &lt;code&gt;contentType&lt;/code&gt; are the required fields; &lt;code&gt;tone&lt;/code&gt; and &lt;code&gt;length&lt;/code&gt; are optional. &lt;code&gt;contentType&lt;/code&gt; takes &lt;code&gt;blog&lt;/code&gt;, &lt;code&gt;social&lt;/code&gt;, or &lt;code&gt;marketing&lt;/code&gt; — a session blurb is marketing copy, so that is what this call asks for.&lt;/p&gt;

&lt;p&gt;What comes back is roughly this:&lt;/p&gt;

&lt;p&gt;Dana Ruiz walks through moving 1,900 sensor tags off a proprietary historian and onto an open time-series backend — without taking the plant offline. You will see how the dual-write period was structured, which tag-mapping assumptions broke first, and what the rollback plan looked like. Useful if you are maintaining industrial telemetry you inherited and cannot pause.&lt;/p&gt;

&lt;p&gt;Compare that with what actually ships when the week runs out:&lt;/p&gt;

&lt;p&gt;Join Dana Ruiz for a discussion of SCADA migration. More details coming soon.&lt;/p&gt;

&lt;p&gt;The second version is not a writing failure. It is a throughput failure. Nobody chose it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Consistency is the real win
&lt;/h2&gt;

&lt;p&gt;The output above is fine, not brilliant. You will tighten a phrase. That is the correct expectation.&lt;/p&gt;

&lt;p&gt;The part that is hard to do by hand is that all 45 come back the same. Same length, so the program grid does not have one card running four lines longer than its neighbors. Same voice, so the systems track does not read like a journal and the practitioner track like a sales page. Same closing move — a sentence naming the intended attendee — which is the single most useful line in a session blurb and the one that gets cut first under deadline.&lt;/p&gt;

&lt;p&gt;Change the brief once and regenerate all 45. That is a two-minute operation, not a two-day one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest limits
&lt;/h2&gt;

&lt;p&gt;Keep the facts in the source record and out of the model. Speaker titles, employers, session times, room numbers, ticket prices: pass them in, never ask for them. A model asked to fill a gap will fill it plausibly, and a wrong job title on a speaker's page is a worse problem than a boring blurb.&lt;/p&gt;

&lt;p&gt;Keynote copy and sponsor-facing material still deserve a human from a blank page. This is for the long tail — the 45 sessions, the speaker-thank-you posts, the "one week out" reminders.&lt;/p&gt;

&lt;h2&gt;
  
  
  The arithmetic
&lt;/h2&gt;

&lt;p&gt;Forty-five sessions, one description and three promo captions each, is 180 generations. Add regenerating a track after a change to the brief and you are near 250 for the program cycle. That is the Pro plan at $29/month — 1,000 generations. A single-track event or a meetup series producing under 100 pieces a month fits Starter at $9.&lt;/p&gt;

&lt;p&gt;Priced against the alternative, which is a week of someone's actual time, this is not a close call.&lt;/p&gt;

&lt;p&gt;Sign up with a POST to &lt;code&gt;/v1/signup&lt;/code&gt; at content-gen-api-csuh.onrender.com to get a key, then point it at your session export.&lt;/p&gt;

</description>
      <category>api</category>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>content-gen: an API for AI-generated blog, social, and marketing copy</title>
      <dc:creator>blanfort77-ship-it</dc:creator>
      <pubDate>Mon, 31 Aug 2026 06:43:47 +0000</pubDate>
      <link>https://dev.to/blanfort77shipit/content-gen-an-api-for-ai-generated-blog-social-and-marketing-copy-51a0</link>
      <guid>https://dev.to/blanfort77shipit/content-gen-an-api-for-ai-generated-blog-social-and-marketing-copy-51a0</guid>
      <description>&lt;p&gt;content-gen is an API for generating blog posts, social captions, and marketing copy using Claude. Subscribe, get an API key, POST a brief, get content back — no prompt engineering required on your end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why
&lt;/h2&gt;

&lt;p&gt;Building content generation into a product usually means wiring up an LLM provider, writing prompts for each content type, handling rate limits, and building billing on top of all of that. content-gen packages the generation logic behind a simple REST API so you can skip that setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Example
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-X&lt;/span&gt; POST https://content-gen-api-csuh.onrender.com/v1/generate &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Authorization: Bearer &amp;lt;your-api-key&amp;gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Content-Type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{"brief":"a new espresso blend","contentType":"social","tone":"playful"}'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Plans
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Starter — $9/mo, 100 generations&lt;/li&gt;
&lt;li&gt;Pro — $29/mo, 1,000 generations&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open source
&lt;/h2&gt;

&lt;p&gt;The core generation library is MIT-licensed and self-hostable with your own Anthropic API key: &lt;a href="https://github.com/blanfort77-ship-it/content-gen-saas" rel="noopener noreferrer"&gt;https://github.com/blanfort77-ship-it/content-gen-saas&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The hosted version above handles auth, billing, and rate limiting if you'd rather not run it yourself.&lt;/p&gt;

&lt;p&gt;Feedback welcome, especially on pricing and what content types would be useful to add.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>programming</category>
      <category>api</category>
    </item>
  </channel>
</rss>
