Inspiration

Every creator we talked to described the same post-production bottleneck: the video is edited and ready, but publishing it still takes an hour or more of manual, repetitive work — writing captions, guessing SEO metadata, coming up with a thumbnail hook, and figuring out when to post across three or four platforms. None of that requires creative judgment; it requires time. That's exactly the kind of task automation should eat first.

What it does

CreatorFlow takes one plain-text transcript and produces, in seconds:

  1. Captions — timed .srt / .vtt files, chunked to broadcast-standard line length and timed from a configurable speaking rate.
  2. SEO metadata — 5 title options, a description, tags, and hashtags, plus a transparent, rule-based SEO score (0–100) that explains every point it awards or withholds — not a black-box "AI says 82/100."
  3. Thumbnail ideas — 6 headline + on-image-text variants built from proven short-copy patterns and the transcript's real topical keywords.
  4. A posting schedule — every title slotted into a best-time-to-post calendar across your chosen platforms, strongest content claiming the best slots first, with zero double-booked slots.

It ships two ways: a zero-dependency Python CLI for scripting into a pipeline, and a browser-based UI (try it live (https://realahmadmujtaba.github.io/creatorflow/)) where you paste or upload a transcript and get results instantly — the whole pipeline runs client-side in JavaScript, so nothing is ever uploaded anywhere.

Everything works fully offline on heuristics. If you set ANTHROPIC_API_KEY in the CLI, titles and the description are additionally sharpened by Claude — and if that call fails for any reason, it silently falls back to the heuristic output, so a live demo never breaks on stage.

How we built it

  • Pure Python, standard library only for the core pipeline — zero required dependencies.
  • Each concern is its own module (captions, seo, thumbnails, scheduler, llm, report) wired together by a thin cli.py, so any piece can be swapped or extended independently.
  • Caption timing is estimated from words-per-minute rather than requiring audio or a forced-aligner, so it works from a transcript alone.
  • SEO keyword extraction is frequency-based with a curated stopword list tuned specifically for spoken video intros (filtering out "hey," "welcome back," "guys," etc. — the words a generic NLP stopword list misses but every creator transcript is full of).
  • The scheduler ranks content by SEO score and walks a per-platform "best times to post" table so the strongest material claims the best slots, without ever double-booking a platform.
  • The web UI is a direct, line-by-line JavaScript port of the Python pipeline (same stopwords, same title templates, same scheduling math), kept byte-for-byte in sync so the CLI and the browser demo never diverge.

Challenges we ran into

Our own regression test lied to us. Early on we caught a real bug live in the browser: the word "why" was missing from the stopword list, so it got extracted as a topic keyword and collided with the "Why {keyword} Matters" title template, producing the nonsensical title "Why Why Matters More Than You Think." We fixed the stopword list and added a regression test asserting no generated title repeats an adjacent word.

That test gave us false confidence. Days later, re-testing the same pipeline, we found the same class of bug still alive with a different word: "fail" wasn't in the stopword list either, so it produced "Why Fail Matters More Than You Think" — and separately, the keyword "systems" collided with a "How to {keyword}" template to produce the grammatically broken "How to Systems (Step by Step)." Neither is an adjacent-word repeat, so our existing test couldn't catch either one — it was guarding against the specific symptom we'd already seen, not the underlying cause: a pure frequency-based extractor has no idea whether a word it pulled out is a noun, a verb, or an adjective, so nothing stopped one from being shoved into a template that assumed it was a clean topic noun.

The real fix wasn't another word added to a list — it was separating "good for tags" from "good for a title." We kept "fail" and "systems" as legitimate SEO tags (they're genuinely on-topic) but added a second, narrower filter that excludes verb-shaped and bare-adjective words specifically from title/thumbnail templates, and rewrote the "How to" template to a phrasing that's grammatical for any noun instead of only verbs. We also caught, in the same pass, that thumbnail on-image text was truncating mid-word ("AUTOMATION: THE UNTOLD S") — fixed to break on a word boundary. All of it shipped with a new regression test and the live demo re-verified end-to-end before submission.

Accomplishments that we're proud of

  • A genuinely functional tool, not a mockup — every output file is real and immediately usable, in both the CLI and the browser.
  • An SEO scorer that shows its work instead of hiding behind an opaque number.
  • Zero required setup: git clone → one command → real output, or just open the live demo (https://realahmadmujtaba.github.io/creatorflow/) and paste a transcript.
  • A live browser-verification pass that caught and fixed two real bugs — including one that survived our own regression test — before submission.

What we learned

Heuristic, rule-based systems are underrated for hackathon judging: they're faster to build, 100% reproducible for a live demo (no API flakiness), and — critically — explainable, which matters when judges are scoring "technical execution." LLM enhancement is strictly additive, not load-bearing.

We also learned something about testing itself: a regression test named after a symptom ("no repeated adjacent words") only catches that symptom again. Catching a class of bug takes a test — and a fix — aimed at the actual mechanism (verb/adjective words landing in noun-shaped templates), not the one instance that happened to trip you up first.

What's next

  • Thumbnail image generation (today we generate the copy/headline, which is the actual bottleneck for most creators — image generation is a natural next layer).
  • Direct publish integration with the YouTube/TikTok/Instagram APIs so the generated schedule can execute itself instead of just planning.
  • Per-platform caption formatting (TikTok/Reels burned-in caption styling vs. YouTube sidecar files).
  • Light part-of-speech tagging on extracted keywords so title-template matching stops being denylist-based entirely.

✻ Brewed for 34s · done 4:35 PM

  • Built with

For the Devpost "Built With" tag field, here's the list reflecting both the CLI and the new browser UI:

python javascript

  • Caption timing is estimated from words-per-minute rather than requiring audio or a forced-aligner, so it works from a transcript alone.
  • SEO keyword extraction is frequency-based with a curated stopword list tuned specifically for spoken video intros (filtering out "hey," "welcome back," "guys," etc. — the words a generic NLP stopword list misses but every creator transcript is full of).
  • The scheduler ranks content by SEO score and walks a per-platform "best times to post" table so the strongest material claims the best slots, without ever double-booking a platform.
  • The web UI is a direct, line-by-line JavaScript port of the Python pipeline (same stopwords, same title templates, same scheduling math), kept byte-for-byte in sync so the CLI and the browser demo never diverge.

Challenges we ran into

Our own regression test lied to us. Early on we caught a real bug live in the browser: the word "why" was missing from the stopword list, so it got extracted as a topic keyword and collided with the "Why {keyword} Matters" title template, producing the nonsensical title "Why Why Matters More Than You Think." We fixed the stopword list and added a regression test asserting no generated title repeats an adjacent word.

That test gave us false confidence. Days later, re-testing the same pipeline, we found the same class of bug still alive with a different word: "fail" wasn't in the stopword list either, so it produced "Why Fail Matters More Than You Think" — and separately, the keyword "systems" collided with a "How to {keyword}" template to produce the grammatically broken "How to Systems (Step by Step)." Neither is an adjacent-word repeat, so our existing test couldn't catch either one — it was guarding against the specific symptom we'd already seen, not the underlying cause: a pure frequency-based extractor has no idea whether a word it pulled out is a noun, a verb, or an adjective, so nothing stopped one from being shoved into a template that assumed it was a clean topic noun.

The real fix wasn't another word added to a list — it was separating "good for tags" from "good for a title." We kept "fail" and "systems" as legitimate SEO tags (they're genuinely on-topic) but added a second, narrower filter that excludes verb-shaped and bare-adjective words specifically from title/thumbnail templates, and rewrote the "How to" template to a phrasing that's grammatical for any noun instead of only verbs. We also caught, in the same pass, that thumbnail on-image text was truncating mid-word ("AUTOMATION: THE UNTOLD S") — fixed to break on a word boundary. All of it shipped with a new regression test and the live demo re-verified end-to-end before submission.

Accomplishments that we're proud of

  • A genuinely functional tool, not a mockup — every output file is real and immediately usable, in both the CLI and the browser.
  • An SEO scorer that shows its work instead of hiding behind an opaque number.
  • Zero required setup: git clone → one command → real output, or just open the live demo (https://realahmadmujtaba.github.io/creatorflow/) and paste a transcript.
  • A live browser-verification pass that caught and fixed two real bugs — including one that survived our own regression test — before submission.

What we learned

Heuristic, rule-based systems are underrated for hackathon judging: they're faster to build, 100% reproducible for a live demo (no API flakiness), and — critically — explainable, which matters when judges are scoring "technical execution." LLM enhancement is strictly additive, not load-bearing.

We also learned something about testing itself: a regression test named after a symptom ("no repeated adjacent words") only catches that symptom again. Catching a class of bug takes a test — and a fix — aimed at the actual mechanism (verb/adjective words landing in noun-shaped templates), not the one instance that happened to trip you up first.

What's next

  • Thumbnail image generation (today we generate the copy/headline, which is the actual bottleneck for most creators — image generation is a natural next layer).
  • Direct publish integration with the YouTube/TikTok/Instagram APIs so the generated schedule can execute itself instead of just planning.
  • Per-platform caption formatting (TikTok/Reels burned-in caption styling vs. YouTube sidecar files).
  • Light part-of-speech tagging on extracted keywords so title-template matching stops being denylist-based entirely.

Built With

Share this project:

Updates

Submission history