Strona dla lokalnej firmy w jeden dzień
Z Claude Code robisz w jeden dzień szybką, statyczną stronę dla lokalnej firmy, razem z SEO lokalnym i wizytówką Google. Sprzedajesz ją za 2-6 tys. zł plus 150-300 zł miesięcznie za opiekę.
- Robisz audyt starej strony i wizytówki Google w godzinę i zamieniasz go w argument sprzedażowy.
- Piszesz z AI treść, która brzmi jak ta konkretna firma: usługi, cennik, obszar działania, FAQ.
- Budujesz z Claude Code szybką stronę statyczną bez WordPressa, z wynikiem PageSpeed blisko maksimum.
- Wdrażasz SEO lokalne: strony usług i dzielnic, LocalBusiness w schema, spójne dane NAP, wizytówka Google.
Strona przeciętnej lokalnej firmy ładuje się kilka sekund, na telefonie trzeba ją powiększać, a cennika nie ma wcale. Takie strony przebudowywałem dla firm od mycia okien po kancelarię adwokacką. Proces za każdym razem był podobny i z Claude Code sama produkcja mieści się w jednym dniu. Kurs idzie od pierwszej rozmowy z właścicielem do abonamentu opieki.
Na czym zarabiasz
Przy najniższej stawce (2 000 zł) tyle wystarczy, żeby kurs za 1 490 zł się zwrócił.
Lokalna firma płaci za telefony i zapytania z Google, technologia jej nie interesuje. Dzień produkcji przy stawce 2-6 tys. zł zostawia dobrą marżę, a abonament zamienia jedno zlecenie w przychód co miesiąc. Dziesięciu klientów po 150-300 zł to 1,5-3 tys. zł miesięcznie, zanim zrobisz kolejną stronę. Stawki są orientacyjne, nie gwarantuję zarobku.
Tak wygląda środek
Początek pierwszej lekcji, bez skrótów. Resztę i 26 kolejnych lekcji dostajesz w panelu.
Audyt starej strony w godzinę
Stara strona firmy HVAC spod Warszawy wyglądała bogato: wideo w tle, liczniki, logotypy partnerów. W Google nie miała ani jednej frazy w pierwszej setce wyników. Strona główna ważyła 6,2 MB, a na telefonie największy element ładował się 7,8 sekundy. Strona firmy myjącej okna była skromniejsza: jedna podstrona i galeria, w której zdjęcia wklejono do HTML-a jako tekst base64. Od 17 września do dnia audytu dała 3 kliknięcia z Google.
Obie strony przebudowałem i obie zacząłem od godziny z audytem. Audyt mówi mi, co naprawić, i daje właścicielowi powód, żeby w ogóle rozmawiać o nowej stronie.
Krok 1. Plan godziny
Godzina wystarcza, jeśli trzymam się kolejności i niczego nie poprawiam w trakcie. Audyt to zdjęcie stanu, naprawy przyjdą później.
| Minuty | Co robię | Czym |
|---|---|---|
| 0-10 | adresy, robots, sitemap, tytuł, opis, H1, zewnętrzne skrypty, formularz | skrypt audyt.py z kroku 2 |
| 10-25 | szybkość i waga strony na telefonie | Lighthouse albo PageSpeed Insights |
| 25-40 | strona w ręku: telefon, menu, formularz, podstrony usług | własny telefon, nie emulator |
| 40-50 | indeksacja i frazy | site:, Search Console, narzędzie do fraz |
| 50-60 | tabela „problem i skutek” plus werdykt w dwóch zdaniach | notatka w Markdown |
Wizytówkę Google i konkurencję robię w drugiej godzinie. To temat następnej lekcji.
Krok 2. Skrypt do pierwszych dziesięciu minut
Te rzeczy sprawdza się zawsze tak samo, więc zamknąłem je w skrypcie. Jest w samym Pythonie, bez dodatkowych bibliotek, działa od wersji 3.9.
# audyt.py - szybki audyt techniczny strony lokalnej firmy
# uzycie: python audyt.py domena.pl
import re
import sys
import urllib.request
import urllib.error
from urllib.parse import urlparse
sys.stdout.reconfigure(encoding="utf-8")
UA = {"User-Agent": "Mozilla/5.0 (audyt strony)"}
def pobierz(url):
"""Zwraca (status, adres koncowy, tresc) - podaza za przekierowaniami."""
try:
r = urllib.request.urlopen(urllib.request.Request(url, headers=UA), timeout=20)
return r.status, r.geturl(), r.read()
except urllib.error.HTTPError as e:
return e.code, url, b""
except Exception as e:
return 0, url, str(e).encode()
domena = sys.argv[1].replace("https://", "").replace("http://", "").strip("/")
gola = domena.removeprefix("www.")
print("== Wersje adresu (powinny prowadzic do jednej) ==")
koncowe = set()
dzialajace = []
for wariant in (f"http://{gola}/", f"http://www.{gola}/", f"https://{gola}/", f"https://www.{gola}/"):
status, koniec, _ = pobierz(wariant)
koncowe.add(koniec)
if status == 200:
dzialajace.append(koniec)
print(f"{wariant:40} {status} -> {koniec}")
print("OK, jeden adres docelowy" if len(koncowe) == 1 else f"UWAGA: {len(koncowe)} rozne adresy docelowe")
if not dzialajace:
sys.exit("Zaden wariant adresu nie odpowiada 200")
baza = next((k for k in dzialajace if k.startswith("https")), dzialajace[0]).rstrip("/")
for plik in ("/robots.txt", "/sitemap.xml", "/index.html"):
status, _, tresc = pobierz(baza + plik)
print(f"{plik:14} {status} {len(tresc)} B")
print("\n== Strona glowna ==")
status, url, surowe = pobierz(baza + "/")
html = surowe.decode("utf-8", errors="replace")
print(f"waga samego HTML: {len(surowe) / 1024:.0f} KB")
def jedno(wzor):
m = re.search(wzor, html, re.I | re.S)
return m.group(1).strip() if m else ""
tytul = jedno(r"<title[^>]*>(.*?)</title>")
opis = jedno(r'<meta[^>]+name=["\']description["\'][^>]+content=["\']([^"\']*)')
print(f"title ({len(tytul)} zn.): {tytul}")
print(f"description ({len(opis)} zn.): {opis[:120]}")
kanon = [t for t in re.findall(r"<link[^>]+>", html, re.I) if "canonical" in t.lower()]
print("canonical:", kanon[0] if kanon else "BRAK")
print("viewport:", "jest" if re.search(r'name=["\']viewport', html, re.I) else "BRAK")
h1 = [re.sub(r"<[^>]+>", "", h).strip() for h in re.findall(r"<h1[^>]*>(.*?)</h1>", html, re.I | re.S)]
print(f"H1 ({len(h1)}):", h1[:3])
print("telefon jako link tel:", "jest" if "tel:" in html else "BRAK")
print("dane strukturalne JSON-LD:", len(re.findall(r"application/ld\+json", html)))
b64 = re.findall(r"data:image/[a-z]+;base64,([A-Za-z0-9+/=]+)", html)
if b64:
print(f"obrazy wklejone w HTML (base64): {len(b64)} szt., {sum(map(len, b64)) / 1024:.0f} KB")
hosty = {}
for zasob in re.findall(r'(?:src|href)=["\'](https?://[^"\']+)', html):
h = urlparse(zasob).netloc
if gola not in h:
hosty[h] = hosty.get(h, 0) + 1
print("zewnetrzne hosty:", dict(sorted(hosty.items(), key=lambda x: -x[1])) or "brak")
for akcja in re.findall(r'<form[^>]+action=["\']([^"\']*)', html, re.I):
print("formularz wysyla do:", akcja or "(ta sama strona)")
print("\n== Linki wewnetrzne (podstrony) ==")
linki = set()
for h in re.findall(r'href=["\']([^"\'#?]+)', html):
if gola in h or not re.match(r"(https?:|mailto:|tel:|javascript:|//)", h):
sciezka = urlparse(h).path or "/"
if not re.search(r"\.(css|js|png|jpe?g|webp|svg|ico|woff2?)$", sciezka):
linki.add(sciezka)
print(len(linki), "unikalnych adresow:", sorted(linki)[:15])Uruchamiam go poleceniem python audyt.py nazwa-domeny.pl. Co pokazał na starych stronach:
- Firma HVAC: http, https, z www i bez www odpowiadały kodem 200, a
/index.htmlbył kopią strony głównej. Razem pięć wersji tej samej strony. Robots i sitemap zwracały 404. - Tam też tytuł 88 znaków i opis 266 znaków (Google obetnie oba), a H1 „Ponad 25 lat” z nazwą firmy, czyli bez frazy, o którą ktoś pyta.
- Formularz wysyłał dane do zewnętrznej usługi z USA, z wyłączoną captchą, bez zgody i bez polityki prywatności.
- Siedem logotypów partnerów ładowało się z usługi, która przestała działać. Siedem błędów przy każdym wejściu.
- Firma myjąca okna: 133 KB samego HTML-a na stronie głównej, z czego 113 KB to dwa zdjęcia w base64.
Krok 3. Szybkość na telefonie
27 lekcji, ok. 8 h 27 min nauki
Każda lekcja to tekst z przykładami z moich zleceń, kodem i promptami do skopiowania, do tego wersja audio i zadanie na koniec.
- lekcje
- 27
- moduły
- 7
- czas nauki
- 8 h 27 min
- gotowe
- z audio
- pliki
- 17
M01Audyt i rozmowa z klientem4 lekcje · 1 h 16 min
-
01
Audyt starej strony w godzinęPageSpeed, wersja mobilna, indeksacja w Google, brakujące dane, formularze, które nie działają. Pokazuję audyty z moich projektów.za darmo
-
02
Audyt wizytówki Google i konkurencjiKategorie, zdjęcia, opinie, godziny, usługi. Porównanie z trzema firmami, które wyświetlają się wyżej w mapach.gotowa
-
03
Rozmowa, która zbiera materiałLista 25 pytań do właściciela: usługi, ceny, obszar, wyróżniki, najczęstsze pytania klientów. Z tego powstaje cała treść.gotowa
-
04
Zakres projektu na jedną kartkęJak zamykam zakres, żeby dało się zrobić stronę w jeden dzień: liczba podstron, materiały od klienta, termin.gotowa
M02Treść strony4 lekcje · 1 h 13 min
-
05
Struktura strony usługowejStrona główna, usługi, cennik, obszar działania, o firmie, kontakt, FAQ. Co jest obowiązkowe, a co zbędne.gotowa
-
06
Pisanie z AI głosem firmyJak zamieniam notatki z rozmowy w teksty z Claude, które brzmią jak właściciel, a nie jak broszura. Prompty i redakcja.gotowa
-
07
Cennik i FAQDlaczego widełki cenowe zwiększają liczbę zapytań i jak zbudować FAQ z prawdziwych pytań klientów.gotowa
-
08
Zdjęcia i dowody zaufaniaZdjęcia realizacji, zespół, opinie, certyfikaty. Kiedy obrazy z AI szkodzą lokalnej firmie i czym je zastąpić.gotowa
M03Budowa strony z Claude Code5 lekcji · 2 h 11 min
-
09
Przygotowanie projektuFolder, plik z instrukcjami dla Claude Code, treści w Markdown, prosty skrypt budujący HTML. Ten sam szkielet stosuję w każdym projekcie.gotowa
-
10
Wygląd bez gotowego szablonuKolory, typografia i układ pod branżę. Jak prowadzić Claude Code, żeby strona nie wyglądała jak tysiąc innych.gotowa
-
11
Najpierw telefonObrazy w WebP i AVIF, leniwe ładowanie, minimum JavaScriptu. Strona ma się otworzyć na telefonie w ułamku sekundy.gotowa
-
12
Formularz i kontaktFormularz bez wtyczek, przycisk połączenia, mapa, dane kontaktowe. Ochrona przed spamem i test wysyłki.gotowa
-
13
Budowa od zera: firma usługowaOd pustego folderu do gotowej strony: każdy prompt, opis każdego etapu i błędy, które wyszły po drodze, z poprawkami.gotowa
M04SEO lokalne4 lekcje · 1 h 4 min
-
14
Strony usług i obszarówKiedy robić podstrony dzielnic i miast, a kiedy to spam. Jak pisać je tak, żeby każda miała własną wartość.gotowa
-
15
Dane strukturalne LocalBusinessSchema z adresem, godzinami, obszarem, usługami i opiniami. Walidacja i typowe błędy.gotowa
-
16
Spójność NAP i katalogiNazwa, adres i telefon identyczne na stronie, w wizytówce i w katalogach. Lista miejsc, które warto uzupełnić.gotowa
-
17
Meta, nagłówki i linkowanie wewnętrzneTytuły pod frazy z nazwą miasta, nagłówki, linki między usługami. Szablony do skopiowania.gotowa
M05Wizytówka Google3 lekcje · 44 min
-
18
Optymalizacja profiluKategoria główna i dodatkowe, usługi, opis, atrybuty, zdjęcia. Co zmieniam w pierwszej kolejności.gotowa
-
19
Opinie zgodnie z regulaminemJak klient ma prosić o opinie, jak odpowiadać na negatywne i czego nie robić, żeby nie stracić profilu.gotowa
-
20
Posty i aktualizacjePlan wpisów w wizytówce na 15 minut tygodniowo, dla właściciela albo dla ciebie w abonamencie.gotowa
M06Wdrożenie i pomiar3 lekcje · 53 min
-
21
Hosting, domena, SSLPublikacja na hostingu klienta przez FTP lub na hostingu statycznym. Przekierowania ze starych adresów, żeby nie stracić pozycji.gotowa
-
22
Search Console i analitykaDodanie strony, mapa witryny, zgłoszenie do indeksu, pomiar telefonów i formularzy jako konwersji.gotowa
-
23
Odbiór projektuChecklista przed oddaniem: linki, formularze, wersja mobilna, dane strukturalne, RODO i polityka prywatności.gotowa
M07Klienci, wycena i abonament4 lekcje · 1 h 6 min
-
24
Skąd brać lokalnych klientówAudyt jako wejście, firmy z wolnymi stronami w mapach, polecenia, współpraca z księgowymi i agencjami.gotowa
-
25
Wycena 2-6 tys. złJak wyceniam w zależności od liczby podstron, treści i SEO lokalnego. Pakiety zamiast godzin.gotowa
-
26
Abonament opieki 150-300 zł/mies.Co jest w abonamencie, a co poza nim, jak raportuję co miesiąc i jak zamieniam abonament w kolejne zlecenia.gotowa
-
27
Umowa, przekazanie praw i zaliczkaWzór umowy, zaliczka przed startem, przekazanie domeny i plików. Co robić, gdy klient znika w połowie.gotowa
Co umiesz po kursie
Robisz audyt starej strony i wizytówki Google w godzinę i zamieniasz go w argument sprzedażowy.
Piszesz z AI treść, która brzmi jak ta konkretna firma: usługi, cennik, obszar działania, FAQ.
Budujesz z Claude Code szybką stronę statyczną bez WordPressa, z wynikiem PageSpeed blisko maksimum.
Wdrażasz SEO lokalne: strony usług i dzielnic, LocalBusiness w schema, spójne dane NAP, wizytówka Google.
Publikujesz stronę na hostingu klienta lub własnym, podpinasz domenę, SSL, formularz i analitykę.
Sprzedajesz stronę z abonamentem opieki na gotowych wzorach oferty, umowy i raportu.
Dla kogo
- Freelancerom, którzy chcą robić strony szybciej i taniej niż na WordPressie.
- Osobom, które znają podstawy HTML lub chcą je poznać w praktyce, z AI jako asystentem.
- Specjalistom SEO, którzy chcą dowozić klientom lokalnym także samą stronę.
- Grafikom i marketerom obsługującym małe firmy w swoim mieście.
- Osobom, które chcą mieć stały przychód z abonamentów opieki.
Komu odradzam
- Chcesz budować rozbudowane sklepy internetowe. Ten kurs jest o stronach usługowych.
- Nie chcesz dotykać kodu ani terminala. Claude Code wymaga podstaw pracy w konsoli.
- Szukasz szablonu do skopiowania bez rozmowy z klientem. Każda strona zaczyna się od audytu.
Pliki w panelu
Czego używam
| Claude Code budowa strony, poprawki, skrypty | płatne, w ramach planu Claude lub API |
| Visual Studio Code podgląd i edycja plików | darmowe |
| Google Search Console indeksacja i zapytania | darmowe |
| Profil Firmy w Google wizytówka w mapach | darmowe |
| PageSpeed Insights pomiar szybkości przed i po | darmowe |
| Hosting klienta lub hosting statyczny publikacja strony | zależnie od dostawcy |
Pytania o ten kurs
Czy potrzebuję mocnego komputera?
Nie. Claude Code działa w terminalu, a strona statyczna buduje się w sekundy. Wystarczy zwykły laptop z Windows, macOS lub Linuxem.
Czy muszę umieć programować?
Nie musisz pisać kodu od zera, ale musisz czytać prosty HTML i pracować w terminalu. Moduł budowy zaczynam od instalacji i pierwszej komendy.
Czy to naprawdę jeden dzień?
Sama produkcja strony usługowej tak, jeśli masz komplet materiałów od klienta. Audyt, rozmowa i poprawki po uwagach klienta dochodzą osobno.
Czy w kursie są nagrania wideo?
Nie. Każda lekcja to tekst z przykładami z moich projektów, kodem, promptami dla Claude Code oraz plikami do pobrania. Lekcję możesz też odsłuchać, czyta ją lektor AI. Prompt łatwiej skopiować z tekstu niż z filmu.
Jak wygląda dostęp i aktualizacje?
Bezterminowy, aktualizacje w cenie. Gdy zmienia się Claude Code albo zasady wizytówek Google, uzupełniam lekcje.
Czym różni się wersja z pracą ze mną?
Dwie konsultacje na piśmie: wysyłasz pytania, odpowiadam w ciągu 2 dni roboczych. Do tego przeglądam twoją pierwszą stronę i ofertę przed oddaniem klientowi. Rozmów wideo nie prowadzę.
Co z prawem do odstąpienia od umowy?
To treść cyfrowa. Przy zamówieniu zgadzasz się na jej udostępnienie od razu i tracisz wtedy prawo do odstąpienia. Reklamacje rozpatruję w 14 dni.
Piotr Promptowy
Prowadzę promptowy.com, gdzie opublikowałem ponad 3 tysiące tekstów o AI, i newsletter czytany przez kilka tysięcy osób. Robię klipy i reklamy z AI dla znanych artystów i marek, buduję własne narzędzia i sklep z produktami AI. W tym kursie opisuję to, co zrobiłem naprawdę, razem z błędami.
Podobne kursy

GEO: firma, którą poleca ChatGPT

Algorytm X, Instagrama i TikToka - z kodu, nie z plotek
