"use client"; // Die Tour: eine kurze Demo statt eines Spotlights. // // Bis 0.35 legte sich die Tour über den ECHTEN Bildschirm und hob Bereiche hervor. Das hatte // zwei Nachteile, die sich nicht beheben liessen: Auf einem frisch angelegten, leeren Plan gab // es kaum etwas hervorzuheben -- gerade dann, wenn die Tour am nötigsten ist. Und das // Ausschneiden der Hervorhebung kämpfte dauernd mit Scroll-Containern und Z-Ebenen. // // Neu zeigt die Tour einen NACHGEBAUTEN Bildschirm mit erfundenen Zahlen. Er ist bewusst // keine echte Ansicht, sondern eine Illustration: gerade so detailliert, dass man den Aufbau // erkennt, und so einfach, dass sie sich in einem Popup erklären lässt. Der Preis ist, dass // die Attrappe bei UI-Änderungen nachgeführt werden muss -- dafür funktioniert die Tour ab // der ersten Sekunde und unabhängig davon, was im Plan schon steht. import { useState } from "react"; import { ArrowLeft, ArrowRight, Sparkles, X } from "lucide-react"; import { Button } from "@/components/ui"; export const TOUR_DONE_KEY = "fpt-tour-done"; type Focus = "none" | "settings" | "figures" | "actions" | "assistant" | "timeline" | "matrix" | "sidebar"; interface TourStep { title: string; text: string; focus: Focus; } const STEPS: TourStep[] = [ { title: "Willkommen bei FPT", text: "In zwei Minuten siehst du, wie das Tool aufgebaut ist. Alles, was hier steht, sind erfundene Beispielzahlen – dein eigener Plan ist noch leer.", focus: "none", }, { title: "Oben stellst du ein, unten siehst du das Ergebnis", text: "Der Bildschirm hat zwei Hälften. Oben die Steuerung: Grundeinstellungen, Kennzahlen, Schnellaktionen und der Assistent. Unten die Matrix mit allen Zahlen.", focus: "none", }, { title: "Die Grundeinstellungen", text: "Wer plant, ab wann und wie lange. Alter, Startjahr und Inflation gelten für den ganzen Plan; Planungshorizont und Pensionsalter gehören zum Szenario. Je Person führt ein Knopf in die Pensionsplanung.", focus: "settings", }, { title: "Die Kennzahlen", text: "Was unter dem Strich herauskommt: dein Vermögen heute, das Endvermögen nominal und real – und ob das Kapital über die ganze Planung reicht.", focus: "figures", }, { title: "Der FPT-Assistent", text: "Dein Wegweiser. Sieben Schritte führen von der Bestandsaufnahme bis zum fertigen Plan. Jeder Schritt erklärt zuerst, worum es geht, und bietet danach das passende Werkzeug an. Wann ein Schritt erledigt ist, entscheidest du.", focus: "assistant", }, { title: "Die Zeitachse", text: "Deine Planung im Überblick: Lebensphasen, die Zeitpunkte der Pensionierung – und, falls das Geld nicht reicht, das Jahr, in dem es knapp wird.", focus: "timeline", }, { title: "Die Matrix", text: "Das Herz des Tools. Jede Zeile ist ein finanzielles Element, jede Spalte eine Lebensphase. Die schmalen Spalten dazwischen sind die Übergänge – dort entscheidest du, was beim Wechsel geschieht.", focus: "matrix", }, { title: "Pläne und Szenarien", text: "Links verwaltest du alles. Ein Szenario ist eine Variante deines Plans – etwa mit anderem Pensionsalter. Du kannst beliebig viele anlegen und vergleichen.", focus: "sidebar", }, { title: "Jetzt bist du dran", text: "Starte mit dem FPT-Assistenten oben rechts. Schritt 1 ist die Bestandsaufnahme: alles, was du heute besitzt. Von dort führt dich der Assistent weiter.", focus: "assistant", }, ]; export function Tour({ onClose }: { onClose: () => void }) { const [index, setIndex] = useState(0); const step = STEPS[index]; const last = index === STEPS.length - 1; function finish() { try { localStorage.setItem(TOUR_DONE_KEY, "1"); } catch { // Privater Modus o. Ä. -- die Tour lässt sich dann eben erneut öffnen. } onClose(); } return (
Schritt {index + 1} von {STEPS.length}
|
Matrix
+ Element
+ Phase
|
{["Erwerbsjahre", "Übergang", "Ruhestand I", "Übergang", "Ruhestand II"].map((h, i) => (
{h}
{h === "Übergang" && 2 offen }
|
))}
|---|---|
| {row[0]} | {row.slice(1).map((c, j) => ({c} | ))}