Ajoutez le café à partir de l'URL du tweet dans $ARGUMENTS vers data/cafes.json et créez une PR.
Prérequis : un clone de amalshaji/cafeblr (clonez-le si vous n'êtes pas déjà dans le dépôt), bun, et une CLI gh authentifiée.
1. Commencer depuis le dernier main
Les IDs doivent être calculés à partir des données les plus récentes, jamais d'un checkout obsolète :
git fetch origin && git checkout main && git pull
2. Récupérer le tweet
Extrayez l'ID numérique du statut depuis l'URL (x.com/<utilisateur>/status/<id> ou twitter.com/...), puis :
bun -e '
import { fetchTweet } from "./scripts/lib/tweet.ts";
const t = await fetchTweet("TWEET_ID");
console.log(JSON.stringify({
user: t?.user?.screen_name, likes: t?.favorite_count, text: t?.text,
media: t?.mediaDetails?.map(m => ({ type: m.type, url: m.media_url_https,
mp4: m.video_info?.variants?.filter(v => v.content_type === "video/mp4")
.sort((a, b) => (b.bitrate ?? 0) - (a.bitrate ?? 0))[0]?.url })),
}, null, 2));'
3. Garde-fous — arrêtez-vous et informez l'utilisateur si l'un d'eux échoue
- Tweet manquant ou supprimé (l'adaptateur renvoie null).
- Pas de photo — chaque entrée a besoin d'une image ; un tweet textuel uniquement ne peut pas être ajouté. Lorsqu'il existe plusieurs médias dans le tweet, inspectez-les et préférez d'abord une photo de nourriture/boisson ; si aucune ne montre de nourriture ou boisson, utilisez la meilleure image du tweet disponible.
- Doublon — l'URL source (ou le même café) est déjà dans
data/cafes.json. - Politique de sourcing — l'auteur doit être une personne réelle partageant une découverte. Rejetez les comptes de marque, le compte du café lui-même, les agrégateurs d'actualités et les comptes marketing.
4. Construire l'entrée
name/area— à partir du texte du tweet (les lignes 📍 sont courantes). Si le nom n'est pas dans le tweet, vérifiez les propres réponses de suivi de l'auteur dans le fil (navigateur). Si toujours inconnu, demandez à l'utilisateur plutôt que de deviner. La zone est un quartier ("Indiranagar", "HSR Layout"), pas une adresse.knownFor— une ligne reformulant ce que le post lui-même loue. N'inventez jamais des qualités que le tweet ne mentionne pas.image— inspectez les médias du tweet et choisissez d'abord une photo qui montre clairement l'article de nourriture/boisson. Si aucun média ne montre de nourriture ou boisson, utilisez la meilleure photo du tweet disponible (ou l'affiche de la vidéo).video— URL mp4 du meilleur débit si le média est une vidéo, sinonnull.mapsUrl— lien Google Maps si le tweet/fil en contient un (vérifiezentities.urls[].expanded_url), sinonnull.googleRating— évaluation Google Maps pour l'endroit exact si vérifié, sinonnull.source—https://x.com/<utilisateur>/status/<id>canonique.author—@<utilisateur>.postedAt— le timestamp ISOdatePublishedde la page du tweet. Utilisez les métadonnées de la page X rendue dans le navigateur, pas une date devinée.likes—favorite_countde la récupération.addedAt— aujourd'hui,YYYY-MM-DD.id—max + 1sur le fichier de l'étape 1 ; les entrées restent dans l'ordre des ids (schéma et règles :src/lib/schema.ts, README "Ajouter un café").
Ajoutez à data/cafes.json (indentation de 2 espaces, ordre des clés correspondant aux entrées existantes).
5. Valider
bun run validate
BASE_REF=origin/main bun scripts/validate.ts # vérifie en direct la nouvelle entrée
Les deux doivent réussir avant de pusher.
6. Créer la PR
git checkout -b add-cafe-<nom-en-kebab>
git add data/cafes.json
git commit -m "data: add <Nom> (<Zone>)"
git push -u origin add-cafe-<nom-en-kebab>
gh pr create --title "Add <Nom> (<Zone>)" --body "..."
Corps de la PR : tableau des détails du café (nom, zone, lien source, likes) plus une section Données manquantes
énumérant tout ce qui est inconnu (généralement mapsUrl). Si mapsUrl est null, laissez également un
commentaire sur la PR listant les liens Maps manquants afin qu'un humain puisse les remplir. Pas d'attribution IA/assistant dans les commits ou la PR.
Terminez en rapportant l'URL de la PR.