// Onboarding / first connect — welcome → connect gitea → choose repo → bootstrap function OnboardingScreen({ onDone }) { const DS = window.CommiTeaDesignSystem_20e63b; const { Button, Input, Radio, Tag, Badge, Icon } = DS; const [step, setStep] = React.useState(0); const [conn, setConn] = React.useState('idle'); // idle | testing | ok const [repo, setRepo] = React.useState('stephen/commitea'); const [boot, setBoot] = React.useState(-1); // -1 idle, 0..2 running, 3 done React.useEffect(() => { if (conn !== 'testing') return; const t = setTimeout(() => setConn('ok'), 1100); return () => clearTimeout(t); }, [conn]); React.useEffect(() => { if (boot < 0 || boot >= 3) return; const t = setTimeout(() => setBoot(boot + 1), 700); return () => clearTimeout(t); }, [boot]); const STEPS = ['Welcome', 'Connect', 'Repo', 'Bootstrap']; const BOOT_TASKS = [ 'Create stephen/pm-state (the sidecar)', 'Apply the label schema to stephen/commitea', 'Install a webhook · endpoint :48731', ]; const Frame = ({ children, footer }) => (
I'm Reginald, your project manager. I interview you instead of making you fill in forms, I forecast in honest ranges, and I never do the arithmetic myself — there's a scheduler for that.
Your plans live in your own Gitea as ordinary issues and labels. Delete me and nothing human is lost.
) : null} {step === 1 ? ( >}>One to start. You can add more later in Settings.
) : null} {step === 3 ? ( > : <> >}>The pot is empty. Tell me what you're planning and I'll draw up the tickets.
) : (No bot comments, no body frontmatter, no synthetic issues — ever. Labels are the only footprint.
)} ) : null}