From 5cbcb2eac46644e31ed334693fbe4797c6441dd0 Mon Sep 17 00:00:00 2001 From: Marc Mintel Date: Mon, 5 Oct 2026 10:00:28 +0200 Subject: [PATCH] feat: content strategy, image posts and a posting plan for the films Adds twelve image posts made the same way as the films: six posters (one picture of each film with its idea in two lines) and six cards that answer a question clients ask before the first call. The answers come from the questions and principles on the website. The posting plan is data (six weeks, film, card and poster per week), and the export writes the library in that order, by language, week and day, with the text to post. All video posts now open with the hook of their film. The reasoning is in plans/content-strategy.md. Co-Authored-By: Claude Opus 5.5 --- .claude/skills/video-film/SKILL.md | 21 +- apps/video/CLAUDE.md | 17 +- apps/video/scripts/export.ts | 190 +++++++++----- apps/video/src/Root.tsx | 41 +-- apps/video/src/compositions/AppRescue.tsx | 10 +- .../src/compositions/AutomationDocuments.tsx | 10 +- .../src/compositions/AutomationEnquiry.tsx | 10 +- .../src/compositions/AutomationOrder.tsx | 4 +- .../src/compositions/ProductDeveloper.tsx | 10 +- apps/video/src/compositions/WebsiteDone.tsx | 10 +- apps/video/src/content/images.ts | 236 ++++++++++++++++++ apps/video/src/content/plan.spec.ts | 70 ++++++ apps/video/src/content/plan.ts | 72 ++++++ apps/video/src/content/videos.ts | 98 ++++---- apps/video/src/films/AppFilm.tsx | 5 +- apps/video/src/films/DeveloperFilm.tsx | 5 +- apps/video/src/films/DocumentsFilm.tsx | 5 +- apps/video/src/films/EnquiryFilm.tsx | 5 +- apps/video/src/films/FilmStage.tsx | 139 ++++++----- apps/video/src/films/OrderFilm.tsx | 5 +- apps/video/src/films/WebsiteFilm.tsx | 5 +- apps/video/src/images/ImagePost.tsx | 87 +++++++ apps/video/src/registry.ts | 17 ++ apps/video/src/slides/ServiceVideo.tsx | 8 +- apps/web/plans/content-strategy.md | 101 ++++++++ apps/web/plans/freelance-relaunch.md | 2 +- 26 files changed, 964 insertions(+), 219 deletions(-) create mode 100644 apps/video/src/content/images.ts create mode 100644 apps/video/src/content/plan.spec.ts create mode 100644 apps/video/src/content/plan.ts create mode 100644 apps/video/src/images/ImagePost.tsx create mode 100644 apps/video/src/registry.ts create mode 100644 apps/web/plans/content-strategy.md diff --git a/.claude/skills/video-film/SKILL.md b/.claude/skills/video-film/SKILL.md index a6d352b..2246abc 100644 --- a/.claude/skills/video-film/SKILL.md +++ b/.claude/skills/video-film/SKILL.md @@ -1,6 +1,6 @@ --- name: video-film -description: Make or change a social media film in apps/video (Remotion) in the approved mintel.me style - one continuous shot, minimal, with a camera pull-back as the reveal, in German and English. Use when asked for a new video, a new topic, changes to an existing film, new formats, or to re-render the video library. +description: Make or change a social media film or image post in apps/video (Remotion) in the approved mintel.me style - one continuous shot, minimal, with a camera pull-back as the reveal, in German and English. Use when asked for a new video, a new topic, changes to an existing film, new formats, or to re-render the video library. --- # Making a film for mintel.me @@ -87,9 +87,24 @@ Frame 0 is the preview image: it must already look good and carry the hook line. - **Do not name a helper script `copy.py`, `json.py` or similar**: it shadows the Python module. - **Text from an old worktree is stale.** The website changed language and wording during this work. +## Image posts + +Every film gets a poster, and the plan pairs it with a card (see `apps/web/plans/content-strategy.md`). + +- Poster: add an entry to `src/content/images.ts` with `poster: { video, frame }`. Pick the frame where the + whole picture is in view and the problem is obvious (around frame 250 to 300). Two lines, as short as + possible: "Kein Pingpong." / "Ihr Büro." +- Card: a question a client asks before the first call (`label`) and the answer in two or three lines. + The answer must be on the website already. +- Add the new posts to `src/content/plan.ts`, run `pnpm test`, then `node scripts/export.ts --images` + and look at the PNGs in `feed` and `square`. +- A poster is not a frozen frame inside a one-frame image: `Freeze` did not work there. The poster is a + composition as long as the film, rendered at that frame. + ## Formats and output Compositions are `--`. `node scripts/export.ts` renders `feed` (4:5, LinkedIn) and `wide` (16:9, YouTube and ads) in both languages into -`out/library///`, with `post.txt` and an overview page `out/library/index.html`. -`out/` is not committed. +`out/library//week-/--/`, with `post.txt` and an overview page +`out/library/index.html`. `out/` is not committed. Keep it tidy: check frames, contact sheets and logs +go into `out/tmp`, nothing loose into `out/`, and `out/tmp` is emptied before you report. diff --git a/apps/video/CLAUDE.md b/apps/video/CLAUDE.md index 8010c26..70f6a9f 100644 --- a/apps/video/CLAUDE.md +++ b/apps/video/CLAUDE.md @@ -12,11 +12,12 @@ or `pnpm -r`. `apps/web` must never import from here, and this package imports n - One video: `pnpm render WebsiteDone-de-feed out/website.mp4` - The whole library: `pnpm library` (= `node scripts/export.ts`; `--only `, `--formats feed,wide`, `--page` to rewrite only post texts and the overview). Writes `out/library/index.html` (watch, copy the post - text, download) and `out/library/