// Accueil // Blog // Projets Web // Qui suis-je ? // Contact
Accueil / Projets Web / Luxury Concierge Assistant
pilou2506.vercel.app
Luxury Concierge Assistant — capture d'écran sur ordinateur

Luxury Concierge Assistant

TypeScriptViteSupabaseGoogle MapsPWAMagic UI

Le problème

Au desk concierge, la même question revient vingt fois par soir : « Qu'est-ce que vous nous conseillez ce soir ? ». La réponse dépend de tout : l'envie du client (un bar calme, un kaiseki, une sortie en famille), le quartier, ce qui est encore ouvert à l'heure de Fukuoka… et elle vivait jusque-là dans des classeurs PDF et dans la tête de l'équipe.

Ce que fait l'appli

  • Filtrage par intention (soirée romantique, solo, dîner d'affaires, artisans de Hakata, bar tardif, jour de pluie), par catégorie et par 81 tags bilingues (anniversaire, famille, kaiseki, wagyu…), avec une recherche qui comprend aussi bien « バー », « バー » que « bar ».
  • Une vitrine de 2 à 4 étapes réordonnable, avec temps de marche depuis l'hôtel et alertes horaires (« ferme dans 40 min », « fermé aujourd'hui »).
  • Mode présentation plein écran face au client, puis livraison : page invité bilingue ouverte par QR code (aucun serveur, l'itinéraire voyage compressé dans le lien), LINE, WhatsApp ou impression sur papier à en-tête.
  • Accueil « Tonight in Fukuoka » : lieux ouverts maintenant, intention suggérée selon l'heure et la météo (Agence météorologique du Japon), lieux les plus recommandés.
  • Outils du desk : itinéraires enregistrés, passation d'équipe, statistiques de recommandation, import / export CSV pour Excel, intégration Google Places & Maps.

Sous le capot

TypeScript strict sans aucun framework, packagé avec Vite, avec une seule dépendance au runtime (qrcode). Les animations de Magic UI (une bibliothèque React) sont portées à la main en TypeScript + CSS pour garder une appli ultra-légère. Côté serveur, des fonctions Vercel synchronisent le catalogue entre les tablettes via Supabase (Postgres, schéma privé, accès protégé par un code du desk), avec une file d'attente hors ligne. L'appli est installable (PWA) et existe aussi en version fichier unique pour une tablette sans réseau.

🔒 La démo

La démo est cette version fichier unique : elle n'est reliée à aucune base de données. Le catalogue pré-chargé s'affiche, mais tout ce que vous ajoutez reste dans votre navigateur ; aucune donnée du desk réel n'est visible ni partagée.

🎯 Le but du projet

Recommander en quelques secondes les bonnes adresses à un client, selon son envie et l'heure qu'il est, et lui remettre un itinéraire élégant qu'il garde dans sa poche, au lieu d'un plan griffonné sur un coin de papier.

📁 Structure du projet · 99 fichiers

  • luxury_concierge_assistant/
    • api/
      • _lib/
        • http.ts
        • store.ts
        • validate.ts
      • spots.ts
      • weather.ts
    • dist/
      • icons/
        • apple-touch-icon.png
        • favicon-16.png
        • favicon-32.png
        • icon-192.png
        • icon-512.png
        • maskable-512.png
      • favicon.ico
      • favicon.svg
      • index.html
      • manifest.webmanifest
      • sw.js
    • public/
      • icons/
        • apple-touch-icon.png
        • favicon-16.png
        • favicon-32.png
        • icon-192.png
        • icon-512.png
        • maskable-512.png
      • favicon.ico
      • favicon.svg
      • manifest.webmanifest
      • sw.js
    • src/
      • data/
        • catalog.ts
        • catalogDesk.ts
        • i18n.ts
        • tags.ts
      • lib/
        • catalogCsv.ts
        • cloud.ts
        • copyright.ts
        • csv.ts
        • dom.ts
        • geo.ts
        • gmap.ts
        • google.ts
        • hours.ts
        • places.ts
        • qr.ts
        • seeds.ts
        • share.ts
        • stats.ts
        • storage.ts
        • text.ts
        • theme.ts
        • weather.ts
      • magicui/
        • confetti.ts
        • decor.ts
        • device.ts
        • dock.ts
        • layout.ts
        • magicui.css
        • morph.ts
        • motion.ts
        • orbit.ts
        • particles.ts
        • progress.ts
        • reveal.ts
        • spinning.ts
      • styles/
        • main.css
      • ui/
        • card.ts
        • delivery.ts
        • desk.ts
        • googleAdd.ts
        • googleSearch.ts
        • guest.ts
        • handover.ts
        • icons.ts
        • itineraries.ts
        • loaders.ts
        • mapView.ts
        • modal.ts
        • placeCard.ts
        • plates.ts
        • print.ts
        • settings.ts
        • shareTarget.ts
        • showcase.ts
        • splash.ts
        • spotForm.ts
        • statsPanel.ts
        • tagPicker.ts
        • tonight.ts
      • main.ts
      • state.ts
      • types.ts
    • supabase/
      • migrations/
        • 20261013194300_lca_shared_catalog.sql
        • 20261014090000_lca_custom_tags.sql
        • 20261017090000_lca_itineraries_stats.sql
        • 20261018030000_lca_handover.sql
    • index.html
    • package-lock.json
    • package.json
    • README.md
    • tsconfig.json
    • vercel.json
    • vite.config.ts

Autres projets