feat: video films for social media, with the skill to make more
Adds apps/video, a standalone Remotion package (not part of the pnpm workspace, so it never reaches the web build or the Docker image). It renders six looping films, one per service, in German and English, as 4:5 for LinkedIn and 16:9 for YouTube and ads, together with the text to post and an overview page. Each film is one continuous shot: close on something abstract, the camera pulls back to show what it really is, the form changes, and the picture folds back into its opening. The slide deck code from the earlier attempts is still in the package and no longer used. Also adds the Google Ads concept, brings the relaunch concept in line with the site as built, and a project skill that describes how to make further films. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,380 @@
|
||||
/**
|
||||
* Everything that is said in and about the videos: headlines per slide, labels inside the drawings,
|
||||
* and the text to post with each video. English and German.
|
||||
*
|
||||
* This file imports nothing, so the export script can read it with plain Node.
|
||||
* German addresses the viewer formally ("Sie"), as is usual towards business owners.
|
||||
*/
|
||||
|
||||
export const LANGS = ["en", "de"] as const;
|
||||
export type Lang = (typeof LANGS)[number];
|
||||
|
||||
export const VIDEO_IDS = [
|
||||
"AutomationOrder",
|
||||
"AutomationDocuments",
|
||||
"AutomationEnquiry",
|
||||
"WebsiteDone",
|
||||
"AppRescue",
|
||||
"ProductDeveloper",
|
||||
] as const;
|
||||
export type VideoId = (typeof VIDEO_IDS)[number];
|
||||
|
||||
export type VideoCopy = {
|
||||
/** What the video is about, for the overview page. */
|
||||
readonly title: string;
|
||||
/** Headline per slide id: at most two lines of a few words. */
|
||||
readonly slides: Readonly<Record<string, readonly string[]>>;
|
||||
/** Text to post with the video on LinkedIn. */
|
||||
readonly post: string;
|
||||
};
|
||||
|
||||
/** German for every label that appears inside a drawing or on the frame. Missing entries stay English. */
|
||||
export const LABELS_DE: Readonly<Record<string, string>> = {
|
||||
"Freelance developer": "Freelance-Entwickler",
|
||||
"Get in touch": "Kontakt aufnehmen",
|
||||
Invoice: "Rechnung",
|
||||
Customers: "Kunden",
|
||||
Email: "E-Mail",
|
||||
"One person": "Eine Person",
|
||||
Inbox: "Posteingang",
|
||||
Read: "Lesen",
|
||||
Check: "Prüfen",
|
||||
Books: "Buchhaltung",
|
||||
"Invoice.pdf": "Rechnung.pdf",
|
||||
Accounting: "Buchhaltung",
|
||||
Supplier: "Lieferant",
|
||||
Amount: "Betrag",
|
||||
Date: "Datum",
|
||||
"A person": "Ein Mensch",
|
||||
Contacts: "Kontakte",
|
||||
Reminder: "Erinnerung",
|
||||
"Day 1": "Tag 1",
|
||||
"Day 2": "Tag 2",
|
||||
"Day 3": "Tag 3",
|
||||
"Day 4": "Tag 4",
|
||||
"Website builder": "Baukasten",
|
||||
"Your website": "Ihre Website",
|
||||
"Your email": "Ihre E-Mail",
|
||||
"www.your-name.com": "www.ihr-name.de",
|
||||
"Your app": "Ihre App",
|
||||
Mon: "Mo",
|
||||
Tue: "Di",
|
||||
Wed: "Mi",
|
||||
Thu: "Do",
|
||||
Fri: "Fr",
|
||||
"To do": "Offen",
|
||||
Done: "Erledigt",
|
||||
Product: "Produkt",
|
||||
Developer: "Entwicklung",
|
||||
};
|
||||
|
||||
export const translate = (lang: Lang, text: string): string =>
|
||||
lang === "de" ? (LABELS_DE[text] ?? text) : text;
|
||||
|
||||
export const COPY: Readonly<Record<VideoId, Readonly<Record<Lang, VideoCopy>>>> = {
|
||||
AutomationOrder: {
|
||||
en: {
|
||||
title: "Automation: from order to invoice",
|
||||
slides: {
|
||||
hook: ["Looks like", "ping-pong."],
|
||||
reveal: ["It's your", "office."],
|
||||
problem: ["Every order.", "By hand."],
|
||||
turn: ["Or your tools", "talk to each other."],
|
||||
calm: ["And your team", "has time."],
|
||||
cta: ["Done with", "ping-pong?"],
|
||||
},
|
||||
post: `Copy, paste, repeat.
|
||||
|
||||
In many companies an order still travels by hand: someone opens it in the shop, writes the invoice, updates the customer record and sends the confirmation.
|
||||
|
||||
That works, until the orders pile up.
|
||||
|
||||
The tools involved can usually pass the work on to each other. I connect them, so that the order triggers the invoice, the customer record and the email on its own. Your people see the finished result and look after the cases that need a person.
|
||||
|
||||
Is a process like this taking up your team's time? Write to me. A first call takes about 20 minutes.
|
||||
|
||||
www.mintel.me
|
||||
|
||||
#automation #processautomation #smallbusiness`,
|
||||
},
|
||||
de: {
|
||||
title: "Automatisierung: von der Bestellung zur Rechnung",
|
||||
slides: {
|
||||
hook: ["Sieht aus wie", "Pingpong."],
|
||||
reveal: ["Ist aber", "Ihr Büro."],
|
||||
problem: ["Jede Bestellung.", "Von Hand."],
|
||||
turn: ["Oder Ihre Tools", "reden miteinander."],
|
||||
calm: ["Und Ihr Team", "hat Zeit."],
|
||||
cta: ["Schluss mit", "Pingpong?"],
|
||||
},
|
||||
post: `Sieht aus wie Pingpong. Ist aber Ihr Büro.
|
||||
|
||||
Eine Bestellung kommt rein. Jemand öffnet sie im Shop, schreibt die Rechnung, pflegt den Kunden nach, verschickt die Bestätigung. Dann die nächste. Und die nächste.
|
||||
|
||||
Klappt wunderbar, solange kaum jemand bestellt.
|
||||
|
||||
Dabei können die vier Tools das längst unter sich ausmachen: Die Bestellung löst Rechnung, Kundendatensatz und E-Mail selbst aus. Ihr Team sieht das fertige Ergebnis und kümmert sich um die Fälle, die wirklich einen Menschen brauchen.
|
||||
|
||||
Ich verbinde die Tools, die Sie schon haben. Ein erstes Gespräch dauert etwa 20 Minuten.
|
||||
|
||||
www.mintel.me
|
||||
|
||||
#automatisierung #prozessautomatisierung #mittelstand`,
|
||||
},
|
||||
},
|
||||
|
||||
AutomationDocuments: {
|
||||
en: {
|
||||
title: "Automation: incoming invoices",
|
||||
slides: {
|
||||
hook: ["Looks like", "a skyscraper."],
|
||||
reveal: ["It's your", "inbox."],
|
||||
problem: ["Every invoice.", "Typed in."],
|
||||
turn: ["Or it simply", "gets read."],
|
||||
calm: ["Unclear ones go", "to a person."],
|
||||
cta: ["Done typing", "things in?"],
|
||||
},
|
||||
post: `Invoices arrive as PDF. Then someone opens each one, reads supplier, amount and date, and types them into the accounting system.
|
||||
|
||||
Every single one.
|
||||
|
||||
It does not have to be done by hand. The document can be read automatically, a fixed rule checks whether the values make sense, and clear cases are booked directly. Anything unclear goes to a person, with the document attached.
|
||||
|
||||
So people decide the exceptions instead of typing the routine.
|
||||
|
||||
If documents pile up in your inbox, write to me. A first call takes about 20 minutes.
|
||||
|
||||
www.mintel.me
|
||||
|
||||
#automation #accounting #smallbusiness`,
|
||||
},
|
||||
de: {
|
||||
title: "Automatisierung: Eingangsrechnungen",
|
||||
slides: {
|
||||
hook: ["Sieht aus wie", "ein Hochhaus."],
|
||||
reveal: ["Ist aber Ihr", "Posteingang."],
|
||||
problem: ["Jede Rechnung.", "Abgetippt."],
|
||||
turn: ["Oder sie wird", "einfach gelesen."],
|
||||
calm: ["Unklares geht", "an einen Menschen."],
|
||||
cta: ["Schluss mit", "Abtippen?"],
|
||||
},
|
||||
post: `Rechnungen kommen als PDF. Dann öffnet jemand jede einzelne, liest Lieferant, Betrag und Datum ab und tippt alles in die Buchhaltung.
|
||||
|
||||
Jede einzelne.
|
||||
|
||||
Das muss niemand von Hand machen. Das Dokument lässt sich automatisch auslesen, eine feste Regel prüft, ob die Werte plausibel sind, und klare Fälle werden direkt gebucht. Alles Unklare geht an einen Menschen, mit dem Dokument im Anhang.
|
||||
|
||||
So entscheiden Menschen die Ausnahmen, statt Routine abzutippen.
|
||||
|
||||
Stapeln sich bei Ihnen die Belege im Posteingang? Schreiben Sie mir. Ein erstes Gespräch dauert etwa 20 Minuten.
|
||||
|
||||
www.mintel.me
|
||||
|
||||
#automatisierung #buchhaltung #mittelstand`,
|
||||
},
|
||||
},
|
||||
|
||||
AutomationEnquiry: {
|
||||
en: {
|
||||
title: "Automation: from enquiry to follow-up",
|
||||
slides: {
|
||||
hook: ["Looks like", "a star."],
|
||||
reveal: ["These are your", "enquiries."],
|
||||
problem: ["They burn out.", "Unanswered."],
|
||||
turn: ["Or each one reaches", "the right person."],
|
||||
calm: ["And follow-ups", "happen by themselves."],
|
||||
cta: ["Stop losing", "enquiries?"],
|
||||
},
|
||||
post: `Someone fills in your contact form. And then?
|
||||
|
||||
Often the enquiry is copied into the customer list by hand, forwarded by email, and everyone hopes the follow-up is not forgotten.
|
||||
|
||||
These steps can be connected: the contact is created, the right person is told, and if nobody has replied after three days, a reminder appears.
|
||||
|
||||
Nothing clever. Just the steps that are done by hand today, done reliably.
|
||||
|
||||
If enquiries get lost between your tools, write to me. A first call takes about 20 minutes.
|
||||
|
||||
www.mintel.me
|
||||
|
||||
#automation #sales #smallbusiness`,
|
||||
},
|
||||
de: {
|
||||
title: "Automatisierung: von der Anfrage zum Nachfassen",
|
||||
slides: {
|
||||
hook: ["Sieht aus wie", "ein Stern."],
|
||||
reveal: ["Sind aber Ihre", "Anfragen."],
|
||||
problem: ["Sie verglühen.", "Unbeantwortet."],
|
||||
turn: ["Oder jede landet", "beim Richtigen."],
|
||||
calm: ["Und Nachfassen", "passiert von selbst."],
|
||||
cta: ["Keine Anfrage", "mehr verlieren?"],
|
||||
},
|
||||
post: `Jemand füllt Ihr Kontaktformular aus. Und dann?
|
||||
|
||||
Oft wird die Anfrage von Hand in die Kundenliste kopiert, per E-Mail weitergeleitet, und alle hoffen, dass das Nachfassen nicht vergessen wird.
|
||||
|
||||
Diese Schritte lassen sich verbinden: Der Kontakt wird angelegt, die zuständige Person erfährt davon, und wenn nach drei Tagen niemand geantwortet hat, erscheint eine Erinnerung.
|
||||
|
||||
Nichts Kompliziertes. Nur die Schritte, die heute von Hand passieren, zuverlässig erledigt.
|
||||
|
||||
Gehen bei Ihnen Anfragen zwischen den Tools verloren? Schreiben Sie mir. Ein erstes Gespräch dauert etwa 20 Minuten.
|
||||
|
||||
www.mintel.me
|
||||
|
||||
#automatisierung #vertrieb #mittelstand`,
|
||||
},
|
||||
},
|
||||
|
||||
WebsiteDone: {
|
||||
en: {
|
||||
title: "A website, built and looked after",
|
||||
slides: {
|
||||
hook: ["Looks like", "a beginning."],
|
||||
reveal: ["It's been your", "website for months."],
|
||||
problem: ["Empty.", "Still."],
|
||||
turn: ["You talk.", "I build."],
|
||||
calm: ["Fits every", "screen."],
|
||||
cta: ["Website", "overdue?"],
|
||||
},
|
||||
post: `You run a business. You do not want to learn a website builder on top of that.
|
||||
|
||||
This is how I do it instead:
|
||||
|
||||
You tell me what your business does and what the website is for. I design it, build it and put it online. It works on phone, tablet and desktop, and you approve it before it goes live.
|
||||
|
||||
And afterwards? A new photo or a changed price: you send me an email and I make the change.
|
||||
|
||||
If your website has been on your list for too long, write to me. A first call takes about 20 minutes.
|
||||
|
||||
www.mintel.me
|
||||
|
||||
#website #webdesign #smallbusiness`,
|
||||
},
|
||||
de: {
|
||||
title: "Eine Website, gebaut und betreut",
|
||||
slides: {
|
||||
hook: ["Sieht aus wie", "ein Anfang."],
|
||||
reveal: ["Ist seit Monaten", "Ihre Website."],
|
||||
problem: ["Leer.", "Immer noch."],
|
||||
turn: ["Sie erzählen.", "Ich baue."],
|
||||
calm: ["Passt auf", "jeden Bildschirm."],
|
||||
cta: ["Website", "fällig?"],
|
||||
},
|
||||
post: `Sie führen ein Unternehmen. Einen Website-Baukasten wollen Sie nicht auch noch lernen.
|
||||
|
||||
So mache ich es stattdessen:
|
||||
|
||||
Sie erzählen mir, was Ihr Unternehmen macht und wofür die Website da ist. Ich gestalte sie, baue sie und bringe sie online. Sie funktioniert auf Handy, Tablet und Desktop, und Sie geben sie frei, bevor sie live geht.
|
||||
|
||||
Und danach? Ein neues Foto oder ein geänderter Preis: Sie schreiben mir eine E-Mail, ich setze es um.
|
||||
|
||||
Steht Ihre Website schon zu lange auf der Liste? Schreiben Sie mir. Ein erstes Gespräch dauert etwa 20 Minuten.
|
||||
|
||||
www.mintel.me
|
||||
|
||||
#website #webdesign #mittelstand`,
|
||||
},
|
||||
},
|
||||
|
||||
AppRescue: {
|
||||
en: {
|
||||
title: "Making an app reliable",
|
||||
slides: {
|
||||
hook: ["Looks like", "Jenga."],
|
||||
reveal: ["It's your", "app."],
|
||||
problem: ["Every change", "wobbles."],
|
||||
turn: ["One week.", "I look inside."],
|
||||
calm: ["After that", "it stands."],
|
||||
cta: ["App", "wobbling?"],
|
||||
},
|
||||
post: `Your app works. But bugs come back, and small changes take longer than they should.
|
||||
|
||||
That usually happens when an app was built quickly and then kept growing.
|
||||
|
||||
I take a week to go through it: I look at what is solid and what is fragile, fix the most urgent problems as far as a week allows, and write down what I would do next. In plain language, so you can follow it without being a developer.
|
||||
|
||||
After that you decide how to continue: with me, with your own team, or not at all.
|
||||
|
||||
If that sounds like your app, write to me. A first call takes about 20 minutes.
|
||||
|
||||
www.mintel.me
|
||||
|
||||
#webdevelopment #softwarequality #startups`,
|
||||
},
|
||||
de: {
|
||||
title: "Eine App zuverlässig machen",
|
||||
slides: {
|
||||
hook: ["Sieht aus wie", "Jenga."],
|
||||
reveal: ["Ist aber", "Ihre App."],
|
||||
problem: ["Jede Änderung", "wackelt."],
|
||||
turn: ["Eine Woche.", "Ich sehe hinein."],
|
||||
calm: ["Danach", "steht sie."],
|
||||
cta: ["App", "wackelt?"],
|
||||
},
|
||||
post: `Ihre App läuft. Aber Fehler kommen wieder, und kleine Änderungen dauern länger, als sie sollten.
|
||||
|
||||
Das passiert meist, wenn eine App schnell gebaut wurde und dann immer weiter gewachsen ist.
|
||||
|
||||
Ich nehme mir eine Woche Zeit dafür: Ich sehe mir an, was solide ist und was wackelt, behebe die dringendsten Probleme, soweit eine Woche reicht, und schreibe auf, was ich als Nächstes tun würde. In klarer Sprache, die Sie auch ohne Entwicklerwissen verstehen.
|
||||
|
||||
Danach entscheiden Sie, wie es weitergeht: mit mir, mit Ihrem eigenen Team oder gar nicht.
|
||||
|
||||
Klingt das nach Ihrer App? Schreiben Sie mir. Ein erstes Gespräch dauert etwa 20 Minuten.
|
||||
|
||||
www.mintel.me
|
||||
|
||||
#webentwicklung #softwarequalität #startups`,
|
||||
},
|
||||
},
|
||||
|
||||
ProductDeveloper: {
|
||||
en: {
|
||||
title: "A developer for your product",
|
||||
slides: {
|
||||
hook: ["Looks like", "a loading bar."],
|
||||
reveal: ["It's your", "backlog."],
|
||||
problem: ["Growing faster", "than your team."],
|
||||
turn: ["One more", "developer."],
|
||||
calm: ["Fixed days.", "No minimum term."],
|
||||
cta: ["Backlog", "too long?"],
|
||||
},
|
||||
post: `You have a product, and more work than your team can handle.
|
||||
|
||||
I join on agreed days of the week and work on what is next on your list: new features, the interface, or the parts nobody gets around to.
|
||||
|
||||
Finished parts go to you for review as they are done. I track my hours, and you can see what they were spent on. There is no package to buy and no minimum term: either side can end it with two weeks notice to the end of a month.
|
||||
|
||||
15 years in web development, in agencies and product teams.
|
||||
|
||||
If your backlog is growing faster than your team, write to me. A first call takes about 20 minutes.
|
||||
|
||||
www.mintel.me
|
||||
|
||||
#webdevelopment #freelance #react`,
|
||||
},
|
||||
de: {
|
||||
title: "Ein Entwickler für Ihr Produkt",
|
||||
slides: {
|
||||
hook: ["Sieht aus wie", "ein Ladebalken."],
|
||||
reveal: ["Ist aber", "Ihr Backlog."],
|
||||
problem: ["Wächst schneller", "als Ihr Team."],
|
||||
turn: ["Ein Entwickler", "mehr."],
|
||||
calm: ["Feste Tage.", "Keine Mindestlaufzeit."],
|
||||
cta: ["Backlog", "zu lang?"],
|
||||
},
|
||||
post: `Sie haben ein Produkt und mehr Arbeit, als Ihr Team schafft.
|
||||
|
||||
Ich komme an vereinbarten Tagen in der Woche dazu und arbeite an dem, was als Nächstes auf Ihrer Liste steht: neue Funktionen, die Oberfläche oder die Teile, zu denen niemand kommt.
|
||||
|
||||
Fertige Teile gehen zur Durchsicht an Sie, sobald sie fertig sind. Ich erfasse meine Stunden, und Sie sehen, wofür sie verwendet wurden. Es gibt kein Paket und keine Mindestlaufzeit: Beide Seiten können mit zwei Wochen Frist zum Monatsende beenden.
|
||||
|
||||
15 Jahre Webentwicklung, in Agenturen und Produktteams.
|
||||
|
||||
Wächst Ihr Backlog schneller als Ihr Team? Schreiben Sie mir. Ein erstes Gespräch dauert etwa 20 Minuten.
|
||||
|
||||
www.mintel.me
|
||||
|
||||
#webentwicklung #freelancer #react`,
|
||||
},
|
||||
},
|
||||
};
|
||||
Reference in New Issue
Block a user