[{"data":1,"prerenderedAt":257},["ShallowReactive",2],{"\u002Fblog\u002Fsub-store-cloudflare\u002F:pt":3,"\u002Fblog\u002Fsub-store-cloudflare\u002F-surround:pt":152,"blog-all-posts:pt":153},{"id":4,"title":5,"author":6,"body":10,"date":135,"description":136,"extension":137,"image":138,"locale":139,"meta":140,"minRead":141,"navigation":142,"original":142,"path":143,"pinned":144,"seo":145,"source":138,"sourceUrl":138,"stem":146,"tags":147,"updated":138,"__hash__":151},"blog\u002Fblog\u002Fsub-store-cloudflare.pt.md","Migrei a agregação de assinaturas de proxy para a Cloudflare",{"name":7,"avatar":8},"Chen Dahuang",{"src":9,"alt":7},"\u002Favatar.jpg",{"type":11,"value":12,"toc":127},"minimark",[13,17,28,33,36,39,52,55,58,62,65,86,89,93,96,99,107,114,118,121,124],[14,15,16],"p",{},"Uso serviços de proxy há três ou quatro anos, e no meio desse tempo também montei meus próprios nós de VPS. Sempre teve uma coisa que me incomodava: três ou cinco assinaturas na mão, mais algumas máquinas próprias, tudo espalhado no cliente, adicionando uma por uma — e as regras de roteamento precisam ser reconfiguradas em cada cliente. Trocar de aparelho, trocar de cliente, instalar para alguém da família: recomeça tudo de novo.",[14,18,19,20,27],{},"Aí eu pensei: assinatura não precisa ser gerenciada solta dentro do cliente. Junta tudo numa única URL, as regras ficam travadas no servidor, e o cliente só assina — a vida fica limpa. O esquema do Sub-Store eu já usava antes, mas ele roda no seu próprio servidor, e eu achava a manutenção um saco. Então dessa vez escrevi uma versão que roda na Cloudflare, chamada sub-store-cloudflare, open source no ",[21,22,26],"a",{"href":23,"rel":24},"https:\u002F\u002Fgithub.com\u002Frealchendahuang\u002Fsub-store-cloudflare",[25],"nofollow","GitHub",".",[29,30,32],"h2",{"id":31},"na-prática-ela-faz-só-uma-coisa","Na prática, ela faz só uma coisa",[14,34,35],{},"Junta múltiplas fontes de assinatura numa única assinatura.",[14,37,38],{},"Concretamente, você pode jogar algumas coisas lá dentro:",[40,41,42,46,49],"ul",{},[43,44,45],"li",{},"As URLs de assinatura de vários serviços de proxy",[43,47,48],{},"O texto dos nós do seu próprio VPS (vless, trojan, ss, vmess — qualquer um serve)",[43,50,51],{},"Até colar um trecho temporário de nós",[14,53,54],{},"Depois disso, o Worker puxa, remove duplicados, filtra conforme as regras que você deu, e ajusta como precisar: renomeia, adiciona bandeira, resolve domínio. Na saída, tudo entra numa assinatura combinada — o cliente só assina aquela URL e pronto.",[14,56,57],{},"As regras eu deixei no servidor. Vêm com alguns templates Mihomo usados com frequência — acl4ssr, whitelist\u002Fblacklist do Loyalsoldier, ai-streaming e afins — com grupos de roteamento e conjuntos de regras configurados na nuvem. Você joga a assinatura em clientes como mihomo\u002Fclash, surge, sing-box, shadowrocket, e o que baixa já é o produto pronto com as regras de roteamento embutidas — sem precisar escrever regra manualmente nem manter URL de rule set do outro lado.",[29,59,61],{"id":60},"por-que-na-cloudflare-especificamente","Por que na Cloudflare, especificamente",[14,63,64],{},"Os motivos são bem pragmáticos:",[40,66,67,74,80],{},[43,68,69,73],{},[70,71,72],"strong",{},"Sem servidor."," Workers + D1: a franquia grátis dá conta do uso pessoal, e você economiza dinheiro de servidor e manutenção.",[43,75,76,79],{},[70,77,78],{},"O domínio workers.dev já está fora do muro."," O cliente conectando ali para puxar a assinatura funciona direto — sem aquele absurdo de \"servidor está fora, mas o nó ainda precisa de escada para puxar a própria assinatura\".",[43,81,82,85],{},[70,83,84],{},"Depois do deploy é só um painel web de gestão mais um endpoint de download."," Troca de cliente no celular e você ainda abre a página para mudar a configuração.",[14,87,88],{},"A stack eu mantive enxuta de propósito: Worker + Static Assets + D1 + Worker Secrets. KV, R2, Durable Objects, Queue, Cron não estão no caminho crítico — quanto menos, melhor.",[29,90,92],{"id":91},"o-deploy-foi-pensado-em-duas-trilhas","O deploy foi pensado em duas trilhas",[14,94,95],{},"A primeira é para quem só quer usar: é só clicar no botão Deploy to Cloudflare do repositório. A própria Cloudflare puxa o repo, cria o Worker, cria o D1, te pede dois tokens, e no fim te entrega um link de gestão com token. Passo a passo, sem encostar em linha de comando.",[14,97,98],{},"A segunda é pra mim e para quem gosta de mexer: instalação de um clique com AI Agent.",[14,100,101,102,106],{},"O repositório vem com um protocolo de agente (AGENTS.md + um SKILL dentro de agent). Você escreve as fontes de assinatura, as assinaturas combinadas que quer e os templates de regra num arquivo de configuração local, roda ",[103,104,105],"code",{},"pnpm run install:cloudflare",", e o agente cuida de verificar seu login na Cloudflare, criar o banco, escrever os secrets, migrar, fazer deploy, importar a configuração, validar os links e, no fim, entregar o link de gestão e o link de download nas suas mãos.",[14,108,109,110,113],{},"Eu mesmo soube da linha assim, então recomendo essa trilha — menos dor de cabeça. Para usar com Codex \u002F Claude Code, é só copiar o prompt que está em ",[103,111,112],{},"agent\u002Finstall.prompt.md"," no repositório.",[29,115,117],{"id":116},"para-quem-serve","Para quem serve",[14,119,120],{},"Falando reto: se você tem mais de um serviço de proxy, mais alguns nós próprios, e quer fundir tudo numa única assinatura para uso próprio — esse projeto é para você. Se você vive tranquilamente com um único serviço, realmente não precisa disso.",[14,122,123],{},"O código é 100% open source, AGPL. A interação do frontend presta homenagem ao Sub-Store original; o original roda em container e cobre um ecossistema maior de clientes. O meu é uma forma mais enxuta, Cloudflare-native — mais fácil de modificar e de fazer deploy direto, sem ser uma clonagem item por item.",[14,125,126],{},"Quem tiver interesse pode bisbilhotar o repositório — o README é bem completo, é seguir os passos do deploy.",{"title":128,"searchDepth":129,"depth":129,"links":130},"",2,[131,132,133,134],{"id":31,"depth":129,"text":32},{"id":60,"depth":129,"text":61},{"id":91,"depth":129,"text":92},{"id":116,"depth":129,"text":117},"2026-06-28","Vários serviços de proxy mais os seus próprios nós fundidos em uma única assinatura, com as regras de roteamento configuradas no servidor — o cliente só assina.","md",null,"pt",{},4,true,"\u002Fblog\u002Fsub-store-cloudflare",false,{"title":5,"description":136},"blog\u002Fsub-store-cloudflare.pt",[148,149,150],"Cloudflare","Contorno da rede","Projeto open source","_OrnduPzNntiYXmAgSamqC_0pC2dA5c0ZqEdfrWtnLw",[138,138],[154,163,171,180,187,195,202,210,218,224,231,233,240,248],{"path":155,"title":156,"description":157,"date":158,"minRead":159,"tags":160},"\u002Fblog\u002Fagent-harness-selection","Testei Pi Agent, OMP, Codex, ZCode — no fim escolhi OpenCode + OpenChamber","Retrospectiva da escolha de Agent Harness: critérios de experiência GUI, vendor lock-in e liberdade de customização que eliminaram Pi Agent, OMP, Codex e ZCode, para no fim escolher o núcleo OpenCode + a interface OpenChamber.","2026-08-06",6,[161,162],"AI Agent","Escolha de ferramenta",{"path":164,"title":165,"description":166,"date":167,"minRead":159,"tags":168},"\u002Fblog\u002Fcloudflare-broke-stack","Melhores práticas de dev independente em 2026: o combo \"pobretão\" da Cloudflare","Stack de custo zero para devs independentes: Codex escreve código, GitHub cuida da versão, Stripe recebe o dinheiro; front em TanStack Start, backend com Hono + Workers, banco D1, storage R2, cache KV — tudo rodando na Cloudflare.","2026-06-15",[148,169,170],"Desenvolvimento independente","Stack tecnológica",{"path":172,"title":173,"description":174,"date":175,"minRead":159,"tags":176},"\u002Fblog\u002Fdeepseek-api-web-search","Busca na web embutida na API do DeepSeek — Responses API de graça com busca oficial","O DeepSeek embutiu busca na web na API oficial: é só chamar o deepseek-v4-flash pelo endpoint Responses declarando a ferramenta web_search, sem integrar buscador de terceiros e sem pedir chave de busca.","2026-08-05",[177,178,179],"DeepSeek","API","Ferramenta de IA",{"path":181,"title":182,"description":183,"date":175,"minRead":184,"tags":185},"\u002Fblog\u002Fdeepseek-v4-flash-review","DeepSeek V4 Flash oficial — experiência aprofundada: barato, rápido, 1M de contexto, busca embutida","Dias de uso intenso do DeepSeek V4 Flash oficial: barato ao extremo, rápido que dá gosto, 1M de contexto, busca na web oficial embutida e totalmente open source. O único senão é multimodal — mas dá para cobrir combinando com outros modelos.",7,[177,186,179],"Review de modelo",{"path":188,"title":189,"description":190,"date":167,"minRead":191,"tags":192},"\u002Fblog\u002Ffree-cloudflare","Como usuário gratuito, como espremer a Cloudflare até a última gota — até onde o free tier realmente grátis?","O plano gratuito da Cloudflare sustenta a infraestrutura pessoal inteira: DNS, CDN, Pages, Workers, KV, D1, R2, email, Tunnel, AI Gateway e mais.",8,[148,193,194],"Franquia grátis","Deploy",{"path":196,"title":197,"description":198,"date":199,"minRead":191,"tags":200},"\u002Fblog\u002Fmodel-harness-decoupling","O Harness first-party nem sempre é a resposta: na era dos modelos abertos, escolha o modelo e o Harness separadamente","Usa Claude, vai de Claude Code? Na era dos modelos abertos, esse instinto pede um upgrade. A vantagem first-party é real, mas treinar um bom modelo e construir um bom Harness são duas engenharias diferentes — este artigo explica por que modelo e Harness já podem ser escolhidos separadamente, com um mapa de posicionamento de cinco Harness.","2026-09-09",[161,201,162],"Harness",{"path":203,"title":204,"description":205,"date":199,"minRead":191,"tags":206},"\u002Fblog\u002Fopencode-productive-stack","Estável, rápido, produtivo, barato: meu stack de AI Coding documentado","OpenCode + OpenChamber + duas assinaturas DeepSeek V4 Flash: 15 projetos rodando código ao mesmo tempo e a cota mal se mexeu. Toda a configuração aberta aqui — poda de Context, memória em camadas, automação de desktop e a lição de 'ficar com a combinação original'.",[207,208,209],"OpenCode","Programação IA","Configuração",{"path":211,"title":212,"description":213,"date":214,"minRead":215,"tags":216},"\u002Fblog\u002Fproduct-faxin-principle","O princípio do \"fa'xin\": por que o dev independente precisa aprender a abrir mão","Por que você começa? Para quem você começa? Qual problema você realmente quer resolver? A capacidade de um produto ser afiado vem de saber o que largar e o que abandonar.","2026-06-20",10,[217,169],"Pensamento de produto",{"path":219,"title":220,"description":221,"date":214,"minRead":191,"tags":222},"\u002Fblog\u002Fproduct-pain-vs-itch","Usuário diz \"caralho, que foda\" e você se empolga: dor vs. coceira","Aprovação verbal não vale nada. Para julgar necessidade existe só um critério duro: ver o que o usuário está disposto a pagar.",[217,223],"Julgamento de necessidade",{"path":225,"title":226,"description":227,"date":158,"minRead":228,"tags":229},"\u002Fblog\u002Fqwen-vision-for-deepseek","Dando multimodal ao DeepSeek: solução de visão com Qwen-3.7-Flash","O DeepSeek V4 Flash não tem multimodal. E ler imagem, como fica? Na minha pesquisa, a opção com melhor custo-benefício hoje é o Qwen-3.7-Flash: reconhecer uma imagem custa quase nada e, combinado com o V4 Flash, cobre a lacuna.",5,[177,230,186],"Multimodal",{"path":143,"title":5,"description":136,"date":135,"minRead":141,"tags":232},[148,149,150],{"path":234,"title":235,"description":236,"date":199,"minRead":184,"tags":237},"\u002Fblog\u002Ftui-cognitive-bandwidth","A TUI está matando sua banda cognitiva: está na hora de quebrar o “filtro geek” do AI Coding","Um bando de AI Coding Agents disputando quem sobe TUI primeiro, empurrando a interação de volta ao paradigma de terminal dos anos 80 e ainda chamando isso de “imersivo” e “respeita o programador”. Este artigo disseca os três mecanismos pelos quais a TUI reduz sistematicamente sua banda cognitiva — e por que o Web UI é a resposta certa.",[208,238,239],"Design de interação","Ensaio",{"path":241,"title":242,"description":243,"date":244,"minRead":159,"tags":245},"\u002Fblog\u002Fvalue-not-external","Discutir se algo tem valor é, em si, algo sem valor","Nosso valor não é definido por ninguém. Na era da IA, como a pessoa deve se entender, afinal?","2026-06-18",[246,247],"Reflexão sobre IA","Ensaio humano",{"path":249,"title":250,"description":251,"date":252,"minRead":253,"tags":254},"\u002Fblog\u002Fx-growth-1000-followers","Mais de 1000 seguidores em pouco mais de um dia — o que eu fiz","Em junho, comecei a levar o X a sério e ganhei 1000+ seguidores em pouco mais de um dia. Este post registra o que eu fiz na ocasião e os retornos que recebi.","2026-06-16",12,[255,256],"Operação no X","Crescimento de conteúdo",1789752315399]