Comment construire un site de répertoire de musiciens qui fonctionne réellement

J'ai construit trois sites de répertoire de musiciens au cours des quatre dernières années. Le premier était un désastre -- lent, impossible à rechercher, et les profils de groupe avaient l'air d'avoir été conçus en 2008. Le troisième gère 12 000+ profils d'artistes avec une recherche en moins d'une seconde, une découverte basée sur la géolocalisation, et un CMS permettant aux administrateurs non techniques de tout gérer. Voici tout ce que j'ai appris pour passer du point A au point B.

Construire un site de répertoire semble simple jusqu'à ce que vous commenciez réellement. Vous avez affaire à la recherche, au filtrage, au contenu généré par les utilisateurs, aux pages lourdes en médias, à l'optimisation pour les moteurs de recherche pour des milliers de routes dynamiques, et à des défis de performance que la plupart des sites de type blog ne rencontrent jamais. Ce guide couvre la pile complète -- du choix de votre technologie au déploiement d'un répertoire que les musiciens veulent vraiment y figurer.

Comment construire un site de répertoire de musiciens qui fonctionne réellement

Table des matières

Pourquoi les répertoires de musiciens sont plus difficiles qu'il n'y paraît

La plupart des gens abordent un répertoire de musiciens comme s'il s'agissait d'un blog avec des pages supplémentaires. Ce n'est pas le cas. Un répertoire est fondamentalement une application de recherche avec une couche de contenu par-dessus.

Réfléchissez à ce que vos utilisateurs ont vraiment besoin :

  • Les organisateurs d'événements cherchant un trio de jazz dans un rayon de 50 miles de Nashville
  • Les propriétaires de lieux filtrant par genre, disponibilité et gamme de prix
  • Les musiciens cherchant des collaborateurs qui jouent des instruments spécifiques
  • Les fans parcourant les groupes locaux par genre et localisation

Chacun de ces cas d'utilisation nécessite des modèles de recherche différents, des flux d'interface utilisateur différents et des relations de données différentes. Si vous traitez cela comme un site WordPress avec un plugin de répertoire, vous heurterez un mur autour de 500 profils.

Les répertoires qui réussissent réellement -- des sites comme BandMix, GigSalad et les pages d'artistes de ReverbNation -- ont quelques points en commun : recherche à facettes rapide, profils riches avec médias intégrés, et SEO local solide. Construisons quelque chose qui rivalise avec eux.

Choisir votre pile technologique

Votre décision de pile technologique fera ou défaillera le projet. J'ai vu des équipes brûler des mois en essayant de forcer un répertoire dans un outil qui n'était pas conçu pour cela.

L'approche CMS sans tête + framework frontal

C'est l'approche que je recommande pour tout répertoire censé dépasser quelques centaines d'annonces. Séparer votre couche de contenu de votre couche de présentation vous donne la flexibilité de construire des expériences de recherche personnalisées sans être limité par un CMS monolithique.

Voici ce qui a bien fonctionné en production :

Composant Options recommandées Raison
Frontend Next.js, Astro SSR/SSG pour le SEO, chargement rapide
CMS Sanity, Contentful, Payload CMS Contenu structuré, API-first
Recherche Algolia, Meilisearch, Typesense Recherche à facettes, tolérance aux fautes de frappe
Base de données PostgreSQL + PostGIS Requêtes géospatiales pour la recherche locale
Authentification Clerk, NextAuth.js, Supabase Auth Profils d'auto-service pour musiciens
Médias Cloudinary, imgix Optimisation audio/image
Hébergement Vercel, Netlify, AWS Déploiement edge, CDN

Next.js est mon incontournable pour les répertoires en raison de son rendu hybride. Vous pouvez générer statiquement les 1 000 pages de profil d'artiste les plus populaires au moment de la construction et rendre le reste à la demande. Si vous êtes curieux de voir ce qui est possible, consultez nos capacités de développement Next.js.

Pour les répertoires lourds en contenu où l'interactivité est minimale -- pensez à un site de lecture seule "trouver un musicien" -- Astro mérite d'être envisagé. Son hydratation partielle signifie que vous ne livrez presque aucun JavaScript pour les pages de profil, ce qui se traduit par des vitesses de page fulminantes.

Qu'en est-il de WordPress ?

Écoutez, WordPress avec un plugin comme GeoDirectory ou Business Directory Plugin peut fonctionner pour les petits répertoires (moins de 500 annonces). Mais vous le combattrez constamment une fois que vous aurez besoin de :

  • Recherche à facettes personnalisée au-delà du simple filtrage par catégorie
  • Calendriers de disponibilité en temps réel
  • Lecteurs audio intégrés avec formes d'onde
  • Requêtes géospatiales complexes
  • Accès API pour une application mobile plus tard

Si le budget est extrêmement serré et la portée est petite, WordPress va bien. Pour tout ce qui est ambitieux, allez sans tête. Nous avons aidé plusieurs clients à migrer de WordPress vers des architectures sans tête spécifiquement parce que leurs sites de répertoire l'ont dépassé.

La configuration du CMS

Sanity est actuellement mon CMS préféré pour les sites de répertoire. Son langage de requête GROQ gère bien les données relationnelles, les fonctionnalités de collaboration en temps réel permettent à plusieurs administrateurs de gérer les annonces simultanément, et le Studio personnalisable signifie que vous pouvez construire des flux de travail d'administration spécifiques à la gestion de répertoires.

Payload CMS est la forte alternative open-source si vous voulez l'auto-héberger. Il vous donne un panneau d'administration complet avec contrôle d'accès intégré, et puisqu'il est basé sur Node, toute votre pile reste dans une seule langue.

Comment construire un site de répertoire de musiciens qui fonctionne réellement - architecture

Architecture de données pour les profils d'artistes

Avoir le bon modèle de données dès le départ. Le changer plus tard lorsque vous avez des milliers de profils est pénible.

Voici le schéma principal que j'utilise pour les profils de musiciens :

// Exemple de schéma Sanity
export const artistProfile = {
  name: 'artistProfile',
  type: 'document',
  fields: [
    { name: 'name', type: 'string', validation: (Rule) => Rule.required() },
    { name: 'slug', type: 'slug', options: { source: 'name' } },
    { name: 'profileType', type: 'string', 
      options: { list: ['solo', 'band', 'ensemble', 'dj', 'orchestra'] } },
    { name: 'genres', type: 'array', of: [{ type: 'reference', to: [{ type: 'genre' }] }] },
    { name: 'instruments', type: 'array', of: [{ type: 'reference', to: [{ type: 'instrument' }] }] },
    { name: 'location', type: 'object', fields: [
      { name: 'city', type: 'string' },
      { name: 'state', type: 'string' },
      { name: 'zipCode', type: 'string' },
      { name: 'coordinates', type: 'geopoint' },
    ]},
    { name: 'bio', type: 'blockContent' },
    { name: 'photos', type: 'array', of: [{ type: 'image' }] },
    { name: 'audioSamples', type: 'array', of: [{ type: 'file' }] },
    { name: 'videoLinks', type: 'array', of: [{ type: 'url' }] },
    { name: 'priceRange', type: 'object', fields: [
      { name: 'min', type: 'number' },
      { name: 'max', type: 'number' },
      { name: 'currency', type: 'string', initialValue: 'USD' },
    ]},
    { name: 'availability', type: 'string',
      options: { list: ['available', 'limited', 'unavailable'] } },
    { name: 'socialLinks', type: 'object', fields: [
      { name: 'website', type: 'url' },
      { name: 'spotify', type: 'url' },
      { name: 'instagram', type: 'url' },
      { name: 'youtube', type: 'url' },
      { name: 'soundcloud', type: 'url' },
    ]},
    { name: 'tags', type: 'array', of: [{ type: 'string' }] },
    { name: 'verified', type: 'boolean', initialValue: false },
    { name: 'featured', type: 'boolean', initialValue: false },
  ]
}

Décisions clés de modélisation des données

Les genres et instruments doivent être des références, pas des chaînes. Cela semble exagéré au début, mais c'est critique pour un filtrage cohérent. Si un musicien se marque lui-même comme "R&B" et un autre écrit "RnB" et un troisième utilise "Rhythm and Blues", vos filtres de recherche se cassent. Les types de référence appliquent la cohérence.

Stockez les coordonnées à côté de la localisation lisible par l'homme. Vous aurez besoin du lat/lng géocodé pour la recherche de proximité, mais vous avez également besoin de la ville/état pour l'affichage et le SEO. Géocodez au moment de l'écriture en utilisant l'API de géocodage Google ou OpenCage, pas au moment de la requête.

Gamme de prix, pas prix exact. Les musiciens détestent publier les tarifs exacts. Une plage (par exemple, 500-1500 $) vous donne suffisamment de données pour le filtrage sans effrayer les annonces.

Construire une recherche qui ne soit pas nulle

La recherche est la fonctionnalité qui fait ou défaille. Si un propriétaire de lieu ne peut pas trouver un guitariste de blues à Austin en 10 secondes, il est parti.

Implémentation de recherche à facettes

Ne construisez pas la recherche à partir de zéro contre votre API CMS. Utilisez un service de recherche dédié. J'ai eu les meilleurs résultats avec ces trois :

Service Tarification (2025) Meilleur pour Latence
Algolia Gratuit jusqu'à 10 000 recherches/mois, puis 1 $/1000 recherches Plus grands répertoires, meilleures docs ~20ms
Meilisearch Hébergé gratuit, Cloud à partir de 30 $/mois Conscient du budget, open source ~50ms
Typesense Hébergé gratuit, Cloud à partir de 30 $/mois Sensible aux prix, bon support geo ~30ms

Voici une intégration Algolia basique pour une page de recherche de musiciens Next.js :

// lib/algolia.ts
import algoliasearch from 'algoliasearch';

const client = algoliasearch(
  process.env.NEXT_PUBLIC_ALGOLIA_APP_ID!,
  process.env.NEXT_PUBLIC_ALGOLIA_SEARCH_KEY!
);

export const artistIndex = client.initIndex('artists');

// Configurez les facettes
artistIndex.setSettings({
  searchableAttributes: ['name', 'bio', 'tags', 'genres', 'instruments'],
  attributesForFaceting: [
    'searchable(genres)',
    'searchable(instruments)',
    'filterOnly(location.state)',
    'filterOnly(location.city)',
    'filterOnly(profileType)',
    'filterOnly(availability)',
    'filterOnly(priceRange.min)',
    'filterOnly(priceRange.max)',
  ],
  customRanking: ['desc(featured)', 'desc(verified)'],
});
// components/ArtistSearch.tsx
import { InstantSearch, SearchBox, RefinementList, Hits } from 'react-instantsearch';

export function ArtistSearch() {
  return (
    <InstantSearch searchClient={searchClient} indexName="artists">
      <div className="flex gap-8">
        <aside className="w-64">
          <h3>Genre</h3>
          <RefinementList attribute="genres" />
          <h3>Instrument</h3>
          <RefinementList attribute="instruments" />
          <h3>Type</h3>
          <RefinementList attribute="profileType" />
        </aside>
        <main className="flex-1">
          <SearchBox placeholder="Search musicians, bands, genres..." />
          <Hits hitComponent={ArtistCard} />
        </main>
      </div>
    </InstantSearch>
  );
}

UX de recherche dont les musiciens ont vraiment besoin

Quelques choses que j'ai apprises à la dure :

  1. Autosuggest avec des puces de genre/instrument -- Quand quelqu'un tape "guitar", montrez des suggestions cliquables pour "Lead Guitar", "Acoustic Guitar", "Bass Guitar" comme des filtres distincts
  2. État de filtre basé sur l'URL -- Chaque état de recherche doit produire une URL unique. Cela importe pour le SEO et pour les utilisateurs partageant les résultats de recherche
  3. État vide avec suggestions -- Si aucun résultat ne correspond, suggérez d'élargir la recherche. "Pas de musiciens de jazz à Topeka ? Voici des musiciens de jazz dans un rayon de 100 miles."
  4. Aperçu audio dans les résultats de recherche -- Laissez les utilisateurs lire un clip de 30 secondes sans quitter la page de résultats. Cette seule fonctionnalité a augmenté l'engagement de 40% sur l'un de mes projets.

Géolocalisation et trouver des musiciens locaux

La découverte locale est la fonctionnalité killer pour les répertoires de musiciens. Voici comment l'implémenter correctement.

API de géolocalisation du navigateur

// hooks/useUserLocation.ts
import { useState, useEffect } from 'react';

export function useUserLocation() {
  const [location, setLocation] = useState<{ lat: number; lng: number } | null>(null);
  const [error, setError] = useState<string | null>(null);

  useEffect(() => {
    if (!navigator.geolocation) {
      setError('Geolocation not supported');
      return;
    }

    navigator.geolocation.getCurrentPosition(
      (position) => {
        setLocation({
          lat: position.coords.latitude,
          lng: position.coords.longitude,
        });
      },
      (err) => {
        // Basculez vers la géolocalisation basée sur l'IP
        fetchIPLocation().then(setLocation).catch(() => setError(err.message));
      },
      { enableHighAccuracy: false, timeout: 5000 }
    );
  }, []);

  return { location, error };
}

Recherche de proximité avec Algolia

Algolia supporte aroundLatLng nativement :

const results = await artistIndex.search('jazz band', {
  aroundLatLng: `${userLat}, ${userLng}`,
  aroundRadius: 80467, // 50 miles en mètres
  getRankingInfo: true, // retourne la distance dans la réponse
});

Pour la recherche auto-hébergée, PostGIS avec PostgreSQL vous donne la même capacité :

SELECT *, 
  ST_Distance(
    coordinates::geography, 
    ST_MakePoint(-86.7816, 36.1627)::geography
  ) / 1609.34 AS distance_miles
FROM artists 
WHERE ST_DWithin(
  coordinates::geography, 
  ST_MakePoint(-86.7816, 36.1627)::geography, 
  80467  -- 50 miles en mètres
)
AND 'jazz' = ANY(genres)
ORDER BY distance_miles;

Intégration de carte

Une vue de carte à côté des résultats de liste est presque essentielle pour la découverte locale. Mapbox GL JS ou l'API Google Maps JavaScript fonctionnent tous les deux. Je préfère Mapbox pour ses options de personnalisation et son modèle de tarification (50 000 chargements de carte gratuits/mois à partir de 2025).

Un conseil : regroupez vos marqueurs de carte. Lorsque vous avez 200 musiciens dans une zone métropolitaine, les épingles individuelles se transforment en un gâchis illisible. Mapbox et Google Maps supportent nativement le regroupement de marqueurs.

Pages de profil d'artistes qui convertissent

Chaque profil d'artiste est une page d'atterrissage. Traitez-le comme un.

Éléments essentiels du profil

  • Section héros avec une photo de haute qualité, nom, genres et localisation
  • Lecteur audio intégré -- ce que les organisateurs de concerts veulent le plus
  • Intégrations vidéo de YouTube/Vimeo
  • Indicateur de disponibilité (disponible / limité / indisponible)
  • Gamme de prix affichée clairement
  • Contact/CTA de réservation au-dessus de la ligne de flottaison
  • Preuve sociale -- avis, témoignages, lieux joués précédents
  • Section artistes similaires pour la découverte

Implémentation du lecteur audio

N'utilisez pas l'élément <audio> natif d'HTML5. Il a un aspect différent dans chaque navigateur et offre une UX minimale. Utilisez quelque chose comme Wavesurfer.js pour la visualisation de forme d'onde :

import WaveSurfer from 'wavesurfer.js';

useEffect(() => {
  const wavesurfer = WaveSurfer.create({
    container: '#waveform',
    waveColor: '#4F46E5',
    progressColor: '#818CF8',
    height: 60,
    barWidth: 2,
    barGap: 1,
    responsive: true,
  });
  
  wavesurfer.load(audioUrl);
  
  return () => wavesurfer.destroy();
}, [audioUrl]);

Stratégie SEO pour les sites de répertoire

Le SEO de répertoire est sa propre discipline. Vous avez potentiellement des milliers de pages, et chacune doit se classer pour les requêtes locales + de niche.

Modèles de mots-clés cibles

Chaque page de profil d'artiste doit cibler des mots-clés comme :

  • [genre] musicien à [ville]
  • [instrument] joueur [ville] [état]
  • embaucher [genre] groupe [ville]
  • [ville] groupe de mariage
  • artistes [genre] locaux près de [localisation]

Balises méta dynamiques

// app/artists/[slug]/page.tsx (App Router Next.js)
export async function generateMetadata({ params }): Promise<Metadata> {
  const artist = await getArtist(params.slug);
  
  return {
    title: `${artist.name} -- ${artist.genres.join(', ')} à ${artist.location.city}, ${artist.location.state}`,
    description: `Réservez ${artist.name}, un ${artist.profileType} jouant ${artist.genres.join(' et ')} à ${artist.location.city}. ${artist.bio.substring(0, 120)}...`,
    openGraph: {
      images: [artist.photos[0]?.url],
    },
  };
}

Données structurées

Utilisez le balisage de schéma MusicGroup ou Person sur chaque profil :

{
  "@context": "https://schema.org",
  "@type": "MusicGroup",
  "name": "The Delta Blues Trio",
  "genre": ["Blues", "Jazz"],
  "location": {
    "@type": "Place",
    "address": {
      "@type": "PostalAddress",
      "addressLocality": "Nashville",
      "addressRegion": "TN"
    }
  },
  "url": "https://yourdirectory.com/artists/delta-blues-trio",
  "image": "https://yourdirectory.com/images/delta-blues-trio.jpg"
}

Pages de catégorie et de localisation

Au-delà des profils individuels, créez des pages d'atterrissage programmatiques :

  • /genres/jazz -- tous les musiciens de jazz
  • /locations/nashville-tn -- tous les musiciens de Nashville
  • /genres/jazz/nashville-tn -- musiciens de jazz à Nashville

Ces pages capturent le trafic de recherche à haute intention. Générez-les au moment de la construction avec generateStaticParams de Next.js ou les routes dynamiques d'Astro.

Performance et mise à l'échelle

Les sites de répertoire deviennent lourds rapidement. Voici comment garder les choses rapides.

Optimisation d'image

Les photos de musiciens sont souvent téléchargées comme des JPEG de 5 Mo directement d'un appareil photo reflex. Utilisez Cloudinary ou imgix pour transformer à la volée :

<img 
  src="https://res.cloudinary.com/yourcloud/image/upload/w_400,h_400,c_fill,f_auto,q_auto/artist-photo.jpg"
  loading="lazy"
  alt="Artiste jouant en direct"
/>

Cela seul peut réduire le poids de la page de 80 %.

Régénération statique incrémentale

Avec l'ISR de Next.js, vous pouvez générer statiquement les pages de profil et les revalider lorsque le contenu change :

export const revalidate = 3600; // Revalider toutes les heures

// Ou utilisez la revalidation à la demande via webhook depuis votre CMS
// POST /api/revalidate?path=/artists/delta-blues-trio

Pour un répertoire avec 10 000+ profils, vous ne voudrez pas tout reconstruire à chaque déploiement. L'ISR vous permet de pré-construire les pages les plus populaires et de générer le reste à la demande.

Mise en cache des résultats de recherche

Algolia gère la mise en cache de leur côté, mais si vous utilisez une solution auto-hébergée, mettez en cache agressivement. Les recherches populaires comme "groupe de mariage nashville" seront frappées des milliers de fois. Redis ou même la mise en cache en mémoire avec un TTL de 5 minutes peut réduire considérablement la charge de base de données.

Modèles de monétisation

Vous avez besoin d'un modèle commercial. Voici ceux qui fonctionnent réellement pour les répertoires de musiciens en fonction de ce que j'ai vu sur le marché :

Modèle Revenu moyen/utilisateur Pros Cons
Annonces freemium 0-15 $/mois Friction faible pour la croissance Besoin de volume pour les revenus
Placement vedette 20-50 $/mois Les musiciens voient la valeur claire Peut sembler pay-to-play
Commission de réservation 5-15% par concert Aligne les incitations Complexe à mettre en œuvre
Génération de leads 2-10 $ par lead Évolutif Les musiciens peuvent rechigner à payer pour les demandes
Niveaux premium annuels 99-299 $/an Revenus prévisibles Vente initiale plus difficile

Le modèle freemium avec annonces vedettes est le plus facile à mettre en œuvre et le plus courant comme point de départ. Les profils de base sont gratuits (ce qui augmente votre répertoire), et les musiciens paient pour le placement premium, les téléchargements de médias supplémentaires, l'analyse des vues de profil et les badges vérifiés.

Si vous planifiez quelque chose de plus complexe -- comme une place de marché de réservation -- c'est une couche supplémentaire importante de développement. Contactez-nous si vous voulez discuter de l'architecture pour cela.

FAQ

Combien coûte la construction d'un site de répertoire de musiciens ?

Un répertoire basique avec recherche et profils peut être construit pour 5 000-15 000 $ en utilisant un CMS sans tête et un framework frontal moderne. Une plate-forme complète avec géolocalisation, réservation, paiements et un tableau de bord d'auto-service pour musiciens coûte généralement 25 000-75 000 $. Les coûts continus pour la recherche (Algolia ou similaire), l'hébergement et le CDN se situent généralement entre 100-500 $/mois en fonction du trafic. Consultez notre page de tarification pour les estimations de développement sans tête.

Devrais-je utiliser WordPress ou une solution personnalisée pour un répertoire de musiciens ?

WordPress avec des plugins de répertoire (comme GeoDirectory ou Business Directory Plugin) fonctionne pour les répertoires de moins de 500 annonces avec des besoins de recherche basiques. Une fois que vous avez besoin d'une recherche à facettes, d'une découverte basée sur la géolocalisation, de lecteurs audio intégrés ou d'un accès API pour une future application mobile, une architecture sans tête avec Next.js ou Astro associée à un service de recherche comme Algolia vous servira bien mieux. La différence de performance seule est significative -- les répertoires sans tête se chargent généralement 2-4 fois plus rapidement.

Comment j'obtiens que les musiciens s'inscrivent à mon répertoire ?

Commencez très localisé. Concentrez-vous sur une seule ville ou scène musicale. Assistez à des open mics, partenaires avec des lieux locaux, et contactez directement les musiciens. Offrez des annonces gratuites avec des profils de base. Une fois que vous avez 200-300 annonces dans une seule zone métropolitaine, le répertoire commence à générer du trafic de recherche organique, ce qui amène à la fois des musiciens et des personnes les cherchant. N'essayez pas d'être national le premier jour.

Quelle est la meilleure solution de recherche pour un répertoire de musiciens ?

Pour la plupart des répertoires, Algolia offre la meilleure combinaison de vitesse, de filtrage à facettes et de géorecherche. C'est gratuit pour jusqu'à 10 000 recherches par mois, ce qui couvre la phase de croissance précoce. Typesense et Meilisearch sont de fortes alternatives open-source si vous voulez l'auto-héberger et contrôler les coûts. Évitez de construire la recherche directement contre votre base de données -- l'UX sera notablement pire.

Comment gérer l'audio et la vidéo sur les pages de profil d'artistes ?

Pour l'audio, stockez les fichiers dans Cloudinary ou AWS S3 et utilisez un lecteur côté client comme Wavesurfer.js pour la visualisation de forme d'onde. Pour la vidéo, intégrez à partir de YouTube ou Vimeo plutôt que d'héberger des fichiers vidéo vous-même -- cela économise des coûts de bande passante massifs et les utilisateurs obtiennent un lecteur familier. Chargez toujours paresseusement les médias au-dessous de la ligne de flottaison et utilisez l'attribut loading="lazy" pour les iframes.

Comment puis-je faire en sorte que mon répertoire de musiciens se classe dans Google ?

Créez des pages uniques et optimisées pour les mots-clés pour chaque profil d'artiste, catégorie de genre et localisation. Utilisez le balisage de données structurées (schéma MusicGroup). Construisez des pages d'atterrissage programmatiques ciblant des requêtes comme "musiciens [genre] à [ville]" et "embauchez le groupe de mariage [ville]". La liaison interne entre les profils, genres et localisations connexes aide les moteurs de recherche à comprendre la structure de votre site. Visez 50+ mots uniques de contenu sur chaque page au-delà des simples données d'annonce.

Les musiciens peuvent-ils gérer leurs propres profils ?

Oui, et ils devraient. Implémenter l'authentification (Clerk et NextAuth.js sont des choix populaires) et construire un tableau de bord d'auto-service où les musiciens peuvent modifier leur bio, télécharger des photos et de l'audio, mettre à jour la disponibilité et gérer leur annonce. Cela réduit votre fardeau administratif et maintient les profils à jour. Utilisez une file d'attente de modération pour les nouvelles inscriptions et modifications afin de prévenir le spam.

Comment puis-je ajouter une fonctionnalité "trouver des musiciens près de moi" ?

Utilisez l'API de géolocalisation du navigateur pour obtenir les coordonnées de l'utilisateur (avec sa permission), puis transmettez ces coordonnées au filtrage géo de votre service de recherche. Le paramètre aroundLatLng d'Algolia et le champ geopoint de Typesense supportent tous deux la recherche basée sur le rayon. Toujours fournir une solution de secours -- laissez les utilisateurs taper un code postal ou un nom de ville -- puisque de nombreux utilisateurs refuseront l'accès à la localisation. Géocodez les adresses stockées en utilisant l'API de géocodage Google ou OpenCage lorsque les profils sont créés, pas au moment de la recherche.