No updates detected yet. GitHub releases will appear here.
Koofi agent app
翻訳待ち
Loading the full README. The saved excerpt is shown below.
A consumer agent for one job: where should I go for coffee right now, and why?
People talk to it on a thin web chat, or later on WhatsApp. It is not an app-store app, not a marketing site, not a marketplace, and not a leads tool.
Owner: Amjad Puliyali. The real shop list still comes from him.Read the full README ↗A consumer agent for one job: where should I go for coffee right now, and why?
People talk to it on a thin web chat, or later on WhatsApp. It is not an app-store app, not a marketing site, not a marketplace, and not a leads tool.
Owner: Amjad Puliyali. The real shop list still comes from him.
/ is Arabic (وين ودّك تروح اليوم؟, Arabic chips, RTL). /en is English (Where do you want to go today?, English chips, LTR). Header switches with EN / عربي. Not a marketing site. Not both languages stacked in one bubble.popular selected by default). Off-home chip URLs (roaster, specialty, study, late) stay live. Tapping a vibe chip still returns three pick cards. Soft Places stays parked. Typing the other language still flips the reply. WhatsApp has no chip UI; typing the same Arabic or English phrase maps the same way.أبعد عن العليا / away from Olaya gets another spoken line and a new three from the remaining catalog — not a general chat.حطين, Hittin, al narjis, النرجس, Olaya, العليا, …) returns exactly three in-district cafe cards ranked by the locked popularity index: 0.6 × log-norm(Maps reviewCount) + 0.4 × log-norm(IG followers). Ranking uses the baked popularityIndex (same index as Most Popular). Missing IG followers are 0 / bottom — the catalog has no durable igFollowers field; do not scrape Instagram. A chip links to /coffee-shops/{district-slug} (EN: /en/coffee-shops/{slug}) for the full district list. Soft Places vibe matching / “ثلاث الليلة” stays parked. Al Izdihar / الازدهار is catalog-live for Slant Specialty Coffee; the 21 Sep sheet row stays dictionary_only, same as Al Falah. Do not invent extra Izdihar shops.wain.lol/h/{id} is the whole journey (/en/h/{id} is the English twin — same session, same pin state machine): Invite (one Ready location — موقعي / already-granted geo auto-Ready, Maps-share paste if denied — then اعزم خويك / Copy link), Waiting (ننتظر دبوس صاحبك. الثلاث تظهر هنا لحالها. / Waiting for your friend’s pin — three cafes will appear here.), Results (ثلاث قهاوي بينكم). After اعزم خويك the host replaces onto /h/{id} (EN host: /en/h/{id}) so host and guest share the session. Overlay GET: 1 pin → Waiting (host) or Invite (guest); 2+ pins or frozen shop_ids → the same three cards (refresh does not reshuffle). Waiting TTL is 45 minutes; completed sessions live 48 hours after results freeze. Expired shows clear copy plus Start a new Halfway — not a silent restart. Share results is the same /h/{id} (not /p/). No Save for later. Hero is pin–cup–pin (one cup). Lat/lng stay off the UI. Guest never copies the friend’s pin. Core API is locations: Location[] (N≥2); v1 UI is two people. Composer + أضف قهوة stay hidden while the flow is open. Soft Places stays parked.grok-4.6). The share unit is still the cards: name, one-line why, and a Google Maps pin. For a real shop the Maps click is Amjad’s mapsShareUrl short link, not a reconstructed lat/lng search. People forward that pin to go. The /c/[id] card is optional and secondary. If XAI_API_KEY is missing or the model call fails, the spoken line falls back to today’s heading copy. Cards still send.GOOGLE_PLACES_API_KEY is missing or the lookup fails, the rating row is hidden. Do not scrape Maps.SHOW_BEEN_HERE = false). Copy, localStorage mark, and picker “not as new” logic stay wired but the control is not user-facing. Flip the flag to show it again./c/[id]: name AR/EN, neighborhood, pin, vibe tags. Unclaimed shops stay a thin card. Verified shops unlock the richer Passport card (owner photos, brewing/note, owner-supplied hours only, thin offer, optional phone/IG, share, shared like, Maps CTA). Do not invent hours. Do not ask people to share a Koofi URL.SHOW_INVITE_CTA = false) until share-tonight strategy is locked. Invite sheet, mint, and invite_* events stay wired but are not user-facing. Prefill stays وين؟ أنا بـ {name} / wain? I'm at {name} + /c/{id}?from=tonight. Spoken وين in Arabic copy elsewhere is fine. Listing share + Maps stay on the card.SHOW_TONIGHT_CARD = false). Code and tonight_* events stay wired but are not user-facing.photoUrl is shown only if Amjad sets one. Do not scrape Maps photos.catalog.json.This is the beginning of the README. Read the rest at the original. Read the full README ↗