| 66 | 66 | | import { HOME_WATCH_MAX, type HomeRepo } from "../../lib/home-live"; |
| 67 | 67 | | import { readCookie } from "../../lib/mission"; |
| 68 | 68 | | import { useHomeLive } from "../../lib/use-home-live"; |
| 69 | | − | import { loadOnboarding } from "../../lib/onboarding.server"; |
| 70 | | − | import { OnboardingOnPage } from "../../components/onboarding"; |
| 69 | + | import { guideIsFor, loadOnboarding } from "../../lib/onboarding.server"; |
| 70 | + | import { GettingStartedButton, OnboardingOnPage } from "../../components/onboarding"; |
| 71 | 71 | | import { loadMissionControl } from "../../lib/mission-control.server"; |
| 72 | 72 | | import { page } from "../../lib/meta"; |
| 73 | 73 | | import { inbox } from "../../lib/services.server"; |
| ⋯ |
| 208 | 208 | | watch, |
| 209 | 209 | | onboarding, |
| 210 | 210 | | setupAsked, |
| 211 | + | /** Whether Getting started is for the viewer (an owner), so Home offers it again once dismissed. */ |
| 212 | + | guide: guideIsFor(viewer, slug), |
| 211 | 213 | | }; |
| 212 | 214 | | } |
| 213 | 215 | | |
| ⋯ |
| 275 | 277 | | <OnboardingOnPage slug={slug} view={loaderData.onboarding} asked={loaderData.setupAsked} /> |
| 276 | 278 | | {/* 0. Ask g1t anything: the answer opens in the top bar's Ask panel. */} |
| 277 | 279 | | <header className="space-y-3"> |
| 280 | + | {loaderData.guide && ( |
| 281 | + | <div className="flex justify-end"> |
| 282 | + | <GettingStartedButton slug={slug} variant="soft" /> |
| 283 | + | </div> |
| 284 | + | )} |
| 278 | 285 | | <HomeAsk span={span} /> |
| 279 | 286 | | <p className="mx-auto max-w-2xl text-center text-sm leading-relaxed text-muted"> |
| 280 | 287 | | <Suspense fallback={<Skeleton className="inline-block h-3.5 w-72 align-middle" />}> |
| ⋯ |
| 296 | 303 | | needed, Running now, what happened, then Spent and Settled (the side |
| 297 | 304 | | column's cards join it, `contents`, each in its place by `order`). |
| 298 | 305 | | */} |
| 299 | | − | <div className="grid items-start gap-5 lg:grid-cols-[minmax(0,1fr)_20rem]"> |
| 306 | + | <div className="grid grid-cols-[minmax(0,1fr)] items-start gap-5 lg:grid-cols-[minmax(0,1fr)_20rem]"> |
| 300 | 307 | | {/* 1. Where you're needed now, with the one to start with on top: no window. */} |
| 301 | 308 | | <div id="needed" className="order-1 scroll-mt-4 lg:col-start-1 lg:row-start-1"> |
| 302 | 309 | | <Card |