Loading project
Preparing this case study...
Preparing this case study...
A Python CLI tool that mines high-engagement quotes from transcripts and blogs using OpenAI scoring, then generates branded social media quote cards.
Project Snapshot
Technical Footprint
This project is a Python-based content repurposing tool that mines strong quotes from transcripts, blogs, journals, and SRT subtitle files, then turns them into branded social media quote cards.
I built it to solve a real content problem: long-form content contains strong lines, but finding the best ones manually takes time. A podcast transcript, blog post, or journal entry can have hundreds of possible quotes, but only a few have the kind of rhythm, tension, clarity, or emotional pull that makes someone stop scrolling.
The system works in two stages. First, quote_miner.py parses the source text, extracts candidate quotes, filters out weak fragments, clichés, filler language, promo lines, and duplicated ideas, then uses OpenAI structured outputs to score the best quotes against a psychology-led rubric. The scoring looks at features like pattern interrupt, identity mirror, stakes, open loops, specificity, emotional charge, fluency, rhythm, social standard, and novelty.
After the quotes are ranked, make_cards.py turns them into PNG quote cards. It uses Pillow to render branded card designs with dynamic typography, avatar masking, verified badges, logos, font fitting, line balancing, and multiple social formats. The output is organised by brand, content type, slug, and timestamp so each run can be traced and reused.
The project supports multiple brands, including BEIA and Ruoth, with separate styling rules for fonts, logos, avatars, handles, and verification state. It can generate cards for story, portrait, and square formats, making the output usable across Instagram, TikTok, LinkedIn, X/Twitter, Pinterest, and other visual content channels.
This is not a web app or SaaS platform. It is a local CLI automation tool built for creator workflow speed. It does not post to social platforms, store data in a database, or provide a browser-based editing UI yet. Its value is in the automation: turning long-form content into ranked, branded, social-ready visual assets.
I built the quote mining script, including SRT parsing, text normalisation, candidate extraction, cliché filtering, filler detection, de-duplication, Jaccard diversity filtering, OpenAI structured scoring, weighted stop-score calculation, trigger classification, performance mode detection, and ranked JSON output.
I also built the card generation script using Pillow, including dynamic font fitting, balanced line wrapping, avatar masking, verified badge rendering, logo placement, brand-specific styling, and export formats for story, portrait, and square cards.
I designed the output workflow so each run is organised by brand, content type, slug, timestamp, candidates, quotes, manifest, and exported cards.
One of the main challenges was separating genuinely strong quotes from ordinary transcript lines. Long-form content has a lot of useful material, but not every sentence works as a standalone quote. The system needed filtering rules before AI scoring, otherwise weak fragments, filler language, and generic motivational lines would pollute the output.
Another challenge was making the AI output structured and auditable. Instead of asking the model to “find good quotes” loosely, the system uses a defined psychology-led scoring framework and structured output schema. That makes the result easier to rank, inspect, and reuse.
The visual generation layer also had its own complexity. Quote cards need to look clean regardless of quote length. That required dynamic font sizing, line wrapping, line balancing, vertical centring, avatar masking, logo placement, and multiple canvas formats.
A current limitation is that the project is designed for local CLI use. It does not yet have a browser UI, caption generation, analytics feedback loop, social posting integration, or database-backed quote archive.
This tool reduces the time needed to repurpose long-form content into social assets.
Instead of manually reading through transcripts or blog posts, selecting quotes, designing cards, and exporting graphics one by one, the system creates a ranked quote list and generates branded cards automatically.
As a portfolio project, it shows my ability to build practical AI automation around real content production. It combines OpenAI structured outputs, rule-based text processing, psychology-led scoring, and procedural image generation into one creator workflow.
It also supports my wider BEIA content system by turning episodes, journals, and written material into repeatable visual assets for distribution.
This project taught me that content repurposing works best when AI and deterministic rules are combined. The AI helps judge emotional and psychological strength, but the filtering, scoring, ranking, formatting, and file organisation need predictable logic.
I also learnt that quote extraction is not just a text problem. A good quote needs to survive outside its original context. It has to be short enough, clear enough, emotionally charged enough, and visually readable once placed on a card.
The card generation side taught me that typography automation is harder than it looks. Rendering social-ready images means dealing with pixel widths, line breaks, font size limits, spacing, logos, avatars, and different aspect ratios.
The biggest learning was that creator tools become much more useful when they fit the actual workflow. This project does not just produce a JSON file. It produces ranked quotes, debug candidates, manifests, and finished image cards organised into repeatable run folders.
I help founders and teams turn messy ideas into reliable systems — from MVPs and APIs to AI-enabled automation workflows.