diff --git a/DECISIONS.md b/DECISIONS.md
index 7cb0cd8..aec0596 100644
--- a/DECISIONS.md
+++ b/DECISIONS.md
@@ -552,3 +552,9 @@ Implementation decisions not spelled out in `memory-bank/implementation-plan.md`
- **"Own-ship deliveries" = resolved, non-tutorial dispatches that carried a contract** (repositions store a null contract and do not count).
- **A goal stays claimable whenever its condition holds at claim time:** status is computed fresh from current state, so a goal is not "ready" because of something that has since reversed (for example, discovered locations never reverse, but the counts are re-read each time).
- **Claims during the tutorial fail with `goal-not-ready`,** since goals do not exist until the tutorial is over.
+
+## Step 10A.11
+
+- **The intro card and "Suggested" highlight show only before the first run** (`runsCompleted === 0`); after that the board is a plain choice.
+- **The suggested contract is the board's first slot,** which the v2 generator always fills with the light tier (fastest, most XP per minute).
+- **Story names live in client copy:** "Halvorsen Lunar Freight" is presentation text, not game data, so it is not in content.
diff --git a/apps/web/src/screens/StartScreen.tsx b/apps/web/src/screens/StartScreen.tsx
index 66e2897..10c5401 100644
--- a/apps/web/src/screens/StartScreen.tsx
+++ b/apps/web/src/screens/StartScreen.tsx
@@ -13,7 +13,8 @@ export function StartScreen() {
onSuccess: ({ state }) => {
// The session cookie is now set; the response already holds the new state.
queryClient.setQueryData(PLAYER_STATE_KEY, state);
- void navigate("/");
+ // Straight to work: the first company run is one tap away (CR-001).
+ void navigate("/contracts");
},
});
diff --git a/apps/web/src/screens/TutorialBoard.tsx b/apps/web/src/screens/TutorialBoard.tsx
index 933873d..f52b829 100644
--- a/apps/web/src/screens/TutorialBoard.tsx
+++ b/apps/web/src/screens/TutorialBoard.tsx
@@ -21,6 +21,7 @@ export function TutorialBoard() {
const fly = useGameAction("createDispatch");
const runInFlight = state.tutorial?.runInFlight ?? false;
const loaner = loanerModel(content);
+ const firstRun = (state.tutorial?.runsCompleted ?? 0) === 0;
if (board.isPending) return
Loading contracts…
;
if (board.isError) {
@@ -36,6 +37,15 @@ export function TutorialBoard() {
return (
+ {firstRun && (
+
+
Halvorsen Lunar Freight needs a pilot.
+
Their ship, your hands. Get the crates to the Moon.
+
+ )}
Company runs in the loaner {loaner.name}. You keep a share of each payout.
@@ -53,42 +63,55 @@ export function TutorialBoard() {
No company runs left this period. Check back soon.