Mise à jour du produit
Joyeux 4 juillet : Réalisations de voyage et amis de Mapsake.
Joyeux 4 juillet à tous ceux qui célèbrent aux États-Unis. Cette version rend l'atlas privé plus ludique avec des réalisations explicables et un partage intentionnel entre amis.
Joyeux 4 juillet !
Joyeux 4 juillet à tous ceux qui célèbrent aux États-Unis !
Cette mise à jour porte sur deux façons dont une carte de voyage privée peut devenir plus vivante : les réalisations donnent au propriétaire de nouveaux schémas à observer dans son propre historique, tandis que Mapsake Friends permet de comparer cet historique avec des personnes qu'il connaît réellement.
Aucune de ces fonctionnalités ne modifie la règle de base. Mapsake est avant tout un atlas personnel. Il n'y a pas de nombre de followers public, de classement mondial ni de flux conçu pour que des inconnus rivalisent entre eux.
160 raisons de regarder à nouveau la carte.
Mapsake inclut désormais environ 160 réalisations. Certaines sont des étapes familières : un premier endroit marqué, cinq pays, chaque continent, ou une liste croissante de villes et d'aéroports. D'autres décrivent des groupes géographiques, culturels, naturels, scientifiques, aéronautiques, et les formes moins évidentes cachées dans un historique de voyage.
Le catalogue est intentionnellement large. Une personne qui effectue des voyages sur route dans les régions voisines devrait toujours constater des progrès significatifs ; le système n'est pas réservé à une personne qui essaie de collectionner tous les pays.
Sous l'interface, l'évaluation des réalisations est un passage déterministe sur l'atlas. Chaque réalisation définit les lieux ou les seuils qui l'intéressent, Mapsake compare cette définition à l'enregistrement Visité et Lieu habité actuel, et le résultat comprend la progression, l'état débloqué, la date et le niveau de la médaille. Il ne dépend pas d'un service d'analyse ou d'un moteur de règles distant.
Cette approche a une conséquence utile : les réalisations fonctionnent hors ligne et sont mises à jour immédiatement après une importation ou une modification manuelle. Cela les rend également testables. L'environnement de test peut toujours produire le même ensemble de réalisations.
Le catalogue est passé de 11 à environ 160.
Le premier moteur de réalisation a été lancé avec des étapes 11 simples. Cela suffisait pour démontrer le processus : dérivez la progression à partir de la carte, mettez en évidence ce qui a été débloqué et affichez une barre de progression pour le reste. Il était également trop petit pour intéresser quiconque ayant un historique de voyage établi.
La deuxième itération a introduit des familles et des groupes géographiques. Les étapes de comptage de pays sont devenues une pile au lieu d'une série de cartes presque identiques. L'achèvement des continents et des groupes tels que l'Union européenne, l'espace Schengen, l'ASEAN, la 7, le Maghreb et les pays d'Asie centrale ont ajouté des objectifs qui concernaient la forme du voyage plutôt que seulement son volume.
Le catalogue s'est ensuite étendu aux arts, à la musique, à la science, à la technologie, à la nature, à la géologie et à l'économie. C'est là qu'il a commencé à se distinguer de Mapsake. Un groupe d'histoire du jazz et un groupe du programme spatial peuvent se chevaucher géographiquement tout en racontant des histoires complètement différentes sur la raison pour laquelle ces endroits appartiennent ensemble.
Le défi était d'éviter les trivia arbitraires. Chaque groupe a besoin d'une liste de membres fixe et défendable et d'une explication qui a du sens après que la nouveauté se soit estompée. L'adhésion se trouve dans la source plutôt que dans un service web changeant, de sorte qu'une mise à jour du catalogue est examinée et versionnée comme tout autre comportement du produit.
Autour de 160, il y a suffisamment d'éléments pour rendre la recherche et l'organisation nécessaires. Ce n'est pas un objectif qui doit croître indéfiniment. Un catalogue petit et cohérent est préférable à des milliers de badges procéduriers que personne ne comprend.
Les dates et les familles de déblocage ont modifié l'interface.
Lorsque le catalogue atteignait environ 80 éléments, une grille normale cessait de fonctionner. Plusieurs seuils de la même famille masquaient tout le reste, et un utilisateur régulier ne pouvait pas déterminer quelle mise à jour était nouvelle.
Mapsake regroupe désormais les réalisations acquises au sein d'une famille en une pile, avec le niveau le plus élevé en haut. L'expansion révèle les étapes précédentes. Les réalisations verrouillées restent visibles comme des objectifs, mais le tri par défaut affiche en premier celles qui sont les plus proches de l'achèvement.
Les dates de déblocage sont enregistrées la première fois qu'une réalisation devient vraie. Elles survivent aux évaluations ultérieures et voyagent dans l'instantané de l'ami, ce qui permet à la page de réalisation d'un ami d'afficher le moment où quelque chose s'est produit sans exposer un journal d'événements privés. Les utilisateurs existants sont basés sur la première exécution, de sorte que l'installation de la mise à jour ne provoque pas une tempête de confettis pour chaque étape importante que leur ancienne carte a déjà satisfaite.
Ce comportement par défaut est dû au fait que la migration a été considérée comme faisant partie de la fonctionnalité. Un moteur techniquement correct qui annoncerait des "réalisations" 70 "nouvelles" au lancement semblerait défectueux, même si chaque insigne était mathématiquement mérité.
La progression doit être compréhensible.
Une paroi d'icônes verrouillées n'est pas très utile, c'est pourquoi l'onglet "Réalisations" est organisé de manière explicative :
- Recherchez par nom et filtrez par catégorie ou continent.
- Trier par ce qui est le plus proche, récemment déverrouillé ou déjà terminé.
- Ouvrez une réalisation pour voir sa description, les lieux des membres, la carte et la progression actuelle.
- Passez aux niveaux bronze, argent, or et platine, où une famille les soutient.
- Appuyez longuement sur une réalisation pour créer une carte de partage sans publier quoi que ce soit automatiquement.
Les célébrations de déblocage sont brèves et tactiles, et tous les détails restent disponibles par la suite. Le ton est délibérément léger et parfois un peu geek. Cela doit ressembler à la découverte de quelque chose sur la carte, et non à la réception d'une évaluation de performance.
L'écran des détails a également résolu un problème de confiance. Un titre tel que « Five Eyes » ou « Ring of Fire » n'est pas explicite pour tout le monde. L'ouvrir affiche la description complète, la région de la carte, les pays du groupe, ceux qui sont considérés comme atteints et la plage de dates de visite, le cas échéant. Pour les familles de niveaux, le bronze au platine communique la progression sans nécessiter quatre systèmes visuels non liés.
La carte met délibérément en évidence les pays non visités, ainsi que les pays visités. Il est plus facile de comprendre les progrès lorsqu'une personne peut voir qu'un objectif n'est qu'un pays voisin, plutôt que de simplement lire "8 de 9".
Une célébration ne peut pas contrôler la navigation
Un détail de mise en œuvre est devenu visible lors des tests : les célébrations de réussite se comportaient à l'origine comme un résumé modal. Les cartes semblaient être cliquables, mais la couche de célébration ne contenait pas suffisamment d'état de navigation pour ouvrir de manière fiable le détail sous-jacent.
La correction consistait à traiter chaque récompense comme la même identité de réalisation utilisée par le catalogue principal et à la diriger vers l'écran de détails existant. La "célébration" reste une présentation temporaire ; le modèle de réalisation reste la source durable. C'est un petit exemple d'une règle plus large de Mapsake : les effets spéciaux doivent être superposés au produit, et non le diviser.
Amis, sans créer un réseau social
Mapsake Friends commence par une invitation, et non par un répertoire consultable. Un lien contient un code de partage privé plutôt qu'un nom ou un compte. L'ouvrir crée une connexion mutuelle : chaque personne peut voir la carte partagée de l'autre dans Mapsake.
Les liens fonctionnent bien sur de longues distances, tandis que les codes QR et la découverte à proximité couvrent le moment où deux personnes se trouvent dans la même pièce. L'application publie une capture d'écran de voyage compacte pour la connexion au lieu d'essayer de synchroniser deux bases de données locales complètes.
Le premier modèle de partage n'était pas assez fiable.
À l'origine, les amis utilisaient une part CloudKit distincte pour chaque relation. Cela semblait attrayant car CloudKit gérait les invitations d'accès, mais cela rendait l'amitié mutuelle difficile. Une personne pouvait accepter un partage sans que l'expéditeur d'origine reçoive un moyen fiable de revenir, et l'URL de partage système était difficile à convertir en un flux prévisible dans l'application.
Le modèle de remplacement donne à chaque profil un enregistrement de carte partagé et stable auquel on accède via un code opaque. Un lien d'invitation ouvre l'enregistrement de l'ami, stocke une capture d'écran, publie la propre carte du destinataire et écrit une petite requête de retour vers le code d'origine. Les actualisations en arrière-plan et en premier plan complètent la connexion mutuelle.
La première version de ce remplacement utilisait le code stable directement dans le lien. Cela a fonctionné, mais un lien pouvait être réutilisé indéfiniment s'il échappait à la conversation prévue. Un jeton d'invitation unique se trouve maintenant devant l'identité de la carte stable. Un jeton consommé ne peut pas être réutilisé, tandis que l'amitié sous-jacente peut continuer à se rafraîchir.
Ceci est un exemple de la façon dont le produit et l'infrastructure évoluent ensemble. « Partager ma carte » n'est qu'un bouton dans l'interface, mais en dessous se trouvent le routage de liens universels, la recherche d'enregistrements CloudKit, la gestion des requêtes mutuelles, la mise en cache locale, la déduplication et un message clair de succès ou d'échec. Cacher cette mécanique est le défi ; prétendre qu'elle n'existe pas rendrait les échecs impossibles à expliquer.
Le profil d'un ami est très complet. Il peut inclure une carte interactive, un Passeport avec des contrôles de lentille, de région et d'année, des réalisations et une vue de comparaison montrant les chevauchements et les lieux uniques de chaque personne. Un point de localisation à domicile est exclu, sauf si son propriétaire choisit explicitement de le partager.
L'écran des amis utilisait initialement un globe et un résumé plus simples. Cela a rapidement semblé être une prévisualisation plutôt qu'une relation. La surface actuelle utilise les mêmes paramètres de carte que l'Atlas du propriétaire, les mêmes calculs de passeport et le même modèle de détails de réalisation avec une source de données différente.
La réutilisation de ces composants a révélé une abstraction utile : les écrans de cartes et de passeports doivent consommer des données de voyage, et non supposer que ces données appartiennent au profil local connecté. Une fois que la fonction de capture d'écran avec des amis a implémenté cette interface, le filtrage, les plages de dates, les étendues continentales, la progression des réalisations et les comparaisons pouvaient partager le même comportement sans donner à un ami accès à la base de données sous-jacente du propriétaire.
Il y a eu un bug de navigation moins glamour en cours de route. Une ligne "amis" était directement liée à un objet de modèle SwiftData, mais la synchronisation CloudKit pouvait réinitialiser cet objet et modifier son identité juste au moment où la navigation commençait. Utiliser l'ID stable de l'ami pour la navigation a corrigé le problème de la touche apparemment inactive. Les bugs de données distribuées apparaissent souvent comme des bugs d'interface utilisateur ordinaires.
Les photos de profil ont suivi la même règle de capture instantanée. Une petite icône peut être publiée avec le profil partagé et rafraîchie après une modification. Si aucune photo n'est définie, les initiales sont utilisées par défaut. Mapsake demande un nom et une photo reconnaissables avant la première invitation, mais ne rend ni l'un ni l'autre obligatoire.
Un flux de modifications significatives.
L'onglet Amis n'est pas un flux de publications téléchargées. Mapsake compare périodiquement la dernière capture d'écran d'un ami à celle déjà stockée sur l'appareil. Si un ami a ajouté des lieux ou débloqué des réalisations, ces différences deviennent un petit fil d'activité local.
Cette approche de comparaison d'instantanés maintient la fonctionnalité simple. Les amis n'ont pas besoin de rédiger une publication chaque fois que leur atlas change, et Mapsake n'a pas besoin d'un système de classement de contenu. Le fil enregistre un événement utile car l'historique de voyage sous-jacent a changé.
Cela évite également d'ajouter un autre type d'enregistrement CloudKit pour chaque événement de flux de données. L'application dispose déjà des instantanés anciens et nouveaux. La comparaison de leurs identifiants de lieu et des succès débloqués peut déduire les modifications intéressantes localement, puis conserver un flux de données limité dans un petit magasin JSON sur l'appareil.
Les ajouts de lieux et les déblocages de réalisations sont regroupés en lots distincts, même lorsqu'ils arrivent lors d'une seule actualisation. Cela évite qu'une importation importante ne génère des dizaines de lignes presque identiques et rend l'affichage plus proche de "Emma a ajouté le Japon, Kyoto et deux autres" plutôt qu'un journal de transactions de base de données.
Les notifications peuvent être activées par filtre de voyage avec un délai, de sorte qu'une grande quantité d'historique importé ne se transforme pas en une multitude d'alertes. Le rafraîchissement par glissement reste disponible lorsque quelqu'un souhaite vérifier délibérément.
La confidentialité est une partie intégrante de la fonctionnalité, et non une clause de non-responsabilité.
Les historiques de voyage peuvent révéler des domiciles, des routines et des projets futurs. Par conséquent, la fonction « amis » doit être plus explicite qu'une fonction sociale conventionnelle :
- Pour ajouter quelqu'un, une invitation, une lecture de code QR ou un échange à proximité est nécessaire.
- La charge partagée contient les données de la carte nécessaires à l'expérience des amis, et non une copie de la bibliothèque de photos.
- Le partage sur l'écran d'accueil est séparé et désactivé par défaut.
- La suppression d'un ami supprime la relation locale et son activité mise en cache.
- Pour utiliser Mapsake, vous n'avez pas besoin d'un compte Mapsake.
L'instantané d'un ami ne contient jamais d'octets de photo originaux. Il contient les marques de voyage, les champs de profil, les informations sur l'objectif, les dates nécessaires pour les statistiques spécifiques et les déverrouillages de réalisation nécessaires aux surfaces que l'ami peut ouvrir. Cette limite empêche une expérience riche de devenir un service de partage de photos par accident.
Mapsake distingue le partage avec des amis d'un lien public pour le navigateur. Une connexion avec un ami est mutuelle et se trouve dans l'application. Une carte publique est un artefact optionnel distinct pour une personne qui souhaite un lien en lecture seule. Activer l'un n'active pas automatiquement l'autre.
Les Réalisations et les Amis rendent l'atlas plus ludique, mais ils ne le transforment pas en un profil public. Cette distinction est suffisamment importante pour être répétée à mesure que l'application évolue.
Essayez la mise à jour
Ouvrir Succès pour rechercher dans l'ensemble du catalogue et voir ce qui se trouve à proximité. Ensuite, ouvrez Amis, partagez un lien d'invitation ou utilisez l'option "à proximité" et "QR code", et comparez des cartes avec quelqu'un que vous connaissez.
Le meilleur résultat n'est pas un score plus élevé. C'est une conversation : l'endroit que les deux personnes ont aimé, la région qu'une personne n'a jamais envisagée, ou la petite réalisation inhabituelle qu'aucune n'a su qu'elle était sur le point de accomplir.