Cannabivo to międzynarodowy katalog i centrum informacji o klubach Cannabis, coffeeshopach i lounge’ach — 13,573 kluby w 10 krajach, w 18 językach.
Cannabivo to międzynarodowy katalog informacji i centrum wiadomości dla legalnych klubów społecznościowych Cannabis, holenderskich coffeeshopów i salonów dla palących — miejsce do wyszukiwania, odkrywania i łączenia się dzięki przejrzystym, aktualnym, wielojęzycznym informacjom. To, co następuje, jest pełną wersją tej historii: skąd wzięło się Cannabivo, czym się stało i dokładnie jak zostało zbudowane.
Luka, którą zobaczyliśmy w 2024 roku
Jak „lepszy katalog dla Niemiec i Hiszpanii” przerodził się w platformę produkcyjną obejmującą dziesięć krajów, osiemnaście języków i ćwierć miliona stron — oraz najnowocześniejszą inżynierię, która ją utrzymuje.
Katalog może być czymś więcej niż listą. Jeśli uczyni się go legalnym, wielojęzycznym, zweryfikowanym, prywatnym i technicznie poważnym, przestaje być listą. Staje się infrastrukturą.
„Społecznościowe kluby Cannabis, coffeeshopy i lounge’e dla palących — jeden międzynarodowy katalog i centrum wiadomości.” To nasze jednozdaniowe zobowiązanie i celowo sformułowaliśmy je bez ozdobników. Cannabivo nie jest kampanią konsumpcyjną, nie jest marketplace’em Cannabis i nie jest kolejnym cienkim serwisem z ogłoszeniami, sklejanym z kopiowanych adresów. To międzynarodowy katalog informacji o legalnych klubach społecznościowych Cannabis, holenderskich coffeeshopach i salonach dla palących — zbudowany po to, aby ludzie mogli Szukaj → Odkrywaj → Łącz się dzięki informacjom przejrzystym, aktualnym i dostępnym w ich własnym języku.
Cel sięga głębiej niż katalog. Cannabivo staje się infrastrukturą dla społeczności CSC: prywatne z założenia, międzynarodowe w zasięgu, napędzane przez społeczność i dostępne w 18 językach. Platforma obsługuje już 225,792 stron, 211,397 stron geolokalizacyjnych i 13,573 wpisów klubów w 10 krajach. Na tym opiera się także rozbudowana wiki o Cannabis, strony edukacyjne i profilaktyczne, system wiadomości, automatyczne aktualizacje klubów, forum społeczności oraz agent wsparcia AI podłączony do realnych narzędzi. Pod spodem działa w pełni autorska architektura bez frameworkowego rdzenia: nowoczesne standardy webowe, trwałe procesy PHP, HTTP/3, najsurowsza analiza statyczna, jaką udało się skonfigurować, własna analityka pierwszej strony i jeden typowany kontrakt PHP → TypeScript → Dart współdzielony przez web i mobile.
To długa wersja tej historii: skąd wzięło się Cannabivo, czym jest dziś i — szczegółowo — jak zostało zbudowane.
Legalizacja w Niemczech na początku 2024 roku ujawniła coś, co łatwo było zignorować: internetowy opis klubów społecznościowych Cannabis w żaden sposób nie był gotowy na rzeczywistość, która nadchodziła zgodnie z harmonogramem. Dla doświadczonego dewelopera webowego większość tego, co istniało, wyglądała na półprodukt — rozproszona, niekompletna, źle zlokalizowana, technicznie przestarzała i zbyt uboga, by komukolwiek naprawdę pomóc.
Pytania, jakie zadawali ludzie, nie były trudne. Gdzie są legalne kluby? Które dane są aktualne? Co nowa osoba powinna zrozumieć przed kontaktem z klubem? Co jest faktami, co jest nieaktualne, a co po prostu skopiowano skądinąd? Zbyt często odpowiedzi rozrzucone były po słabych wizytówkach, fragmentach tłumaczonych maszynowo i stronach, które wyraźnie nigdy nie były budowane dla społeczności, którą rzekomo miały obsługiwać.
Pierwszy pomysł był skromny: lepszy katalog dla Niemiec i Hiszpanii. Ale im dokładniej przyglądaliśmy się sytuacji, tym wyraźniej rysował się wzorzec. Społeczność CSC nie potrzebowała kolejnej listy miejsc. Potrzebowała wielojęzycznej, ostrożnej prawnie, technicznie niezawodnej warstwy informacji — takiej, która może skalować się kraj po kraju, a jednocześnie zachować precyzję na poziomie miasta, regionu, pojedynczego klubu, artykułu, wpisu FAQ i języka.
Pełny rozwój we własnym zakresie rozpoczął się późnym latem/jesienią 2024 roku. Cannabivo wystartowało w lutym 2026 roku, od pierwszego dnia w wszystkich 18 językach, i od tego czasu było poprawiane niemal codziennie. Ta kolejność jest tu kluczowa: wsparcie wielojęzyczne nigdy nie zostało dołożone po starcie. Zostało wlone w fundament — bazę danych, adresy URL, routing, warstwę SEO — już od pierwszego commita.
To, co zaczęło się jako koncepcja katalogu, napędzane przez rozwój wspierany przez AI, urosło do międzynarodowej platformy obejmującej Argentynę, Kolumbię, Niemcy, Maltę, Niderlandy, Republikę Południowej Afryki, Hiszpanię, Szwajcarię, Tajlandię i Urugwaj. Zasięg każdego kraju wciąż jest w budowie i mówimy to świadomie. Ale skala produkcyjna jest już realna, a cel średnioterminowy nie budzi wątpliwości: objąć każdy kraj, w którym Cannabis jest zalegalizowane albo przynajmniej zdekryminalizowane, w tym kraje z programami pilotażowymi, takie jak Szwajcaria, która jest już uwzględniona.
Czym Cannabivo jest dziś
Cannabivo działa w produkcji i jest aktywnie utrzymywane. Potwierdzona migawka produkcyjna z 2026-06-13 opisuje platformę, która dawno już opuściła obszar prototypu.

| Metryka produkcyjna | Aktualna liczba |
|---|---|
| Łączna liczba stron | 225,792 |
| Strony geolokalizacyjne | 211,397 |
| Wpisy klubów | 13,573 |
| Dedykowane strony szczegółów klubów | 13,573 |
| Artykuły wiki o Cannabis | 106 |
| Kategorie wiki | 9 |
| Wpisy FAQ | 82 |
| Kategorie FAQ | 11 |
| Opublikowane artykuły redakcyjne | 15 |
| Automatyczne wpisy newsowe z aktualizacjami klubów | 275 |
| Zarejestrowani użytkownicy | 1,216 |
| Wątki forum | 170 |
Żadna z tych liczb nie jest próżna. Każda z nich wynika z decyzji produktowej.
Duży katalog potrzebuje stron geolokalizacyjnych, bo ludzie szukają lokalnie. Potrzebuje stron szczegółowych, bo każdy klub zasługuje na kontekst, a nie na jedną linię na liście. Potrzebuje wielojęzycznych adresów URL, bo użytkowników międzynarodowych nigdy nie wolno traktować jak sprawy drugorzędnej. Potrzebuje stałej troski, bo wpisy starzeją się w chwili, gdy nikt już o nie nie dba. Potrzebuje stron edukacyjnych, bo jakość informacji jest tu istotą. I potrzebuje forum, bo społeczność CSC to nie tylko problem wyszukiwania — to rozmowa.
Zweryfikowany międzynarodowy katalog
Katalog obecnie zawiera 13,573 klubów w 10 krajach:

| Kraj | Kluby |
|---|---|
| Tajlandia | 9,489 |
| Hiszpania | 1,081 |
| Urugwaj | 810 |
| Niemcy | 710 |
| Niderlandy | 673 |
| Argentyna | 495 |
| Republika Południowej Afryki | 243 |
| Kolumbia | 41 |
| Malta | 18 |
| Szwajcaria | 13 |
Tajlandia ma dziś największy udział w bazie, i ta skala jest prawdziwą siłą. Hiszpania, Niemcy, Niderlandy, Urugwaj, Argentyna i pozostałe kraje przychodzą z odmiennym kontekstem prawnym, innymi lokalnymi oczekiwaniami i innymi wzorcami odkrywania. Poważny międzynarodowy katalog musi utrzymać całą tę złożoność naraz, nie rozpadając się przy tym na szum.
Cannabivo prezentuje swoje wpisy jako zweryfikowane, a weryfikacja jest jednym z głównych zobowiązań platformy — nie etykietą, którą naklejamy lekkomyślnie. Przy tej skali utrzymywanie tej obietnicy jest równie mocno kwestią systemów, co dyscypliny redakcyjnej. Nieustannie dbamy o to, by wpisy były dokładne i aktualne: nowe otwarcia, zamknięcia, zmienione adresy, zmienione szczegóły. Celem nie jest zamrożenie katalogu w czasie, lecz utrzymywanie go w zgodzie z realnym światem, gdy ten się zmienia. Katalog, który zestarzeje się w dniu publikacji, jest gorszy niż brak katalogu.
Wokół wpisów działa interaktywna mapa z wyszukiwaniem, osobne wyszukiwanie klubów oraz strona główna zaprojektowana pod kątem świeżości — ostatnio dodane kluby, popularne miasta, huby dla poszczególnych krajów i strumień na żywo z wiadomościami oraz aktualizacjami klubów.
Wiki, edukacja i profilaktyka — bez reklamowych komunikatów
Zwykły katalog może powiedzieć, gdzie coś jest. Cannabivo jest zbudowane po to, by powiedzieć, co to oznacza.
Wiki o Cannabis zawiera 106 artykułów w 9 kategoriach, z pogłębionymi tekstami o botanice, historii, prawie i wiedzy związanej z konsumpcją. To nie jest słownik nadmuchany po to, by wyglądał na obszerny; został zbadany i napisany tak, by samodzielnie się obronić. Obok niego stoją strony edukacyjne i profilaktyczne — faktograficzne, wolne od reklam i zbudowane po to, by wspierać zrozumienie, a nie popychać produkt.
To zdanie nie jest ozdobą. Cannabivo jest katalogiem informacji. Nie składamy żadnych deklaracji medycznych i nie zachęcamy do konsumpcji. Budujemy dostęp do ustrukturyzowanych, wielojęzycznych, legalnych informacji i celowo trzymamy tę granicę, bo od niej zależy wiarygodność całej platformy. Zarówno wiki, jak i sekcje edukacji i bezpiecznego użycia będą dalej rosły — więcej artykułów, więcej obrazów, więcej wideo.
Wiadomości, automatyczne aktualizacje i społeczność
Sekcja wiadomości jest nowa i już bardzo aktywna. Łączy opracowane redakcyjnie artykuły z automatycznymi newsami o aktualizacjach klubów. W obecnej migawce produkcyjnej Cannabivo zawiera 15 opublikowanych artykułów redakcyjnych i 275 automatycznych wpisów newsowych o aktualizacjach klubów.
To połączenie jest celowe. Artykuły redakcyjne dostarczają szerszego kontekstu — zmian polityki, zmian prawnych, momentów kulturowych. Automatyczne newsy o aktualizacjach klubów istnieją dlatego, że katalog nigdy nie stoi w miejscu: kluby się otwierają, dane są korygowane, adresy się zmieniają. Żywy strumień pozwala ludziom widzieć te zmiany zamiast zostawiać cichą bazę danych, która mutuje pod spodem.
Jest też forum społecznościowe i ono rośnie — dotąd 1,216 zarejestrowanych użytkowników i 170 wątków forum. Forum nie jest doczepką. Kultura CSC jest jednocześnie lokalna, prawna, praktyczna i społeczna. Katalog pomaga ludziom znaleźć informacje; społeczność pomaga im je przedyskutować, porównać notatki i uczyć się od siebie nawzajem. Oba elementy należą pod jeden dach.
Pogawędka AI ma prawdziwe narzędzia
Czat wsparcia Cannabivo nie jest dekoracyjnym chatbotem doklejonym do rogu strony. To wyszkolony na Cannabivo agent wsparcia AI, dostępny w sieci i w aplikacji, podłączony do rzeczywistych narzędzi platformy, a nie pozostawiony samemu sobie.
W praktyce agent potrafi:
1. Znaleźć konkretną stronę Cannabivo i przekazać prawdziwy, kanoniczny link — w języku użytkownika, nigdy zmyślonego URL-a. 2. Wyszukiwać kluby po nazwie, mieście, regionie lub odległości, w tym sprawdzać, czy klub jest otwarty właśnie teraz. 3. Odpowiadać na podstawie bazy wiedzy FAQ. 4. Otworzyć prawdziwy ticket wsparcia, gdy nie może pomóc — z kategorią, tytułem i opisem — aby człowiek mógł go przejąć.
Różnica jest tu istotą rzeczy: zamiast zgadywać, agent działa w jasno wyznaczonych granicach platformy i zwraca linki oraz kluby, które rzeczywiście istnieją. Z czasem sam się też doskonali, gdy rośnie FAQ, bo system FAQ jest dynamicznie utrzymywany i samodoskonalący się — każda luka, którą zamykamy, staje się wiedzą, z której agent może skorzystać następnym razem. W tle czat działa przez relay WebSocket z Redis pub/sub i strumieniowanymi odpowiedziami, a model można konfigurować per wdrożenie.
Filozofia jest prosta: AI ma zdejmować tarcie, ale nie może zamieniać się w czarną skrzynkę. Jeśli agent potrafi odpowiedzieć wiarygodnie na podstawie własnych danych Cannabivo, powinien to zrobić. Jeśli nie potrafi, powinien przekazać pytanie do prawdziwego procesu wsparcia — nie wymyślać odpowiedzi tylko po to, by zagłuszyć ciszę.
Jedna platforma, osiemnaście języków
Cannabivo wystartowało we wszystkich 18 językach już pierwszego dnia. To nie była najłatwiejsza droga. To była właściwa.

Serwis obsługuje obecnie 225,792 strony, a każda z nich istnieje we wszystkich 18 językach. Na poziomie bazy danych to mniej więcej 4 miliony wierszy tłumaczeń stron — podstawowa tabela `pages` plus 17 tabel dla poszczególnych języków, zweryfikowanych w idealnej synchronizacji. Platforma obsługuje też 211,397 stron geolokalizacyjnych — miasta i regiony — z których każda jest w pełni przetłumaczona na wszystkie 18 języków.
To nie jest tłumaczenie przez prefiks URL. Nie wstawiamy `/de/` przed angielski adres URL i nie udajemy, że to lokalizacja. Każdy język dostaje własny, zlokalizowany slug URL dla każdej strony. Na przykład:
- `/news/2`
- `/de/nachrichten/2`
Ta struktura ma pełne wsparcie `hreflang` i prawdziwy układ od prawej do lewej dla arabskiego. Arabski tutaj nie jest „angielskim tekstem zapisanym arabskimi słowami” — dostaje układ RTL dopasowany do języka, powiązany tak samo ze stroną, głową SEO i interfejsem.
Platforma jest przede wszystkim anglojęzyczna, ale nigdy wyłącznie angielska, ani w duchu, ani w strukturze. Pełna powierzchnia językowa obejmuje angielski, niemiecki, francuski, hiszpański, włoski, polski, arabski, czeski, hindi, węgierski, japoński, koreański, portugalski, portugalski (Brazylia), rosyjski, turecki i chiński — z arabskim obsługiwanym od prawej do lewej.
Dlaczego to ma aż takie znaczenie? Bo społeczność CSC nie jest ograniczona do jednego języka, jednego kraju ani jednego modelu prawnego. Użytkownik w Niemczech, właściciel klubu w Hiszpanii, czytelnik porównujący podejścia pilotażowe w Szwajcarii, podróżny sprawdzający kontekst prawny w Urugwaju — żadne z tych osób nie powinno być zmuszane do doświadczenia wyłącznie po angielsku, by dostać prostą odpowiedź.
Wielojęzyczna infrastruktura zmienia też to, co może zrobić klub. Właściciel może napisać opis raz, wygładzić go przy pomocy asystenta pisania AI, jeśli chce, zapisać go i przetłumaczyć na wszystkie 18 języków jednym kliknięciem. To nie jest tylko wygoda. To międzynarodowa wyszukiwalność, która w innym wypadku byłaby poza zasięgiem małego lokalnego klubu.
Tłumaczenie nie jest funkcją odstawioną na bok Cannabivo. Przechodzi przez bazę danych, adresy URL, warstwę SEO, UI i przepływ pracy właściciela klubu.
Dla klubów: Club Manager jest już wdrożony
Cannabivo jest budowane dla społeczności, a społeczność obejmuje także ludzi, którzy rzeczywiście prowadzą kluby. Club Manager jest już wdrożony — pełny edytor samoobsługowy wewnątrz konta członka, gdzie właściciel zarządza własnym wpisem bez potrzeby jakiejkolwiek wiedzy technicznej.

Jest najpierw mobilny, bo większość właścicieli klubów nie zarządza swoją obecnością publiczną zza biurka. Muszą poprawić szczegół w minutę, z telefonu, który już mają w ręku.
Club Manager obejmuje praktyczne elementy, które sprawiają, że wpis naprawdę jest użyteczny:
- Opis i slogan, z asystentem pisania AI do przygotowania szkicu i wygładzania
- Tłumaczenie jednym kliknięciem na wszystkie 18 języków
- Logo, obraz główny i galeria z możliwością zmiany kolejności oraz przycinaniem obrazów
- Godziny otwarcia
- Lokalizacja i przeciągana pinezka na mapie
- Dane kontaktowe
- Około 11 pól kanałów społecznościowych
- Szczegóły członkostwa
- Selektor 22 udogodnień
Każda sekcja zapisuje się osobno — bez surowego JSON-a, bez zadania domowego z SEO, bez obliczeń proporcji obrazów po stronie właściciela. Własność jest egzekwowana po stronie serwera przy każdym zapisie, a platforma nigdy nie ufa identyfikatorowi dostarczonemu przez klienta, więc żaden właściciel nie może zajrzeć do klubu innego.
To właśnie tutaj katalog Cannabivo i jego wielojęzyczna architektura spotykają codzienną rzeczywistość prowadzenia klubu. Dobry wpis nie powinien wymagać zatrudnienia agencji webowej. Nie powinien też wymagać od właściciela zrozumienia SEO, proporcji obrazów, potoków tłumaczeń ani danych strukturalnych. Edytor istnieje po to, by dobra prezentacja była domyślna, a nie była nagrodą za umiejętności techniczne.
Premium Club Microsites są w backlogu
Kolejnym poziomem tej wizji są Premium Club Microsites — obecnie w backlogu i jeszcze nie zbudowane.
Pomysł jest prosty: każdy premium, zgłoszony klub powinien móc otrzymać dopracowaną, pierwszopartyjną stronę główną na własnej subdomenie Cannabivo.
{club}.cannabivo.com
Standard, do którego dążymy, to „zachwycający domyślnie”: starannie dobrane presety, pełne SEO w 18 językach i strona podłączona do tych samych danych wpisu, zamiast do osobnego systemu, który klub musiałby ręcznie utrzymywać w synchronizacji. Zaktualizuj informacje raz, a zarówno katalog, jak i microsite odzwierciedlą to samo jedno źródło prawdy.
Czas tu jest dobrany świadomie. Club Manager jest wdrożony. Premium Club Microsites to planowana wizja. Utrzymywanie tej granicy jest samo w sobie częścią produktu, bo chodzi tu o wiarygodność.
Pod maską: dlaczego Cannabivo naprawdę jest na technologicznej czołówce
Platforma tej skali nie jest szybka, wielojęzyczna, prywatna i gotowa dla aplikacji natywnych przez przypadek. Cannabivo jest budowane od zera, we własnym zakresie, na decyzjach inżynieryjnych, które jak na publiczny katalog są wyjątkowo surowe.

Używamy określenia „na technologicznej czołówce” ostrożnie. Nie chodzi o gonienie za biblioteką modną w tym kwartale. Chodzi o przyjmowanie nowoczesnych standardów tam, gdzie rozwiązują realny problem produktu, a potem o egzekwowanie jakości na tyle twardo, by system mógł dalej skalować się bez cichego gnicia od środka.
Zbudowane od zera, bez rdzenia frameworka webowego
Cannabivo jest kompletną autorską budową z brakiem rdzenia frameworka webowego. Nie ma pod spodem fundamentu aplikacji Laravel ani Symfony; Symfony pojawia się tylko jako kilka odrębnych bibliotek, używanych tam, gdzie rzeczywiście na to zasługuje.
Ta decyzja daje nam pełną kontrolę nad routingiem, renderowaniem, cache’em, lokalizacją, kontraktami, polityką bezpieczeństwa i zachowaniem w czasie działania. Kosztuje więcej na początku. W zamian platforma nagina się do produktu, zamiast naginać produkt do domyślnych założeń i cyklu życia frameworka.
Architektura to jedna baza kodu, wiele produktów — wspólny rdzeń z warstwami per-projekt, wewnętrznie znany jako model Common/Projects. To ważne, bo Cannabivo nie jest jednym szablonem strony powielonym tysiące razy. To jednocześnie katalog, wiki, system FAQ, system wiadomości, system wsparcia, edytor dla właściciela klubu, warstwa społeczności, platforma analityczna, silnik automatyzacji i backend dla aplikacji natywnych. Wspólny rdzeń egzekwuje wszędzie te same zasady; warstwy per-projekt niosą zachowanie właściwe dla produktu bez kopiowania platformy w ciemno.
Nowoczesne środowisko uruchomieniowe: trwałe PHP, HTTP/3 i kompresja zbudowana z myślą o szybkości
Backend działa na PHP 8.5.7 z FrankenPHP w trybie worker, i jest to realny wybór architektoniczny, a nie domyślne ustawienie. Klasyczne PHP zwykle oznacza cykl życia na każde żądanie: uruchom aplikację, obsłuż jedno żądanie, zamknij wszystko, zrób to ponownie. Cannabivo zamiast tego trzyma ciepłe, trwałe workery na gnieździe Unix, więc aplikacja nie płaci podatku od zimnego startu przy każdym pojedynczym wejściu.
Baza danych to MariaDB 12.3.2. Łańcuch narzędzi frontendowych to TypeScript 7 kompilowany kompilatorem natywnym dla Go (`tsgo`) i łączony przez Vite 8; Node i TypeScript działają też po stronie serwera w części systemu.
Na poziomie serwera WWW i edge Cannabivo używa nginx z HTTP/3 (QUIC), TLS 1.3 z 0-RTT, dynamicznej kompresji zstd i wstępnie skompresowanych statycznych zasobów brotli, a publiczne domeny obsługuje Cloudflare. Każdy element jest tu po to, by wykonywać konkretne zadanie:
- HTTP/3 nad QUIC zmniejsza tarcie transportowe w nowoczesnych, zawodnych sieciach mobilnych.
- TLS 1.3 z 0-RTT obniża koszt uzgadniania połączenia, gdy warunki pozwalają na to bezpiecznie.
- zstd daje wydajną kompresję dynamicznych odpowiedzi w locie.
- brotli (statyczne) ściska wcześniej zbudowane zasoby do możliwie najmniejszego rozmiaru.
- Tryb worker FrankenPHP sprawia, że PHP nie zachowuje się jak zimny skrypt przy każdym żądaniu.
Nie ma tu jednego magicznego triku. Jest cały stos małych decyzji o opóźnieniach, a one się sumują.
Natychmiastowe SPA: Navigation API, View Transitions i stopniowe ulepszanie
Pytanie produktowe jest proste: kto lubi klikać link i czekać?
Tam, gdzie poprawia to doświadczenie, Cannabivo zachowuje się jak nowoczesna aplikacja jednostronicowa, ale nadal najpierw renderowana po stronie serwera. Używamy nowoczesnych Navigation API i View Transitions API, by zmiany stron sprawiały wrażenie natywnych — spójnych, animowanych, natychmiastowych — zamiast pełnego rozbiórki dokumentu. Tam, gdzie przeglądarka to wspiera, poruszanie się po Cannabivo przypomina korzystanie z aplikacji.
Ale to nie jest architektura typu „albo JavaScript, albo nic”. Cannabivo opiera się na prawdziwym stopniowym ulepszaniu. Wyłącz JavaScript albo otwórz serwis w przeglądarce bez nowoczesnych API, a zwykłe linki renderowane po stronie serwera nadal działają. To ważne dla dostępności, odporności, SEO i zwykłej technicznej uczciwości. Renderowanie zaczyna się po stronie serwera; interakcja tylko wzbogaca to, co już tam jest.
Dla stron cache’owanych Cannabivo idzie jeszcze dalej: wstępnie renderowany statyczny cache HTML w czterech wariantach motywu (auto, ciemny, jasny i tryb całkowicie czarny), serwowany bezpośrednio przez nginx, z całkowitym pominięciem PHP. Trafienie w cache nigdy nie wybudza warstwy aplikacji — nginx zwraca już wyrenderowany HTML i oznacza go jako trafienie statyczne. Cztery warianty istnieją dlatego, że prezentacja nie ma jednego uniwersalnego kształtu; prerenderowanie każdego z nich utrzymuje stronę szybką, nie spłaszczając systemu projektowego do jednego kompromisu. Są zapisywane raz, w czasie renderowania, i kompresowane poza ścieżką żądania przez demona obserwującego system plików, więc ścieżka żądania nigdy za to nie płaci.
Warstwa wydajności frontendowej obejmuje także:
- Wbudowany Critical CSS i przypięty hashem do polityki bezpieczeństwa treści
- Obrazy AVIF z jawnie określonymi wymiarami, aby nie było przesunięć układu
- Agresywne, priorytetowe ładowanie hero na pierwszym ekranie; leniwe, niskopriorytetowe ładowanie poniżej niego
- Prefetch przy najechaniu i dotknięciu dla prawdopodobnych kolejnych nawigacji
- Early Hints jako część strategii ładowania
Na ścieżce głównej Early Hints są pośredniczone przez Cloudflare — tak uczciwie wygląda to w praktyce dla większości odwiedzających — a prawdziwe HTTP 103 jest emitowane na dynamicznej ścieżce przy braku trafienia w cache. Nie twierdzimy, że każdy odwiedzający dostaje dosłowny 103 na każdej ścieżce sieciowej. Twierdzimy natomiast, że system został zaprojektowany wokół nowoczesnego modelu podpowiedzi, aż po preload obrazu LCP na każdą stronę wstrzykiwany na edge.
Warto zapamiętać jedno: wydajność tutaj nie jest outsourcowana do pulpitu z rozmiarem bundla. Jest wbudowana w renderowanie, cache, transport, obrazy, CSS, prefetch i stopniowe ulepszanie — każda warstwa ciągnie w tym samym kierunku.
Wielojęzyczne adresy URL to infrastruktura, nie ozdoba
Warstwa wielojęzyczna zasługuje na drugie wspomnienie od strony inżynieryjnej, bo to jedna z najtrudniejszych rzeczy do zrobienia poprawnie na dużą skalę. Lokalizacja Cannabivo to nie tylko tłumaczenie treści. To zlokalizowane slugi, zsynchronizowane wiersze stron, `hreflang` i układ RTL, traktowane jako pełnowymiarowy wymiar platformy, a nie wykończeniowy detal.
Przy 225,792 stronach × 18 językach każda słabość przestaje być kosmetyczna i staje się strukturalna. Brakujący wiersz tłumaczenia nie jest drobną literówką — może zepsuć SEO, nawigację, wewnętrzne linkowanie albo zaufanie użytkownika do całej strony. Dlatego podstawowa tabela `pages` i 17 tabel dla poszczególnych języków pozostają w idealnej, zweryfikowanej synchronizacji, i dlatego strony klubów, strony geolokalizacyjne, artykuły wiki, wpisy FAQ i wiadomości żyją wewnątrz tej samej międzynarodowej struktury, zamiast być doklejoną na boku tabelą tłumaczeń.
Jakość kodu: maksymalne PHPStan, ultra-ścisły TypeScript i reguły egzekwujące politykę
Cannabivo uruchamia PHPStan na poziomie 10 — maksymalnym — wraz ze 121 własnymi regułami analizy statycznej. Na frontendzie TypeScript działa w trybie ultra-ścisłym z 14 własnymi regułami lint i dziewięcioma wtyczkami na poziomie błędu.
To nie jest kwestia estetycznej czystości. Chodzi o to, by całe klasy błędów były z góry niemożliwe do wypuszczenia.
Własne reguły są polityką zapisaną jako kod. Kilka rzeczywistych przykładów:
- `RequireRateLimitOnEveryRouteRule` — trasa API bez zadeklarowanego limitu żądań nie przechodzi kompilacji. Postawa bezpieczeństwa nie zależy od tego, czy ktoś przypomni sobie checklistę podczas przeglądu kodu.
- `NoRawIdInResponseDtoRule` — odpowiedzi zewnętrzne muszą używać UUID, nigdy surowych całkowitych identyfikatorów bazy danych, aby wewnętrzne identyfikatory nigdy nie wyciekały do klientów.
- `NoInlineStylesRule` — style inline są odrzucane na etapie kompilacji, co pozwala egzekwować ścisłą politykę bezpieczeństwa treści.
- Dyscyplina DTO — handlery muszą przyjmować typowany request DTO i zwracać typowany response DTO; zwykłe tablice są odrzucane, co dopiero umożliwia opisany niżej międzyplatformowy potok typów.
Ta sama filozofia biegnie przez cały kodbase: wygenerowanych kontraktów nie można edytować ręcznie, kształty backendu i frontendu nie mogą cicho się rozjechać, a założenia wrażliwe na bezpieczeństwo są sprawdzane mechanicznie wszędzie tam, gdzie maszyna może je sprawdzić. Analiza statyczna nie jest pracą efektowną, ale w dużej mierze właśnie dzięki niej szybko rozwijająca się platforma może pozostać wiarygodna. Wydajemy niemal codziennie; surowa analiza pozwala nam poruszać się szybko bez udawania, że „move fast” musi znaczyć „akceptować chaos”.
Jeden typowany kontrakt: 1,518 PHP DTO → 1,518 typów TypeScript → 1,518 typów Dart
Jedną z najmocniejszych decyzji inżynieryjnych w Cannabivo jest typowany kontrakt API.
Kształty danych backendu są definiowane raz jako PHP DTO i automatycznie generowane zarówno do TypeScript, jak i do Dart. Mapowanie jest jeden do jednego:
1,518 PHP DTOs ↔ 1,518 TypeScript types ↔ 1,518 Dart types
Strona internetowa i aplikacje natywne korzystają z tego samego wygenerowanego kontraktu co backend. Gdy kształt backendu się zmienia, konsumenci TypeScript i Dart nie mogą odpłynąć do równoległej rzeczywistości — wygenerowane pliki są zablokowane jako tylko do odczytu, więc nikt nie może ich ręcznie edytować, a każde rozjechanie między źródłowymi DTO a wygenerowanymi typami kończy się błędem, który zatrzymuje build, a nie niespodzianką ujawnioną dopiero przez użytkownika.
To ma znaczenie, bo Cannabivo jest czymś więcej niż stroną internetową. Aplikacje natywne są budowane równolegle, a współdzielenie kształtów API między webem i mobilem omija klasyczny punkt awarii: backend ewoluuje, zespół webowy łatata jedno jego rozumienie, aplikacja mobilna trzyma inne, a błędy po cichu zbierają się na szwach. Wybraliśmy surowszy model celowo — zdefiniować źródło prawdy raz, wygenerować z niego kontrakty platformy i zamienić rozjazd w problem na etapie kompilacji, a nie w problem widoczny dla użytkownika.
Analityka stawiająca prywatność na pierwszym miejscu: bez Google Analytics, bez trackerów stron trzecich
Cannabivo używa ani Google Analytics, ani trackerów stron trzecich. Zamiast tego zbudowaliśmy w pełni własny system analityki first-party — w tym rzeczywiste Core Web Vitals od użytkowników — oparty na własnym potoku ingestu i dziesiątkach tabel zbudowanych do celów takich jak surowe zdarzenia, godzinowe i dzienne agregacje oraz widoki ludzi po odfiltrowaniu botów. Dane odwiedzających nie opuszczają Cannabivo na rzecz gigantów technologicznych.
To jednocześnie decyzja prywatnościowa i produktowa. Nadal musimy wiedzieć, czy strony są naprawdę szybkie w terenie, a nie tylko na stanowisku testowym. Po prostu postanowiliśmy mierzyć to sami, zamiast zasilać zachowanie naszych odwiedzających cudzą maszynę nadzoru. Katalog informacji CSC o legalności powinien traktować prywatność poważnie, i nikt nie powinien musieć wymieniać swojego kontekstu przeglądania na podstawową funkcjonalność.
Bezpieczeństwo na poziomie bankowym, mierzone i egzekwowane
Cannabivo działa w oparciu o wielowarstwową architekturę bezpieczeństwa na poziomie bankowym:
- Content Security Policy bez inline skryptów ani stylów, chyba że każdy pojedynczy element został zatwierdzony hashem
- Trusted Types do neutralizowania całych kategorii wstrzyknięć do DOM-u
- Wielopoziomowe rate limiting, per IP i per user — z regułą na etapie kompilacji, że każda trasa bez limitu nie przechodzi buildu
- Podpisywanie żądań HMAC na wrażliwych wewnętrznych punktach końcowych
- Ochrona CSRF dla uwierzytelnionych żądań zmieniających stan
- HSTS preload
- Testy bezpieczeństwa wspierane przez AI
Platforma osiąga A+ w Mozilla Observatory — 135 na 100 punktów. To potwierdzony wynik i poziom, do którego dociera bardzo niewiele stron.
Warto przyjrzeć się bliżej CSP. Wiele stron chwali się CSP, a jednocześnie nadal pozwala pod nim na szerokie osadzanie kodu inline. Postawa Cannabivo jest ostrzejsza: skrypty i style inline nie są szeroko dozwolone w ogóle — każdy z nich musi być zatwierdzony hashem — a w połączeniu z Trusted Types sprawia to, że całe klasy wstrzyknięć po stronie przeglądarki są znacznie trudniejsze do przeprowadzenia. Rate limiting traktujemy tak samo: nie jako opcjonalną warstwę pośrednią, lecz jako architekturę, bez której build nie zgadza się wyjść. Powracająca myśl jest ta sama przez cały czas — zakodować założenie bezpieczeństwa w samym systemie, tak by nie dało się go po cichu zapomnieć.
Bezpośrednie wiadomości szyfrowane end-to-end
Cannabivo zawiera bezpośrednie wiadomości szyfrowane end-to-end z architekturą serwera bez wiedzy o treści: serwer przechowuje wyłącznie klucze publiczne i niejawny szyfrogram, nigdy zawartości wiadomości.
Szyfrowanie jest na poziomie Signala, wielourządzeniowe i zbudowane na libsodium. Potwierdzony zestaw prymitywów obejmuje:
- X25519 wymianę kluczy
- XChaCha20-Poly1305 uwierzytelnione szyfrowanie
- Ed25519 podpisy
- BLAKE2b wyprowadzanie kluczy
- BIP-39 mnemoniczna kopia zapasowa klucza
- schemat Sender Key dla rozmów grupowych
Najciekawszy jest model wielourządzeniowy. Wiadomość jest szyfrowana raz, przy użyciu klucza treści specyficznego dla danej wiadomości; ten klucz jest następnie osobno opakowywany dla każdego urządzenia odbiorcy poprzez efemeryczną wymianę kluczy i rozsyłany dalej — tak, aby ta sama wiadomość mogła trafić na telefon, tablet i do sieci, bez jakiegokolwiek dotykania tekstu jawnego przez serwer. Implementacja jest współdzielona między platformami: w sieci cały kryptograficzny kod, przechowywanie kluczy i praca gniazdowa działają poza głównym wątkiem w Web Workerze, z kluczami trzymanymi w IndexedDB; w aplikacjach natywnych te same prymitywy działają przez binding FFI do sodium, z kluczami w bezpiecznej pamięci urządzenia.
Z terminologią jesteśmy ostrożni. To jest szyfrowanie E2E na poziomie Signala, oparte na libsodium, wielourządzeniowe. Nie nazywamy tego „Signal Protocol”, i nie twierdzimy, że mamy Double Ratchet ani forward secrecy per wiadomość. Siła jest jednak nadal znacząca: serwer nie może czytać wiadomości, a model kryptograficzny jest identyczny we wszystkich klientach. Dla platformy społeczności CSC prywatna komunikacja nie jest ozdobą — jeśli wiadomości w ogóle istnieją, muszą być zaprojektowane z poważną granicą prywatności od pierwszej linii kodu.
Aplikacje natywne: Flutter, offline-first i dyscyplina wysokiej częstotliwości odświeżania
Aplikacje natywne są budowane w Flutterze — trzy aplikacje współdzielące jeden wspólny rdzeń — na lokalnej bazie danych offline-first i na tym samym generowanym typowanym kontrakcie co strona internetowa. Zarządzanie stanem i lokalny magazyn są zaprojektowane pod doświadczenie responsywne, zdolne do pracy offline, a nie pod cienką otoczkę narzuconą na web view.
Dyscyplina wydajności jest surowa i egzekwowana przez własne reguły lint: celem jest zachowanie wysokiej częstotliwości odświeżania, 120 fps, a linty zabraniają wzorców znanych z wywoływania janków — nieograniczonych dekodowań obrazów, kosztownych efektów blur, renderowania list bez buildera — tak, aby reguły wychwyciły regresję, zanim zauważy ją człowiek. To ważne, bo wydajność mobilna to nie tylko średni czas ładowania. To reakcja na dotyk, stabilność animacji, płynność list i to, czy aplikacja sprawia wrażenie godnej zaufania na urządzeniu, które człowiek naprawdę nosi przy sobie przez cały dzień.
Wizja aplikacji jest praktyczna: najlepszy klub w pobliżu, wkrótce na wyciągnięcie ręki, zawsze w kieszeni. Najpierw pojawi się aplikacja Android, a potem iOS.
Automatyzacja: treści, tłumaczenia, aktualizacje, media i mapy witryn
Cannabivo zawiera autonomiczny silnik treści, który można włączać i wyłączać przez operatora. To słowo wykonuje tu realną pracę: nie twierdzimy, że bot publikuje bez kontroli przez całą dobę. To system, który operator może włączyć i wyłączyć.
Gdy jest włączony, silnik potrafi badać wiadomości o Cannabis z wielu źródeł, usuwać duplikaty na podstawie własnej pamięci historii, aby to samo zdarzenie nie zostało opisane dwa razy, generować ustrukturyzowany artykuł, przetłumaczyć go na wszystkie 17 pozostałych języków przed publikacją — atomowo, tak aby półprzetłumaczony tekst nigdy nie trafił na żywo — i dystrybuować go przez 16 kanałów społecznościowych i nadawczych: Telegram, X, Bluesky, Mastodon, LinkedIn, Reddit, Discord, Matrix, Facebook, Instagram, Threads, WhatsApp, Web Push, newsletter, ogólne webhooki oraz kanał automatyzacji przeglądarki. Publicznie nazwana faza wdrożenia zaczyna się od Telegrama, Instagrama i X, a kolejne kanały dołączą później.
Warstwa automatyzacji uruchamia też mniej efektowne mechanizmy, które utrzymują przy życiu duży wielojęzyczny katalog:
- Automatyczne newsy o aktualizacjach klubów
- Procesy optymalizacji obrazów i wideo (responsywne drabinki AVIF/WebP/JPEG; adaptacyjne wideo)
- Nocna regeneracja wielojęzycznych sitemapów
- Flota zaplanowanych workerów sterowanych timerami systemd, a nie kruchymi zadaniami cron
Tak właśnie działa platforma z setkami tysięcy stron, która pozostaje aktualna. Treść potrzebuje struktury. Tłumaczenia potrzebują sekwencjonowania. Mapy witryn muszą odzwierciedlać rzeczywistość wielojęzyczną, a nie angielską. Aktualizacje klubów muszą się pojawiać bez tego, żeby redaktor zatwierdzał każdą drobną zmianę. Automatyzacja nie zastępuje tu osądu — usuwa powtarzalne tarcie, żeby ludzie mogli skupić się na tych częściach, które rzeczywiście ich wymagają.
Gdzie jesteśmy teraz
Webowa platforma Cannabivo działa w produkcji i jest aktywnie utrzymywana. Obecna faza biegnie równolegle dwoma torami.
Pierwszy to stabilizacja, dopracowanie i weryfikacja: odświeżanie istniejących treści o klubach, korygowanie szczegółów i stopniowe uszczelnianie platformy. Katalog z 13,573 wpisami klubów i 211,397 stronami geolokalizacyjnymi, które nieustannie utrzymujemy w dokładności i aktualności, nie może być traktowany jako „skończony”. Informacje się zmieniają, zmieniają się lokalne szczegóły, a platforma musi za tym nadążać.
Drugi to równoległy rozwój natywnych aplikacji mobilnych — ten sam rdzeń Flutter, offline-first, ten sam typowany kontrakt, ta sama dyscyplina wydajności. Cel jest jednocześnie prosty i ambitny: najlepszy klub w pobliżu, wkrótce na wyciągnięcie ręki, zawsze w kieszeni.
Równolegle wdrażamy automatyczne informacje o klubach przez kanały społecznościowe i newsletter Cannabivo. Strona główna już pokazuje żywy charakter platformy — ostatnio dodane kluby, popularne miasta, huby krajowe oraz kanały wiadomości i aktualizacji klubów.
Wszystkie 10 krajów pozostają wciąż w budowie. To nie jest słabość, za którą trzeba przepraszać; to uczciwe zarządzanie zakresem. Międzynarodowy zasięg nie jest odznaką przypinaną do statycznej bazy danych. To zobowiązanie operacyjne i trzeba je odnawiać każdego dnia.
Co dalej
Plan Cannabivo jest etapowy i utrzymujemy wyraźną granicę między tym, co już zostało wdrożone, tym, co jest planowane, a tym, co wciąż jest przedmiotem dyskusji.

| Harmonogram | Plan działań |
|---|---|
| 1–2 miesiące | Uruchomienie aplikacji Android w Sklepie Google Play; więcej kanałów społecznościowych, w tym Telegram, Instagram, X i wiele innych |
| 2–3 miesiące | Uruchomienie aplikacji iOS w App Store |
| 3–12 miesięcy i dalej | Zarządzanie klubami i członkami dla każdego klubu; marketplace na sprzęt, przestrzeń uprawową i powiązane potrzeby |
| Backlog | Premium Club Microsites na `{club}.cannabivo.com`, z kuratorowanymi presetami i SEO w 18 językach |
| W dyskusji | Cannabivo-ID do szybkiego meldowania się do klubu przez aplikację |
| W dyskusji | Model monetyzacji |
Najpierw Android, potem iOS
Aplikacja Android jest planowana do Sklepu Google Play w ciągu 1–2 miesięcy, a aplikacja iOS ma pojawić się w App Store w ciągu 2–3 miesięcy. Obie należą do tej samej strategii technicznej: aplikacje Flutter współdzielące jeden rdzeń, lokalna baza danych offline-first, dyscyplina wysokiej częstotliwości odświeżania i ten sam generowany typowany kontrakt co strona internetowa. Ponieważ współdzielą ten kontrakt, aplikacje dziedziczą poprawność backendu zamiast ją odtwarzać — a odtwarzanie to dokładnie miejsce, w którym rodzi się większość błędów międzyplatformowych.
Zarządzanie klubami i członkami
W horyzoncie 3–12 miesięcy i dalej Cannabivo chce oferować zarządzanie klubami i członkami dla każdego klubu — rozszerzając już wdrożony Club Manager z edycji publicznych wpisów do głębszych narzędzi operacyjnych. Intencją jest odpowiedzieć na administracyjne realia, z którymi kluby już się mierzą, bez zmuszania każdego z nich do wymyślania własnego oprogramowania od zera.
Wizja marketplace’u
Marketplace także mieści się w horyzoncie 3–12 miesięcy i dotyczy sprzętu, przestrzeni uprawowej oraz powiązanych potrzeb wokół działania CSC. Dla jasności: nie jest to twierdzenie sprzedażowe dotyczące Cannabis ani wezwanie do konsumpcji. To kierunek rozwoju platformy skupiony na infrastrukturze i materiałach, których ekosystem potrzebuje do działania.
Cannabivo-ID jest w aktywnej ocenie
Cannabivo-ID jest w dyskusji: cyfrowa tożsamość, która mogłaby pozwolić członkom szybko meldować się do klubów przez aplikację — mniej biurokracji dla klubów, płynniejsze wejście dla członków. Uważamy, że jest to wykonalne zarówno technicznie, jak i prawnie, i pozostaje w aktywnej ocenie. Nie jest to wdrożone, i tę różnicę zachowamy wyraźną.
Monetyzacja wciąż pozostaje otwarta
Monetyzacja pozostaje otwartym pytaniem. Wśród rozważanych opcji są ograniczenie darmowych widoków klubów, członkostwa premium, reklamy, współprace ze sklepami z vape’ami lub sprzętem CSC oraz używanie Cannabivo przez kluby do zarządzania członkami. Nie prezentujemy jeszcze finalnego modelu. Cokolwiek wybierzemy, musi pozostać wierne roli platformy: międzynarodowego katalogu informacji, który jest przejrzysty, legalny, wielojęzyczny i naprawdę użyteczny dla społeczności CSC.
Celem Cannabivo jest stać się międzynarodową infrastrukturą, której społeczność CSC nigdy nie miała — przejrzystą, legalną, wielojęzyczną i zbudowaną tak, by przetrwać. Katalog jest frontowymi drzwiami. Wszystko inne to budynek za nimi: wiki, strony edukacyjne i profilaktyczne, system wiadomości, FAQ, forum, Club Manager, agent wsparcia AI, aplikacje natywne, szyfrowane wiadomości, silnik automatyzacji, typowane kontrakty, analityka pierwszej strony i architektura bezpieczeństwa. Żaden z tych elementów nie działa samodzielnie; wszystkie służą temu, by legalne informacje o Cannabis były łatwiejsze do znalezienia i trudniejsze do błędnego podania. Zaczęliśmy od jednej oczywistej luki w Niemczech i Hiszpanii. Dziś budujemy w dziesięciu krajach, w osiemnastu językach, na skali produkcyjnej, na fundamencie inżynieryjnym zaprojektowanym tak, by dalej rosnąć. Nic tu nie jest skończone — i wolimy powiedzieć to wprost, niż udawać, że katalog kiedykolwiek jest naprawdę gotowy. Najprościej da się to ująć tak: najlepszy portal tego typu na świecie. Wyzwanie przyjęte. Zostańcie z nami.







