Skip to content

Commit 4121253

Browse files
committed
Release v1.0.2: tour, quiz & UI fixes
Bump version to 1.0.2 and add changelog. Update 3D tour behavior so clicking a different planet moves the camera (set index) while clicking the current planet opens its detail view. Lock quiz flow: answers are frozen on selection, options are disabled after answering, and the Previous button has been removed to enforce one-way progression. Improve mobile scroll stability by adding touch-action: none and will-change: transform to the intro/Earth canvas. Remove the development-only planet-test page and clean up .gitignore entries. Update README copy and badges to reflect the release and feature changes.
1 parent b1977a4 commit 4121253

6 files changed

Lines changed: 31 additions & 79 deletions

File tree

.gitignore

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,3 @@ yarn-error.log*
2525
# typescript
2626
*.tsbuildinfo
2727
next-env.d.ts
28-
29-
# Claude Code
30-
.claude/

README.md

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@
66

77
<p align="center">
88
<b>Journey the solar system.</b><br>
9-
A cinematic interactive space experience with scroll-based exploration,<br>
10-
orbit view navigation, planet facts, and quiz challenges.
9+
A cinematic interactive space experience with 3D tour navigation,<br>
10+
orbit view, planet facts, and locked quiz challenges.
1111
</p>
1212

1313
<p align="center">
1414
<a href="https://aphelion.website"><img src="https://img.shields.io/badge/live-aphelion.website-2563eb?style=for-the-badge" alt="Live website"></a>
15-
<img src="https://img.shields.io/badge/version-0.1.0-7c3aed?style=for-the-badge" alt="Version 0.1.0">
15+
<img src="https://img.shields.io/badge/version-1.0.2-7c3aed?style=for-the-badge" alt="Version 1.0.2">
1616
<img src="https://img.shields.io/badge/license-private-525252?style=for-the-badge" alt="Private">
1717
</p>
1818

@@ -30,20 +30,21 @@
3030
<a href="#tech-stack">Tech stack</a> ·
3131
<a href="#project-structure">Project structure</a> ·
3232
<a href="#getting-started">Getting started</a> ·
33-
<a href="#scripts">Scripts</a>
33+
<a href="#scripts">Scripts</a> ·
34+
<a href="#changelog">Changelog</a>
3435
</p>
3536

3637
---
3738

3839
## Features
3940

4041
- **Cinematic intro:** Animated launch sequence into exploration mode.
41-
- **Journey mode:** Scroll-driven travel from the Sun to Pluto with atmospheric transitions.
42-
- **Orrery mode:** Solar system orbit map with clickable planets.
42+
- **3D tour mode:** Fly through the solar system in 3D — click an unvisited planet to travel to it; click your current planet to open its detail page.
43+
- **Orrery mode:** Solar system orbit map with animated planets and clickable exploration.
4344
- **Planet detail view:** Planet stats, facts, and focused deep-dive pages.
44-
- **Quiz system:** Per-planet quiz flow with instant feedback and completion tracking.
45+
- **Locked quiz system:** Per-planet quiz flow with one-way progression — answers are locked on selection and cannot be changed or revisited.
4546
- **Session persistence:** Navigation state and progress persist across refreshes.
46-
- **Responsive interactions:** Mobile-friendly controls, touch gestures, and layout tuning.
47+
- **Responsive interactions:** Mobile-friendly controls, touch gestures, haptic feedback, and layout tuning.
4748

4849
---
4950

@@ -68,13 +69,13 @@ Aphelion/
6869
├── components/
6970
│ ├── aphelion-logo.tsx # Brand mark/wordmark component
7071
│ ├── planet-3d.tsx # 3D planet rendering helpers
71-
│ ├── tour-view.tsx # Guided journey presentation
72+
│ ├── tour-view.tsx # Guided 3D journey with cinematic camera flight
7273
│ └── ui/ # Reusable UI primitives
7374
├── hooks/
7475
│ └── use-mobile.ts # Mobile breakpoint helper
7576
└── public/
7677
├── aphelion-icon.svg
77-
└── textures/planets/ # Planet texture assets
78+
└── textures/planets/ # Planet texture assets (2K)
7879
```
7980

8081
---
@@ -112,6 +113,16 @@ npm run lint # Run Next.js lint checks
112113

113114
---
114115

116+
## Changelog
117+
118+
### 1.0.2
119+
- **Planet navigation:** Clicking a planet you are not currently on in the 3D tour now travels the camera directly to that planet rather than opening its detail page. Clicking your current planet still opens the detail view.
120+
- **Quiz integrity:** Quiz answers are locked immediately on selection. The Previous button has been removed — quiz flow is strictly one-way to prevent score manipulation.
121+
- **Mobile scroll stability:** Fixed jitter/stutter of the Earth animation on the home screen when scrolling on mobile by adding `touch-action: none` to the intro container and promoting the Earth canvas to its own GPU compositor layer.
122+
- **Cleanup:** Removed the development-only planet test page (`/planet-test`). No sensitive data or secrets found in the repository; `.gitignore` coverage verified.
123+
124+
---
125+
115126
## Live site
116127

117128
[https://aphelion.website](https://aphelion.website)

app/page.tsx

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -890,6 +890,7 @@ function IntroScreen({
890890
onWheel={handleWheelEnter}
891891
onTouchStart={handleTouchStart}
892892
onTouchEnd={handleTouchEnd}
893+
style={{ touchAction: "none" }}
893894
>
894895
{/* Deep space background + vignette */}
895896
<div className="absolute inset-0 bg-[radial-gradient(ellipse_at_top,rgba(20,56,110,0.28)_0%,rgba(3,7,16,0.96)_55%,#02050b_100%)]" />
@@ -898,6 +899,7 @@ function IntroScreen({
898899
{/* Earth scene; starts as "above Earth" and descends on enter */}
899900
<motion.div
900901
className="absolute inset-0"
902+
style={{ willChange: "transform" }}
901903
animate={entering ? (prefersReducedMotion ? { opacity: 1 } : { scale: 1.46, y: -180 }) : { scale: 1, y: 0 }}
902904
transition={{ duration: prefersReducedMotion ? 0.2 : 1.7, ease: [0.22, 1, 0.36, 1] }}
903905
>
@@ -1804,6 +1806,7 @@ function Quiz({
18041806
const percent = Math.round(((current + 1) / questions.length) * 100)
18051807

18061808
const handleSelect = (i: number) => {
1809+
if (answers[current] !== null) return
18071810
const newAnswers = [...answers]
18081811
newAnswers[current] = i
18091812
setAnswers(newAnswers)
@@ -1820,11 +1823,6 @@ function Quiz({
18201823
}
18211824
}
18221825

1823-
const handlePrev = () => {
1824-
triggerHaptic(8)
1825-
if (current > 0) setCurrent((c) => c - 1)
1826-
}
1827-
18281826
const handleRestart = () => {
18291827
triggerHaptic([10, 16, 10])
18301828
setCurrent(0)
@@ -1972,6 +1970,7 @@ function Quiz({
19721970
color: textColor,
19731971
}}
19741972
onClick={() => handleSelect(i)}
1973+
disabled={answered}
19751974
role="radio"
19761975
aria-checked={selected === i}
19771976
aria-label={`Option ${String.fromCharCode(65 + i)}: ${opt}`}
@@ -2021,16 +2020,6 @@ function Quiz({
20212020
</AnimatePresence>
20222021

20232022
<div className="flex flex-wrap items-center gap-2.5">
2024-
{current > 0 && (
2025-
<button
2026-
className="inline-flex min-h-11 items-center gap-2 rounded-full border border-white/15 px-4 text-[11px] tracking-[0.2em] text-white/85 transition hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300/80"
2027-
onClick={handlePrev}
2028-
aria-label="Go to previous question"
2029-
>
2030-
<span aria-hidden></span>
2031-
PREVIOUS
2032-
</button>
2033-
)}
20342023
{answered && (
20352024
<motion.button
20362025
className="group inline-flex min-h-11 items-center gap-3 rounded-full border border-white/15 px-4 text-[11px] tracking-[0.28em] text-white/90 transition hover:text-white focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-cyan-300/80 sm:tracking-[0.32em]"

app/planet-test/page.tsx

Lines changed: 0 additions & 49 deletions
This file was deleted.

components/tour-view.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -338,7 +338,11 @@ export function TourView({
338338
scale={scales[i]}
339339
onClick={() => {
340340
triggerHaptic([8, 12, 8])
341-
onSelectPlanet(p)
341+
if (i === index) {
342+
onSelectPlanet(p)
343+
} else {
344+
setIndex(i)
345+
}
342346
}}
343347
/>
344348
))}

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "aphelion",
3-
"version": "0.1.0",
3+
"version": "1.0.2",
44
"private": true,
55
"scripts": {
66
"build": "next build",

0 commit comments

Comments
 (0)