Communitygithub.com

cafeblr

Schöne Cafés in Bengaluru, gefunden vom Internet – ein per Crowdsourcing erstelltes Verzeichnis, basierend auf X-Beiträgen, die Leute wirklich mochten. Füge ein Café per Issue/PR hinzu.

Was ist cafeblr?

Diese Fähigkeit ist für KI-Agenten gedacht, die den ‚amalshaji/cafeblr‘-Repository verwalten, einer Crowdsourcing-Liste von Cafés in Bengaluru (Indien), die durch beliebte X-Posts (ehemals Twitter) kuratiert werden. Der Agent automatisiert den Prozess, einen neuen Café-Eintrag aus einer Tweet-URL hinzuzufügen, einschließlich Datenextraktion, Validierung und Erstellung von Pull Requests. Die Fähigkeit stellt sicher, dass alle Einträge den Projektrichtlinien entsprechen: Sie validiert, dass der Tweet ein Foto enthält (bevorzugt Essen/Getränke), lehnt Duplikate ab und überprüft, ob die Quelle ein echter persönlicher Finder ist und keine Marke oder ein Aggregator. Sie extrahiert Details wie Name, Gegend, bekannt für, Bilder, Google Maps-Links und Bewertungen und berechnet eine neue ID basierend auf der neuesten Datei. Schließlich erstellt der Agent einen Branch, validiert die Daten mit Bun-Skripten und erstellt einen PR mit allen relevanten Informationen. Diese Fähigkeit arbeitet mit X/Twitter, GitHub CLI und dem lokalen Repository und ist damit ein spezialisiertes Tool für datengetriebene, qualitätskontrollierte Community-Verzeichnisse.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add amalshaji/cafeblr

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Füge das Café aus der Tweet-URL in $ARGUMENTS zu data/cafes.json hinzu und erstelle einen PR.

Voraussetzungen: ein Klon von amalshaji/cafeblr (klone es, falls du dich nicht bereits in einem befindest), bun und eine authentifizierte gh-CLI.

1. Vom neuesten main starten

Ids müssen gegen die neuesten Daten berechnet werden, niemals gegen einen veralteten Stand:

git fetch origin && git checkout main && git pull

2. Tweet abrufen

Extrahiere die numerische Status-ID aus der URL (x.com/<nutzer>/status/<id> oder twitter.com/...), dann:

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. Schutzmaßnahmen – anhalten und den Benutzer informieren, falls eine fehlschlägt

  • Tweet fehlt oder gelöscht (Adapter gibt null zurück).
  • Kein Foto – jeder Eintrag benötigt ein Bild; ein reiner Text-Tweet kann nicht hinzugefügt werden. Wenn mehrere Tweet-Medien vorhanden sind, überprüfe sie und bevorzuge zuerst ein Essen-/Getränkefoto; falls keines Essen oder Getränke zeigt, verwende das beste verfügbare Tweet-Bild.
  • Duplikat – die Quell-URL (oder dasselbe Café) ist bereits in data/cafes.json vorhanden.
  • Quellenrichtlinie – der Autor muss eine echte Person sein, die einen Fund teilt. Lehne Marken-Konten, das eigene Konto des Cafés, Nachrichtenaggregatoren und Marketing-Handles ab.

4. Eintrag erstellen

  • name / area – aus dem Tweet-Text (📍-Zeilen sind üblich). Wenn der Name nicht im Tweet steht, überprüfe die eigenen Folgeantworten des Autors im Thread (Browser). Falls immer noch unbekannt, frage den Benutzer, anstatt zu raten. Area ist ein Stadtteil („Indiranagar“, „HSR Layout“), keine Adresse.
  • knownFor – eine Zeile, die zusammenfasst, was der Beitrag selbst lobt. Erfinde niemals Eigenschaften, die der Tweet nicht erwähnt.
  • image – überprüfe die Tweet-Medien und wähle zuerst ein Foto, das deutlich das Essen/Getränk zeigt. Wenn kein Medium Essen oder Getränke zeigt, verwende das beste verfügbare Tweet-Foto (oder das Poster des Videos). video – Best-Bitrate-MP4-URL, wenn das Medium ein Video ist, sonst null.
  • mapsUrl – Google-Maps-Link, wenn der Tweet/Thread einen enthält (überprüfe entities.urls[].expanded_url), sonst null.
  • googleRating – Google-Maps-Bewertung für den genauen Ort, falls verifiziert, sonst null.
  • source – kanonische https://x.com/<nutzer>/status/<id>. author – @<nutzer>.
  • postedAt – der datePublished-ISO-Zeitstempel der Tweet-Seite. Verwende die im Browser gerenderten X-Seiten-Metadaten, kein geschätztes Datum.
  • likes – favorite_count aus dem Abruf. addedAt – heute, YYYY-MM-DD.
  • id – max + 1 über der Datei aus Schritt 1; Einträge bleiben in ID-Reihenfolge (Schema und Regeln: src/lib/schema.ts, README „Add a cafe“).

Füge an data/cafes.json an (2 Leerzeichen Einzug, Schlüsselreihenfolge wie bei vorhandenen Einträgen).

5. Validieren

bun run validate
BASE_REF=origin/main bun scripts/validate.ts   # Live-Checks des neuen Eintrags

Beide müssen bestehen, bevor gepusht wird.

6. PR erstellen

git checkout -b add-cafe-<kebab-name>
git add data/cafes.json
git commit -m "data: add <Name> (<Area>)"
git push -u origin add-cafe-<kebab-name>
gh pr create --title "Add <Name> (<Area>)" --body "..."

PR-Text: Tabelle mit Café-Details (Name, Gegend, Quelllink, Likes) plus ein Fehlende Daten-Abschnitt, der alles Unbekannte aufführt (normalerweise mapsUrl). Wenn mapsUrl null ist, hinterlasse auch einen PR-Kommentar mit den fehlenden Maps-Links, damit ein Mensch sie ausfüllen kann. Keine KI/Assistenten-Zuschreibung in Commits oder dem PR.

Beende mit der Meldung der PR-URL.

Verwandte Skills