[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-81245":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":16,"stars7d":14,"stars30d":14,"stars90d":16,"forks30d":16,"starsTrendScore":16,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":10,"pushedAt":10,"updatedAt":29,"readmeContent":30,"aiSummary":31,"trendingCount":16,"starSnapshotCount":16,"syncStatus":32,"lastSyncTime":33,"discoverSource":34},81245,"marketing-extension","he4rt\u002Fmarketing-extension","he4rt","Chrome extension that passively captures X\u002FTwitter GraphQL responses to track community engagement. Exports structured JSON for He4rt Hub ingestion.","https:\u002F\u002Fheartdevs.com",null,"TypeScript",22,4,1,7,0,2.1,false,"main",true,[22,23,24,25,26,7,27,28],"analytics","chrome-extension","community","engagement-tracking","graphql","twitter","x","2026-06-12 02:04:12","# He4rt Analytics\n\nBrowser extension que captura passivamente as respostas GraphQL do Twitter\u002FX pra rastrear engajamento da comunidade He4rt Developers.\n\nFeita pra alimentar o **He4rt Hub** (Laravel) com dados estruturados de engajamento -- quem interage com nosso conteudo, como os posts performam, e onde o crescimento da comunidade ta acontecendo.\n\n## O Problema\n\nO Twitter\u002FX nao da pros community managers os dados que eles precisam. Voce ve likes e views tweet por tweet, mas nao consegue:\n\n- Exportar dados de engajamento em massa\n- Ver quais membros da comunidade interagem consistentemente com seu conteudo\n- Rastrear engajamento de replies em todos os posts\n- Cruzar favoriters com o banco de dados da comunidade\n\nEssa extensao roda em background enquanto voce navega no X, intercepta as respostas GraphQL que o app ja faz, e consolida tudo num JSON limpo pronto pra ingestao no banco.\n\n## Como Funciona\n\n```\n  X\u002FTwitter (browser)          Extension                    He4rt Hub (Laravel)\n  ┌─────────────────┐     ┌──────────────────┐          ┌──────────────────────┐\n  │                 │     │                  │          │                      │\n  │  Voce navega    │────►│  interceptor.js  │          │   API endpoint       │\n  │  o X normal     │     │  (MAIN world)    │          │   POST \u002Fanalytics    │\n  │                 │     │                  │          │                      │\n  │  Requests GQL   │     │  Patch no fetch()│          │   Ingere JSON:       │\n  │  acontecem      │     │  Clona response  │          │   - tweets           │\n  │  normalmente    │     │  PostMessage     │          │   - engajamento      │\n  │                 │     │                  │          │   - dados comunidade │\n  └─────────────────┘     ├──────────────────┤          │                      │\n                          │  content.js      │          └──────────┬───────────┘\n                          │  (ISOLATED world) │                    │\n                          │  Repassa pro BG  │                    │\n                          ├──────────────────┤          ┌─────────▼───────────┐\n                          │  background.js   │          │                     │\n                          │                  │  Export   │   Dashboard         │\n                          │  Filtra por      │  JSON    │   Metricas comunid. │\n                          │  handle tracked  │─────────►│   Engajamento       │\n                          │  Consolida       │          │   Performance       │\n                          │  Deduplica       │          │                     │\n                          └──────────────────┘          └─────────────────────┘\n```\n\n### Fluxo de Captura\n\n```\n USER                                    EXTENSION\n  │                                         │\n  │  👆 Digita \"He4rtDevs\" + Track          │\n  │ ──────────────────────────────────────► │\n  │                                         │  background: trackedHandle = \"He4rtDevs\"\n  │                                         │  chrome.storage.local.set()\n  │                                         │\n  │  📱 Abre x.com\u002FHe4rtDevs               │\n  │     e scrolla os tweets                 │\n  │ ──────────────────────────────────────► │\n  │                                         │  interceptor.js: fetch() interceptado\n  │                                         │  endpoint: UserTweets\n  │                                         │  filtra: author == \"He4rtDevs\" ✓\n  │                                         │  extrai: tweet_id, text, metrics\n  │                                         │  deduplica por tweet_id\n  │                                         │\n  │  👆 Clica nos likes de um tweet         │\n  │     e scrolla o modal                   │\n  │ ──────────────────────────────────────► │\n  │                                         │  endpoint: Favoriters\n  │                                         │  extrai: users com followers, badges\n  │                                         │  linka ao tweet_id via URL\n  │                                         │\n  │  👆 Abre popup → Export JSON            │\n  │ ──────────────────────────────────────► │\n  │                                         │  buildExportJSON()\n  │    ┌────────────────────────────────┐   │  consolida tweets + replies +\n  │    │ x-He4rtDevs-2026-05-19.json  │   │  favoriters + summary\n  │    │ (download automatico)         │   │\n  │    └────────────────────────────────┘   │\n```\n\n### O que Captura\n\n| Endpoint | O que extraimos |\n|---|---|\n| `UserTweets` | Todos os tweets do handle rastreado com metricas completas |\n| `UserByScreenName` | Dados do perfil (followers, bio, etc) |\n| `Favoriters` | Usuarios que curtiram tweets especificos |\n| `TweetDetail` | Threads de reply (replies da comunidade ao handle rastreado) |\n| Todos os outros GraphQL | Payloads raw guardados pra debug\u002Fuso futuro |\n\n## Instalacao\n\n1. Clone este repo\n2. Va em `chrome:\u002F\u002Fextensions\u002F`\n3. Ative o **Modo desenvolvedor**\n4. Clique em **Carregar sem compactacao** e selecione esta pasta\n\n## Uso\n\n### Capturando Dados\n\n1. Clique no icone da extensao\n2. Digite o handle que quer rastrear (ex: `He4rtDevs`) e clique **Track**\n3. Abra o perfil dessa conta no X\n4. Scroll pelos tweets -- a extensao captura tudo passivamente\n5. Pra capturar favoriters: clique no numero de likes e scroll pelo modal\n6. Abra o popup pra ver os tweets capturados com metricas\n\n### Exportando\n\nClique **Export JSON** pra baixar o arquivo estruturado:\n\n```json\n{\n  \"tracked_account\": {\n    \"screen_name\": \"He4rtDevs\",\n    \"name\": \"He4rt Developers\",\n    \"rest_id\": \"1098020856431824897\",\n    \"followers_count\": 20945,\n    \"statuses_count\": 2178\n  },\n  \"exported_at\": \"2026-05-19T00:15:00.000Z\",\n  \"tweets\": [\n    {\n      \"tweet_id\": \"2056491987205865474\",\n      \"text\": \"Reuniao semanal da @He4rtDevs...\",\n      \"type\": \"original\",\n      \"metrics\": {\n        \"favorite_count\": 8,\n        \"retweet_count\": 4,\n        \"reply_count\": 2,\n        \"quote_count\": 1,\n        \"bookmark_count\": 0,\n        \"view_count\": 354\n      },\n      \"hashtags\": [\"He4rtDevelopers\"],\n      \"user_mentions\": [{\"screen_name\": \"He4rtDevs\"}],\n      \"media_count\": 2,\n      \"source\": \"Twitter for iPhone\"\n    }\n  ],\n  \"community_replies\": [\n    {\n      \"tweet_id\": \"...\",\n      \"author\": {\n        \"screen_name\": \"membro_da_comunidade\",\n        \"rest_id\": \"...\",\n        \"followers_count\": 150\n      },\n      \"in_reply_to_tweet_id\": \"2056491987205865474\"\n    }\n  ],\n  \"favoriters_by_tweet\": {\n    \"2056491987205865474\": [\n      { \"rest_id\": \"...\", \"screen_name\": \"...\", \"following\": true, \"followed_by\": true }\n    ]\n  },\n  \"summary\": {\n    \"total_tweets\": 20,\n    \"total_original\": 15,\n    \"total_retweets\": 3,\n    \"total_community_replies\": 45,\n    \"total_likes\": 500,\n    \"total_views\": 15000,\n    \"avg_likes_per_original\": 33,\n    \"avg_views_per_original\": 1000,\n    \"unique_engagers\": 87,\n    \"top_tweet_by_likes\": \"2052386746126553531\",\n    \"top_tweet_by_views\": \"2051468028299153703\"\n  }\n}\n```\n\n## Arquitetura\n\n```\nhe4rt-analytics\u002F\n├── manifest.json        # Config da extensao (Manifest V3)\n├── interceptor.js       # Roda em MAIN world — patch no fetch\u002FXHR em x.com\n├── content.js           # Roda em ISOLATED world — ponte pagina \u003C-> background\n├── background.js        # Service worker — filtragem, consolidacao, export\n├── popup.html           # UI do popup da extensao\n├── popup.css            # Tema dark (estilo X)\n├── popup.js             # Logica do popup — tabs, render, export\n└── icons\u002F               # Icones da extensao\n```\n\n**Por que dois content scripts?**\n\nO X.com tem CSP restrito que bloqueia scripts inline. `interceptor.js` roda em `\"world\": \"MAIN\"` (contexto da pagina) pra acessar `window.fetch`. `content.js` roda em `\"world\": \"ISOLATED\"` (contexto da extensao) pra usar `chrome.runtime`. Comunicam via `window.postMessage`.\n\n## Integracao com He4rt Hub\n\nO JSON exportado foi desenhado pra ingestao direta no He4rt Hub (Laravel):\n\n```php\n\u002F\u002F Exemplo: artisan command pra ingerir JSON exportado\n$data = json_decode(file_get_contents($path), true);\n\n\u002F\u002F Upsert da conta\n$account = TwitterAccount::updateOrCreate(\n    ['rest_id' => $data['tracked_account']['rest_id']],\n    $data['tracked_account']\n);\n\n\u002F\u002F Upsert dos tweets\nforeach ($data['tweets'] as $tweet) {\n    Tweet::updateOrCreate(\n        ['tweet_id' => $tweet['tweet_id']],\n        [...$tweet, 'twitter_account_id' => $account->id]\n    );\n}\n\n\u002F\u002F Rastrear engajamento da comunidade\nforeach ($data['community_replies'] as $reply) {\n    CommunityEngagement::updateOrCreate(\n        ['tweet_id' => $reply['tweet_id']],\n        [\n            'author_rest_id' => $reply['author']['rest_id'],\n            'author_screen_name' => $reply['author']['screen_name'],\n            'type' => 'reply',\n        ]\n    );\n}\n\n\u002F\u002F Rastrear favoriters\nforeach ($data['favoriters_by_tweet'] as $tweetId => $users) {\n    foreach ($users as $user) {\n        CommunityEngagement::updateOrCreate(\n            ['tweet_id' => $tweetId, 'author_rest_id' => $user['rest_id']],\n            [\n                'author_screen_name' => $user['screen_name'],\n                'type' => 'like',\n                'is_mutual' => $user['following'] && $user['followed_by'],\n            ]\n        );\n    }\n}\n```\n\n## Roadmap\n\n- [ ] **Auto-scroll capture** -- scroll automatico pra capturar historico completo de tweets sem interacao manual\n- [ ] **Dashboard de metricas** -- graficos de engajamento e tendencias direto no popup da extensao\n- [ ] **Webhook\u002FAPI push** -- enviar dados capturados direto pra API do He4rt Hub ao inves de exportar JSON manualmente\n- [ ] **Parsing de TweetDetail** -- extrair threads de replies completas ao abrir tweets individuais\n- [ ] **Scoring de engajamento** -- rankear membros da comunidade por frequencia e qualidade de interacao\n\n## Licenca\n\nFerramenta interna pra gestao de comunidade da He4rt Developers.\n","He4rt Analytics 是一个Chrome浏览器扩展程序，用于被动捕获X\u002FTwitter的GraphQL响应来跟踪社区参与度。其核心功能包括在后台运行时拦截和解析X\u002FTwitter应用发出的GraphQL请求，并将收集到的数据（如谁与内容互动、帖子表现如何等）整理成结构化的JSON格式输出，以便被He4rt Hub（基于Laravel构建）进一步处理分析。该项目采用JavaScript开发，特别适合需要深入理解自己在Twitter\u002FX平台上社区动态的品牌或组织使用，尤其是在官方平台提供的数据分析工具无法满足需求时，通过此扩展可以更全面地了解和支持活跃成员，优化内容策略。",2,"2026-06-11 04:04:03","CREATED_QUERY"]