Custom Services One-off services for bridal parties, special requests, and custom bookings.
{ if (e.key === 'Enter') { page = 1; fetchServices(); } }} class="max-w-sm" />
{#if loading}
{#each range(3) as i (i)} {/each}
{:else if services.length === 0}
{searchQuery ? 'No custom services match your search.' : 'No custom services yet.'}
{:else}
{#each services as service (service.id)}

{service.name}

{service.usage_count}× used
{#if service.description}

{service.description}

{/if}
Price: £{service.price.toFixed(2)}
Duration: {service.duration_minutes} min
{/each}
{#if total > perPage}
Page {page} of {Math.ceil(total / perPage)} ({total} total)
{/if} {/if}
Add Custom Service Create a one-off service for special requests.
validateField('name')} onblur={() => validateField('name')} class="w-full {serviceErrors.name ? 'border-red-500' : ''}" /> {#if serviceErrors.name}

{serviceErrors.name}

{/if}
£ validateField('price')} onblur={() => validateField('price')} class="w-full pl-8 {serviceErrors.price ? 'border-red-500' : ''}" />
{#if serviceErrors.price}

{serviceErrors.price}

{/if}
{#if serviceErrors.duration_minutes}

{serviceErrors.duration_minutes}

{/if}
validateField('minimum_age_required')} onblur={() => validateField('minimum_age_required')} class="w-full {serviceErrors.minimum_age_required ? 'border-red-500' : ''}" /> {#if serviceErrors.minimum_age_required}

{serviceErrors.minimum_age_required}

{/if}

0 for no age restriction