Skip to content

Commit 22e9018

Browse files
OneMuppetclaude
andcommitted
Fix mobile layout and simplify team metcon UI
Use abbreviated level names on mobile to prevent horizontal overflow. Remove partner level selector in favor of toggling the single level picker. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 244d90b commit 22e9018

4 files changed

Lines changed: 993 additions & 55 deletions

File tree

website/app/programming/page.tsx

Lines changed: 16 additions & 55 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,15 @@ const LEVEL_NAMES = [
3737
"Advanced+",
3838
"Rx",
3939
]
40+
const LEVEL_NAMES_SHORT = [
41+
"Beg",
42+
"Beg+",
43+
"Int",
44+
"Int+",
45+
"Adv",
46+
"Adv+",
47+
"Rx",
48+
]
4049
const LEVEL_KEYS = [
4150
"beginner",
4251
"beginner_plus",
@@ -368,15 +377,11 @@ function MetconCard({
368377
metcon,
369378
level,
370379
levelKey,
371-
partnerLevel,
372-
partnerLevelKey,
373380
defaultExpanded,
374381
}: {
375382
metcon: Metcon
376383
level: number
377384
levelKey: LevelKey
378-
partnerLevel?: number
379-
partnerLevelKey?: LevelKey
380385
defaultExpanded?: boolean
381386
}) {
382387
const [isExpanded, setIsExpanded] = useState(defaultExpanded ?? false)
@@ -453,16 +458,9 @@ function MetconCard({
453458
</div>
454459
)}
455460

456-
{/* Whiteboard(s) */}
461+
{/* Whiteboard */}
457462
<div className="px-6 py-5">
458-
{isTeam && partnerLevel !== undefined && partnerLevelKey ? (
459-
<div className="flex flex-col md:flex-row gap-4">
460-
<WhiteboardColumn metcon={metcon} levelIdx={level} levelKey={levelKey} label="You" />
461-
<WhiteboardColumn metcon={metcon} levelIdx={partnerLevel} levelKey={partnerLevelKey} label="Partner" />
462-
</div>
463-
) : (
464-
<WhiteboardColumn metcon={metcon} levelIdx={level} levelKey={levelKey} />
465-
)}
463+
<WhiteboardColumn metcon={metcon} levelIdx={level} levelKey={levelKey} />
466464
</div>
467465

468466
{/* Stimulus + Coach Notes */}
@@ -503,10 +501,10 @@ function MetconCard({
503501
{LEVEL_NAMES.map((name, i) => (
504502
<th
505503
key={i}
506-
className="text-center py-2 px-2 text-xs font-bold"
504+
className="text-center py-2 px-2 text-xs font-bold whitespace-nowrap"
507505
style={{ color: LEVEL_COLORS[i] }}
508506
>
509-
{name}
507+
{LEVEL_NAMES_SHORT[i]}
510508
</th>
511509
))}
512510
</tr>
@@ -589,15 +587,11 @@ function DailyView({
589587
metcons,
590588
level,
591589
levelKey,
592-
partnerLevel,
593-
partnerLevelKey,
594590
}: {
595591
sessions: Session[]
596592
metcons: Metcon[]
597593
level: number
598594
levelKey: LevelKey
599-
partnerLevel: number
600-
partnerLevelKey: LevelKey
601595
}) {
602596
const sortedDates = useMemo(
603597
() => sessions.map((s) => s.date).sort(),
@@ -780,8 +774,6 @@ function DailyView({
780774
metcon={metcon}
781775
level={level}
782776
levelKey={levelKey}
783-
partnerLevel={metcon.team ? partnerLevel : undefined}
784-
partnerLevelKey={metcon.team ? partnerLevelKey : undefined}
785777
defaultExpanded
786778
/>
787779
</div>
@@ -906,14 +898,12 @@ function LibraryView({
906898
// ---------------------------------------------------------------------------
907899
export default function ProgrammingPage() {
908900
const [level, setLevel] = useState<number>(6) // default Rx
909-
const [partnerLevel, setPartnerLevel] = useState<number>(3) // default Intermediate+
910901
const [activeTab, setActiveTab] = useState<"daily" | "library">("daily")
911902
const [metcons, setMetcons] = useState<Metcon[]>([])
912903
const [sessions, setSessions] = useState<Session[]>([])
913904
const [loading, setLoading] = useState(true)
914905

915906
const levelKey = LEVEL_KEYS[level]
916-
const partnerLevelKey = LEVEL_KEYS[partnerLevel]
917907

918908
useEffect(() => {
919909
Promise.all([
@@ -983,7 +973,7 @@ export default function ProgrammingPage() {
983973
{LEVEL_NAMES.map((name, i) => (
984974
<button
985975
key={i}
986-
className={`px-3 py-2 rounded-full text-xs font-bold transition-colors ${
976+
className={`px-2 sm:px-3 py-2 rounded-full text-xs font-bold transition-colors whitespace-nowrap ${
987977
level === i
988978
? "text-white"
989979
: "text-muted-foreground hover:text-foreground"
@@ -994,40 +984,13 @@ export default function ProgrammingPage() {
994984
}}
995985
onClick={() => setLevel(i)}
996986
>
997-
{name}
987+
<span className="sm:hidden">{LEVEL_NAMES_SHORT[i]}</span>
988+
<span className="hidden sm:inline">{name}</span>
998989
</button>
999990
))}
1000991
</div>
1001992
</div>
1002993

1003-
{/* Row 3: Partner Level (shown when team metcons exist) */}
1004-
{metcons.some((m) => m.team) && (
1005-
<div className="flex flex-col items-center gap-1">
1006-
<div className="flex items-center gap-1.5">
1007-
<Users className="w-3.5 h-3.5 text-purple-500" />
1008-
<span className="text-xs text-purple-500 font-medium">Partner Level</span>
1009-
</div>
1010-
<div className="flex bg-secondary rounded-full p-1">
1011-
{LEVEL_NAMES.map((name, i) => (
1012-
<button
1013-
key={i}
1014-
className={`px-3 py-2 rounded-full text-xs font-bold transition-colors ${
1015-
partnerLevel === i
1016-
? "text-white"
1017-
: "text-muted-foreground hover:text-foreground"
1018-
}`}
1019-
style={{
1020-
backgroundColor:
1021-
partnerLevel === i ? LEVEL_COLORS[i] : undefined,
1022-
}}
1023-
onClick={() => setPartnerLevel(i)}
1024-
>
1025-
{name}
1026-
</button>
1027-
))}
1028-
</div>
1029-
</div>
1030-
)}
1031994
</div>
1032995
</div>
1033996
</section>
@@ -1045,8 +1008,6 @@ export default function ProgrammingPage() {
10451008
metcons={metcons}
10461009
level={level}
10471010
levelKey={levelKey}
1048-
partnerLevel={partnerLevel}
1049-
partnerLevelKey={partnerLevelKey}
10501011
/>
10511012
) : (
10521013
<LibraryView

0 commit comments

Comments
 (0)