Produktseite ausgebaut: Unterseiten und Bildschirmfotos aus der App
Neue öffentliche Routen unter src/app/(marketing): Übersicht /funktionen, sechs Detailseiten (planung, baustelle, zeiterfassung, berichte, abrechnung, lotse), /sicherheit und /preise, gemeinsames Gerüst mit Kopf- und Fußzeile. scripts/marketing-shots.ts nimmt die Bilder direkt aus der laufenden App auf (Playwright über den installierten Chrome, Session wie im Smoke-Test, ohne Passworteingabe); 14 Aufnahmen in public/marketing ersetzen die gezeichneten Vorschauen. Plantafel: „Vorschläge" hängt jetzt als Fußzeile in der Auftragskarte statt frei zwischen zwei Karten zu stehen (neue Prop footer an OrderCard, Schlüssel unplanned.suggestionsFor). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* Aufbau der öffentlichen Funktionsseiten (`/funktionen/<slug>`). Texte liegen in
|
||||
* `messages/<locale>/marketing.json` unter `pages.<slug>`, Bildschirmfotos in `public/marketing/`
|
||||
* (erzeugt von `scripts/marketing-shots.ts`).
|
||||
*/
|
||||
|
||||
export const FEATURE_SLUGS = ["planung", "baustelle", "zeiterfassung", "berichte", "abrechnung", "lotse"] as const;
|
||||
export type FeatureSlug = (typeof FEATURE_SLUGS)[number];
|
||||
|
||||
export type Shot = { src: string; kind: "desktop" | "mobile" };
|
||||
|
||||
export type FeaturePage = {
|
||||
/** Reihenfolge der Bildschirmfotos; Beschriftungen kommen aus `pages.<slug>.shot<n>` */
|
||||
shots: Shot[];
|
||||
points: number;
|
||||
cards: number;
|
||||
};
|
||||
|
||||
const desktop = (src: string): Shot => ({ src, kind: "desktop" });
|
||||
const mobile = (src: string): Shot => ({ src, kind: "mobile" });
|
||||
|
||||
export const FEATURE_PAGES: Record<FeatureSlug, FeaturePage> = {
|
||||
planung: { shots: [desktop("plantafel"), desktop("live-lage")], points: 5, cards: 3 },
|
||||
baustelle: { shots: [mobile("mobil-heute"), mobile("mobil-auftrag")], points: 5, cards: 3 },
|
||||
zeiterfassung: { shots: [mobile("mobil-zeiten"), desktop("zeitfreigabe")], points: 5, cards: 3 },
|
||||
berichte: { shots: [desktop("berichte"), desktop("auftrag")], points: 5, cards: 3 },
|
||||
abrechnung: { shots: [desktop("abrechnung")], points: 5, cards: 3 },
|
||||
lotse: { shots: [mobile("mobil-lotse")], points: 5, cards: 3 },
|
||||
};
|
||||
|
||||
export const isFeatureSlug = (v: string): v is FeatureSlug => (FEATURE_SLUGS as readonly string[]).includes(v);
|
||||
Reference in New Issue
Block a user