[{"data":1,"prerenderedAt":257},["ShallowReactive",2],{"\u002Fblog\u002Fsub-store-cloudflare\u002F:pl":3,"\u002Fblog\u002Fsub-store-cloudflare\u002F-surround:pl":152,"blog-all-posts:pl":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.pl.md","Przeniosłem agregację subskrypcji proxy na 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",{},"Korzystam z usług proxy od trzech, czterech lat i przez jakiś czas prowadziłem też własne węzły VPS. Zawsze było jedno irytujące: trzy czy pięć subskrypcji plus kilka własnych serwerów rozsianych w kliencie, dodawane jedna po drugiej, a reguły routingu trzeba było konfigurować od nowa w każdym kliencie. Nowe urządzenie, nowy klient albo zakładanie komuś z rodziny — i przechodzisz przez cały rytuał od nowa.",[14,18,19,20,27],{},"Potem pomyślałem: nie ma powodu, żeby zarządzać subskrypcjami osobno wewnątrz klientów. Zbierz je wszystkie w jeden link, zdefiniuj reguły po stronie serwera i pozwól klientowi po prostu subskrybować — czysto. Wcześniej korzystałem z podejścia Sub-Store, ale działało na własnym serwerze, a utrzymanie uważałem za uciążliwe. Więc tym razem napisałem własną wersję hostowaną na Cloudflare, nazwaną sub-store-cloudflare, open source na ",[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},"naprawdę-robi-tylko-jedną-rzecz","Naprawdę robi tylko jedną rzecz",[14,34,35],{},"Łączy wiele źródeł subskrypcji w jedną subskrypcję.",[14,37,38],{},"Konkretnie możesz do niego wrzucić kilka rzeczy:",[40,41,42,46,49],"ul",{},[43,44,45],"li",{},"Linki subskrypcji z kilku usług proxy",[43,47,48],{},"Tekst węzłów z własnego VPS (vless, trojan, ss, vmess — wszystko gra)",[43,50,51],{},"Można nawet wkleić tymczasową porcję węzłów",[14,53,54],{},"Po wejściu Worker je pobiera i usuwa duplikaty, filtruje według reguł, które mu podasz, a następnie w razie potrzeby zmienia nazwy, dodaje flagi i rozwiązuje domeny. Wszystko wychodzi połączone w jedną zbiorczą subskrypcję — klient subskrybuje ten jeden link i gotowe.",[14,56,57],{},"Reguły mieszkają po stronie serwera. W zestawie jest kilka popularnych szablonów Mihomo — acl4ssr, whitelist\u002Fblacklist Loyalsoldiera, ai-streaming i tym podobne — z grupami routingu i zestawami reguł skonfigurowanymi w chmurze. Wrzuć subskrypcję do klientów takich jak mihomo\u002Fclash, surge, sing-box, shadowrocket, a pobierzesz gotową subskrypcję z wbudowanymi regułami routingu — bez ręcznego pisania reguł i bez utrzymywania URL-i zestawów reguł po tej stronie.",[29,59,61],{"id":60},"dlaczego-akurat-cloudflare","Dlaczego akurat Cloudflare",[14,63,64],{},"Pragmatyczne powody:",[40,66,67,74,80],{},[43,68,69,73],{},[70,71,72],"strong",{},"Bez serwera."," Workers + D1, a darmowy limit wystarcza do użytku prywatnego — oszczędzasz i pieniądze na serwer, i utrzymanie.",[43,75,76,79],{},[70,77,78],{},"Domena workers.dev sama jest poza murem."," Twoje połączenie klienta po subskrypcję działa od razu — bez tej chorej matrioszki, gdzie „serwer jest za granicą, ale węzeł i tak potrzebuje drabiny, żeby ściągnąć własną subskrypcję\".",[43,81,82,85],{},[70,83,84],{},"Po wdrożeniu to panel administracyjny w sieci plus endpoint do pobierania."," Zmieniasz klienta na telefonie i wciąż możesz otworzyć stronę, żeby zmienić konfigurację.",[14,87,88],{},"Świadomie utrzymałem mały stos: Worker + Static Assets + D1 + Worker Secrets. KV, R2, Durable Objects, Queue, Cron są poza ścieżką krytyczną — im mniej, tym lepiej.",[29,90,92],{"id":91},"celowo-dwie-ścieżki-wdrożenia","Celowo dwie ścieżki wdrożenia",[14,94,95],{},"Pierwsza jest dla ludzi, którzy po prostu chcą używać: kliknij przycisk Deploy to Cloudflare w repozytorium. Cloudflare pobiera repo, tworzy Workera i D1, prosi o dwa tokeny i na koniec wręcza link zarządzania z tokenem. Krok po kroku, bez wiersza poleceń.",[14,97,98],{},"Druga jest dla mnie i dla ludzi, którzy lubią majsterkować: instalacja jednym kliknięciem z agentem AI.",[14,100,101,102,106],{},"Repo zawiera protokół agenta (AGENTS.md + SKILL w środku). Wpisujesz źródła subskrypcji, pożądane połączone subskrypcje i szablony reguł do lokalnego pliku konfiguracyjnego, uruchamiasz ",[103,104,105],"code",{},"pnpm run install:cloudflare",", a agent sprawdza Twój login do Cloudflare, tworzy bazę danych, zapisuje sekrety, migruje, wdraża, importuje konfigurację, weryfikuje linki i na koniec wręcza link zarządzania i link pobierania.",[14,108,109,110,113],{},"Swoją subskrypcję wdrożyłem dokładnie tą ścieżką, więc polecam tę drogę — mniej zachodu. Przy użyciu z Codex \u002F Claude Code po prostu skopiuj prompt z ",[103,111,112],{},"agent\u002Finstall.prompt.md"," w repozytorium.",[29,115,117],{"id":116},"dla-kogo-to-jest","Dla kogo to jest",[14,119,120],{},"Mówiąc wprost: jeśli masz więcej niż jedną usługę proxy plus kilka własnych węzłów i chcesz połączyć je w jedną subskrypcję do własnego użytku — to jest projekt dla ciebie. Jeśli dobrze ci się żyje z jedną usługą, naprawdę tego nie potrzebujesz.",[14,122,123],{},"Kod jest w pełni open source, AGPL. Interakcja frontendowa to ukłon w stronę oryginalnego Sub-Store; oryginał działa w kontenerze i pokrywa szerszy ekosystem klientów. Moja wersja to szczuplejsza forma natywna dla Cloudflare — łatwiejsza do modyfikacji i bezpośredniego wdrożenia, nie klon linia po linii.",[14,125,126],{},"Zainteresowani mogą przejrzeć repo — README jest dość kompletne, po prostu postępuj według kroków wdrożenia.",{"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","Połącz wiele usług proxy plus własne węzły w jedną subskrypcję, z regułami routingu skonfigurowanymi po stronie serwera — klient po prostu subskrybuje.","md",null,"pl",{},4,true,"\u002Fblog\u002Fsub-store-cloudflare",false,{"title":5,"description":136},"blog\u002Fsub-store-cloudflare.pl",[148,149,150],"Cloudflare","Obejście cenzury","Projekt open source","8Jvmbbc8278pAWaXgt3qMjMBJusXPt70CAPkIcZgmRM",[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","Po testowaniu Pi Agent, OMP, Codex i ZCode: dlaczego ostatecznie wybrałem OpenCode + OpenChamber","Retrospektywa wyboru Agent Harnessa: trzy kryteria — wygoda GUI, blokada dostawcy i swoboda dalszego rozwoju — wykluczyły Pi Agent, OMP, Codex i ZCode, a wybór ostatecznie padł na jądro OpenCode z interfejsem OpenChamber.","2026-08-06",6,[161,162],"AI Agent","Wybór narzędzi",{"path":164,"title":165,"description":166,"date":167,"minRead":159,"tags":168},"\u002Fblog\u002Fcloudflare-broke-stack","Najlepsze praktyki indie deva 2026: Cloudflare'owe kombo dla oszczędnych „od zera”","Technologiczny stos indie developera o zerowym koszcie: Codex pisze kod, GitHub trzyma wersje, Stripe przyjmuje płatności, frontend na TanStack Start, backend na Hono + Workers, baza D1, storage R2, cache KV — wszystko działa na Cloudflare.","2026-06-15",[148,169,170],"Indie development","Stos technologiczny",{"path":172,"title":173,"description":174,"date":175,"minRead":159,"tags":176},"\u002Fblog\u002Fdeepseek-api-web-search","DeepSeek ma w API wbudowane wyszukiwanie w sieci — darmowa oficjalna funkcja wyszukiwania przez Responses API","DeepSeek wbudował wyszukiwanie w sieci prosto w API: wywołaj deepseek-v4-flash przez interfejs Responses i zadeklaruj narzędzie web_search. Bez integracji z zewnętrzną wyszukiwarką, bez klucza API do wyszukiwania.","2026-08-05",[177,178,179],"DeepSeek","API","Narzędzia AI",{"path":181,"title":182,"description":183,"date":175,"minRead":184,"tags":185},"\u002Fblog\u002Fdeepseek-v4-flash-review","DeepSeek V4 Flash w wersji stabilnej, z praktyki: tani, szybki, 1M kontekstu, wbudowane wyszukiwanie","Kilka dni dogłębnego testowania stabilnej wersji DeepSeek V4 Flash: ekstremalnie tanio, szybko jak błyskawica, 1M kontekstu, oficjalne wbudowane wyszukiwanie w sieci, w pełni open source. Jedyna słabość to multimodalność — ale można ją załatać, łącząc inne modele.",7,[177,186,179],"Recenzja modelu",{"path":188,"title":189,"description":190,"date":167,"minRead":191,"tags":192},"\u002Fblog\u002Ffree-cloudflare","Jak darmowy użytkownik wycisnąć z Cloudflare wszystko — na ile realnie starcza darmowy plan?","Darmowy plan Cloudflare może unieść całą prywatną infrastrukturę internetową: DNS, CDN, Pages, Workers, KV, D1, R2, e-mail, Tunnel, AI Gateway i więcej.",8,[148,193,194],"Darmowy plan","Wdrożenie",{"path":196,"title":197,"description":198,"date":199,"minRead":191,"tags":200},"\u002Fblog\u002Fmodel-harness-decoupling","Harness first-party nie zawsze jest wersją zwycięską: w epoce modeli otwartych wybieraj model i Harness osobno","Używasz Claude? Bierzesz Claude Code. W epoce modeli otwartych ten instynkt wymaga aktualizacji. Przewaga first-party jest realna, ale wytrenowanie dobrego modelu i zbudowanie dobrego Harnessa to dwie różne dziedziny inżynierii — ten artykuł wyjaśnia, dlaczego model i Harness można już wybierać osobno, plus mapę pozycjonowania pięciu Harnessów.","2026-09-09",[161,201,162],"Harness",{"path":203,"title":204,"description":205,"date":199,"minRead":191,"tags":206},"\u002Fblog\u002Fopencode-productive-stack","Stabilnie, szybko, produktywnie, tanio: moje pełne zestawienie stacku AI Coding","OpenCode + OpenChamber + dwie subskrypcje DeepSeek V4 Flash: 15 projektów jednocześnie generuje kod, a limit ledwo drgnął. Rozkładam całą konfigurację na łopatki: przycinanie kontekstu, warstwowa pamięć, automatyzacja pulpitu oraz lekcja „trzymaj się oryginalnej pary”.",[207,208,209],"OpenCode","Programowanie z AI","Konfiguracja",{"path":211,"title":212,"description":213,"date":214,"minRead":215,"tags":216},"\u002Fblog\u002Fproduct-faxin-principle","Zasada pierwotnej intencji: dlaczego indie developer musi nauczyć się rezygnować","Dlaczego ruszasz? Dla kogo ruszasz? Który problem naprawdę chcesz rozwiązać? Ostrość produktu bierze się z tego, z czego masz odwagę zrezygnować.","2026-06-20",10,[217,169],"Myślenie produktowe",{"path":219,"title":220,"description":221,"date":214,"minRead":191,"tags":222},"\u002Fblog\u002Fproduct-pain-vs-itch","Nie wpadaj w uniesienie, gdy użytkownik mówi „świetne”: punkty bólu a punkty swędzenia","Ustna aprobata jest bezwartościowa. Jest tylko jeden twardy standard oceny popytu: to, co użytkownik jest gotów zapłacić.",[217,223],"Ocena popytu",{"path":225,"title":226,"description":227,"date":158,"minRead":228,"tags":229},"\u002Fblog\u002Fqwen-vision-for-deepseek","Dodawanie multimodalności DeepSeekowi: podejście wizyjne Qwen-3.7-Flash","DeepSeek V4 Flash nie ma multimodalności — co zrobić z rozumieniem obrazów? Po rozeznaniu rynku obecnie najkorzystniejszą cenowo opcją jest Qwen-3.7-Flash: rozpoznanie obrazu kosztuje niemal nic, a połączenie z V4 Flash łatuje tę lukę.",5,[177,230,186],"Multimodalność",{"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","TUI zabija twoją przepustowość poznawczą: czas rozbić „geekowy filtr” w AI Coding","Coraz więcej agentów kodujących z AI ściga się w wypuszczaniu TUI, wpychając interakcję z powrotem w terminalowy paradygmat z lat 80. i nazywając to „immersywnym” i „szanującym programistów”. Ten artykuł rozbiera na części trzy mechanizmy, którymi TUI systematycznie obniża przepustowość poznawczą — i wyjaśnia, dlaczego właściwym rozwiązaniem jest Web UI.",[208,238,239],"Projektowanie interakcji","Esej",{"path":241,"title":242,"description":243,"date":244,"minRead":159,"tags":245},"\u002Fblog\u002Fvalue-not-external","Dyskutowanie, czy coś ma wartość, samo w sobie jest bezwartościowe","Nasza wartość nie jest definiowana przez nikogo. W epoce AI — jak powinniśmy rozumieć samych siebie?","2026-06-18",[246,247],"Myślenie o AI","Esej humanistyczny",{"path":249,"title":250,"description":251,"date":252,"minRead":253,"tags":254},"\u002Fblog\u002Fx-growth-1000-followers","Ponad 1000 obserwujących w nieco ponad dobę — co zrobiłem","W czerwcu poważnie poprowadziłem konto na X i zdobyłem ponad 1000 obserwujących w nieco ponad dobę. Ten post zapisuje, co zrobiłem i jakie dostałem odpowiedzi.","2026-06-16",12,[255,256],"Prowadzenie X","Wzrost treści",1789752321004]