SYMBOL INDEX (1182 symbols across 450 files) FILE: app/[locale]/(admin)/admin/[...catchAll]/not-found.tsx function NotFoundPage (line 3) | function NotFoundPage() { FILE: app/[locale]/(admin)/admin/[...catchAll]/page.tsx function AdminCatchAll (line 3) | function AdminCatchAll() { FILE: app/[locale]/(admin)/admin/dashboard/page.tsx function getDashboardStats (line 8) | async function getDashboardStats() { function DashboardStats (line 60) | async function DashboardStats() { function DashboardStatsLoading (line 172) | function DashboardStatsLoading() { function AdminDashboard (line 207) | function AdminDashboard() { FILE: app/[locale]/(admin)/admin/layout.tsx type AdminLayoutProps (line 9) | interface AdminLayoutProps { function AdminLayout (line 14) | async function AdminLayout({ children }: AdminLayoutProps) { FILE: app/[locale]/(admin)/admin/not-found.tsx function NotFoundPage (line 3) | function NotFoundPage() { FILE: app/[locale]/(admin)/admin/programs/[id]/edit/page.tsx type ProgramEditPageProps (line 6) | interface ProgramEditPageProps { function ProgramEditPage (line 10) | async function ProgramEditPage({ params }: ProgramEditPageProps) { FILE: app/[locale]/(admin)/admin/programs/page.tsx function AdminPrograms (line 6) | function AdminPrograms() { FILE: app/[locale]/(admin)/admin/settings/page.tsx function AdminSettings (line 1) | function AdminSettings() { FILE: app/[locale]/(admin)/admin/users/page.tsx function AdminUsersPage (line 8) | async function AdminUsersPage() { FILE: app/[locale]/(app)/(legal-and-payment)/layout.tsx type LocaleParams (line 3) | type LocaleParams = Record & { function RouteLayout (line 7) | function RouteLayout({ children, params: _ }: LayoutParams) { FILE: app/[locale]/(app)/(legal-and-payment)/legal/privacy/page.tsx type PageProps (line 4) | type PageProps = { function PrivacyPolicyPage (line 8) | async function PrivacyPolicyPage({ params }: PageProps) { FILE: app/[locale]/(app)/(legal-and-payment)/legal/sales-terms/page.tsx type PageProps (line 5) | type PageProps = { function SalesTermsPage (line 9) | async function SalesTermsPage({ params }: PageProps) { FILE: app/[locale]/(app)/(legal-and-payment)/legal/terms/page.tsx type PageProps (line 5) | type PageProps = { function TermsPage (line 9) | async function TermsPage({ params }: PageProps) { FILE: app/[locale]/(app)/[slug]/layout.tsx type RootLayoutProps (line 3) | interface RootLayoutProps { function RootLayout (line 8) | async function RootLayout({ children }: RootLayoutProps) { FILE: app/[locale]/(app)/about/page.tsx type PageProps (line 3) | type PageProps = { function AboutPage (line 7) | async function AboutPage({ params }: PageProps) { FILE: app/[locale]/(app)/auth/(auth-layout)/forgot-password/page.tsx function ForgotPasswordPage (line 3) | async function ForgotPasswordPage() { FILE: app/[locale]/(app)/auth/(auth-layout)/layout.tsx function AuthLayout (line 11) | async function AuthLayout(props: LayoutParams<{}>) { FILE: app/[locale]/(app)/auth/(auth-layout)/reset-password/page.tsx function ResetPasswordPage (line 3) | function ResetPasswordPage() { FILE: app/[locale]/(app)/auth/(auth-layout)/signin/page.tsx function AuthSignInPage (line 3) | async function AuthSignInPage() { FILE: app/[locale]/(app)/auth/(auth-layout)/signup/page.tsx function AuthSignUpPage (line 12) | async function AuthSignUpPage() { FILE: app/[locale]/(app)/auth/error.tsx function RouteError (line 11) | function RouteError({ error, reset }: ErrorParams) { FILE: app/[locale]/(app)/auth/error/page.tsx function AuthErrorPage (line 6) | async function AuthErrorPage({ params }: { params: Promise<{ error: stri... FILE: app/[locale]/(app)/auth/layout.tsx function AuthLayout (line 1) | function AuthLayout({ children }: { children: React.ReactNode }) { FILE: app/[locale]/(app)/auth/signout/page.tsx function AuthSignOutPage (line 1) | function AuthSignOutPage() { FILE: app/[locale]/(app)/auth/verify-email/layout.tsx type RootLayoutProps (line 8) | interface RootLayoutProps { function RootLayout (line 13) | async function RootLayout({ children }: RootLayoutProps) { FILE: app/[locale]/(app)/auth/verify-email/page.tsx function VerifyEmailRootPage (line 5) | function VerifyEmailRootPage() { FILE: app/[locale]/(app)/auth/verify-request/page.tsx type VerifyRequestPageParams (line 7) | interface VerifyRequestPageParams { function AuthVerifyRequestPage (line 12) | async function AuthVerifyRequestPage({ params: _p, searchParams: _s }: V... FILE: app/[locale]/(app)/layout.tsx type RootLayoutProps (line 7) | interface RootLayoutProps { function RootLayout (line 12) | async function RootLayout({ children }: RootLayoutProps) { FILE: app/[locale]/(app)/leaderboard/page.tsx function LeaderboardRootPage (line 13) | async function LeaderboardRootPage({ params }: { params: Promise<{ local... FILE: app/[locale]/(app)/onboarding/layout.tsx function OnboardingLayout (line 3) | async function OnboardingLayout(props: LayoutParams<{}>) { FILE: app/[locale]/(app)/onboarding/page.tsx function OnboardingPage (line 1) | async function OnboardingPage() { FILE: app/[locale]/(app)/page.tsx function generateMetadata (line 9) | async function generateMetadata({ params }: { params: Promise<{ locale: ... function HomePage (line 51) | async function HomePage() { FILE: app/[locale]/(app)/premium/page.tsx function PremiumPage (line 22) | function PremiumPage() { FILE: app/[locale]/(app)/profile/page.tsx function ProfilePage (line 14) | function ProfilePage() { FILE: app/[locale]/(app)/programs/[slug]/page.tsx type ProgramDetailPageProps (line 15) | interface ProgramDetailPageProps { function generateMetadata (line 19) | async function generateMetadata({ params }: ProgramDetailPageProps): Pro... function ProgramDetailPageRoute (line 58) | async function ProgramDetailPageRoute({ params }: ProgramDetailPageProps) { FILE: app/[locale]/(app)/programs/[slug]/session/[sessionSlug]/ProgramSessionClient.tsx type ProgramSessionClientProps (line 23) | interface ProgramSessionClientProps { function ProgramSessionClient (line 31) | function ProgramSessionClient({ program, week, session, isAuthenticated,... FILE: app/[locale]/(app)/programs/[slug]/session/[sessionSlug]/page.tsx type SessionDetailPageProps (line 17) | interface SessionDetailPageProps { function generateMetadata (line 21) | async function generateMetadata({ params }: SessionDetailPageProps): Pro... function SessionDetailPage (line 86) | async function SessionDetailPage({ params }: SessionDetailPageProps) { FILE: app/[locale]/(app)/programs/page.tsx function ProgramsRootPage (line 13) | async function ProgramsRootPage({ params }: { params: Promise<{ locale: ... FILE: app/[locale]/(app)/statistics/page.tsx function StatisticsPage (line 7) | async function StatisticsPage() { FILE: app/[locale]/(app)/tools/bmi-calculator/bmi-calculator.utils.ts type UnitSystem (line 3) | type UnitSystem = "metric" | "imperial"; type BmiData (line 5) | interface BmiData { type BmiResult (line 11) | interface BmiResult { type BmiCategory (line 26) | type BmiCategory = type HealthRisk (line 36) | type HealthRisk = "low" | "normal" | "increased" | "high" | "very_high" ... function calculateBmi (line 38) | function calculateBmi(data: BmiData, t: TFunction): BmiResult { function getBmiCategory (line 92) | function getBmiCategory(bmi: number): BmiCategory { function getHealthRisk (line 103) | function getHealthRisk(category: BmiCategory): HealthRisk { function getRecommendations (line 126) | function getRecommendations(category: BmiCategory, t: TFunction): string... function getBmiRange (line 197) | function getBmiRange(category: BmiCategory): { min: number; max: number } { function calculateIdealWeight (line 220) | function calculateIdealWeight(heightInMeters: number): { min: number; ma... function convertHeight (line 231) | function convertHeight(height: number, fromUnit: UnitSystem, toUnit: Uni... function convertWeight (line 241) | function convertWeight(weight: number, fromUnit: UnitSystem, toUnit: Uni... function getBmiPrimeCategory (line 253) | function getBmiPrimeCategory(bmiPrime: number): string { function getPonderalIndexCategory (line 264) | function getPonderalIndexCategory(pi: number): string { function getHealthRisks (line 271) | function getHealthRisks(_category: BmiCategory, t: TFunction): { overwei... FILE: app/[locale]/(app)/tools/bmi-calculator/page.tsx function generateMetadata (line 12) | async function generateMetadata({ params }: { params: Promise<{ locale: ... function BmiCalculatorPage (line 69) | async function BmiCalculatorPage({ params }: { params: Promise<{ locale:... FILE: app/[locale]/(app)/tools/bmi-calculator/shared/BmiCalculatorClient.tsx function BmiCalculatorClient (line 20) | function BmiCalculatorClient() { FILE: app/[locale]/(app)/tools/bmi-calculator/shared/components/BmiEducationalContent.tsx function BmiEducationalContent (line 9) | function BmiEducationalContent() { FILE: app/[locale]/(app)/tools/bmi-calculator/shared/components/BmiHeightInput.tsx type BmiHeightInputProps (line 8) | interface BmiHeightInputProps { function BmiHeightInput (line 14) | function BmiHeightInput({ value, unit, onChange }: BmiHeightInputProps) { FILE: app/[locale]/(app)/tools/bmi-calculator/shared/components/BmiResultsDisplay.tsx type BmiResultsDisplayProps (line 9) | interface BmiResultsDisplayProps { function BmiResultsDisplay (line 13) | function BmiResultsDisplay({ result }: BmiResultsDisplayProps) { FILE: app/[locale]/(app)/tools/bmi-calculator/shared/components/BmiUnitSelector.tsx type BmiUnitSelectorProps (line 8) | interface BmiUnitSelectorProps { function BmiUnitSelector (line 13) | function BmiUnitSelector({ value, onChange }: BmiUnitSelectorProps) { FILE: app/[locale]/(app)/tools/bmi-calculator/shared/components/BmiWeightInput.tsx type BmiWeightInputProps (line 8) | interface BmiWeightInputProps { function BmiWeightInput (line 14) | function BmiWeightInput({ value, unit, onChange }: BmiWeightInputProps) { FILE: app/[locale]/(app)/tools/bmi-calculator/shared/components/MathEquation.tsx type MathEquationProps (line 3) | interface MathEquationProps { function MathEquation (line 9) | function MathEquation({ equation, display = false, className = "" }: Mat... type FormulaCardProps (line 21) | interface FormulaCardProps { function FormulaCard (line 29) | function FormulaCard({ title, equation, example, description, className ... function createFraction (line 55) | function createFraction(numerator: string, denominator: string): string { function createSuperscript (line 65) | function createSuperscript(base: string, exponent: string): string { function createSubscript (line 70) | function createSubscript(base: string, subscript: string): string { FILE: app/[locale]/(app)/tools/calorie-calculator/CalorieCalculatorHub.tsx type CalculatorFormula (line 11) | interface CalculatorFormula { function CalorieCalculatorHub (line 106) | function CalorieCalculatorHub() { FILE: app/[locale]/(app)/tools/calorie-calculator/calorie-calculator-comparison/CalorieCalculatorComparison.tsx type FormulaResult (line 24) | interface FormulaResult { function CalorieCalculatorComparison (line 35) | function CalorieCalculatorComparison() { FILE: app/[locale]/(app)/tools/calorie-calculator/calorie-calculator-comparison/page.tsx function generateMetadata (line 14) | async function generateMetadata({ params }: { params: Promise<{ locale: ... function CalorieCalculatorComparisonPage (line 46) | async function CalorieCalculatorComparisonPage({ params }: { params: Pro... FILE: app/[locale]/(app)/tools/calorie-calculator/calorie-calculator.utils.ts type Gender (line 2) | type Gender = "male" | "female"; type UnitSystem (line 3) | type UnitSystem = "metric" | "imperial"; type ActivityLevel (line 4) | type ActivityLevel = "sedentary" | "light" | "moderate" | "active" | "ve... type Goal (line 5) | type Goal = "lose_fast" | "lose_slow" | "maintain" | "gain_slow" | "gain... type CalorieCalculatorInputs (line 7) | interface CalorieCalculatorInputs { type CalorieResults (line 17) | interface CalorieResults { constant ACTIVITY_MULTIPLIERS (line 27) | const ACTIVITY_MULTIPLIERS: Record = { constant GOAL_ADJUSTMENTS (line 36) | const GOAL_ADJUSTMENTS: Record = { function convertToMetric (line 47) | function convertToMetric(inputs: CalorieCalculatorInputs): { function calculateBMR (line 70) | function calculateBMR(inputs: CalorieCalculatorInputs): number { function calculateMacros (line 86) | function calculateMacros(targetCalories: number): { function calculateTDEE (line 106) | function calculateTDEE(inputs: CalorieCalculatorInputs): CalorieResults { FILE: app/[locale]/(app)/tools/calorie-calculator/cunningham-calculator/page.tsx function generateMetadata (line 15) | async function generateMetadata({ params }: { params: Promise<{ locale: ... function CunninghamCalculatorPage (line 46) | async function CunninghamCalculatorPage({ params }: { params: Promise<{ ... FILE: app/[locale]/(app)/tools/calorie-calculator/harris-benedict-calculator/page.tsx function generateMetadata (line 15) | async function generateMetadata({ params }: { params: Promise<{ locale: ... function HarrisBenedictCalculatorPage (line 45) | async function HarrisBenedictCalculatorPage({ params }: { params: Promis... FILE: app/[locale]/(app)/tools/calorie-calculator/katch-mcardle-calculator/page.tsx function generateMetadata (line 15) | async function generateMetadata({ params }: { params: Promise<{ locale: ... function KatchMcArdleCalculatorPage (line 46) | async function KatchMcArdleCalculatorPage({ params }: { params: Promise<... FILE: app/[locale]/(app)/tools/calorie-calculator/mifflin-st-jeor-calculator/page.tsx function generateMetadata (line 16) | async function generateMetadata({ params }: { params: Promise<{ locale: ... function MifflinStJeorCalculatorPage (line 46) | async function MifflinStJeorCalculatorPage({ params }: { params: Promise... FILE: app/[locale]/(app)/tools/calorie-calculator/oxford-calculator/page.tsx function generateMetadata (line 15) | async function generateMetadata({ params }: { params: Promise<{ locale: ... function OxfordCalculatorPage (line 46) | async function OxfordCalculatorPage({ params }: { params: Promise<{ loca... FILE: app/[locale]/(app)/tools/calorie-calculator/page.tsx function generateMetadata (line 10) | async function generateMetadata({ params }: { params: Promise<{ locale: ... function CalorieCalculatorPage (line 41) | async function CalorieCalculatorPage({ params }: { params: Promise<{ loc... FILE: app/[locale]/(app)/tools/calorie-calculator/shared/CalorieCalculatorClient.tsx type CalorieCalculatorClientProps (line 25) | interface CalorieCalculatorClientProps { function CalorieCalculatorClient (line 29) | function CalorieCalculatorClient({ config }: CalorieCalculatorClientProp... FILE: app/[locale]/(app)/tools/calorie-calculator/shared/calorie-formulas.utils.ts type Gender (line 3) | type Gender = "male" | "female"; type UnitSystem (line 4) | type UnitSystem = "metric" | "imperial"; type ActivityLevel (line 5) | type ActivityLevel = "sedentary" | "light" | "moderate" | "active" | "ve... type Goal (line 6) | type Goal = "lose_fast" | "lose_slow" | "maintain" | "gain_slow" | "gain... type CalorieCalculatorInputs (line 8) | interface CalorieCalculatorInputs { type CalorieResults (line 19) | interface CalorieResults { constant ACTIVITY_MULTIPLIERS (line 29) | const ACTIVITY_MULTIPLIERS: Record = { constant GOAL_ADJUSTMENTS (line 38) | const GOAL_ADJUSTMENTS: Record = { function convertToMetric (line 47) | function convertToMetric(inputs: CalorieCalculatorInputs): { function calculateMacros (line 61) | function calculateMacros(targetCalories: number): { function calculateMifflinStJeor (line 78) | function calculateMifflinStJeor(inputs: CalorieCalculatorInputs): number { function calculateHarrisBenedict (line 86) | function calculateHarrisBenedict(inputs: CalorieCalculatorInputs): number { function calculateKatchMcArdle (line 97) | function calculateKatchMcArdle(inputs: CalorieCalculatorInputs): number { function calculateCunningham (line 109) | function calculateCunningham(inputs: CalorieCalculatorInputs): number { function calculateOxford (line 121) | function calculateOxford(inputs: CalorieCalculatorInputs): number { function calculateCalories (line 132) | function calculateCalories( FILE: app/[locale]/(app)/tools/calorie-calculator/shared/components/ActivityLevelSelector.tsx type ActivityLevelSelectorProps (line 9) | interface ActivityLevelSelectorProps { constant ACTIVITY_LEVELS (line 14) | const ACTIVITY_LEVELS: ActivityLevel[] = ["sedentary", "light", "moderat... function ActivityLevelSelector (line 16) | function ActivityLevelSelector({ value, onChange }: ActivityLevelSelecto... FILE: app/[locale]/(app)/tools/calorie-calculator/shared/components/AgeInput.tsx type AgeInputProps (line 7) | interface AgeInputProps { function AgeInput (line 12) | function AgeInput({ value, onChange }: AgeInputProps) { FILE: app/[locale]/(app)/tools/calorie-calculator/shared/components/BodyFatInput.tsx type BodyFatInputProps (line 7) | interface BodyFatInputProps { function BodyFatInput (line 12) | function BodyFatInput({ value, onChange }: BodyFatInputProps) { FILE: app/[locale]/(app)/tools/calorie-calculator/shared/components/FAQSection.tsx function FAQSection (line 8) | function FAQSection() { FILE: app/[locale]/(app)/tools/calorie-calculator/shared/components/GenderSelector.tsx type GenderSelectorProps (line 9) | interface GenderSelectorProps { function GenderSelector (line 14) | function GenderSelector({ value, onChange }: GenderSelectorProps) { FILE: app/[locale]/(app)/tools/calorie-calculator/shared/components/GoalSelector.tsx type GoalSelectorProps (line 9) | interface GoalSelectorProps { constant GOALS (line 14) | const GOALS: Goal[] = ["lose_fast", "lose_slow", "maintain", "gain_slow"... function GoalSelector (line 16) | function GoalSelector({ value, onChange }: GoalSelectorProps) { FILE: app/[locale]/(app)/tools/calorie-calculator/shared/components/HeightInput.tsx type HeightInputProps (line 8) | interface HeightInputProps { function HeightInput (line 14) | function HeightInput({ value, unit, onChange }: HeightInputProps) { FILE: app/[locale]/(app)/tools/calorie-calculator/shared/components/InfoButton.tsx type InfoButtonProps (line 8) | interface InfoButtonProps { function InfoButton (line 13) | function InfoButton({ onClick, tooltip }: InfoButtonProps) { FILE: app/[locale]/(app)/tools/calorie-calculator/shared/components/InfoModal.tsx type InfoModalProps (line 6) | interface InfoModalProps { function InfoModal (line 13) | function InfoModal({ isOpen, onClose, title, content }: InfoModalProps) { FILE: app/[locale]/(app)/tools/calorie-calculator/shared/components/ResultsDisplay.tsx type ResultsDisplayProps (line 13) | interface ResultsDisplayProps { function ResultsDisplay (line 17) | function ResultsDisplay({ results }: ResultsDisplayProps) { FILE: app/[locale]/(app)/tools/calorie-calculator/shared/components/UnitSelector.tsx type UnitSelectorProps (line 9) | interface UnitSelectorProps { function UnitSelector (line 14) | function UnitSelector({ value, onChange }: UnitSelectorProps) { FILE: app/[locale]/(app)/tools/calorie-calculator/shared/components/WeightInput.tsx type WeightInputProps (line 8) | interface WeightInputProps { function WeightInput (line 14) | function WeightInput({ value, unit, onChange }: WeightInputProps) { FILE: app/[locale]/(app)/tools/calorie-calculator/shared/types/index.ts type CalculatorFormula (line 2) | type CalculatorFormula = "mifflin" | "harris" | "katch" | "cunningham" |... type CalculatorConfig (line 4) | interface CalculatorConfig { FILE: app/[locale]/(app)/tools/heart-rate-zones/lib/utils.ts type HeartRateZone (line 3) | interface HeartRateZone { type HeartRateResults (line 13) | interface HeartRateResults { function calculateHeartRateZones (line 18) | function calculateHeartRateZones(age: number, t: TFunction): HeartRateRe... FILE: app/[locale]/(app)/tools/heart-rate-zones/page.tsx function generateMetadata (line 17) | async function generateMetadata({ params }: { params: Promise<{ locale: ... constant DEFAULT_AGE (line 53) | const DEFAULT_AGE = 30; function HeartRateZonesPage (line 54) | async function HeartRateZonesPage({ params }: { params: Promise<{ locale... FILE: app/[locale]/(app)/tools/heart-rate-zones/seo/config.ts constant HEART_RATE_ZONES_SEO (line 4) | const HEART_RATE_ZONES_SEO: Record< FILE: app/[locale]/(app)/tools/heart-rate-zones/seo/page-content.ts type PageContent (line 3) | interface PageContent { constant HEART_RATE_ZONES_CONTENT (line 8) | const HEART_RATE_ZONES_CONTENT: Record = { FILE: app/[locale]/(app)/tools/heart-rate-zones/ui/HeartRateZonesCalculatorClient.tsx type SimpleHeartRateFormData (line 17) | type SimpleHeartRateFormData = z.infer; type HeartRateZone (line 19) | interface HeartRateZone { type HeartRateResults (line 29) | interface HeartRateResults { type SEOFriendlyHeartRateCalculatorProps (line 34) | interface SEOFriendlyHeartRateCalculatorProps { function HeartRateZonesCalculatorClient (line 39) | function HeartRateZonesCalculatorClient({ defaultAge = 30, defaultResult... FILE: app/[locale]/(app)/tools/heart-rate-zones/ui/components/EducationalContent.tsx function EducationalContent (line 8) | function EducationalContent() { FILE: app/[locale]/(app)/tools/heart-rate-zones/ui/components/EducationalContentServer.tsx function EducationalContentServer (line 6) | async function EducationalContentServer() { FILE: app/[locale]/(app)/tools/heart-rate-zones/ui/components/FAQAccordion.tsx type FAQItem (line 5) | interface FAQItem { type FAQAccordionProps (line 10) | interface FAQAccordionProps { function FAQAccordion (line 14) | function FAQAccordion({ items }: FAQAccordionProps) { FILE: app/[locale]/(app)/tools/heart-rate-zones/ui/components/SEOOptimizedContentServer.tsx function SEOOptimizedContentServer (line 10) | async function SEOOptimizedContentServer() { FILE: app/[locale]/(app)/tools/heart-rate-zones/ui/components/ScrollToTopButton.tsx type ScrollToTopButtonProps (line 7) | interface ScrollToTopButtonProps { function ScrollToTopButton (line 11) | function ScrollToTopButton({ text }: ScrollToTopButtonProps) { FILE: app/[locale]/(app)/tools/page.tsx type FitnessTool (line 11) | interface FitnessTool { function generateMetadata (line 66) | async function generateMetadata(): Promise { function ToolsPage (line 76) | async function ToolsPage() { FILE: app/[locale]/@modal/(.)auth/login/page.tsx function LoginModal (line 4) | function LoginModal() { FILE: app/[locale]/layout.tsx function generateMetadata (line 26) | async function generateMetadata({ params }: { params: Promise<{ locale: ... type RootLayoutProps (line 220) | interface RootLayoutProps { function RootLayout (line 225) | async function RootLayout({ params, children }: RootLayoutProps) { FILE: app/[locale]/manifest.json/route.ts function GET (line 5) | async function GET(request: NextRequest, { params }: { params: Promise<{... FILE: app/[locale]/not-found.tsx function NotFoundPage (line 3) | function NotFoundPage() { FILE: app/[locale]/providers.tsx function LocaleDetector (line 19) | function LocaleDetector() { FILE: app/ads.txt/route.ts function GET (line 3) | async function GET() { FILE: app/api/analytics/premium/route.ts function POST (line 11) | async function POST(request: NextRequest) { FILE: app/api/auth/signup/route.ts function POST (line 15) | async function POST(req: NextRequest) { FILE: app/api/billing/status/route.ts function GET (line 7) | async function GET(request: NextRequest) { FILE: app/api/exercises/[exerciseId]/statistics/one-rep-max/route.ts function calculateOneRepMax (line 18) | function calculateOneRepMax(weight: number, reps: number): number { function GET (line 22) | async function GET(request: NextRequest, { params }: { params: Promise<{... FILE: app/api/exercises/[exerciseId]/statistics/route.ts function GET (line 21) | async function GET( FILE: app/api/exercises/[exerciseId]/statistics/volume/route.ts function getWeekNumber (line 18) | function getWeekNumber(date: Date): string { function getWeekStartDate (line 28) | function getWeekStartDate(date: Date): Date { function GET (line 35) | async function GET(request: NextRequest, { params }: { params: Promise<{... FILE: app/api/exercises/[exerciseId]/statistics/weight-progression/route.ts function GET (line 17) | async function GET(request: NextRequest, { params }: { params: Promise<{... FILE: app/api/exercises/all/route.ts function GET (line 14) | async function GET(request: NextRequest) { FILE: app/api/exercises/route.ts function GET (line 6) | async function GET(req: NextRequest) { FILE: app/api/exercises/shuffle/route.ts function POST (line 13) | async function POST(req: NextRequest) { FILE: app/api/premium/billing-portal/route.ts function POST (line 12) | async function POST(request: NextRequest) { FILE: app/api/premium/checkout/route.ts function POST (line 12) | async function POST(request: NextRequest) { FILE: app/api/premium/plans/route.ts function detectUserRegion (line 9) | function detectUserRegion(request: NextRequest): string { function GET (line 212) | async function GET(request: NextRequest) { FILE: app/api/premium/status/route.ts function GET (line 15) | async function GET(request: NextRequest) { FILE: app/api/programs/[slug]/enroll/route.ts function POST (line 8) | async function POST(req: NextRequest, { params }: { params: Promise<{ sl... function GET (line 52) | async function GET(req: NextRequest, { params }: { params: Promise<{ slu... FILE: app/api/programs/[slug]/progress/route.ts function GET (line 5) | async function GET(request: Request, { params }: { params: Promise<{ slu... FILE: app/api/programs/[slug]/route.ts function GET (line 5) | async function GET(request: Request, { params }: { params: Promise<{ slu... FILE: app/api/programs/[slug]/sessions/[sessionSlug]/route.ts function GET (line 5) | async function GET(request: Request, { params }: { params: Promise<{ slu... FILE: app/api/programs/route.ts function GET (line 5) | async function GET() { FILE: app/api/programs/session-progress/[progressId]/complete/route.ts function POST (line 5) | async function POST(request: NextRequest, { params }: { params: Promise<... FILE: app/api/programs/session-progress/start/route.ts function POST (line 5) | async function POST(request: NextRequest) { FILE: app/api/revenuecat/link-user/route.ts function GET (line 11) | async function GET(request: NextRequest) { FILE: app/api/revenuecat/sync-status/route.ts function POST (line 26) | async function POST(request: NextRequest) { FILE: app/api/revenuecat/webhook/route.ts function verifyWebhookSignature (line 52) | function verifyWebhookSignature(request: Request, body: string, secret: ... function POST (line 65) | async function POST(request: NextRequest) { function handleSubscriptionActive (line 128) | async function handleSubscriptionActive(event: z.infer { FILE: emails/ContactSupportEmail.tsx type ContactSupportEmailProps (line 4) | interface ContactSupportEmailProps { FILE: emails/DeleteAccountEmail.tsx function DeleteAccountEmail (line 7) | function DeleteAccountEmail({ email }: { email: string }) { FILE: emails/ResetPasswordEmail.tsx type ResetPasswordEmailProps (line 8) | interface ResetPasswordEmailProps { FILE: emails/VerifyEmail.tsx type VerifyEmailProps (line 8) | interface VerifyEmailProps { FILE: emails/utils/BaseEmailLayout.tsx type BaseEmailLayoutProps (line 6) | interface BaseEmailLayoutProps { FILE: locales/client.ts type TFunction (line 45) | type TFunction = Awaited>; FILE: locales/types.ts type Locale (line 2) | type Locale = (typeof locales)[number]; FILE: middleware.ts function detectUserLocale (line 6) | function detectUserLocale(request: NextRequest): string { function middleware (line 50) | async function middleware(request: NextRequest) { FILE: nextauth.d.ts type Session (line 5) | interface Session { FILE: prisma/migrations/0_init/migration.sql type "user" (line 35) | CREATE TABLE "user" ( type "user_favorite_exercises" (line 56) | CREATE TABLE "user_favorite_exercises" ( type "session" (line 66) | CREATE TABLE "session" ( type "account" (line 81) | CREATE TABLE "account" ( type "verification" (line 100) | CREATE TABLE "verification" ( type "feedbacks" (line 112) | CREATE TABLE "feedbacks" ( type "exercises" (line 125) | CREATE TABLE "exercises" ( type "exercise_attribute_names" (line 144) | CREATE TABLE "exercise_attribute_names" ( type "exercise_attribute_values" (line 154) | CREATE TABLE "exercise_attribute_values" ( type "exercise_attributes" (line 165) | CREATE TABLE "exercise_attributes" ( type "workout_sessions" (line 177) | CREATE TABLE "workout_sessions" ( type "workout_session_exercises" (line 191) | CREATE TABLE "workout_session_exercises" ( type "workout_sets" (line 201) | CREATE TABLE "workout_sets" ( type "subscription_plans" (line 216) | CREATE TABLE "subscription_plans" ( type "plan_provider_mappings" (line 231) | CREATE TABLE "plan_provider_mappings" ( type "subscriptions" (line 246) | CREATE TABLE "subscriptions" ( type "licenses" (line 263) | CREATE TABLE "licenses" ( type "revenuecat_webhook_events" (line 279) | CREATE TABLE "revenuecat_webhook_events" ( type "programs" (line 300) | CREATE TABLE "programs" ( type "program_coaches" (line 339) | CREATE TABLE "program_coaches" ( type "program_weeks" (line 350) | CREATE TABLE "program_weeks" ( type "program_sessions" (line 371) | CREATE TABLE "program_sessions" ( type "program_session_exercises" (line 401) | CREATE TABLE "program_session_exercises" ( type "program_suggested_sets" (line 417) | CREATE TABLE "program_suggested_sets" ( type "user_program_enrollments" (line 430) | CREATE TABLE "user_program_enrollments" ( type "user_session_progress" (line 445) | CREATE TABLE "user_session_progress" ( type "user" (line 457) | CREATE UNIQUE INDEX "user_email_key" ON "user"("email") type "user_favorite_exercises" (line 460) | CREATE UNIQUE INDEX "user_favorite_exercises_userId_exerciseId_key" ON "... type "session" (line 463) | CREATE UNIQUE INDEX "session_token_key" ON "session"("token") type "exercises" (line 466) | CREATE UNIQUE INDEX "exercises_slug_key" ON "exercises"("slug") type "exercises" (line 469) | CREATE UNIQUE INDEX "exercises_slugEn_key" ON "exercises"("slugEn") type "exercise_attribute_names" (line 472) | CREATE UNIQUE INDEX "exercise_attribute_names_name_key" ON "exercise_att... type "exercise_attribute_values" (line 475) | CREATE UNIQUE INDEX "exercise_attribute_values_attributeNameId_value_key... type "exercise_attributes" (line 478) | CREATE UNIQUE INDEX "exercise_attributes_exerciseId_attributeNameId_attr... type "plan_provider_mappings" (line 481) | CREATE INDEX "plan_provider_mappings_provider_externalId_idx" ON "plan_p... type "plan_provider_mappings" (line 484) | CREATE UNIQUE INDEX "plan_provider_mappings_planId_provider_region_key" ... type "subscriptions" (line 487) | CREATE UNIQUE INDEX "subscriptions_userId_platform_key" ON "subscription... type "licenses" (line 490) | CREATE UNIQUE INDEX "licenses_key_key" ON "licenses"("key") type "revenuecat_webhook_events" (line 493) | CREATE INDEX "revenuecat_webhook_events_appUserId_idx" ON "revenuecat_we... type "revenuecat_webhook_events" (line 496) | CREATE INDEX "revenuecat_webhook_events_eventType_idx" ON "revenuecat_we... type "revenuecat_webhook_events" (line 499) | CREATE INDEX "revenuecat_webhook_events_processed_idx" ON "revenuecat_we... type "revenuecat_webhook_events" (line 502) | CREATE INDEX "revenuecat_webhook_events_eventTimestamp_idx" ON "revenuec... type "programs" (line 505) | CREATE UNIQUE INDEX "programs_slug_key" ON "programs"("slug") type "programs" (line 508) | CREATE UNIQUE INDEX "programs_slugEn_key" ON "programs"("slugEn") type "programs" (line 511) | CREATE UNIQUE INDEX "programs_slugEs_key" ON "programs"("slugEs") type "programs" (line 514) | CREATE UNIQUE INDEX "programs_slugPt_key" ON "programs"("slugPt") type "programs" (line 517) | CREATE UNIQUE INDEX "programs_slugRu_key" ON "programs"("slugRu") type "programs" (line 520) | CREATE UNIQUE INDEX "programs_slugZhCn_key" ON "programs"("slugZhCn") type "program_weeks" (line 523) | CREATE UNIQUE INDEX "program_weeks_programId_weekNumber_key" ON "program... type "program_sessions" (line 526) | CREATE UNIQUE INDEX "program_sessions_weekId_sessionNumber_key" ON "prog... type "program_sessions" (line 529) | CREATE UNIQUE INDEX "program_sessions_weekId_slug_key" ON "program_sessi... type "program_sessions" (line 532) | CREATE UNIQUE INDEX "program_sessions_weekId_slugEn_key" ON "program_ses... type "program_sessions" (line 535) | CREATE UNIQUE INDEX "program_sessions_weekId_slugEs_key" ON "program_ses... type "program_sessions" (line 538) | CREATE UNIQUE INDEX "program_sessions_weekId_slugPt_key" ON "program_ses... type "program_sessions" (line 541) | CREATE UNIQUE INDEX "program_sessions_weekId_slugRu_key" ON "program_ses... type "program_sessions" (line 544) | CREATE UNIQUE INDEX "program_sessions_weekId_slugZhCn_key" ON "program_s... type "program_session_exercises" (line 547) | CREATE UNIQUE INDEX "program_session_exercises_sessionId_order_key" ON "... type "program_suggested_sets" (line 550) | CREATE UNIQUE INDEX "program_suggested_sets_programSessionExerciseId_set... type "user_program_enrollments" (line 553) | CREATE UNIQUE INDEX "user_program_enrollments_userId_programId_key" ON "... type "user_session_progress" (line 556) | CREATE UNIQUE INDEX "user_session_progress_workoutSessionId_key" ON "use... type "user_session_progress" (line 559) | CREATE UNIQUE INDEX "user_session_progress_enrollmentId_sessionId_key" O... FILE: prisma/migrations_backup/20250101000000_baseline/migration.sql type "user" (line 35) | CREATE TABLE "user" ( type "user_favorite_exercises" (line 56) | CREATE TABLE "user_favorite_exercises" ( type "session" (line 66) | CREATE TABLE "session" ( type "account" (line 81) | CREATE TABLE "account" ( type "verification" (line 100) | CREATE TABLE "verification" ( type "feedbacks" (line 112) | CREATE TABLE "feedbacks" ( type "exercises" (line 125) | CREATE TABLE "exercises" ( type "exercise_attribute_names" (line 144) | CREATE TABLE "exercise_attribute_names" ( type "exercise_attribute_values" (line 154) | CREATE TABLE "exercise_attribute_values" ( type "exercise_attributes" (line 165) | CREATE TABLE "exercise_attributes" ( type "workout_sessions" (line 177) | CREATE TABLE "workout_sessions" ( type "workout_session_exercises" (line 191) | CREATE TABLE "workout_session_exercises" ( type "workout_sets" (line 201) | CREATE TABLE "workout_sets" ( type "subscription_plans" (line 216) | CREATE TABLE "subscription_plans" ( type "plan_provider_mappings" (line 231) | CREATE TABLE "plan_provider_mappings" ( type "subscriptions" (line 246) | CREATE TABLE "subscriptions" ( type "licenses" (line 263) | CREATE TABLE "licenses" ( type "revenuecat_webhook_events" (line 279) | CREATE TABLE "revenuecat_webhook_events" ( type "programs" (line 300) | CREATE TABLE "programs" ( type "program_coaches" (line 339) | CREATE TABLE "program_coaches" ( type "program_weeks" (line 350) | CREATE TABLE "program_weeks" ( type "program_sessions" (line 371) | CREATE TABLE "program_sessions" ( type "program_session_exercises" (line 401) | CREATE TABLE "program_session_exercises" ( type "program_suggested_sets" (line 417) | CREATE TABLE "program_suggested_sets" ( type "user_program_enrollments" (line 430) | CREATE TABLE "user_program_enrollments" ( type "user_session_progress" (line 445) | CREATE TABLE "user_session_progress" ( type "user" (line 457) | CREATE UNIQUE INDEX "user_email_key" ON "user"("email") type "user_favorite_exercises" (line 460) | CREATE UNIQUE INDEX "user_favorite_exercises_userId_exerciseId_key" ON "... type "session" (line 463) | CREATE UNIQUE INDEX "session_token_key" ON "session"("token") type "exercises" (line 466) | CREATE UNIQUE INDEX "exercises_slug_key" ON "exercises"("slug") type "exercises" (line 469) | CREATE UNIQUE INDEX "exercises_slugEn_key" ON "exercises"("slugEn") type "exercise_attribute_names" (line 472) | CREATE UNIQUE INDEX "exercise_attribute_names_name_key" ON "exercise_att... type "exercise_attribute_values" (line 475) | CREATE UNIQUE INDEX "exercise_attribute_values_attributeNameId_value_key... type "exercise_attributes" (line 478) | CREATE UNIQUE INDEX "exercise_attributes_exerciseId_attributeNameId_attr... type "plan_provider_mappings" (line 481) | CREATE INDEX "plan_provider_mappings_provider_externalId_idx" ON "plan_p... type "plan_provider_mappings" (line 484) | CREATE UNIQUE INDEX "plan_provider_mappings_planId_provider_region_key" ... type "subscriptions" (line 487) | CREATE UNIQUE INDEX "subscriptions_userId_platform_key" ON "subscription... type "licenses" (line 490) | CREATE UNIQUE INDEX "licenses_key_key" ON "licenses"("key") type "revenuecat_webhook_events" (line 493) | CREATE INDEX "revenuecat_webhook_events_appUserId_idx" ON "revenuecat_we... type "revenuecat_webhook_events" (line 496) | CREATE INDEX "revenuecat_webhook_events_eventType_idx" ON "revenuecat_we... type "revenuecat_webhook_events" (line 499) | CREATE INDEX "revenuecat_webhook_events_processed_idx" ON "revenuecat_we... type "revenuecat_webhook_events" (line 502) | CREATE INDEX "revenuecat_webhook_events_eventTimestamp_idx" ON "revenuec... type "programs" (line 505) | CREATE UNIQUE INDEX "programs_slug_key" ON "programs"("slug") type "programs" (line 508) | CREATE UNIQUE INDEX "programs_slugEn_key" ON "programs"("slugEn") type "programs" (line 511) | CREATE UNIQUE INDEX "programs_slugEs_key" ON "programs"("slugEs") type "programs" (line 514) | CREATE UNIQUE INDEX "programs_slugPt_key" ON "programs"("slugPt") type "programs" (line 517) | CREATE UNIQUE INDEX "programs_slugRu_key" ON "programs"("slugRu") type "programs" (line 520) | CREATE UNIQUE INDEX "programs_slugZhCn_key" ON "programs"("slugZhCn") type "program_weeks" (line 523) | CREATE UNIQUE INDEX "program_weeks_programId_weekNumber_key" ON "program... type "program_sessions" (line 526) | CREATE UNIQUE INDEX "program_sessions_weekId_sessionNumber_key" ON "prog... type "program_sessions" (line 529) | CREATE UNIQUE INDEX "program_sessions_weekId_slug_key" ON "program_sessi... type "program_sessions" (line 532) | CREATE UNIQUE INDEX "program_sessions_weekId_slugEn_key" ON "program_ses... type "program_sessions" (line 535) | CREATE UNIQUE INDEX "program_sessions_weekId_slugEs_key" ON "program_ses... type "program_sessions" (line 538) | CREATE UNIQUE INDEX "program_sessions_weekId_slugPt_key" ON "program_ses... type "program_sessions" (line 541) | CREATE UNIQUE INDEX "program_sessions_weekId_slugRu_key" ON "program_ses... type "program_sessions" (line 544) | CREATE UNIQUE INDEX "program_sessions_weekId_slugZhCn_key" ON "program_s... type "program_session_exercises" (line 547) | CREATE UNIQUE INDEX "program_session_exercises_sessionId_order_key" ON "... type "program_suggested_sets" (line 550) | CREATE UNIQUE INDEX "program_suggested_sets_programSessionExerciseId_set... type "user_program_enrollments" (line 553) | CREATE UNIQUE INDEX "user_program_enrollments_userId_programId_key" ON "... type "user_session_progress" (line 556) | CREATE UNIQUE INDEX "user_session_progress_workoutSessionId_key" ON "use... type "user_session_progress" (line 559) | CREATE UNIQUE INDEX "user_session_progress_enrollmentId_sessionId_key" O... FILE: prisma/migrations_backup/20250117000000_add_statistics_indexes/migration.sql type "workout_session_exercises" (line 3) | CREATE INDEX "workout_session_exercises_exerciseId_idx" ON "workout_sess... type "workout_sessions" (line 6) | CREATE INDEX "workout_sessions_userId_createdAt_idx" ON "workout_session... type "workout_sets" (line 9) | CREATE INDEX "workout_sets_completed_idx" ON "workout_sets"("completed") type "workout_sessions" (line 12) | CREATE INDEX "workout_sessions_userId_createdAt_desc_idx" ON "workout_se... type "workout_sets" (line 15) | CREATE INDEX "workout_sets_workoutSessionExerciseId_idx" ON "workout_set... FILE: prisma/migrations_backup/20250414120436_init/migration.sql type "user" (line 2) | CREATE TABLE "user" ( type "session" (line 15) | CREATE TABLE "session" ( type "account" (line 29) | CREATE TABLE "account" ( type "verification" (line 48) | CREATE TABLE "verification" ( type "user" (line 60) | CREATE UNIQUE INDEX "user_email_key" ON "user"("email") type "session" (line 63) | CREATE UNIQUE INDEX "session_token_key" ON "session"("token") FILE: prisma/migrations_backup/20250414170807_add_feedbacks/migration.sql type "Feedback" (line 2) | CREATE TABLE "Feedback" ( FILE: prisma/migrations_backup/20250414174246_rename_feedbacks/migration.sql type "feedbacks" (line 14) | CREATE TABLE "feedbacks" ( FILE: prisma/migrations_backup/20250416160303_add_plans/migration.sql type "Plan" (line 2) | CREATE TABLE "Plan" ( type "PlanVariant" (line 12) | CREATE TABLE "PlanVariant" ( type "Subscription" (line 25) | CREATE TABLE "Subscription" ( type "Subscription" (line 40) | CREATE UNIQUE INDEX "Subscription_userId_key" ON "Subscription"("userId") FILE: prisma/migrations_backup/20250416160502_map/migration.sql type "plan" (line 28) | CREATE TABLE "plan" ( type "plan_variant" (line 38) | CREATE TABLE "plan_variant" ( type "subscription" (line 51) | CREATE TABLE "subscription" ( type "subscription" (line 66) | CREATE UNIQUE INDEX "subscription_userId_key" ON "subscription"("userId") FILE: prisma/migrations_backup/20250610182024_add_exercises_and_attributes/migration.sql type "exercises" (line 40) | CREATE TABLE "exercises" ( type "exercise_attribute_names" (line 67) | CREATE TABLE "exercise_attribute_names" ( type "exercise_attribute_values" (line 78) | CREATE TABLE "exercise_attribute_values" ( type "exercise_attributes" (line 90) | CREATE TABLE "exercise_attributes" ( type "exercises" (line 103) | CREATE UNIQUE INDEX "exercises_slug_key" ON "exercises"("slug") type "exercises" (line 106) | CREATE UNIQUE INDEX "exercises_slugEn_key" ON "exercises"("slugEn") type "exercise_attributes" (line 109) | CREATE UNIQUE INDEX "exercise_attributes_exerciseId_attributeNameId_attr... FILE: prisma/migrations_backup/20250610182815_add_exercise_enums/migration.sql type "exercise_attribute_values" (line 28) | CREATE UNIQUE INDEX "exercise_attribute_values_attributeNameId_value_key... FILE: prisma/migrations_backup/20250610184725_simplified_exercises/migration.sql type "exercise_attribute_names" (line 44) | CREATE UNIQUE INDEX "exercise_attribute_names_name_key" ON "exercise_att... type "exercise_attribute_values" (line 47) | CREATE UNIQUE INDEX "exercise_attribute_values_attributeNameId_value_key... FILE: prisma/migrations_backup/20250611190228_convert_text_to_enums/migration.sql type "exercise_attribute_names" (line 38) | CREATE UNIQUE INDEX "exercise_attribute_names_name_key" ON "exercise_att... type "exercise_attribute_values" (line 39) | CREATE UNIQUE INDEX "exercise_attribute_values_attributeNameId_value_key... FILE: prisma/migrations_backup/20250612213546_workout_session_sets/migration.sql type "WorkoutSession" (line 8) | CREATE TABLE "WorkoutSession" ( type "WorkoutSessionExercise" (line 19) | CREATE TABLE "WorkoutSessionExercise" ( type "WorkoutSet" (line 29) | CREATE TABLE "WorkoutSet" ( FILE: prisma/migrations_backup/20250614125347_add_table_maps/migration.sql type "workout_sessions" (line 31) | CREATE TABLE "workout_sessions" ( type "workout_session_exercises" (line 42) | CREATE TABLE "workout_session_exercises" ( type "workout_sets" (line 52) | CREATE TABLE "workout_sets" ( FILE: prisma/migrations_backup/20250623142458_add_billing_and_subscriptions/migration.sql type "app_configuration" (line 24) | CREATE TABLE "app_configuration" ( type "subscription_plans" (line 37) | CREATE TABLE "subscription_plans" ( type "subscriptions" (line 56) | CREATE TABLE "subscriptions" ( type "payments" (line 74) | CREATE TABLE "payments" ( type "licenses" (line 93) | CREATE TABLE "licenses" ( type "webhook_events" (line 109) | CREATE TABLE "webhook_events" ( type "subscription_plans" (line 123) | CREATE UNIQUE INDEX "subscription_plans_revenueCatProductId_key" ON "sub... type "subscriptions" (line 126) | CREATE UNIQUE INDEX "subscriptions_userId_platform_key" ON "subscription... type "payments" (line 129) | CREATE INDEX "payments_processorPaymentId_idx" ON "payments"("processorP... type "licenses" (line 132) | CREATE UNIQUE INDEX "licenses_key_key" ON "licenses"("key") FILE: prisma/migrations_backup/20250623144324_add_webhook_events/migration.sql type "webhook_events" (line 2) | CREATE TABLE "webhook_events" ( type "webhook_events" (line 22) | CREATE INDEX "webhook_events_provider_processed_idx" ON "webhook_events"... type "webhook_events" (line 25) | CREATE INDEX "webhook_events_relatedUserId_idx" ON "webhook_events"("rel... type "webhook_events" (line 28) | CREATE INDEX "webhook_events_createdAt_idx" ON "webhook_events"("created... FILE: prisma/migrations_backup/20250625155932_add_admin/migration.sql type "programs" (line 5) | CREATE TABLE "programs" ( type "program_coaches" (line 39) | CREATE TABLE "program_coaches" ( type "program_weeks" (line 50) | CREATE TABLE "program_weeks" ( type "program_sessions" (line 71) | CREATE TABLE "program_sessions" ( type "program_session_exercises" (line 95) | CREATE TABLE "program_session_exercises" ( type "program_suggested_sets" (line 111) | CREATE TABLE "program_suggested_sets" ( type "user_program_enrollments" (line 124) | CREATE TABLE "user_program_enrollments" ( type "user_session_progress" (line 139) | CREATE TABLE "user_session_progress" ( type "programs" (line 151) | CREATE UNIQUE INDEX "programs_slug_key" ON "programs"("slug") type "program_weeks" (line 154) | CREATE UNIQUE INDEX "program_weeks_programId_weekNumber_key" ON "program... type "program_sessions" (line 157) | CREATE UNIQUE INDEX "program_sessions_weekId_sessionNumber_key" ON "prog... type "program_session_exercises" (line 160) | CREATE UNIQUE INDEX "program_session_exercises_sessionId_order_key" ON "... type "program_suggested_sets" (line 163) | CREATE UNIQUE INDEX "program_suggested_sets_programSessionExerciseId_set... type "user_program_enrollments" (line 166) | CREATE UNIQUE INDEX "user_program_enrollments_userId_programId_key" ON "... type "user_session_progress" (line 169) | CREATE UNIQUE INDEX "user_session_progress_workoutSessionId_key" ON "use... type "user_session_progress" (line 172) | CREATE UNIQUE INDEX "user_session_progress_enrollmentId_sessionId_key" O... FILE: prisma/migrations_backup/20250626102058_add_i18n_slugs_on_program/migration.sql type "program_sessions" (line 44) | CREATE UNIQUE INDEX "program_sessions_weekId_slug_key" ON "program_sessi... type "program_sessions" (line 47) | CREATE UNIQUE INDEX "program_sessions_weekId_slugEn_key" ON "program_ses... type "program_sessions" (line 50) | CREATE UNIQUE INDEX "program_sessions_weekId_slugEs_key" ON "program_ses... type "program_sessions" (line 53) | CREATE UNIQUE INDEX "program_sessions_weekId_slugPt_key" ON "program_ses... type "program_sessions" (line 56) | CREATE UNIQUE INDEX "program_sessions_weekId_slugRu_key" ON "program_ses... type "program_sessions" (line 59) | CREATE UNIQUE INDEX "program_sessions_weekId_slugZhCn_key" ON "program_s... type "programs" (line 62) | CREATE UNIQUE INDEX "programs_slugEn_key" ON "programs"("slugEn") type "programs" (line 65) | CREATE UNIQUE INDEX "programs_slugEs_key" ON "programs"("slugEs") type "programs" (line 68) | CREATE UNIQUE INDEX "programs_slugPt_key" ON "programs"("slugPt") type "programs" (line 71) | CREATE UNIQUE INDEX "programs_slugRu_key" ON "programs"("slugRu") type "programs" (line 74) | CREATE UNIQUE INDEX "programs_slugZhCn_key" ON "programs"("slugZhCn") FILE: prisma/migrations_backup/20250626182857_cleanup_billing_system/migration.sql type "plan_provider_mappings" (line 39) | CREATE TABLE "plan_provider_mappings" ( type "plan_provider_mappings" (line 54) | CREATE INDEX "plan_provider_mappings_provider_externalId_idx" ON "plan_p... type "plan_provider_mappings" (line 57) | CREATE UNIQUE INDEX "plan_provider_mappings_planId_provider_region_key" ... FILE: prisma/migrations_backup/20250707114920_add_user_favorite_exercises/migration.sql type "user_favorite_exercises" (line 2) | CREATE TABLE "user_favorite_exercises" ( type "user_favorite_exercises" (line 12) | CREATE UNIQUE INDEX "user_favorite_exercises_userId_exerciseId_key" ON "... FILE: prisma/migrations_backup/20250709_add_revenuecat_fields/migration.sql type "revenuecat_webhook_events" (line 6) | CREATE TABLE "revenuecat_webhook_events" ( type "revenuecat_webhook_events" (line 27) | CREATE INDEX "revenuecat_webhook_events_appUserId_idx" ON "revenuecat_we... type "revenuecat_webhook_events" (line 28) | CREATE INDEX "revenuecat_webhook_events_eventType_idx" ON "revenuecat_we... type "revenuecat_webhook_events" (line 29) | CREATE INDEX "revenuecat_webhook_events_processed_idx" ON "revenuecat_we... type "revenuecat_webhook_events" (line 30) | CREATE INDEX "revenuecat_webhook_events_eventTimestamp_idx" ON "revenuec... FILE: public/sw.js constant CACHE_NAME (line 1) | const CACHE_NAME = "1.2.5"; FILE: scripts/check-pricing-config.ts function checkPricingConfig (line 7) | async function checkPricingConfig() { FILE: scripts/import-exercises-with-attributes.ts type ExerciseAttributeCSVRow (line 9) | interface ExerciseAttributeCSVRow { function cleanValue (line 25) | function cleanValue(value: string): string | null { function groupExercisesByOriginalId (line 30) | function groupExercisesByOriginalId(rows: ExerciseAttributeCSVRow[]) { function ensureAttributeNameExists (line 65) | async function ensureAttributeNameExists(name: ExerciseAttributeNameEnum) { function normalizeAttributeValue (line 79) | function normalizeAttributeValue(value: string): ExerciseAttributeValueE... function ensureAttributeValueExists (line 88) | async function ensureAttributeValueExists(attributeNameId: string, value... function importExercisesFromCSV (line 108) | async function importExercisesFromCSV(filePath: string) { function main (line 205) | async function main() { FILE: scripts/seed-leaderboard-data.ts function seedLeaderboardData (line 10) | async function seedLeaderboardData() { FILE: scripts/seed-multi-region-plans.ts type RegionPricing (line 9) | interface RegionPricing { function seedMultiRegionPlans (line 70) | async function seedMultiRegionPlans() { FILE: scripts/seed-subscription-plans-simple.ts function seedSubscriptionPlans (line 13) | async function seedSubscriptionPlans() { FILE: scripts/seed-workout-data-advanced.ts constant USER_ID (line 4) | const USER_ID = "bwZuBQO4cJgBX6NiZaXgv81vKfgBQcFe"; constant BENCH_PRESS_ID (line 5) | const BENCH_PRESS_ID = "cmbw9xso904p69kv1vwuadhx6"; type WorkoutPattern (line 7) | interface WorkoutPattern { type ExercisePattern (line 13) | interface ExercisePattern { type SetPattern (line 19) | interface SetPattern { function seedAdvancedWorkoutData (line 63) | async function seedAdvancedWorkoutData(weeksToGenerate: number = 12, sta... FILE: src/components/ads/AdBlockerForPremium.tsx function AdBlockerForPremium (line 7) | function AdBlockerForPremium() { FILE: src/components/ads/AdPlaceholder.tsx type AdPlaceholderProps (line 1) | interface AdPlaceholderProps { function AdPlaceholder (line 7) | function AdPlaceholder({ width, height, type = "Ad" }: AdPlaceholderProp... FILE: src/components/ads/AdSenseAutoAds.tsx type Window (line 8) | interface Window { function AdSenseAutoAds (line 13) | function AdSenseAutoAds() { FILE: src/components/ads/AdWrapper.tsx type AdWrapperProps (line 8) | interface AdWrapperProps { function AdWrapper (line 14) | function AdWrapper({ children, fallback = null, forceShow = false }: AdW... FILE: src/components/ads/EzoicAd.tsx type EzoicAdProps (line 5) | interface EzoicAdProps { type Window (line 11) | interface Window { function EzoicAd (line 19) | function EzoicAd({ placementId, className = "" }: EzoicAdProps) { FILE: src/components/ads/GoogleAdSense.tsx type GoogleAdSenseProps (line 5) | interface GoogleAdSenseProps { type Window (line 15) | interface Window { function GoogleAdSense (line 20) | function GoogleAdSense({ FILE: src/components/ads/HorizontalAdBanner.tsx type HorizontalAdBannerProps (line 10) | interface HorizontalAdBannerProps { function HorizontalAdBanner (line 15) | function HorizontalAdBanner({ adSlot, ezoicPlacementId }: HorizontalAdBa... FILE: src/components/ads/HorizontalBottomBanner.tsx type HorizontalBottomBannerProps (line 5) | interface HorizontalBottomBannerProps { function HorizontalBottomBanner (line 10) | function HorizontalBottomBanner({ adSlot, ezoicPlacementId }: Horizontal... FILE: src/components/ads/HorizontalTopBanner.tsx type HorizontalTopBannerProps (line 3) | interface HorizontalTopBannerProps { function HorizontalTopBanner (line 8) | function HorizontalTopBanner({ adSlot, ezoicPlacementId }: HorizontalTop... FILE: src/components/ads/InArticle.tsx function InArticle (line 7) | function InArticle({ adSlot }: { adSlot: string }) { FILE: src/components/ads/ResponsiveAdBanner.tsx type ResponsiveAdBannerProps (line 9) | interface ResponsiveAdBannerProps { function ResponsiveAdBanner (line 13) | function ResponsiveAdBanner({ adSlot }: ResponsiveAdBannerProps) { FILE: src/components/ads/VerticalAdBanner.tsx type VerticalAdBannerProps (line 8) | interface VerticalAdBannerProps { function VerticalAdBanner (line 14) | function VerticalAdBanner({ adSlot, ezoicPlacementId, position = "left" ... FILE: src/components/ads/VerticalLeftBanner.tsx function VerticalLeftBanner (line 5) | function VerticalLeftBanner() { FILE: src/components/ads/VerticalRightBanner.tsx function VerticalRightBanner (line 5) | function VerticalRightBanner() { FILE: src/components/ads/nutripure-affiliate-banner.tsx type NutripureAffiliateBannerProps (line 38) | interface NutripureAffiliateBannerProps { function NutripureAffiliateBanner (line 43) | function NutripureAffiliateBanner({ context = "general", position = "mid... FILE: src/components/premium/RemoveAdsText.tsx function RemoveAdsText (line 8) | function RemoveAdsText() { FILE: src/components/pwa/ServiceWorkerRegistration.tsx function ServiceWorkerRegistration (line 5) | function ServiceWorkerRegistration() { FILE: src/components/seo/SEOHead.tsx type SEOHeadProps (line 9) | interface SEOHeadProps { function generateSEOMetadata (line 35) | function generateSEOMetadata({ type SEOScriptsProps (line 165) | interface SEOScriptsProps extends SEOHeadProps { function SEOScripts (line 171) | function SEOScripts({ FILE: src/components/seo/breadcrumbs.tsx type BreadcrumbItem (line 7) | interface BreadcrumbItem { type BreadcrumbsProps (line 13) | interface BreadcrumbsProps { function Breadcrumbs (line 17) | function Breadcrumbs({ items }: BreadcrumbsProps) { FILE: src/components/seo/duration-badge.tsx type DurationBadgeProps (line 3) | interface DurationBadgeProps { function DurationBadge (line 11) | function DurationBadge({ FILE: src/components/seo/rich-snippet-rating.tsx type RichSnippetRatingProps (line 3) | interface RichSnippetRatingProps { function RichSnippetRating (line 9) | function RichSnippetRating({ rating, reviewCount, className = "" }: Rich... FILE: src/components/seo/session-rich-snippets.tsx type SessionRichSnippetsProps (line 5) | interface SessionRichSnippetsProps { function SessionRichSnippets (line 12) | function SessionRichSnippets({ duration, exerciseCount, totalSets, class... FILE: src/components/svg/BrokenLink.tsx type BrokenLinkIconProps (line 4) | type BrokenLinkIconProps = ComponentPropsWithoutRef<"svg"> & { size?: nu... FILE: src/components/svg/DotPattern.tsx type DotPatternProps (line 5) | type DotPatternProps = ComponentPropsWithoutRef<"div">; FILE: src/components/svg/GoogleSvg.tsx type GoogleSvgProps (line 3) | type GoogleSvgProps = ComponentPropsWithoutRef<"svg"> & { size?: number }; FILE: src/components/svg/LogoSvg.tsx type LogoSvgProps (line 3) | type LogoSvgProps = ComponentPropsWithoutRef<"svg"> & { size?: number }; FILE: src/components/ui/404-page-not-found.tsx function NotFoundPage (line 8) | function NotFoundPage() { FILE: src/components/ui/ToastSonner.tsx type ToasterProps (line 6) | type ToasterProps = React.ComponentProps; FILE: src/components/ui/alert.tsx type AlertProps (line 36) | interface AlertProps extends React.HTMLAttributes, Varia... FILE: src/components/ui/animated-button/ShinyButton.tsx type Props (line 5) | type Props = HTMLAttributes & { FILE: src/components/ui/badge.tsx type BadgeProps (line 43) | interface BadgeProps extends React.HTMLAttributes, Varia... function Badge (line 45) | function Badge({ className, variant, size, ...props }: BadgeProps) { FILE: src/components/ui/bottom-sheet-vaul.tsx type BottomSheetProps (line 10) | interface BottomSheetProps { function BottomSheetVaul (line 21) | function BottomSheetVaul({ FILE: src/components/ui/bottom-sheet.tsx type PhoneDrawerProps (line 37) | interface PhoneDrawerProps { function BottomSheet (line 45) | function BottomSheet({ FILE: src/components/ui/button.tsx type ButtonProps (line 40) | interface ButtonProps extends React.ButtonHTMLAttributes, Varian... FILE: src/components/ui/dialog-stack.tsx type DialogStackContextType (line 10) | type DialogStackContextType = { type DialogStackChildProps (line 30) | type DialogStackChildProps = { FILE: src/components/ui/divider.tsx type DividerProps (line 5) | type DividerProps = ComponentProps<"div">; FILE: src/components/ui/donation-alert.tsx type DonationAlertProps (line 8) | interface DonationAlertProps { FILE: src/components/ui/form.tsx type FormProps (line 16) | type FormProps = Omit = Exclude({ schema, ...formProps }: ... FILE: src/components/ui/input.tsx type InputProps (line 26) | interface InputProps extends React.InputHTMLAttributes... FILE: src/components/ui/iphone-mockup.tsx type IPhoneMockupProps (line 9) | interface IPhoneMockupProps { function IPhoneMockup (line 18) | function IPhoneMockup({ children, className, screenClassName, showNotch ... FILE: src/components/ui/link.tsx type LinkProps (line 8) | interface LinkProps extends ComponentProps { FILE: src/components/ui/local-alert.tsx type LocalAlertProps (line 9) | interface LocalAlertProps { FILE: src/components/ui/moving-border.tsx function Button (line 7) | function Button({ FILE: src/components/ui/next-top-loader.tsx type NextTopLoaderProps (line 6) | type NextTopLoaderProps = { FILE: src/components/ui/pagination.tsx type PaginationLinkProps (line 26) | type PaginationLinkProps = { FILE: src/components/ui/phone-frame-preview.tsx type PhoneFramePreviewProps (line 5) | interface PhoneFramePreviewProps extends React.HTMLAttributes( FILE: src/components/ui/premium-upsell-alert.tsx type PremiumUpsellAlertProps (line 11) | interface PremiumUpsellAlertProps { FILE: src/components/ui/sheet.tsx type SheetContentProps (line 51) | interface SheetContentProps extends React.ComponentPropsWithoutRef { type SimpleSelectProps (line 13) | interface SimpleSelectProps { function SimpleSelect (line 42) | function SimpleSelect({ FILE: src/components/ui/skeleton.tsx type SkeletonProps (line 5) | interface SkeletonProps extends React.HTMLAttributes { function Skeleton (line 11) | function Skeleton({ width, height, rounded = "rounded", className, ...pr... FILE: src/components/ui/sonner.tsx type ToasterProps (line 6) | type ToasterProps = React.ComponentProps; FILE: src/components/ui/star-button.tsx type StarButtonProps (line 5) | interface StarButtonProps { function StarButton (line 13) | function StarButton({ isActive, isLoading, onClick, className, children ... FILE: src/components/ui/textarea.tsx type TextareaProps (line 5) | interface TextareaProps extends React.TextareaHTMLAttributes; type ToastActionElement (line 105) | type ToastActionElement = React.ReactElement; type BrandedToastVariant (line 107) | type BrandedToastVariant = "default" | "success" | "error" | "info" | "w... type BrandedToastOptions (line 132) | interface BrandedToastOptions { function brandedToast (line 155) | function brandedToast(options: BrandedToastOptions) { FILE: src/components/ui/toaster.tsx function Toaster (line 7) | function Toaster() { FILE: src/components/ui/typography.tsx type PolymorphicAsProp (line 8) | type PolymorphicAsProp = { type PolymorphicProps (line 12) | type PolymorphicProps = PropsWithChildren; function Typography (line 55) | function Typography({ FILE: src/components/ui/use-toast.ts constant TOAST_LIMIT (line 8) | const TOAST_LIMIT = 1; constant TOAST_REMOVE_DELAY (line 9) | const TOAST_REMOVE_DELAY = 1000; type ToasterToast (line 11) | type ToasterToast = ToastProps & { function genId (line 31) | function genId() { type ActionType (line 36) | type ActionType = typeof _actionTypes; type Action (line 38) | type Action = type State (line 56) | interface State { function dispatch (line 135) | function dispatch(action: Action) { type Toast (line 142) | type Toast = Omit; function toast (line 144) | function toast({ ...props }: Toast) { function useToast (line 173) | function useToast() { FILE: src/components/ui/workout-lol.tsx type WorkoutLolProps (line 28) | interface WorkoutLolProps extends VariantProps { FILE: src/components/utils/ErrorBoundaries.tsx type Props (line 11) | type Props = { type State (line 18) | type State = { class ErrorBoundary (line 28) | class ErrorBoundary extends Component { method getDerivedStateFromError (line 34) | public static getDerivedStateFromError(error: Error): State { method componentDidCatch (line 40) | public componentDidCatch(error: Error, errorInfo: ErrorInfo) { method render (line 44) | public render() { FILE: src/components/utils/TailwindIndicator.tsx function TailwindIndicator (line 1) | function TailwindIndicator() { FILE: src/entities/exercise/types/exercise.types.ts type BaseExercise (line 6) | interface BaseExercise { type ExerciseAttribute (line 20) | interface ExerciseAttribute { type ExerciseWithAttributes (line 30) | interface ExerciseWithAttributes extends BaseExercise { type SuggestedSet (line 35) | interface SuggestedSet { FILE: src/entities/program-session/types/program-session.types.ts type BaseProgramSession (line 7) | interface BaseProgramSession extends I18nText, I18nSlug { type ProgramWeek (line 17) | interface ProgramWeek extends I18nText { type ProgramExercise (line 26) | interface ProgramExercise extends I18nField<"instructions"> { type ProgramSessionWithExercises (line 36) | interface ProgramSessionWithExercises extends BaseProgramSession { FILE: src/entities/program/types/program.types.ts type BaseProgram (line 7) | interface BaseProgram extends I18nText, I18nSlug { type ProgramReference (line 26) | interface ProgramReference { type ProgramI18nReference (line 33) | interface ProgramI18nReference extends I18nText, I18nSlug { type ProgramCoach (line 38) | interface ProgramCoach { type PublicProgramResponse (line 46) | interface PublicProgramResponse extends BaseProgram { type ProgramDetailResponse (line 51) | interface ProgramDetailResponse extends BaseProgram { type ProgramWeekWithSessions (line 58) | interface ProgramWeekWithSessions extends ProgramWeek { type SessionDetailResponse (line 63) | interface SessionDetailResponse { type ProgramProgressResponse (line 70) | interface ProgramProgressResponse { type SessionProgress (line 89) | interface SessionProgress { FILE: src/entities/user/lib/display-name.ts function displayName (line 3) | function displayName(user: SessionUser): string { function displayFullName (line 12) | function displayFullName({ firstName, lastName }: { firstName: string; l... function displayFirstNameAndFirstLetterLastName (line 16) | function displayFirstNameAndFirstLetterLastName(user: SessionUser): stri... FILE: src/entities/user/model/get-server-session-user.ts class AuthError (line 5) | class AuthError extends Error { method constructor (line 6) | constructor(message: string) { FILE: src/entities/user/model/update-user-locale.ts type UpdateUserLocaleParams (line 8) | interface UpdateUserLocaleParams { function useUpdateUserLocale (line 12) | function useUpdateUserLocale() { FILE: src/entities/user/model/use-auto-locale.ts function useAutoLocale (line 8) | function useAutoLocale() { FILE: src/entities/user/schemas/update-user.schema.ts type UpdateUserInput (line 11) | type UpdateUserInput = z.infer; FILE: src/entities/user/types/session-user.ts type SessionUser (line 5) | interface SessionUser extends Omit; type AddExerciseModalProps (line 32) | interface AddExerciseModalProps { function AddExerciseModal (line 39) | function AddExerciseModal({ open, onOpenChange, sessionId, nextOrder }: ... FILE: src/features/admin/programs/ui/add-session-modal.tsx type SessionFormData (line 38) | type SessionFormData = z.infer; type AddSessionModalProps (line 40) | interface AddSessionModalProps { constant EQUIPMENT_OPTIONS (line 47) | const EQUIPMENT_OPTIONS = [ function AddSessionModal (line 57) | function AddSessionModal({ open, onOpenChange, weekId, nextSessionNumber... FILE: src/features/admin/programs/ui/add-week-modal.tsx type WeekFormData (line 25) | type WeekFormData = z.infer; type AddWeekModalProps (line 27) | interface AddWeekModalProps { function AddWeekModal (line 34) | function AddWeekModal({ open, onOpenChange, programId, nextWeekNumber }:... FILE: src/features/admin/programs/ui/create-program-button.tsx function CreateProgramButton (line 8) | function CreateProgramButton() { FILE: src/features/admin/programs/ui/create-program-form.tsx type ProgramFormData (line 48) | type ProgramFormData = z.infer; type CreateProgramFormProps (line 50) | interface CreateProgramFormProps { constant EQUIPMENT_OPTIONS (line 57) | const EQUIPMENT_OPTIONS = [ constant TYPE_OPTIONS (line 67) | const TYPE_OPTIONS = [ function CreateProgramForm (line 75) | function CreateProgramForm({ currentStep, onStepComplete, onSuccess, onC... FILE: src/features/admin/programs/ui/create-program-modal.tsx type CreateProgramModalProps (line 8) | interface CreateProgramModalProps { constant STEPS (line 13) | const STEPS = [ function CreateProgramModal (line 19) | function CreateProgramModal({ open, onOpenChange }: CreateProgramModalPr... FILE: src/features/admin/programs/ui/delete-program-button.tsx type DeleteProgramButtonProps (line 9) | interface DeleteProgramButtonProps { function DeleteProgramButton (line 14) | function DeleteProgramButton({ programId, programTitle }: DeleteProgramB... FILE: src/features/admin/programs/ui/edit-program-modal.tsx type EditProgramModalProps (line 13) | interface EditProgramModalProps { function EditProgramModal (line 48) | function EditProgramModal({ program, open, onOpenChange }: EditProgramMo... FILE: src/features/admin/programs/ui/edit-session-modal.tsx type SessionFormData (line 39) | type SessionFormData = z.infer; type EditSessionModalProps (line 41) | interface EditSessionModalProps { constant EQUIPMENT_OPTIONS (line 47) | const EQUIPMENT_OPTIONS = [ function EditSessionModal (line 57) | function EditSessionModal({ open, onOpenChange, session }: EditSessionMo... FILE: src/features/admin/programs/ui/edit-sets-modal.tsx type EditSetsModalProps (line 13) | interface EditSetsModalProps { type SetData (line 22) | interface SetData { function EditSetsModal (line 31) | function EditSetsModal({ exercise, open, onOpenChange }: EditSetsModalPr... FILE: src/features/admin/programs/ui/edit-week-modal.tsx type EditWeekModalProps (line 9) | interface EditWeekModalProps { function EditWeekModal (line 30) | function EditWeekModal({ week, open, onOpenChange }: EditWeekModalProps) { FILE: src/features/admin/programs/ui/program-builder.tsx type ProgramBuilderProps (line 14) | interface ProgramBuilderProps { function ProgramBuilder (line 18) | function ProgramBuilder({ program }: ProgramBuilderProps) { FILE: src/features/admin/programs/ui/programs-list.tsx function ProgramsList (line 9) | async function ProgramsList() { FILE: src/features/admin/programs/ui/session-card.tsx type SessionCardProps (line 13) | interface SessionCardProps { function SessionCard (line 17) | function SessionCard({ session }: SessionCardProps) { FILE: src/features/admin/programs/ui/visibility-badge.tsx type VisibilityBadgeProps (line 10) | interface VisibilityBadgeProps { function VisibilityBadge (line 33) | function VisibilityBadge({ programId, currentVisibility }: VisibilityBad... FILE: src/features/admin/programs/ui/week-card.tsx type WeekCardProps (line 11) | interface WeekCardProps { function WeekCard (line 15) | function WeekCard({ week }: WeekCardProps) { FILE: src/features/admin/users/list/ui/users-table.tsx type SortableColumn (line 25) | type SortableColumn = (typeof sortableColumns)[number]; type OrderableColumn (line 28) | type OrderableColumn = (typeof orderableColumns)[number]; type UsersTableProps (line 30) | interface UsersTableProps { function UsersTable (line 34) | function UsersTable({ initialUsers }: UsersTableProps) { FILE: src/features/ads/hooks/useUserSubscription.ts function useUserSubscription (line 5) | function useUserSubscription() { FILE: src/features/auth/forgot-password/forgot-password.schema.ts type ForgotPasswordSchema (line 7) | type ForgotPasswordSchema = z.infer; FILE: src/features/auth/reset-password/model/useResetPassword.ts type UseResetPasswordResult (line 10) | interface UseResetPasswordResult { FILE: src/features/auth/reset-password/schema/reset-password.schema.ts type ResetPasswordFormData (line 18) | type ResetPasswordFormData = z.infer; FILE: src/features/auth/reset-password/ui/reset-password-form.tsx function ResetPasswordForm (line 14) | function ResetPasswordForm() { FILE: src/features/auth/signin/schema/signin.schema.ts type LoginSchema (line 8) | type LoginSchema = z.infer; FILE: src/features/auth/signin/ui/CredentialsLoginForm.tsx function CredentialsLoginForm (line 19) | function CredentialsLoginForm({ className, ...props }: React.ComponentPr... FILE: src/features/auth/signup/schema/signup.schema.ts type SignUpSchema (line 11) | type SignUpSchema = z.infer; FILE: src/features/auth/signup/ui/signup-form.tsx function onSubmit (line 27) | async function onSubmit(values: SignUpSchema) { FILE: src/features/auth/ui/ProviderButton.tsx type ProviderButtonProps (line 22) | type ProviderButtonProps = { FILE: src/features/auth/verify-email/constants.ts constant COUNTDOWN_TIME (line 1) | const COUNTDOWN_TIME = process.env.NODE_ENV === "development" ? 3 : 60; FILE: src/features/consent-banner/ui/consent-banner.tsx function ConsentBanner (line 11) | function ConsentBanner() { FILE: src/features/contact-feedback/model/contact-feedback.schema.ts type ContactFeedbackSchemaType (line 9) | type ContactFeedbackSchemaType = z.infer; FILE: src/features/contact-feedback/ui/contact-feedback-popover.tsx type ContactFeedbackPopoverProps (line 19) | type ContactFeedbackPopoverProps = PropsWithChildren<{}>; FILE: src/features/contact/support/ContactSupportDialog.tsx type ContactSupportDialogProps (line 22) | type ContactSupportDialogProps = PropsWithChildren<{ FILE: src/features/contact/support/contact-support.schema.ts type ContactSupportSchemaType (line 9) | type ContactSupportSchemaType = z.infer; FILE: src/features/dialogs-provider/DialogProvider.tsx type DialogType (line 13) | type DialogType = ConfirmationDialogProps & { type DialogStore (line 17) | type DialogStore = { FILE: src/features/dialogs-provider/DialogProviderDialog.tsx type ConfirmationDialogProps (line 17) | type ConfirmationDialogProps = { FILE: src/features/email/EmailForm.tsx type EmailFormProps (line 17) | type EmailFormProps = { FILE: src/features/email/email.schema.ts type EmailActionSchemaType (line 7) | type EmailActionSchemaType = z.infer; FILE: src/features/layout/BottomNavigation.tsx function BottomNavigation (line 12) | function BottomNavigation() { FILE: src/features/layout/Footer.tsx constant SOCIAL_LINKS (line 12) | const SOCIAL_LINKS = [ FILE: src/features/layout/model/use-sidebar.store.tsx type SidebarState (line 3) | interface SidebarState { FILE: src/features/layout/nav-link.tsx type IProp (line 8) | interface IProp { function NavLink (line 20) | function NavLink({ FILE: src/features/layout/page-heading.tsx type PageHeadingProps (line 4) | type PageHeadingProps = { FILE: src/features/layout/workout-streak-header.tsx constant DEFAULT_STREAK_COUNT (line 17) | const DEFAULT_STREAK_COUNT = 5; type WorkoutStreakHeaderProps (line 22) | interface WorkoutStreakHeaderProps { type DayStreakData (line 31) | interface DayStreakData { type StreakData (line 43) | interface StreakData { function WorkoutStreakHeader (line 59) | function WorkoutStreakHeader({ className, streakCount = DEFAULT_STREAK_C... FILE: src/features/leaderboard/actions/get-top-workout-users.action.ts constant LIMIT_TOP_USERS (line 11) | const LIMIT_TOP_USERS = 20; type LeaderboardPeriod (line 13) | type LeaderboardPeriod = "all-time" | "weekly" | "monthly"; FILE: src/features/leaderboard/hooks/use-top-workout-users.ts type UseTopWorkoutUsersOptions (line 7) | interface UseTopWorkoutUsersOptions { function useTopWorkoutUsers (line 12) | function useTopWorkoutUsers(options: UseTopWorkoutUsersOptions = {}) { FILE: src/features/leaderboard/hooks/use-user-position.ts type UseUserPositionOptions (line 8) | interface UseUserPositionOptions { function useUserPosition (line 14) | function useUserPosition({ userId, period, enabled = true }: UseUserPosi... FILE: src/features/leaderboard/lib/utils.ts constant PARIS_TZ (line 9) | const PARIS_TZ = "Europe/Paris"; type LeaderboardPeriod (line 11) | type LeaderboardPeriod = "all-time" | "weekly" | "monthly"; function getDateRangeForPeriod (line 13) | function getDateRangeForPeriod(period: LeaderboardPeriod): { startDate: ... FILE: src/features/leaderboard/models/types.ts type TopWorkoutUser (line 1) | interface TopWorkoutUser { FILE: src/features/leaderboard/ui/leaderboard-page.tsx function LeaderboardPage (line 15) | function LeaderboardPage() { FILE: src/features/leaderboard/ui/user-leaderboard-position.tsx function UserLeaderboardPosition (line 12) | function UserLeaderboardPosition() { FILE: src/features/premium/ui/conversion-flow-notification.tsx function ConversionFlowNotification (line 9) | function ConversionFlowNotification() { FILE: src/features/premium/ui/feature-comparison-table.tsx type Feature (line 7) | interface Feature { type FeatureCategory (line 13) | interface FeatureCategory { function FeatureComparisonTable (line 18) | function FeatureComparisonTable() { FILE: src/features/premium/ui/premium-upgrade-card.tsx function PremiumUpgradeCard (line 24) | function PremiumUpgradeCard() { FILE: src/features/premium/ui/pricing-faq.tsx function PricingFAQ (line 8) | function PricingFAQ() { FILE: src/features/premium/ui/pricing-hero-section.tsx function PricingHeroSection (line 8) | function PricingHeroSection() { FILE: src/features/premium/ui/pricing-testimonials.tsx type Testimonial (line 7) | interface Testimonial { function PricingTestimonials (line 18) | function PricingTestimonials() { FILE: src/features/programs/actions/complete-program-session.action.ts function completeProgramSession (line 9) | async function completeProgramSession(sessionProgressId: string, workout... FILE: src/features/programs/actions/enroll-program.action.ts function enrollInProgram (line 12) | async function enrollInProgram(programId: string) { FILE: src/features/programs/actions/get-program-by-slug.action.ts type ProgramDetail (line 7) | interface ProgramDetail { function getProgramBySlug (line 79) | async function getProgramBySlug(slug: string): Promise { FILE: src/features/programs/actions/get-session-by-slug.action.ts function getSessionBySlug (line 14) | async function getSessionBySlug( FILE: src/features/programs/actions/get-sitemap-data.action.ts type SitemapProgramData (line 7) | interface SitemapProgramData { function getSitemapData (line 29) | async function getSitemapData(): Promise { FILE: src/features/programs/actions/start-program-session.action.ts function startProgramSession (line 9) | async function startProgramSession(enrollmentId: string, sessionId: stri... FILE: src/features/programs/hooks/use-program-share.ts type UseProgramShareProps (line 8) | interface UseProgramShareProps { function useProgramShare (line 17) | function useProgramShare({ programTitle }: UseProgramShareProps) { FILE: src/features/programs/lib/program-metadata.ts function generateProgramSEOKeywords (line 9) | function generateProgramSEOKeywords(program: ProgramDetail, locale: Loca... FILE: src/features/programs/lib/session-metadata.ts function generateSessionSEOKeywords (line 9) | function generateSessionSEOKeywords(session: ProgramSessionWithExercises... function generateSessionMetadata (line 57) | function generateSessionMetadata(session: ProgramSessionWithExercises, p... FILE: src/features/programs/lib/suggested-sets-helpers.ts type CreateSuggestedSetData (line 3) | interface CreateSuggestedSetData { constant SUGGESTED_SET_TEMPLATES (line 12) | const SUGGESTED_SET_TEMPLATES = { FILE: src/features/programs/lib/translations-mapper.ts function getProgramTitle (line 20) | function getProgramTitle(program: ProgramDetail | PublicProgram | Progra... function getProgramDescription (line 24) | function getProgramDescription(program: ProgramDetail | PublicProgram, l... function getProgramSlug (line 28) | function getProgramSlug(program: ProgramDetail | PublicProgram, locale: ... function getSessionTitle (line 32) | function getSessionTitle( function getSessionDescription (line 39) | function getSessionDescription(session: any, locale: Locale): string { function getSessionSlug (line 43) | function getSessionSlug(session: any, locale: Locale): string { function getExerciseName (line 47) | function getExerciseName(exercise: any, locale: Locale): string { function getExerciseDescription (line 51) | function getExerciseDescription(exercise: any, locale: Locale): string { function getExerciseInstructions (line 55) | function getExerciseInstructions(exercise: any, locale: Locale): string { FILE: src/features/programs/ui/program-card.tsx type ProgramCardProps (line 13) | interface ProgramCardProps { function ProgramCard (line 19) | async function ProgramCard({ program, size = "medium", locale }: Program... FILE: src/features/programs/ui/program-detail-page.tsx type ProgramDetailPageProps (line 45) | interface ProgramDetailPageProps { function ProgramDetailPage (line 50) | function ProgramDetailPage({ program, isAuthenticated }: ProgramDetailPa... FILE: src/features/programs/ui/program-progress.tsx type ProgramProgressProps (line 10) | interface ProgramProgressProps { function ProgramProgress (line 14) | function ProgramProgress({ programId }: ProgramProgressProps) { FILE: src/features/programs/ui/programs-page.tsx type ProgramsPageProps (line 12) | interface ProgramsPageProps { function ProgramsPage (line 16) | async function ProgramsPage({ locale }: ProgramsPageProps) { FILE: src/features/programs/ui/session-access-guard.tsx type SessionAccessGuardProps (line 10) | interface SessionAccessGuardProps { function SessionAccessGuard (line 23) | function SessionAccessGuard({ FILE: src/features/programs/ui/share-button.tsx type ShareButtonProps (line 7) | interface ShareButtonProps { function ShareButton (line 19) | function ShareButton({ FILE: src/features/programs/ui/welcome-modal.tsx type WelcomeModalProps (line 11) | interface WelcomeModalProps { function WelcomeModal (line 21) | function WelcomeModal({ FILE: src/features/release-notes/hooks/use-changelog-notification.ts type UseChangelogNotificationReturn (line 6) | interface UseChangelogNotificationReturn { type ChangelogNotificationConfig (line 23) | interface ChangelogNotificationConfig { function useChangelogNotification (line 32) | function useChangelogNotification(config: ChangelogNotificationConfig = ... FILE: src/features/release-notes/lib/date-utils.ts function isValidISOTimestamp (line 10) | function isValidISOTimestamp(timestamp: string): boolean { function isValidDateString (line 28) | function isValidDateString(dateString: string): boolean { function compareDateStrings (line 53) | function compareDateStrings(date1: string, date2: string): number { function getCurrentISOTimestamp (line 68) | function getCurrentISOTimestamp(): string { FILE: src/features/release-notes/model/changelog-notification.local.ts constant CHANGELOG_NOTIFICATION_STORAGE_KEY (line 5) | const CHANGELOG_NOTIFICATION_STORAGE_KEY = "lastSeenChangelog"; constant RATE_LIMIT_WINDOW (line 8) | const RATE_LIMIT_WINDOW = 1000; function shouldRateLimit (line 14) | function shouldRateLimit(): boolean { function updateRateLimitTimestamp (line 23) | function updateRateLimitTimestamp(): void { function sanitizeTimestamp (line 30) | function sanitizeTimestamp(timestamp: string): string | null { function getLastSeenTimestamp (line 45) | function getLastSeenTimestamp(): string | null { function setLastSeenTimestamp (line 64) | function setLastSeenTimestamp(timestamp: string): void { function getLatestReleaseDate (line 90) | function getLatestReleaseDate(notes: ReleaseNote[]): string | null { function hasNewReleaseNotes (line 106) | function hasNewReleaseNotes(notes: ReleaseNote[], lastSeenTimestamp: str... function markChangelogAsSeen (line 141) | function markChangelogAsSeen(): void { FILE: src/features/release-notes/model/notes.ts type ReleaseNote (line 1) | interface ReleaseNote { FILE: src/features/release-notes/types/notification.ts type ChangelogNotificationConfig (line 4) | interface ChangelogNotificationConfig { type NotificationCheckResult (line 16) | interface NotificationCheckResult { type UseChangelogNotificationReturn (line 30) | interface UseChangelogNotificationReturn { type ChangelogNotificationBadgeProps (line 48) | interface ChangelogNotificationBadgeProps { type EnhancedReleaseNotesDialogProps (line 64) | interface EnhancedReleaseNotesDialogProps { type ChangelogNotificationLocalStorage (line 78) | interface ChangelogNotificationLocalStorage { type DateUtils (line 94) | interface DateUtils { type NotificationErrorType (line 108) | enum NotificationErrorType { class NotificationError (line 119) | class NotificationError extends Error { method constructor (line 120) | constructor( FILE: src/features/release-notes/ui/changelog-notification-badge.tsx type ChangelogNotificationBadgeProps (line 5) | interface ChangelogNotificationBadgeProps { function ChangelogNotificationBadge (line 32) | function ChangelogNotificationBadge({ FILE: src/features/release-notes/ui/release-notes-dialog.tsx type ReleaseNotesDialogProps (line 15) | interface ReleaseNotesDialogProps { function ReleaseNotesDialog (line 24) | function ReleaseNotesDialog({ onOpen, onClose, showNotificationBadge = t... FILE: src/features/statistics/components/ExerciseSelection.tsx method getAllExercises (line 20) | async getAllExercises(params: { page?: number; limit?: number; search?: ... type ExerciseSelectionProps (line 27) | interface ExerciseSelectionProps { constant MUSCLES (line 33) | const MUSCLES = ["CHEST", "BACK", "SHOULDERS", "BICEPS", "TRICEPS", "LEG... FILE: src/features/statistics/components/ExerciseStatisticsTab.tsx type ExerciseStatisticsTabProps (line 19) | interface ExerciseStatisticsTabProps { function ExerciseCharts (line 26) | function ExerciseCharts({ timeframe, exerciseId, unit = "kg", className ... FILE: src/features/statistics/components/ExercisesBrowser.tsx constant MUSCLE_GROUPS (line 45) | const MUSCLE_GROUPS = [ FILE: src/features/statistics/components/OneRepMaxChart.tsx type OneRepMaxChartProps (line 14) | interface OneRepMaxChartProps { function OneRepMaxChart (line 24) | function OneRepMaxChart({ FILE: src/features/statistics/components/StatisticsPreviewOverlay.tsx type StatisticsPreviewOverlayProps (line 10) | interface StatisticsPreviewOverlayProps { FILE: src/features/statistics/components/TimeframeSelector.tsx type TimeframeSelectorProps (line 10) | interface TimeframeSelectorProps { constant TIMEFRAME_OPTIONS (line 16) | const TIMEFRAME_OPTIONS = [ function TimeframeSelector (line 23) | function TimeframeSelector({ selected, onSelect, className }: TimeframeS... FILE: src/features/statistics/components/VolumeChart.tsx type VolumeChartProps (line 12) | interface VolumeChartProps { function VolumeChart (line 19) | function VolumeChart({ data, height = 300, className }: VolumeChartProps) { FILE: src/features/statistics/components/WeightProgressionChart.tsx type WeightProgressionChartProps (line 13) | interface WeightProgressionChartProps { function WeightProgressionChart (line 21) | function WeightProgressionChart({ data, height = 300, unit = "kg", class... FILE: src/features/statistics/hooks/use-chart-theme.ts function useChartTheme (line 3) | function useChartTheme() { FILE: src/features/statistics/hooks/use-exercise-statistics.ts constant STATISTICS_QUERY_KEYS (line 8) | const STATISTICS_QUERY_KEYS = { function fetchWeightProgression (line 20) | async function fetchWeightProgression(exerciseId: string, timeframe: Sta... function fetchOneRepMax (line 33) | async function fetchOneRepMax(exerciseId: string, timeframe: StatisticsT... function fetchVolume (line 44) | async function fetchVolume(exerciseId: string, timeframe: StatisticsTime... function useWeightProgression (line 56) | function useWeightProgression(exerciseId: string, timeframe: StatisticsT... function useOneRepMax (line 67) | function useOneRepMax(exerciseId: string, timeframe: StatisticsTimeframe... function useVolumeData (line 78) | function useVolumeData(exerciseId: string, timeframe: StatisticsTimefram... FILE: src/features/statistics/types/index.ts type ChartDimensions (line 15) | interface ChartDimensions { FILE: src/features/theme/ThemeProviders.tsx function ThemeProvider (line 6) | function ThemeProvider({ children, ...props }: ThemeProviderProps) { FILE: src/features/theme/ThemeToggle.tsx function ThemeToggle (line 8) | function ThemeToggle() { FILE: src/features/theme/ui/ThemeSynchronizer.tsx function ThemeSynchronizer (line 10) | function ThemeSynchronizer() { FILE: src/features/update-password/model/update-password.action.ts function updateUserPassword (line 16) | async function updateUserPassword( FILE: src/features/update-password/ui/password-form.tsx type PasswordFormValues (line 25) | type PasswordFormValues = z.infer; function PasswordForm (line 27) | function PasswordForm() { FILE: src/features/workout-builder/actions/get-exercises.action.ts function shuffleArray (line 11) | function shuffleArray(array: T[]): T[] { FILE: src/features/workout-builder/hooks/use-exercises.ts type UseExercisesProps (line 8) | interface UseExercisesProps { function useExercises (line 14) | function useExercises({ equipment, muscles, enabled = true }: UseExercis... FILE: src/features/workout-builder/hooks/use-favorites-modal.ts type ExerciseWithAttributes (line 8) | interface ExerciseWithAttributes { type MuscleGroup (line 19) | interface MuscleGroup { type UseFavoritesModalProps (line 24) | interface UseFavoritesModalProps { FILE: src/features/workout-builder/hooks/use-sync-favorite-exercises.ts type SyncState (line 10) | interface SyncState { function useSyncFavoriteExercises (line 15) | function useSyncFavoriteExercises() { FILE: src/features/workout-builder/hooks/use-workout-session.ts function useWorkoutSession (line 5) | function useWorkoutSession() { FILE: src/features/workout-builder/hooks/use-workout-stepper.ts function useWorkoutStepper (line 5) | function useWorkoutStepper() { FILE: src/features/workout-builder/model/equipment-config.ts constant EQUIPMENT_CONFIG (line 14) | const EQUIPMENT_CONFIG: EquipmentItem[] = [ function getEquipmentByValue (line 73) | function getEquipmentByValue(value: ExerciseAttributeValueEnum): Equipme... function getEquipmentLabel (line 77) | function getEquipmentLabel(value: ExerciseAttributeValueEnum): string { FILE: src/features/workout-builder/model/favorite-exercises-synchronizer.tsx function FavoriteExercisesSynchronizer (line 9) | function FavoriteExercisesSynchronizer() { FILE: src/features/workout-builder/model/favorite-exercises.local.ts type SyncStatus (line 1) | type SyncStatus = "local" | "synced" | "deleteOnSync"; type LocalFavoriteExercise (line 3) | interface LocalFavoriteExercise { constant FAVORITE_EXERICSES_STORAGE_KEY (line 8) | const FAVORITE_EXERICSES_STORAGE_KEY = "favoriteExercises"; function getAll (line 10) | function getAll(): LocalFavoriteExercise[] { function saveAll (line 20) | function saveAll(favorites: LocalFavoriteExercise[]) { function removeById (line 28) | function removeById(exerciseId: string) { function add (line 46) | function add(exerciseId: string) { FILE: src/features/workout-builder/model/workout-builder.store.ts type WorkoutBuilderState (line 9) | interface WorkoutBuilderState { FILE: src/features/workout-builder/schema/get-exercises.schema.ts type GetExercisesInput (line 10) | type GetExercisesInput = z.infer; FILE: src/features/workout-builder/types/index.ts type WorkoutBuilderState (line 9) | interface WorkoutBuilderState { type WorkoutBuilderStep (line 16) | type WorkoutBuilderStep = 1 | 2 | 3; type StepperStepProps (line 18) | interface StepperStepProps { type EquipmentItem (line 26) | interface EquipmentItem { type WorkoutBuilderExerciseWithAttributes (line 35) | type WorkoutBuilderExerciseWithAttributes = ExerciseWithAttributes & { type ExerciseWithAttributesAndSets (line 39) | type ExerciseWithAttributesAndSets = ExerciseWithAttributes & { type ExercisesByMuscle (line 43) | interface ExercisesByMuscle { FILE: src/features/workout-builder/ui/add-exercise-modal.tsx type AddExerciseModalProps (line 17) | interface AddExerciseModalProps { type ExerciseWithAttributes (line 23) | interface ExerciseWithAttributes { type MuscleGroup (line 34) | interface MuscleGroup { FILE: src/features/workout-builder/ui/equipment-selection.tsx type EquipmentSelectionProps (line 16) | interface EquipmentSelectionProps { type EquipmentCardProps (line 22) | interface EquipmentCardProps { function EquipmentCard (line 28) | function EquipmentCard({ equipment, isSelected, onToggle }: EquipmentCar... function EquipmentSelection (line 120) | function EquipmentSelection({ onToggleEquipment, selectedEquipment }: Eq... FILE: src/features/workout-builder/ui/exercise-card.tsx type ExerciseCardProps (line 18) | interface ExerciseCardProps { function ExerciseCard (line 26) | function ExerciseCard({ exercise, muscle, onShuffle, onPick, onDelete }:... FILE: src/features/workout-builder/ui/exercise-list-item.tsx constant MUSCLE_CONFIGS (line 15) | const MUSCLE_CONFIGS: Record = { type ExerciseListItemProps (line 24) | interface ExerciseListItemProps { FILE: src/features/workout-builder/ui/exercise-pick-modal.tsx type ExercisePickModalProps (line 13) | interface ExercisePickModalProps { function ExercisePickModal (line 21) | function ExercisePickModal({ exercise, muscle, isOpen, onClose, onConfir... FILE: src/features/workout-builder/ui/exercise-video-modal.tsx type ExerciseVideoModalProps (line 17) | interface ExerciseVideoModalProps { function ExerciseVideoModal (line 23) | function ExerciseVideoModal({ open, onOpenChange, exercise }: ExerciseVi... FILE: src/features/workout-builder/ui/exercises-selection.tsx type ExercisesSelectionProps (line 15) | interface ExercisesSelectionProps { FILE: src/features/workout-builder/ui/favorite-button.tsx type FavoriteButtonProps (line 6) | interface FavoriteButtonProps { FILE: src/features/workout-builder/ui/favorite-exercise-button.tsx type FavoriteExerciseButtonProps (line 17) | interface FavoriteExerciseButtonProps { function FavoriteExerciseButton (line 22) | function FavoriteExerciseButton({ exerciseId, className }: FavoriteExerc... FILE: src/features/workout-builder/ui/muscle-selection.tsx type MuscleSelectionProps (line 22) | interface MuscleSelectionProps { function MuscleSelection (line 1207) | function MuscleSelection({ onToggleMuscle, selectedMuscles }: MuscleSele... FILE: src/features/workout-builder/ui/quit-workout-dialog.tsx type QuitWorkoutDialogProps (line 9) | interface QuitWorkoutDialogProps { function QuitWorkoutDialog (line 17) | function QuitWorkoutDialog({ isOpen, onClose, onQuitWithoutSave, exercis... FILE: src/features/workout-builder/ui/stepper-header.tsx type StepperHeaderProps (line 10) | interface StepperHeaderProps { function StepperStep (line 16) | function StepperStep({ function StepperHeader (line 120) | function StepperHeader({ steps, currentStep, onStepClick }: StepperHeade... FILE: src/features/workout-builder/ui/workout-stepper-footer.tsx function WorkoutBuilderFooter (line 7) | function WorkoutBuilderFooter({ FILE: src/features/workout-builder/ui/workout-stepper.tsx function WorkoutStepper (line 33) | function WorkoutStepper() { FILE: src/features/workout-session/hooks/use-donation-modal.ts function useDonationModal (line 5) | function useDonationModal() { FILE: src/features/workout-session/lib/workout-set-labels.ts function getWorkoutSetTypeLabels (line 5) | function getWorkoutSetTypeLabels(t: TFunction): Record NextResponse | string; type MiddlewareFn (line 8) | type MiddlewareFn = (req: NextRequest) => Promise; type CreateHandlerParams (line 10) | type CreateHandlerParams = { type HandlerParams (line 15) | type HandlerParams = { type Callback (line 21) | type Callback = (params: { class CustomZodError (line 29) | class CustomZodError extends Error { method constructor (line 33) | constructor(type: "body" | "params", zodError: ZodError, received?: un... function createSafeHandler (line 41) | function createSafeHandler({ middleware, handleReturnedServerE... FILE: src/shared/api/handlers.ts class HandlerError (line 9) | class HandlerError extends Error { method constructor (line 11) | constructor(message: string, status?: number) { method middleware (line 41) | async middleware() { FILE: src/shared/api/mobile-auth.ts function getMobileCompatibleSession (line 24) | async function getMobileCompatibleSession(req: NextRequest) { function hasValidUser (line 50) | function hasValidUser(session: any): session is { user: { id: string; em... FILE: src/shared/api/mobile-cookie-utils.ts function cleanMobileCookies (line 15) | function cleanMobileCookies(cookieHeader: string): string { FILE: src/shared/api/mobile-safe-actions.ts function getMobileCompatibleUser (line 12) | async function getMobileCompatibleUser() { FILE: src/shared/api/safe-actions.ts class ActionError (line 5) | class ActionError extends Error { method constructor (line 6) | constructor(message: string) { type HandleReturnedServerError (line 11) | type HandleReturnedServerError = (e: Error) => string; FILE: src/shared/config/localized-metadata.ts type SupportedLocale (line 113) | type SupportedLocale = keyof typeof LocalizedMetadata; function getLocalizedMetadata (line 115) | function getLocalizedMetadata(locale: string) { FILE: src/shared/constants/errors.ts constant ERROR_MESSAGES (line 1) | const ERROR_MESSAGES = { FILE: src/shared/constants/placeholders.ts constant PLACEHOLDERS (line 1) | const PLACEHOLDERS = { FILE: src/shared/constants/regexs.ts constant PASSWORD_REGEX (line 1) | const PASSWORD_REGEX = /^(?=.*[A-Za-z])(?=.*\d).{8,}$/; FILE: src/shared/constants/social-platforms.tsx constant SOCIAL_FIELD_PLACEHOLDERS (line 18) | const SOCIAL_FIELD_PLACEHOLDERS: Record = { constant SOCIAL_FIELD_ICONS (line 34) | const SOCIAL_FIELD_ICONS: Record = { FILE: src/shared/constants/statistics.ts constant STATISTICS_TIMEFRAMES (line 1) | const STATISTICS_TIMEFRAMES = { type StatisticsTimeframe (line 8) | type StatisticsTimeframe = typeof STATISTICS_TIMEFRAMES[keyof typeof STA... constant DEFAULT_TIMEFRAME (line 10) | const DEFAULT_TIMEFRAME = STATISTICS_TIMEFRAMES.EIGHT_WEEKS; constant TIMEFRAME_DAYS (line 12) | const TIMEFRAME_DAYS = { constant TIMEFRAME_LABELS (line 19) | const TIMEFRAME_LABELS = { constant STATISTICS_CACHE_TTL (line 27) | const STATISTICS_CACHE_TTL = 3600; constant LOMBARDI_DIVISOR (line 30) | const LOMBARDI_DIVISOR = 30; FILE: src/shared/constants/success.ts constant SUCCESS_MESSAGES (line 1) | const SUCCESS_MESSAGES = { FILE: src/shared/constants/workout-set-types.ts constant AVAILABLE_WORKOUT_SET_TYPES (line 1) | const AVAILABLE_WORKOUT_SET_TYPES = ["TIME", "WEIGHT", "REPS", "BODYWEIG... constant ALL_WORKOUT_SET_TYPES (line 2) | const ALL_WORKOUT_SET_TYPES = ["TIME", "WEIGHT", "REPS", "BODYWEIGHT", "... constant MAX_WORKOUT_SET_COLUMNS (line 3) | const MAX_WORKOUT_SET_COLUMNS = 4; constant WORKOUT_SET_UNITS_TUPLE (line 4) | const WORKOUT_SET_UNITS_TUPLE = ["kg", "lbs"] as const; FILE: src/shared/hooks/use-clipboard.ts type UseClipboardOptions (line 3) | interface UseClipboardOptions { type UseClipboardReturn (line 8) | interface UseClipboardReturn { function useClipboard (line 23) | function useClipboard({ timeout = 1500 }: UseClipboardOptions = {}): Use... FILE: src/shared/hooks/use-premium-plans.ts type PremiumPlan (line 3) | interface PremiumPlan { type PlansResponse (line 14) | interface PlansResponse { function usePremiumPlans (line 26) | function usePremiumPlans() { FILE: src/shared/hooks/useBoolean.ts type UseBooleanReturn (line 3) | interface UseBooleanReturn { function useBoolean (line 11) | function useBoolean(defaultValue?: boolean): UseBooleanReturn { FILE: src/shared/hooks/useIsMobile.ts function useIsMobile (line 5) | function useIsMobile(breakpoint: number = 768) { FILE: src/shared/hooks/useScrollToTop.ts function useScrollToTop (line 8) | function useScrollToTop() { FILE: src/shared/lib/access-control.ts type AccessControlContext (line 6) | interface AccessControlContext { type AccessAction (line 12) | type AccessAction = function getSessionAccess (line 20) | function getSessionAccess(context: AccessControlContext): AccessAction { function canStartSession (line 50) | function canStartSession(context: AccessControlContext): boolean { FILE: src/shared/lib/analytics/server.ts type Props (line 7) | type Props = { FILE: src/shared/lib/attribute-value-translation.ts constant ATTRIBUTE_VALUE_TRANSLATION_KEYS (line 8) | const ATTRIBUTE_VALUE_TRANSLATION_KEYS: Record(value: T | null): T | undefined { FILE: src/shared/lib/i18n-mapper.ts function getI18nField (line 8) | function getI18nField>( function mapI18nFields (line 25) | function mapI18nFields>( FILE: src/shared/lib/locale-slug.ts type SlugData (line 5) | interface SlugData { function getSlugForLocale (line 17) | function getSlugForLocale(slugData: SlugData, locale: string): string { type TitleData (line 37) | interface TitleData { function getTitleForLocale (line 46) | function getTitleForLocale(titleData: TitleData, locale: string): string { FILE: src/shared/lib/location/eu-countries.ts constant EU_COUNTRY_CODES (line 1) | const EU_COUNTRY_CODES = [ FILE: src/shared/lib/location/location.ts function getCountryCode (line 5) | async function getCountryCode() { function isEU (line 11) | async function isEU() { FILE: src/shared/lib/mail/sendEmail.ts type EmailPayload (line 6) | type EmailPayload = { FILE: src/shared/lib/mdx/load-mdx.ts function getLocalizedMdx (line 8) | async function getLocalizedMdx( FILE: src/shared/lib/network/use-network-status.ts function useNetworkStatus (line 4) | function useNetworkStatus() { FILE: src/shared/lib/premium/premium.manager.ts class PremiumManager (line 17) | class PremiumManager { method getAvailablePlans (line 26) | static async getAvailablePlans(provider?: string, region?: string): Pr... method createCheckout (line 83) | static async createCheckout(userId: string, planId: string, provider: ... method processWebhook (line 110) | static async processWebhook(provider: string, payload: any, signature:... method getPlanByInternalId (line 154) | static async getPlanByInternalId(internalId: string, provider: string)... method getPlanByExternalId (line 176) | static async getPlanByExternalId(externalId: string, provider: string)... method createBillingPortal (line 194) | static async createBillingPortal(userId: string, provider: string = "s... method addProvider (line 232) | static addProvider(name: string, provider: PaymentProvider): void { FILE: src/shared/lib/premium/premium.service.ts class PremiumService (line 15) | class PremiumService { method checkUserPremiumStatus (line 19) | static async checkUserPremiumStatus(userId: string): Promise { method getUserRevenueCatId (line 286) | static async getUserRevenueCatId(userId: string): Promise; FILE: src/shared/lib/revenuecat/revenuecat.api.ts type RevenueCatSubscriber (line 10) | interface RevenueCatSubscriber { type RevenueCatApiError (line 67) | interface RevenueCatApiError { class RevenueCatApiClient (line 73) | class RevenueCatApiClient { method constructor (line 77) | constructor() { method getSubscriber (line 87) | async getSubscriber(appUserId: string): Promise { method getLatestExpirationDate (line 175) | async getLatestExpirationDate(appUserId: string): Promise { method getActiveEntitlementIds (line 215) | async getActiveEntitlementIds(appUserId: string): Promise { FILE: src/shared/lib/revenuecat/revenuecat.config.ts class RevenueCatConfig (line 9) | class RevenueCatConfig { method getSecretKey (line 13) | static getSecretKey(): string { method getWebhookSecret (line 24) | static getWebhookSecret(): string { method isConfigured (line 35) | static isConfigured(): boolean { method getApiBaseUrl (line 42) | static getApiBaseUrl(): string { method getApiHeaders (line 49) | static getApiHeaders(): Record { method getWebhookConfig (line 60) | static getWebhookConfig() { method isDevelopment (line 70) | static isDevelopment(): boolean { method isSandbox (line 77) | static isSandbox(): boolean { FILE: src/shared/lib/revenuecat/revenuecat.mapping.ts class RevenueCatMapping (line 10) | class RevenueCatMapping { method getSubscriptionPlanByProductId (line 14) | static async getSubscriptionPlanByProductId(productId: string) { method createOrUpdateProductMapping (line 32) | static async createOrUpdateProductMapping(planId: string, productId: s... method getAllRevenueCatMappings (line 61) | static async getAllRevenueCatMappings() { method getRevenueCatProductId (line 76) | static async getRevenueCatProductId(planId: string, region?: string) { method validateProductId (line 92) | static async validateProductId(productId: string): Promise { method getSubscriptionPlanWithMapping (line 107) | static async getSubscriptionPlanWithMapping(planId: string) { FILE: src/shared/lib/slug.ts function generateSlug (line 12) | function generateSlug(text: string): string { function generateSlugsForAllLanguages (line 44) | function generateSlugsForAllLanguages(titles: { function ensureUniqueSlug (line 65) | function ensureUniqueSlug(baseSlug: string, existingSlugs: string[]): st... FILE: src/shared/lib/structured-data.ts type StructuredDataProps (line 9) | interface StructuredDataProps { function generateStructuredData (line 56) | function generateStructuredData({ function StructuredDataScript (line 696) | function StructuredDataScript({ data }: { data: object }) { FILE: src/shared/lib/utils.ts function cn (line 4) | function cn(...inputs: ClassValue[]) { FILE: src/shared/lib/web-share.ts type ShareData (line 6) | interface ShareData { type ShareResult (line 12) | type ShareResult = { success: true; method: "native" | "clipboard" } | {... function isWebShareSupported (line 17) | function isWebShareSupported(): boolean { function isClipboardSupported (line 24) | function isClipboardSupported(): boolean { function shareContent (line 31) | async function shareContent(data: ShareData): Promise { function getCurrentPageUrl (line 72) | function getCurrentPageUrl(): string { FILE: src/shared/lib/weight-conversion.ts constant WEIGHT_CONVERSION (line 1) | const WEIGHT_CONVERSION = { type WeightUnit (line 6) | type WeightUnit = "kg" | "lbs"; function convertWeight (line 8) | function convertWeight(weight: number, fromUnit: WeightUnit, toUnit: Wei... function formatWeight (line 22) | function formatWeight(weight: number, unit: WeightUnit, decimals: number... function convertVolumeToUnit (line 26) | function convertVolumeToUnit( FILE: src/shared/lib/workout-session/types/workout-session.ts type WorkoutSessionStatus (line 6) | type WorkoutSessionStatus = (typeof workoutSessionStatuses)[number]; type WorkoutSession (line 8) | interface WorkoutSession { FILE: src/shared/lib/workout-session/workout-session.local.ts constant STORAGE_KEY (line 3) | const STORAGE_KEY = "workoutSessions"; constant MAX_SESSIONS (line 4) | const MAX_SESSIONS = 10; constant CURRENT_SESSION_KEY (line 5) | const CURRENT_SESSION_KEY = "currentWorkoutSessionId"; function getAll (line 7) | function getAll(): WorkoutSession[] { function saveAll (line 15) | function saveAll(sessions: WorkoutSession[]) { function getById (line 19) | function getById(id: string): WorkoutSession | undefined { function setCurrent (line 23) | function setCurrent(id: string) { function getCurrent (line 27) | function getCurrent(): string | null { FILE: src/shared/lib/youtube.ts type YouTubeEmbedOptions (line 3) | interface YouTubeEmbedOptions { function getYouTubeEmbedUrl (line 20) | function getYouTubeEmbedUrl(url: string, options: YouTubeEmbedOptions = ... FILE: src/shared/schemas/url.ts type Url (line 4) | type Url = z.infer; FILE: src/shared/types/i18n.types.ts type I18nField (line 4) | type I18nField = { type I18nText (line 19) | type I18nText = I18nField<"title"> & I18nField<"description">; type I18nSlug (line 20) | type I18nSlug = I18nField<"slug">; type I18nName (line 21) | type I18nName = I18nField<"name">; type ExtractLocaleField (line 24) | type ExtractLocaleField, Field extends key... function getLocaleSuffix (line 39) | function getLocaleSuffix(locale: Locale): "En" | "Es" | "Pt" | "Ru" | "Z... FILE: src/shared/types/next.ts type PageParams (line 18) | type PageParams = {}> = { type LayoutParams (line 37) | type LayoutParams = {}> = { type ErrorParams (line 48) | type ErrorParams = { FILE: src/shared/types/premium.types.ts type PremiumStatus (line 5) | interface PremiumStatus { type PremiumProvider (line 14) | type PremiumProvider = "stripe" | "paypal" | "lemonsqueezy" | "revenueca... type PlanType (line 17) | type PlanType = "free" | "supporter" | "premium"; type PremiumPlan (line 20) | interface PremiumPlan { type CheckoutResult (line 36) | interface CheckoutResult { type UserSubscription (line 44) | interface UserSubscription { type FAQItem (line 52) | interface FAQItem { type Testimonial (line 58) | interface Testimonial { type FeatureComparison (line 67) | interface FeatureComparison { FILE: src/shared/types/statistics.types.ts type WeightProgressionPoint (line 6) | interface WeightProgressionPoint { type WeightProgressionResponse (line 11) | interface WeightProgressionResponse { type OneRepMaxPoint (line 19) | interface OneRepMaxPoint { type OneRepMaxResponse (line 24) | interface OneRepMaxResponse { type VolumePoint (line 34) | interface VolumePoint { type VolumeResponse (line 41) | interface VolumeResponse { type ExerciseStatisticsResponse (line 50) | interface ExerciseStatisticsResponse { type StatisticsErrorResponse (line 61) | interface StatisticsErrorResponse { type StatisticsRequestParams (line 69) | interface StatisticsRequestParams { type ExerciseAttribute (line 75) | interface ExerciseAttribute { type ExercisesPaginationResponse (line 87) | interface ExercisesPaginationResponse { type ExercisesListRequestParams (line 99) | interface ExercisesListRequestParams { FILE: src/shared/types/storage.ts type ImageUploader (line 1) | interface ImageUploader { type ImageDeleter (line 5) | interface ImageDeleter { FILE: src/widgets/404.tsx function Page404 (line 6) | async function Page404() { FILE: src/widgets/language-selector/language-selector.tsx function LanguageSelector (line 18) | function LanguageSelector() {