Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
e31149c
πŸ₯ŒπŸš ↝ [uzm1um ++]: How far can we go??
Gizmotronn Mar 31, 2026
26ee660
⚾️πŸ₯— ↝ [ob4 ++]: Fixing onboarding issues
Gizmotronn Apr 6, 2026
42b8167
fix: auth loop, build errors, font self-hosting
Gizmotronn Apr 13, 2026
f0f55cf
fix(game): eliminate server-side data fetch causing 408 timeouts
Gizmotronn Apr 13, 2026
770e7b4
fix(auth): move token refresh to middleware, use getSession in page
Gizmotronn Apr 13, 2026
200c609
fix(auth): correct cookie propagation on redirect + add /auth/callback
Gizmotronn Apr 13, 2026
47de4f4
debug: add server-side logging to diagnose 408 on /game
Gizmotronn Apr 13, 2026
22557fa
fix: switch font to next/font/google, add page-data error logging
Gizmotronn Apr 13, 2026
9876c50
πŸ’¨πŸ– ↝ [ob4 ++]: Fixing onboarding & auth issues
Gizmotronn Apr 9, 2026
881fdc4
πŸ“¦ -> SSW-000 -> Archive legacy task tracking system and prep for 3.0 …
Gizmotronn Apr 19, 2026
9f72bb1
πŸ—ΊοΈ -> SSW-001 -> Define and lock Star Sailors 3.0 MVP route map
Gizmotronn Apr 20, 2026
b2d1f79
πŸ› οΈ -> SSW-002 -> Stabilize first session onboarding and science contr…
Gizmotronn Apr 21, 2026
b4f2055
πŸ“± -> SSW-003 -> Run mobile PWA and safe area release pass
Gizmotronn Apr 22, 2026
4ba03f1
πŸš€ -> SSW-004 -> Prepare web client distribution and feedback cohort
Gizmotronn Apr 23, 2026
5c3a825
πŸ“ -> SSW-005 -> Specify the citizen science project intake surface fo…
Gizmotronn Apr 24, 2026
08eb3e3
🎨 -> OQUXW4 -> Research inspiration for 3D rooms and spatial UI
Gizmotronn Apr 25, 2026
f6bc652
βš™οΈ -> SSW-000 -> Configure Claude local settings for enhanced dev wor…
Gizmotronn Apr 27, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 36 additions & 0 deletions .claude/settings.local.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"permissions": {
"allow": [
"Bash(find /Users/scroobz/Navigation/client/tests/unit -name \"*.test.tsx\" -exec wc -l {} +)",
"Bash(npx vitest run --reporter=verbose)",
"Bash(npx cypress run --spec \"cypress/e2e/smoke-critical.cy.ts\" --headless)",
"Bash(npx cypress verify)",
"Bash(npx cypress install)",
"Bash(npx cypress install --force)",
"Bash(python3 -c \"import sys,json; p=json.load\\(sys.stdin\\); print\\(p.get\\(''scripts'',{}\\).get\\(''test:all'',''''\\)\\)\")",
"Bash(/Users/scroobz/Library/Caches/Cypress/14.5.4/Cypress.app/Contents/MacOS/Cypress --smoke-test --ping=514)",
"Bash(git -C /Users/scroobz/Navigation/client log --oneline -5 -- cypress.config.ts package.json)",
"Bash(python3 -c \"import sys,json; p=json.load\\(sys.stdin\\); deps=p.get\\(''devDependencies'',{}\\); print\\(''cypress:'', deps.get\\(''cypress'',''not found''\\)\\)\")",
"Read(//Users/scroobz/Library/Caches/Cypress/**)",
"Bash(yarn add cypress@^15.10.0 --dev)",
"Bash(CYPRESS_INSTALL_BINARY=/Users/scroobz/Library/Caches/Cypress/15.10.0/Cypress.app npx cypress verify)",
"Bash(CYPRESS_INSTALL_BINARY=/Users/scroobz/Library/Caches/Cypress/15.10.0/Cypress.app yarn add cypress@15.10.0 --dev)",
"WebSearch",
"WebFetch(domain:store.steampowered.com)",
"WebFetch(domain:localhost)",
"WebFetch(domain:zooniverse.github.io)",
"WebFetch(domain:api.nasa.gov)",
"WebFetch(domain:panoptes.docs.apiary.io)",
"WebFetch(domain:exoplanetarchive.ipac.caltech.edu)",
"WebFetch(domain:www.minorplanetcenter.net)",
"WebFetch(domain:www.aavso.org)",
"WebFetch(domain:seti.berkeley.edu)",
"WebFetch(domain:www.swpc.noaa.gov)",
"WebFetch(domain:api.helioviewer.org)",
"WebFetch(domain:alerce.science)",
"WebFetch(domain:science.alerce.online)",
"WebFetch(domain:alerce.readthedocs.io)",
"WebFetch(domain:developer.zooniverse.org)"
]
}
}
5 changes: 5 additions & 0 deletions .knowns/archive/2026-04-20-project-management-reset/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# 2026-04-20-project-management-reset

Archived 92 task file(s) from Star Sailors Web Client during the Star Sailors project-management reset.

These files were not deleted. They were removed from the active Knowns task board so this week can focus on MVP closure, distribution, testing, and agent handoff.
Original file line number Diff line number Diff line change
@@ -1,8 +1,9 @@
---
id: task-30-p1-design-tokens
title: "3.0 Phase 1: Design Tokens, Fonts & Theme"
status: in-progress
status: done
priority: high
parent: task-sxdk5w
phase: "3.0-p1"
specRefs:
- "specs/redesign/3-0-unified-web-client"
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
---
id: 7kznko
title: Sketch the 3.0 homepage hero section
status: done
priority: medium
labels:
- sketch
- design
createdAt: '2026-03-26T02:31:50.403Z'
updatedAt: '2026-03-26T09:18:05.246Z'
timeSpent: 0
---
# Sketch the 3.0 homepage hero section

## Description

<!-- SECTION:DESCRIPTION:BEGIN -->
The 3.0 redesign needs a hero section sketch. What's the headline, visual treatment, and primary CTA? How does it communicate the platform's purpose?
<!-- SECTION:DESCRIPTION:END -->

## Acceptance Criteria
<!-- AC:BEGIN -->
- [ ] #1 Hero section sketch complete
- [ ] #2 Headline direction and CTA identified
<!-- AC:END -->

## Hero Section Sketch

### Layout (mobile-first, single column β†’ two-column on lg)

```
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ [NAV: Logo left Β· "Sign in" right] β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ β”‚
β”‚ β–‘β–‘ star-field + sunburst-hero (primary glow) β–‘β–‘ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ 01 / REAL ASTRONOMY β”‚ ← micro label β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ [HEADLINE β€” 2–3 lines] β”‚ ← text-4xl/5xl β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ [Subhead β€” 1 line] β”‚ ← text-base β”‚
β”‚ β”‚ β”‚ β”‚
β”‚ β”‚ [CTA button] [secondary] β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Live stat: X classifications Β· Y users β”‚ β”‚
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚ β”‚
β”‚ ── SCROLL ── ↓ Three product cards (01/02/03) ── β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
```

### Visual treatment

- **Background**: `bg-background` + `star-field` at 20% opacity + `sunburst-hero` (primary blue
glow rising from bottom of hero block)
- **Headline text**: Syne Mono, `text-4xl md:text-5xl`, white/foreground, no gradient treatment
β€” the glow is in the background, not the text
- **CTA button**: `bg-primary text-white` with `btn-glow` shadow, label "Launch Station"
- **Secondary action**: ghost button, "See how it works" β†’ scrolls to product cards
- **Live stat strip**: single row, `font-mono text-xs text-muted-foreground`, pulls from
Prisma-backed live stats (already implemented, task-30-p7)
- **Scan-line overlay**: very low opacity (0.04) over entire hero for texture

### Primary CTA

**"Launch Station"** β†’ `/auth` (logs in or creates account)

The CTA is about entering the game, not "learning more." Users who want to understand first
scroll down to the three product cards.

### What the hero must communicate (in order)

1. This is a game
2. The science is real
3. You can start now

### Headline direction β†’ see task u6zo6x for final copy options

## Implementation Notes

<!-- SECTION:NOTES:BEGIN -->
kanban: f7k41f
<!-- SECTION:NOTES:END -->

Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
id: 9ztpbl
title: Decide the persistent HUD strip composition for the game hub
status: todo
status: done
priority: high
labels: []
createdAt: '2026-04-01T11:56:01.878Z'
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
id: aaigmw
title: Document typography and colour tokens for the 3.0 redesign
status: todo
status: done
priority: high
assignee: Liam
labels:
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Task: Data Fetching & Caching Optimization

## Status
**Status:** Backlog
**Priority:** High
**Created:** 2026-04-02
**Context:** Many components use manual `useEffect` + `fetch` patterns, leading to redundant code and sub-optimal performance on mobile.

## Objectives
- [ ] Integrate a modern data-fetching library (e.g., SWR or TanStack Query).
- [ ] Consolidate fragmented API calls into "Aggregated Summary" endpoints.
- [ ] Implement robust error handling and loading states globally.

## Strategy
- Identify a suitable library (SWR is already in use in some parts of the ecosystem, but let's check `package.json`).
- Refactor `GameClient.tsx` and major tabs to use hooks for data fetching.
- Work with backend/API routes to create `/api/gameplay/summary` endpoints.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Task: Feature-First Folder Structure Migration

## Status
**Status:** In Progress
**Priority:** Medium
**Created:** 2026-04-02
**Context:** The project structure is inconsistent, with logic split across `src/components`, `src/app`, and `src/lib`.

## Objectives
- [ ] Consolidate feature-specific logic into `src/features/`.
- [ ] Ensure components, hooks, and types for a feature live together.
- [ ] Reduce top-level directory clutter.

## Strategy
- Follow the established pattern in `src/features/game/`.
- Create `src/features/telescope/`, `src/features/satellite/`, etc.
- Update imports across the codebase using search-and-replace.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Task: Streamline "Build" Phase for Mobile UX

## Status
**Status:** Backlog
**Priority:** Medium
**Created:** 2026-04-02
**Context:** The current deployment flow is multi-step and requires significant navigation, which is friction-heavy for mobile users.

## Objectives
- [ ] Implement "One-Tap Deployment" directly from the Hub's `StructureCard`.
- [ ] Create a "Unified Mission Feed" to bypass viewport-specific navigation for active tasks.
- [ ] Simplify touch targets and navigation paths for the core "Build -> Do" loop.

## Strategy
- Add a "Quick Action" button to `StructureCard` when in an "undeployed" state.
- Develop a `GlobalMissionFeed` component that aggregates pending anomalies from all structures.
- Reduce the number of confirmation dialogs for mobile users.
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
---
id: task-ob1-galaxyzoo-branch-bug
title: "Onboarding: Fix GalaxyZoo showTutorial branch renders same component"
status: done
priority: high
parent: task-sxdk5w
createdAt: '2026-04-07T00:00:00Z'
---

# Onboarding: Fix GalaxyZoo showTutorial branch renders same component

## Status
**Status:** Open
**Priority:** High
**Created:** 2026-04-07

## Context
`TelescopeGalaxyZoo` (default export in `src/components/projects/Telescopes/GalaxyZoo.tsx`) has
a `showTutorial` boolean toggled by a "View Tutorial / Return to Task" button. Both branches of
the conditional render `<GalaxyZooTutorial>` β€” the tutorial is never dismissed and the
classification form is never shown as the standalone view.

```tsx
// line 247–251 β€” both branches identical
{showTutorial ? (
<GalaxyZooTutorial anomalyId={anomaly.id} avatarUrl={anomaly.avatarUrl} />
) : (
<GalaxyZooTutorial anomalyId={anomaly.id} avatarUrl={anomaly.avatarUrl} />
)}
```

## Objectives
- [ ] Replace the `showTutorial ? X : Y` with a proper split:
- `showTutorial === true` β†’ render only `<GalaxyZooTutorial>` (tutorial flow)
- `showTutorial === false` β†’ render the classification form directly (skip tutorial, go straight to classify)
- [ ] The "View Tutorial" button should toggle back to the tutorial; "Return to Task" should show just the form

## Strategy
- The classification form is already embedded inside `GalaxyZooTutorial` (shows after `handleTutorialComplete` sets `showClassification=true`)
- Simplest fix: keep the tutorial-gated flow as default; the "Return to Task" path should render a
standalone classification panel (duplicate the form section, not the whole tutorial component)
- Alternatively: extract the classification form into its own component and compose both paths from it
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
---
id: task-ob2-missing-tutorial-selectors
title: "Onboarding: data-tutorial selectors referenced in TutorialWrapper steps don't exist in DOM"
status: done
priority: high
parent: task-sxdk5w
createdAt: '2026-04-07T00:00:00Z'
---

# Onboarding: data-tutorial selectors don't exist in rendered components

## Status
**Status:** Open
**Priority:** High
**Created:** 2026-04-07

## Context
`TutorialWrapper.tsx` defines step sets (TELESCOPE_INTRO_STEPS, TELESCOPE_DEPLOY_STEPS,
SATELLITE_INTRO_STEPS, ROVER_INTRO_STEPS, SOLAR_INTRO_STEPS) with `highlightSelector` values
like `[data-tutorial='deploy-telescope']`, `[data-tutorial='project-options']`,
`[data-tutorial='confirm-deploy']`, `[data-tutorial='deploy-rover']`,
`[data-tutorial='participate-solar']`, etc.

`InteractiveTutorial.tsx` uses `document.querySelector(step.highlightSelector)` to position the
highlight cutout. When the selector matches nothing, the highlight silently renders at (0,0) β€”
the tutorial runs but the pointer never points at anything real.

A grep for these specific values finds them only in `TutorialWrapper.tsx` itself, not in any
structure/deploy component.

## Objectives
- [ ] Audit all `highlightSelector` values in every step set in `TutorialWrapper.tsx`
- [ ] Add the matching `data-tutorial="…"` attributes to the actual rendered elements:
- `[data-tutorial='deploy-telescope']` β†’ the "Deploy Telescope" button in TelescopeSection / TelescopeDeploySidebar
- `[data-tutorial='project-options']` β†’ the project option cards in the deploy sidebar
- `[data-tutorial='confirm-deploy']` β†’ the confirm/deploy button in DeploySidebar
- `[data-tutorial='deploy-rover']` β†’ the rover deploy button in RoverSection
- `[data-tutorial='participate-solar']` β†’ the participate button in SolarHealth
- `[data-tutorial='planet-nav-next']` β†’ the next-planet nav button for satellite tutorial
- `[data-tutorial='deploy-satellite']` β†’ the satellite deploy button

## Strategy
- Add `data-tutorial` attributes alongside existing `data-*` attributes in each component
- Do NOT restructure component logic β€” attribute additions only
- After adding, manually verify in browser that the highlight cutout correctly frames each element
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
---
id: task-ob3-tutorial-never-instantiated
title: "Onboarding: TutorialWrapper + step sets defined but never used in routing"
status: done
priority: high
parent: task-sxdk5w
createdAt: '2026-04-07T00:00:00Z'
---

# Onboarding: Tutorial step sets exist but are never instantiated

## Status
**Status:** Open
**Priority:** High
**Created:** 2026-04-07

## Context
`TutorialWrapper.tsx` defines and exports `SATELLITE_INTRO_STEPS` and `ROVER_INTRO_STEPS`, and
defines (but does not export) `TELESCOPE_INTRO_STEPS`, `TELESCOPE_DEPLOY_STEPS`,
`SOLAR_INTRO_STEPS`. `InteractiveTutorial.tsx` also defines `ONBOARDING_STEPS` and
`DEPLOYMENT_STEPS` internally but does not export or use them.

None of these step sets are imported or instantiated anywhere in the app's routing. No page or
layout renders `<TutorialWrapper tutorialId="…" steps={…}>`. The entire interactive tutorial
system is built but dead.

## Objectives
- [ ] Export `TELESCOPE_INTRO_STEPS`, `TELESCOPE_DEPLOY_STEPS`, `SOLAR_INTRO_STEPS` from `TutorialWrapper.tsx`
- [ ] Wrap the telescope structure viewport (or setup page) with `<TutorialWrapper tutorialId="telescope-intro" steps={TELESCOPE_INTRO_STEPS}>`
- [ ] Wrap the rover structure viewport with `<TutorialWrapper tutorialId="rover-intro" steps={ROVER_INTRO_STEPS}>`
- [ ] Wrap the satellite structure viewport with `<TutorialWrapper tutorialId="satellite-intro" steps={SATELLITE_INTRO_STEPS}>`
- [ ] Wrap the deploy sidebar or setup pages with `<TutorialWrapper tutorialId="telescope-deploy" steps={TELESCOPE_DEPLOY_STEPS}>`
- [ ] Ensure `data-tutorial` attributes exist on target elements (see task-ob2)
- [ ] Smoke test: new user flow shows tutorial overlay on first visit, not on second

## Strategy
- Start with telescope setup page (`/setup/telescope`) β€” it's the most common first-run path
- Add `<TutorialWrapper>` at the page level so it wraps the entire viewport content
- Confirm `TutorialId` type in `useUserPreferences` includes the new IDs
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
---
id: task-ob4-missing-onboarding-projects
title: "Onboarding: Solar Monitoring and Asteroid Hunting absent from project selection"
status: done
priority: medium
createdAt: '2026-04-07T00:00:00Z'
---

# Onboarding: Only 3 of 5 projects shown in selection step

## Status
**Status:** Open
**Priority:** Medium
**Created:** 2026-04-07

## Context
`src/components/onboarding/onboarding-data.ts` exports `PROJECTS` with 3 entries:
- planet-hunting β†’ Telescope
- rover-training β†’ Rover
- cloud-tracking β†’ Satellite

`SETUP_MAP` already has entries for `"asteroid-hunting"` (β†’ `/setup/telescope`) and
`"solar-monitoring"` (β†’ `/setup/solar`), but neither has a corresponding `PROJECTS` entry so
they never appear in the selection UI.

`ProjectType` in `useUserPreferences` needs to be checked to confirm it includes the new IDs.

## Objectives
- [ ] Add "Asteroid Hunting" entry to `PROJECTS` in `onboarding-data.ts`:
- `id: "asteroid-hunting"`, icon: `Telescope` (or `Target`), color: orange/amber, structure: `"Telescope"`, description referencing the Daily Minor Planet / asteroid detection mission
- [ ] Add "Solar Monitoring" entry to `PROJECTS`:
- `id: "solar-monitoring"`, icon: `Sun` or `Zap`, color: yellow, structure: `"Solar Observatory"`, description referencing sunspot classification
- [ ] Confirm `ProjectType` union in `useUserPreferences.ts` includes `"asteroid-hunting"` and `"solar-monitoring"`
- [ ] Update `SETUP_MAP` if needed (entries already exist, verify they're correct)

## Strategy
- Keep the same shape as existing PROJECTS entries (id, name, icon, color, bg, border, glow, structure, description)
- Asteroid Hunting and Solar Monitoring are separate missions; don't merge with planet-hunting
Loading
Loading