[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"casestudy-development-contentflow":3},{"id":4,"title":5,"body":6,"client":100,"credits":101,"description":93,"extension":107,"featured":108,"gallery":109,"geo":116,"keyart":118,"lede":120,"mediaType":121,"meta":124,"navigation":125,"path":126,"seo":127,"sort":128,"status":129,"stem":130,"tags":131,"vertical":138,"year":139,"yt_video":140,"__hash__":141},"casestudies\u002Fwork\u002Fdevelopment-contentflow.md","ContentFlow",{"type":7,"value":8,"toc":92},"minimark",[9,14,18,22,72,76,82,85,89],[10,11,13],"h2",{"id":12},"overview","Overview",[15,16,17],"p",{},"ContentFlow is a personal-but-production-grade content planning system designed to handle the realities of multi-channel publishing. A single piece of work (an article, a video, a podcast episode) fans out across many destinations like Substack, Medium, LinkedIn, YouTube, and Acast, and is followed by a tail of promotional posts across social platforms. ContentFlow models that lifecycle directly so the planning, scheduling, and post-mortem live in one place rather than scattered across spreadsheets, calendar invites, and a Notion page nobody reads.",[10,19,21],{"id":20},"architecture","Architecture",[23,24,25,33,39,45,51,62],"ul",{},[26,27,28,32],"li",{},[29,30,31],"em",{},"Backend:"," Django 6 with Django REST Framework, drf-spectacular for OpenAPI, and django-filter for query composition.",[26,34,35,38],{},[29,36,37],{},"Database:"," PostgreSQL via psycopg 3.",[26,40,41,44],{},[29,42,43],{},"Admin UX:"," django-unfold for a modernized admin surface. The admin is the primary operator UI here, not an afterthought.",[26,46,47,50],{},[29,48,49],{},"Static + serving:"," WhiteNoise for static assets and Gunicorn for app serving, all containerized.",[26,52,53,56,57,61],{},[29,54,55],{},"Deploy:"," A single VPS behind an existing Traefik reverse proxy. Images build locally and push to a private registry; the production compose file pulls and runs migrations from the entrypoint. DNS at ",[58,59,60],"code",{},"cf.five59.com",".",[26,63,64,67,68,71],{},[29,65,66],{},"Calendar export:"," First-class iCal output via ",[58,69,70],{},"icalendar",", so any planning view can be subscribed to from a real calendar app.",[10,73,75],{"id":74},"contentflow-mcp","ContentFlow MCP",[15,77,78,79,81],{},"A companion ",[58,80,74],{}," package exposes the API to AI assistants via the Model Context Protocol, so a conversational agent can read the publishing pipeline, propose scheduling, and write back updates without screen-scraping the admin.",[15,83,84],{},"This is intentionally a small, separate package: the core ContentFlow app stays AI-agnostic, and the MCP layer can evolve (or be replaced) without touching the data model.",[10,86,88],{"id":87},"why-a-personal-project-that-looks-like-production","Why a personal project that looks like production",[15,90,91],{},"The goal isn't \"the simplest thing that works for me.\" It's \"a sharply scoped tool that demonstrates the deploy story I'd recommend to a client.\" Traefik routing, container registry workflow, migration-on-entrypoint, structured admin UX, and an MCP integration layer are all things that real teams want; building them on a project I personally use means they've been pressure-tested before they're pitched.",{"title":93,"searchDepth":94,"depth":94,"links":95},"",2,[96,97,98,99],{"id":12,"depth":94,"text":13},{"id":20,"depth":94,"text":21},{"id":74,"depth":94,"text":75},{"id":87,"depth":94,"text":88},"Personal Project",[102],{"sort":103,"role":104,"value":105,"uri":106},1,"Creator & Developer","Andrew Marconi","https:\u002F\u002Flinkedin.com\u002Fin\u002Fmarconi","md",false,[110,113],{"src":111,"alt":112},"\u002Fwork\u002Fdevelopment-contentflow\u002Fcontentflow-dashboard.jpg","Dashboard",{"src":114,"alt":115},"\u002Fwork\u002Fdevelopment-contentflow\u002Fcontentflow-calendar.jpg","Editorial calendar",[117],"Global",{"src":119,"alt":5},"\u002Fwork\u002Fdevelopment-contentflow\u002Fcontentflow-keyart.jpg","A self-hosted content-planning tool tracking publishing across Substack, LinkedIn, YouTube, Acast, and the social platforms, with a companion API and MCP server for AI co-planning.",[122,123],"Web Application","MCP Server",{},true,"\u002Fwork\u002Fdevelopment-contentflow",{"title":5,"description":93},170,"live","work\u002Fdevelopment-contentflow",[132,133,134,135,136,137],"Django","PostgreSQL","DRF","MCP","Docker","Open Source","Productivity",2026,null,"5i5Ew9epRO6fe9gY0xpcIou9_3LUm9OpT41oLWfRyjg"]