{part.name}
{part.description}
{part.material ? (Material · {part.material}
) : null}import { Link, useParams } from 'react-router-dom';
import { MachineCard } from '@/components/catalogue/MachineCard';
import { MachineThumbnail } from '@/components/catalogue/MachineThumbnail';
import { Badge } from '@/components/ui/Badge';
import { Button } from '@/components/ui/Button';
import { Panel } from '@/components/ui/Panel';
import { appConfig } from '@/config/appConfig';
import { getMachineBySlug, getRelatedMachines } from '@/data/machineRegistry';
import { usePageMetadata } from '@/hooks/usePageMetadata';
import { usePreferencesStore } from '@/store/preferencesStore';
import { difficultyDescription, difficultyToTone, partCountLabel, phaseLabel } from '@/utils/format';
import { NotFoundPage } from '@/pages/NotFoundPage';
export function MachineDetailPage() {
const { machineSlug } = useParams<'machineSlug'>();
const machine = getMachineBySlug(machineSlug);
usePageMetadata({
title: machine ? machine.title : 'Machine not found',
description: machine?.shortDescription,
canonicalPath: machine ? `/machines/${machine.slug}` : undefined,
type: 'article'
});
const favourites = usePreferencesStore((state) => state.favourites);
const toggleFavourite = usePreferencesStore((state) => state.toggleFavourite);
if (!machine) {
return
{machine.subtitle}
{machine.description}
Complexity
{machine.complexity}/5
Estimated model
{machine.estimatedPartCount}
Annotated
{machine.parts.length}
Component model
{part.description}
{part.material ? (Material · {part.material}
) : null}Applications
Guided tour goals
Continue exploring