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 <noreply@anthropic.com>
237 lines
10 KiB
TypeScript
237 lines
10 KiB
TypeScript
/**
|
|
* Image posts: every word, in English and German, and for posters which film and which frame they
|
|
* show. Two kinds:
|
|
*
|
|
* - a poster is one picture of a film (the composition is rendered at that frame) with the film's idea in two lines
|
|
* - a card answers one question a client asks before the first call, in large type
|
|
*
|
|
* Everything said here is on the website (`apps/web/src/content/de.ts`, questions and principles).
|
|
* This file imports only types, so the export script can read it with plain Node.
|
|
*/
|
|
import type { Lang, VideoId } from "./videos.ts";
|
|
|
|
export type ImageCopy = {
|
|
/** What the image is about, for the overview page. */
|
|
readonly title: string;
|
|
/** Cards only: the question, set small above the answer. */
|
|
readonly label?: string;
|
|
/** The large lines: at most three, as short as possible. */
|
|
readonly lines: readonly string[];
|
|
/** Text to post with the image. */
|
|
readonly post: string;
|
|
};
|
|
|
|
export type ImagePost = {
|
|
/** Posters only: the film whose picture is shown, and at which frame. */
|
|
readonly poster?: { readonly video: VideoId; readonly frame: number };
|
|
readonly copy: Readonly<Record<Lang, ImageCopy>>;
|
|
};
|
|
|
|
export const IMAGE_IDS = [
|
|
"PosterOrder",
|
|
"PosterDocuments",
|
|
"PosterEnquiry",
|
|
"PosterWebsite",
|
|
"PosterApp",
|
|
"PosterDeveloper",
|
|
"CardNotTechnical",
|
|
"CardOneContact",
|
|
"CardOwnership",
|
|
"CardHours",
|
|
"CardNotice",
|
|
"CardNotMyField",
|
|
] as const;
|
|
export type ImageId = (typeof IMAGE_IDS)[number];
|
|
|
|
const CALL_EN = "A first call takes about 20 minutes.\n\nwww.mintel.me";
|
|
const CALL_DE = "Ein erstes Gespräch dauert etwa 20 Minuten.\n\nwww.mintel.me";
|
|
|
|
export const IMAGES: Readonly<Record<ImageId, ImagePost>> = {
|
|
PosterOrder: {
|
|
poster: { video: "AutomationOrder", frame: 285 },
|
|
copy: {
|
|
en: {
|
|
title: "Poster: ping-pong",
|
|
lines: ["Not ping-pong.", "Your office."],
|
|
post: `Every dot is someone carrying an order from one tool to the next. By hand.\n\nThe tools could pass it on themselves. I connect them.\n\n${CALL_EN}\n\n#automation #processautomation`,
|
|
},
|
|
de: {
|
|
title: "Poster: Pingpong",
|
|
lines: ["Kein Pingpong.", "Ihr Büro."],
|
|
post: `Jeder Punkt ist jemand, der eine Bestellung von einem Tool ins nächste trägt. Von Hand.\n\nDie Tools könnten das unter sich ausmachen. Ich verbinde sie.\n\n${CALL_DE}\n\n#automatisierung #prozessautomatisierung`,
|
|
},
|
|
},
|
|
},
|
|
PosterDocuments: {
|
|
poster: { video: "AutomationDocuments", frame: 300 },
|
|
copy: {
|
|
en: {
|
|
title: "Poster: skyscraper",
|
|
lines: ["Not a skyscraper.", "Your inbox."],
|
|
post: `Every floor is an invoice waiting to be typed in.\n\nIt can be read automatically. Clear cases are booked directly, unclear ones go to a person.\n\n${CALL_EN}\n\n#automation #accounting`,
|
|
},
|
|
de: {
|
|
title: "Poster: Hochhaus",
|
|
lines: ["Kein Hochhaus.", "Ihr Posteingang."],
|
|
post: `Jedes Stockwerk ist eine Rechnung, die noch jemand abtippen muss.\n\nDas lässt sich automatisch auslesen. Klare Fälle werden direkt gebucht, unklare gehen an einen Menschen.\n\n${CALL_DE}\n\n#automatisierung #buchhaltung`,
|
|
},
|
|
},
|
|
},
|
|
PosterEnquiry: {
|
|
poster: { video: "AutomationEnquiry", frame: 250 },
|
|
copy: {
|
|
en: {
|
|
title: "Poster: stars",
|
|
lines: ["Not a night sky.", "Your enquiries."],
|
|
post: `The faint ones are the enquiries nobody followed up on.\n\nThe steps can be connected: the contact is created, the right person is told, and a reminder appears when nobody has replied.\n\n${CALL_EN}\n\n#automation #sales`,
|
|
},
|
|
de: {
|
|
title: "Poster: Sterne",
|
|
lines: ["Kein Sternenhimmel.", "Ihre Anfragen."],
|
|
post: `Die blassen sind die Anfragen, bei denen niemand nachgefasst hat.\n\nDie Schritte lassen sich verbinden: Der Kontakt wird angelegt, die zuständige Person erfährt davon, und wenn niemand geantwortet hat, erscheint eine Erinnerung.\n\n${CALL_DE}\n\n#automatisierung #vertrieb`,
|
|
},
|
|
},
|
|
},
|
|
PosterWebsite: {
|
|
poster: { video: "WebsiteDone", frame: 260 },
|
|
copy: {
|
|
en: {
|
|
title: "Poster: empty page",
|
|
lines: ["Not a beginning.", "Your website."],
|
|
post: `The website that has been on the list since last year.\n\nYou tell me what your business does. I design it, build it and put it online. Changes afterwards: you send me an email.\n\n${CALL_EN}\n\n#website #webdesign`,
|
|
},
|
|
de: {
|
|
title: "Poster: leere Seite",
|
|
lines: ["Kein Anfang.", "Ihre Website."],
|
|
post: `Die Website, die seit letztem Jahr auf der Liste steht.\n\nSie erzählen mir, was Ihr Unternehmen macht. Ich gestalte sie, baue sie und bringe sie online. Änderungen danach: Sie schreiben mir eine E-Mail.\n\n${CALL_DE}\n\n#website #webdesign`,
|
|
},
|
|
},
|
|
},
|
|
PosterApp: {
|
|
poster: { video: "AppRescue", frame: 285 },
|
|
copy: {
|
|
en: {
|
|
title: "Poster: Jenga",
|
|
lines: ["Not Jenga.", "Your app."],
|
|
post: `It works. But bugs come back, and small changes take longer than they should.\n\nI take a week to go through the code, fix what is most urgent and write down what I would do next. In plain language.\n\n${CALL_EN}\n\n#webdevelopment #softwarequality`,
|
|
},
|
|
de: {
|
|
title: "Poster: Jenga",
|
|
lines: ["Kein Jenga.", "Ihre App."],
|
|
post: `Sie läuft. Aber Fehler kommen wieder, und kleine Änderungen dauern länger, als sie sollten.\n\nIch nehme mir eine Woche, gehe den Code durch, behebe das Dringendste und schreibe auf, was ich als Nächstes tun würde. In klarer Sprache.\n\n${CALL_DE}\n\n#webentwicklung #softwarequalität`,
|
|
},
|
|
},
|
|
},
|
|
PosterDeveloper: {
|
|
poster: { video: "ProductDeveloper", frame: 300 },
|
|
copy: {
|
|
en: {
|
|
title: "Poster: loading bars",
|
|
lines: ["Not loading bars.", "Your backlog."],
|
|
post: `More work than your team can handle.\n\nI join on agreed days of the week and work on what is next on your list. No package to buy, no minimum term.\n\n${CALL_EN}\n\n#webdevelopment #freelance`,
|
|
},
|
|
de: {
|
|
title: "Poster: Ladebalken",
|
|
lines: ["Keine Ladebalken.", "Ihr Backlog."],
|
|
post: `Mehr Arbeit, als Ihr Team schafft.\n\nIch komme an vereinbarten Wochentagen dazu und arbeite an dem, was als Nächstes auf Ihrer Liste steht. Kein Paket, keine Mindestlaufzeit.\n\n${CALL_DE}\n\n#webentwicklung #freelancer`,
|
|
},
|
|
},
|
|
},
|
|
CardNotTechnical: {
|
|
copy: {
|
|
en: {
|
|
title: "Card: not technical",
|
|
label: "Not a technical person?",
|
|
lines: ["Doesn't matter.", "You never have", "to read code."],
|
|
post: `I explain what I am doing in plain language, and you can ask at any time.\n\n${CALL_EN}`,
|
|
},
|
|
de: {
|
|
title: "Karte: kein Technikmensch",
|
|
label: "Kein Technikmensch?",
|
|
lines: ["Macht nichts.", "Code müssen Sie", "nicht lesen."],
|
|
post: `Ich erkläre in verständlicher Sprache, was ich tue, und Sie können jederzeit nachfragen.\n\n${CALL_DE}`,
|
|
},
|
|
},
|
|
},
|
|
CardOneContact: {
|
|
copy: {
|
|
en: {
|
|
title: "Card: one contact",
|
|
label: "Who does the work?",
|
|
lines: ["The person", "you talk to."],
|
|
post: `Often a request passes through several people before it reaches the developer. With me there is one direct line between you and the person who does the work.\n\n${CALL_EN}`,
|
|
},
|
|
de: {
|
|
title: "Karte: ein Ansprechpartner",
|
|
label: "Wer macht die Arbeit?",
|
|
lines: ["Der, mit dem", "Sie sprechen."],
|
|
post: `Oft geht eine Anfrage durch mehrere Hände, bevor sie beim Entwickler ankommt. Bei mir gibt es eine direkte Leitung zwischen Ihnen und dem, der die Arbeit macht.\n\n${CALL_DE}`,
|
|
},
|
|
},
|
|
},
|
|
CardOwnership: {
|
|
copy: {
|
|
en: {
|
|
title: "Card: ownership",
|
|
label: "Who owns the code?",
|
|
lines: ["You do.", "The design too."],
|
|
post: `Code and design belong to you, and you can hand both to another developer.\n\n${CALL_EN}`,
|
|
},
|
|
de: {
|
|
title: "Karte: Eigentum",
|
|
label: "Wem gehört der Code?",
|
|
lines: ["Ihnen.", "Das Design auch."],
|
|
post: `Code und Design gehören Ihnen, und Sie können beides an einen anderen Entwickler übergeben.\n\n${CALL_DE}`,
|
|
},
|
|
},
|
|
},
|
|
CardHours: {
|
|
copy: {
|
|
en: {
|
|
title: "Card: hours",
|
|
label: "What do you pay for?",
|
|
lines: ["Hours you", "can check."],
|
|
post: `I track my time. The monthly invoice shows what the hours were spent on.\n\n${CALL_EN}`,
|
|
},
|
|
de: {
|
|
title: "Karte: Stunden",
|
|
label: "Wofür zahlen Sie?",
|
|
lines: ["Für Stunden, die Sie", "nachprüfen können."],
|
|
post: `Ich erfasse meine Zeit. Die Monatsrechnung zeigt, wofür die Stunden angefallen sind.\n\n${CALL_DE}`,
|
|
},
|
|
},
|
|
},
|
|
CardNotice: {
|
|
copy: {
|
|
en: {
|
|
title: "Card: notice",
|
|
label: "How long are you committed?",
|
|
lines: ["Two weeks", "notice."],
|
|
post: `Project work is billed by effort. Either side can end it with two weeks notice to the end of a month.\n\n${CALL_EN}`,
|
|
},
|
|
de: {
|
|
title: "Karte: Kündigungsfrist",
|
|
label: "Wie lange sind Sie gebunden?",
|
|
lines: ["Zwei Wochen", "Kündigungsfrist."],
|
|
post: `Projektarbeit wird nach Aufwand abgerechnet. Beide Seiten können mit zwei Wochen Frist zum Monatsende kündigen.\n\n${CALL_DE}`,
|
|
},
|
|
},
|
|
},
|
|
CardNotMyField: {
|
|
copy: {
|
|
en: {
|
|
title: "Card: not my field",
|
|
label: "What I do not do",
|
|
lines: ["Mobile apps.", "Windows software.", "Running servers."],
|
|
post: `If your project needs those, I say so in the first call.\n\nWhat I do: web apps, interfaces, websites, and connecting systems.\n\nwww.mintel.me`,
|
|
},
|
|
de: {
|
|
title: "Karte: nicht mein Feld",
|
|
label: "Was ich nicht mache",
|
|
lines: ["Mobile Apps.", "Windows-Software.", "Serverbetrieb."],
|
|
post: `Wenn Ihr Projekt das braucht, sage ich das im ersten Gespräch.\n\nWas ich mache: Web-Apps, Oberflächen, Websites und das Verbinden von Systemen.\n\nwww.mintel.me`,
|
|
},
|
|
},
|
|
},
|
|
};
|