refactor: code quality cleanup — remove any types, add logger, rename Kine to Tabata

- Phase 0: Rename all Kine references to Tabata (types, files, imports, i18n, analytics events)
- Phase 1: Add test coverage for tabataProgramStore, workoutProgramStore, and color utils (47 tests)
- Phase 2: Remove all `any` types from production code with proper typed replacements
- Phase 3: Replace ~60 raw console.* calls with __DEV__-gated logger utility
- Phase 4: Verify .DS_Store housekeeping (already clean)

0 TypeScript errors, 583/583 tests passing.
This commit is contained in:
Millian Lamiaux
2026-04-17 18:56:24 +02:00
parent e0e02c4550
commit 791f432334
176 changed files with 16508 additions and 2305 deletions

View File

@@ -8,6 +8,7 @@ import { useRouter } from 'expo-router'
import { useSafeAreaInsets } from 'react-native-safe-area-context'
import { LinearGradient } from 'expo-linear-gradient'
import { Icon } from '@/src/shared/components/Icon'
import { NativeButton } from '@/src/shared/components/native'
import { useMemo, useState } from 'react'
import { useTranslation } from 'react-i18next'
@@ -17,9 +18,11 @@ import { ASSESSMENT_WORKOUT } from '@/src/shared/data/programs'
import { StyledText } from '@/src/shared/components/StyledText'
import { useThemeColors, BRAND } from '@/src/shared/theme'
import { withOpacity } from '@/src/shared/utils/color'
import type { ThemeColors } from '@/src/shared/theme/types'
import { SPACING, LAYOUT } from '@/src/shared/constants/spacing'
import { RADIUS } from '@/src/shared/constants/borderRadius'
import { TEXT, GRADIENTS } from '@/src/shared/constants/colors'
const FONTS = {
LARGE_TITLE: 28,
@@ -118,17 +121,14 @@ export default function AssessmentScreen() {
</ScrollView>
<View style={[styles.bottomBar, { paddingBottom: insets.bottom + SPACING[4] }]}>
<Pressable style={styles.ctaButton} onPress={handleComplete}>
<LinearGradient
colors={['#FF6B35', '#FF3B30']}
style={styles.ctaGradient}
>
<StyledText size={16} weight="bold" color="#FFFFFF">
{t('assessment.startAssessment')}
</StyledText>
<Icon name="play.fill" size={20} color="#FFFFFF" style={styles.ctaIcon} />
</LinearGradient>
</Pressable>
<NativeButton
variant="primary"
title={t('assessment.startAssessment')}
systemImage="play.fill"
onPress={handleComplete}
fullWidth
controlSize="large"
/>
</View>
</View>
)
@@ -242,23 +242,20 @@ export default function AssessmentScreen() {
{/* Bottom Actions */}
<View style={[styles.bottomBar, { paddingBottom: insets.bottom + SPACING[4] }]}>
<Pressable style={styles.ctaButton} onPress={handleStart}>
<LinearGradient
colors={['#FF6B35', '#FF3B30']}
style={styles.ctaGradient}
>
<StyledText size={16} weight="bold" color="#FFFFFF">
{t('assessment.takeAssessment')}
</StyledText>
<Icon name="arrow.right" size={20} color="#FFFFFF" style={styles.ctaIcon} />
</LinearGradient>
</Pressable>
<NativeButton
variant="primary"
title={t('assessment.takeAssessment')}
systemImage="arrow.right"
onPress={handleStart}
fullWidth
controlSize="large"
/>
<Pressable style={styles.skipButton} onPress={handleSkip}>
<StyledText size={15} color={colors.text.tertiary}>
{t('assessment.skipForNow')}
</StyledText>
</Pressable>
<NativeButton
variant="ghost"
title={t('assessment.skipForNow')}
onPress={handleSkip}
/>
</View>
</View>
)
@@ -304,8 +301,8 @@ function createStyles(colors: ThemeColors) {
iconContainer: {
width: 100,
height: 100,
borderRadius: 50,
backgroundColor: `${BRAND.PRIMARY}15`,
borderRadius: RADIUS.FULL,
backgroundColor: withOpacity(BRAND.PRIMARY, 0.08),
alignItems: 'center',
justifyContent: 'center',
marginBottom: SPACING[5],
@@ -335,8 +332,8 @@ function createStyles(colors: ThemeColors) {
featureIcon: {
width: 48,
height: 48,
borderRadius: 24,
backgroundColor: `${BRAND.PRIMARY}15`,
borderRadius: RADIUS.FULL,
backgroundColor: withOpacity(BRAND.PRIMARY, 0.08),
alignItems: 'center',
justifyContent: 'center',
marginRight: SPACING[3],
@@ -363,7 +360,7 @@ function createStyles(colors: ThemeColors) {
paddingVertical: SPACING[2],
borderRadius: RADIUS.FULL,
borderWidth: 1,
borderColor: colors.border.glass,
borderColor: colors.border.dim,
},
// Assessment Container
@@ -384,8 +381,8 @@ function createStyles(colors: ThemeColors) {
exerciseNumber: {
width: 36,
height: 36,
borderRadius: 18,
backgroundColor: `${BRAND.PRIMARY}15`,
borderRadius: RADIUS.FULL,
backgroundColor: withOpacity(BRAND.PRIMARY, 0.08),
alignItems: 'center',
justifyContent: 'center',
marginRight: SPACING[3],
@@ -424,7 +421,7 @@ function createStyles(colors: ThemeColors) {
paddingHorizontal: LAYOUT.SCREEN_PADDING,
paddingTop: SPACING[3],
borderTopWidth: 1,
borderTopColor: colors.border.glass,
borderTopColor: colors.border.dim,
},
ctaButton: {
borderRadius: RADIUS.LG,