6 min

MVP e-commerce w 7 dni: wypuść mały sklep z prawdziwymi płatnościami

MVP e-commerce w 7 dni: plan dzień po dniu, by uruchomić mały sklep z katalogiem, checkoutem, prawdziwymi płatnościami, podstawowym panelem admina i bezpiecznymi wydaniami.

MVP e-commerce w 7 dni: wypuść mały sklep z prawdziwymi płatnościami

Co dostarczasz (a czego nie)

Dla e-commerce MVP, które możesz skończyć w tydzień, „prawdziwe płatności” oznaczają jedno: prawdziwy klient może zapłacić, widzisz zamówienie i możesz je wysłać bez zgadywania.

Utrzymaj pierwszą wersję wąską: jeden kraj, jedna waluta i jedna metoda płatności (zwykle karty). Jeśli spróbujesz wspierać wszystko, spędzisz tydzień na przypadkach brzegowych zamiast na sprzedaży.

Najkrótsza droga to malutki sklep, który robi tylko kroki potrzebne do przelewu pieniędzy i uruchomienia realizacji:

  • Strona produktu z czytelną ceną i statusem magazynowym
  • Koszyk, który pozwala zmieniać ilość i pokazuje sumy
  • Checkout, który zbiera imię, email i adres wysyłki
  • Strona potwierdzenia (oraz potwierdzenie email, jeśli możesz)

„Gotowe” to nie perfekcyjna witryna. „Gotowe” to przyjęcie zamówienia, pomyślne obciążenie i realizacja tego samego dnia na podstawie zebranych informacji. Jeśli potrafisz zrobić to dla 10 zamówień z rzędu bez ręcznych poprawek, masz działające MVP.

Aby chronić ten cel, zdecyduj z góry, co jest poza zakresem. Te funkcje wydają się standardowe, ale nie są potrzebne, aby zostać opłaconym w tym tygodniu: listy życzeń, recenzje, zaawansowane wyszukiwanie, złożone reguły stanów magazynowych, kupony, wiele metod płatności i wiele walut.

Wybierz najpierw jedno urządzenie docelowe. Jeśli większość kupujących przychodzi z reklam społecznościowych, zaplanuj mobilny widok. Jeśli sprzedajesz do firm, desktop też może być OK. W każdym wypadku projektuj najpierw pod jeden rozmiar ekranu, potem dostosuj.

Jeśli budujesz z narzędziem opartym na czacie jak Koder.ai, zapisz zakres zanim wygenerujesz ekrany i flow. Ścisły zakres to najprostszy sposób, żeby „jeszcze jedna funkcja” nie zamieniła się w dzień ósmy.

Najmniejszy zestaw funkcji, który nadal działa

E-commerce MVP jest „prawdziwe”, gdy nieznajomy może znaleźć produkt, zapłacić, a Ty możesz zrealizować zamówienie bez dodatkowej korespondencji.

Zacznij od produktów. Potrzebujesz tytułu, ceny, jednego głównego zdjęcia, krótkiego opisu i przełącznika włącz/wyłącz, żeby ukrywać pozycje bez ich usuwania. Zachowaj warianty, pakiety i złożone ceny na później.

Twój katalog może być prosty: strona listy produktów i strona szczegółu produktu. Podstawowe filtry (np. kategoria lub dostępność) są w porządku, ale nie buduj pełnej wyszukiwarki w pierwszym tygodniu.

Koszyk i checkout powinny być nudne i przewidywalne. Koszyk musi wspierać dodawanie, usuwanie, zmianę ilości i pokazywać jasny subtotal. Dla wysyłki i podatku wybierz na początek jedną prostą regułę (np. stała wysyłka i podatek tylko jeśli naprawdę musisz).

Minimalny flow end-to-end zwykle potrzebuje:

  • Lista produktów
  • Szczegóły produktu
  • Koszyk
  • Checkout (dane klienta + adres wysyłki + podsumowanie)
  • Panel admina (produkty i zamówienia)

Admin to miejsce, gdzie MVP często pada. Nie potrzebujesz wykresów. Potrzebujesz zabezpieczonego logowania, możliwości dodawania/edytowania produktów i listy zamówień, gdzie możesz zmieniać status (new, paid, shipped, refunded).

Przykład: sprzedajesz trzy świece. Każda ma jedno zdjęcie i jedną cenę. Kupujący dodaje dwie, widzi stałą opłatę za wysyłkę 5$, wpisuje adres, płaci, a Ty oznaczasz zamówienie jako wysłane po wydrukowaniu etykiety.

Jeśli używasz platformy vibe-coding jak Koder.ai, trzymaj prompt ścisły: „Tylko te strony, tylko te pola, brak kont, brak kuponów, brak wishlist.”

Płatności: trzymaj je prosto i pewnie

Płatności to miejsce, gdzie unikasz kreatywności. Wybierz jednego dostawcę, którego wiesz jak szybko zintegrować i obsługuj tylko płatności kartami. Portfele cyfrowe, BNPL i przelewy bankowe mogą poczekać.

Największy wybór to sposób przepływu płatności:

  • Hosted checkout jest zwykle najszybszy i najbezpieczniejszy, bo dostawca obsługuje większość wrażliwego UI.
  • Osadzone formularze kart wyglądają ładniej, ale dodają więcej przypadków brzegowych i pracy z bezpieczeństwem.

Traktuj płatności jako niewielki zestaw stanów, które możesz ogarnąć na pierwszy rzut oka: created, paid, failed, canceled, refunded.

Przechowuj tylko to, co potrzebne do rozliczeń i wsparcia: provider payment ID, opcjonalne provider customer/session ID, kwota, waluta i Twój wewnętrzny order ID. Nigdy nie zapisuj surowych danych karty i nie wymyślaj własnych pól płatności, jeśli naprawdę ich nie potrzebujesz.

Webhooki czynią zamówienia niezawodnymi. Po checkout nie zakładaj, że przekierowanie w przeglądarce oznacza „paid”. Dodaj handler webhooka, który weryfikuje zdarzenie, a potem oznacza dopasowane zamówienie jako opłacone.

Zadbaj o bezpieczeństwo przy ponownych dostawach zdarzeń. Webhooki będą dostarczane wielokrotnie, więc Twój handler powinien być idempotentny: jeśli zamówienie jest już opłacone, nie powinien nic robić i nadal zwrócić sukces.

Jeśli budujesz szybko z narzędziem czatowym jak Koder.ai, zdefiniuj najpierw stany płatności i minimalne pola, potem wygeneruj endpoint webhooka i logikę aktualizacji zamówienia. Ta jasność zapobiega klasycznemu bałaganowi: klienci zapłacili, zamówienia nieopłacone, godziny ręcznego sprawdzania.

Plan dzień po dniu na 7-dniową budowę

Dzień 1: zamknij zakres. Napisz jednostronicową specyfikację: co może zrobić kupujący, co admin, i co jest poza zakresem. Wybierz dostawcę płatności. Zdecyduj, jak policzysz sumy (podatki/wysyłka teraz, czy później). Naszkicuj pięć kluczowych ekranów: katalog, strona produktu, koszyk, checkout, wynik płatności.

Dzień 2: wypuść katalog. Zapisuj produkty tylko z potrzebnymi polami: nazwa, cena, waluta, zdjęcie, krótki opis, flaga aktywne. Zbuduj stronę „wszystkie produkty” (lub proste kategorie) i stronę szczegółów produktu. Zasiej ok. 10 testowych produktów, by móc testować prawdziwe flow.

Dzień 3: koszyk i szkice zamówień. Zaimplementuj dodawanie/usuwanie i zmianę ilości. Kiedy zaczyna się checkout, utwórz szkic zamówienia i zrób snapshot cen, żeby późniejsze edycje produktów nie zmieniały starych zamówień. Złap email klienta i adres wysyłki możliwie wcześnie.

Dzień 4: płatności w trybie testowym. Podłącz checkout do tworzenia płatności. Obsłuż success, canceled i failed. Zapisz status płatności w zamówieniu. Pokaż wyraźną stronę potwierdzenia z numerem zamówienia i kolejnymi krokami.

Dzień 5: podstawowy admin do realizacji. Trzymaj admin mały: tworzenie/edycja/wyłączenie produktów, lista zamówień z aktualizacją statusów (paid, packed, shipped, refunded) i prosta strona „pokaż zamówienie” z tym, co potrzebujesz do wysyłki.

Dzień 6: wdrożenie i zabezpieczenia. Skonfiguruj oddzielne środowiska staging i production, włącz logi i przećwicz cały flow z kartami testowymi. Napisz plan rollback zanim będzie potrzebny.

Dzień 7: uruchomienie (małe, kontrolowane). Zrób finalny przegląd z rzeczywistym, niskokwotowym zakupem, potwierdź maile/rachunki, potem otwórz sklep dla małej grupy odbiorców. Jeśli używasz Koder.ai, rób snapshot przed każdą większą zmianą, aby szybko cofnąć, jeśli checkout przestanie działać.

Dane, które musisz przechowywać, żeby uniknąć bałaganu

Zbuduj MVP z czatem
Zamień zakres MVP e-commerce na działającą aplikację przy użyciu generowania z czatu.

Sklep z tygodnia życia zależy od jasności zamówień. Gdy ktoś zapłaci, powinieneś szybko odpowiedzieć: co kupił, gdzie wysyłamy i jaki jest aktualny status?

Zacznij od małego, nudnego modelu danych. Te pięć rekordów pokrywa prawie wszystko:

  • Product: id, title, price, currency, active
  • Customer: id, email, name (opcjonalnie)
  • Order: id, customer_id (lub email), pola adresu wysyłki, status, snapshot sum, created_at
  • OrderItem: order_id, product_id, title_snapshot, unit_price_snapshot, quantity
  • Payment: order_id, provider, provider_payment_id, amount, currency, status, raw_event_id

Trzymaj adresy minimalistycznie, żeby checkout był szybki. Zwykle wystarczy: imię, linia1 adresu, miasto, kod pocztowy i kraj. Telefon opcjonalny, chyba że wymaga go przewoźnik.

Zapisuj sumy jako snapshot w momencie zakupu. Nie przeliczaj później z tabeli Product. Ceny się zmieniają, stawki wysyłki się poprawiają i skończysz z „klient zapłacił X, ale zamówienie teraz mówi Y”. Przechowuj cenę jednostkową za pozycję oraz subtotal, wysyłkę, podatek (nawet zero) i sumę końcową.

Używaj jasnych statusów, które odzwierciedlają realizację, a nie żargon dostawcy płatności: new, paid, packed, shipped, canceled. Dodaj refunded tylko wtedy, gdy naprawdę to obsługujesz.

Planuj idempotencję w aktualizacjach płatności. To samo zdarzenie webhook może przyjść dwukrotnie lub w nieodpowiedniej kolejności. Zapisz unikalne event ID od dostawcy i ignoruj duplikaty.

Przykład: webhook oznacza płatność jako „succeeded” dwukrotnie. Twoje system powinien nie tworzyć dwóch wysyłek ani wysyłać dwóch maili potwierdzających. Jeśli budujesz na Koder.ai z backendem w Go i PostgreSQL, unikalne ograniczenie na (provider, raw_event_id) plus transakcja wokół aktualizacji statusu często wystarczą.

Podstawowy admin: tylko to, co pomaga realizować zamówienia

Admin to nie „dashboard”. To małe zaplecze, w którym szybko odpowiadasz na trzy pytania: co jest na sprzedaż, co zostało opłacone i co trzeba wysłać.

Zacznij od jednego konta admina. Jedna rola wystarczy. Użyj silnego hasła, podstawowego rate limiting i krótkiego czasu sesji. Pomijaj zarządzanie personelem i uprawnienia w tym tygodniu. Jeśli potrzebujesz drugiej osoby, udostępnij dostęp celowo i rotuj hasło później.

Utrzymaj zarządzanie produktami proste: tworzenie/edycja produktów, przesłanie jednego głównego zdjęcia, ustawienie ceny, przełącznik dostępności. Dla zapasów nie buduj liczników chyba, że naprawdę je masz. Przełącznik dostępne/niedostępne zwykle wystarcza, by uniknąć oversellingu.

Widok zamówień powinien wyglądać jak lista do pakowania. Ułatw wyszukiwanie po ID zamówienia lub emailu klienta, a potem pokaż:

  • Imię klienta, email, adres wysyłki
  • Pozycje, ilości i finalne sumy (włącznie z wysyłką i podatkiem)
  • Status płatności (paid, failed, refunded)
  • Status realizacji (new, packed, shipped)
  • Timestamps i krótka notatka wewnętrzna

Dla akcji statusu ogranicz się do dwóch przycisków: „Mark packed” i „Mark shipped”. Przy oznaczaniu jako wysłane opcjonalnie zapisz notatkę śledzenia (przewoźnik + numer przesyłki, albo „Odbiór osobisty uzgodniony”). Automatyczne maile mogą poczekać, jeśli spowalniają pracę.

Eksport CSV jest opcjonalny. Dodaj go tylko jeśli wiesz, że będziesz go używać w pierwszym tygodniu.

Jeśli używasz narzędzia typu Koder.ai, trzymaj admin w tej samej aplikacji, ale zabezpiecz trasę i wymagaj ważnej sesji.

Krok po kroku: osiągnij pierwszą pomyślną płatność

Zacznij w trybie testowym. Twoim celem nie jest „strona checkout”. Twoim celem jest jedno zamówienie, które jest zapłacone, zapisane i gotowe do realizacji.

Ustal jedną twardą zasadę: nigdy nie zapisuj surowych danych karty na swoim serwerze. Użyj hosted checkout albo tokenizacji po stronie klienta, żeby wrażliwe dane trafiały prosto do dostawcy płatności.

Droga do pierwszego opłaconego zamówienia

  1. Utwórz testowy produkt i jego cenę na serwerze. Checkout musi pobierać ceny z bazy, nie z przeglądarki.
  2. Rozpocznij sesję checkout w trybie testowym. Backend tworzy sesję płatności i zwraca tylko to, czego klient potrzebuje do przekierowania.
  3. Chroń przed podwójnymi kliknięciami. Wyłącz przycisk Pay po pierwszym kliknięciu. Użyj po stronie serwera idempotency key (np. ID koszyka + krótki przedział czasu), żeby duplikaty zwracały tę samą sesję zamiast tworzyć drugie obciążenie.
  4. Weryfikuj płatność po stronie serwera. Traktuj webhook dostawcy jako źródło prawdy. Oznacz zamówienie jako opłacone dopiero po potwierdzeniu, że zdarzenie jest prawdziwe i pasuje kwotą oraz walutą.
  5. Testuj ścieżki błędów. Uruchom płatność nieudaną, anulowaną i wygasłą sesję. Każda powinna kończyć się jasnym stanem zamówienia, a nie tajemnicą.

Ułatwianie naprawy błędów

Loguj błędy płatności z kontekstem, na którym możesz działać: order ID, session ID, email klienta (jeśli dostępny), oczekiwana suma, kod błędu dostawcy i krótka wiadomość jak „Amount mismatch” lub „Webhook signature invalid”.

Przykład: klient próbuje kupić dwa kubki. Twój serwer liczy 24$ + wysyłka, tworzy sesję i zapisuje zamówienie jako pending. Jeśli klient zamknie stronę, zamówienie staje się canceled. Jeśli zapłaci, webhook zmienia je na paid i możesz je pewnie zrealizować.

Bezpieczny workflow wdrożeniowy, którego naprawdę będziesz przestrzegać

Zachowaj pełny dostęp do kodu
Eksportuj źródła kiedy będziesz gotowy, by przejąć i rozbudować projekt.

Gdy masz tylko tydzień, wdrożenia mogą cicho stać się tym, co psuje checkout. Cel to nie finezyjne DevOps. To powtarzalna procedura, która redukuje niespodzianki i daje wyjście awaryjne.

Skonfiguruj dwa środowiska: staging i production. Staging powinien być jak najbliżej produkcji: te same ustawienia, te same szablony, te same reguły podatkowe/wysyłkowe, ale płatności w trybie testowym. Sprawdź wszystko na staging, potem wypromuj dokładnie tę samą kompilację na produkcję.

Używaj wersjonowanych wydań. Nawet jeśli to tylko v1, v2, v3 — taguj każde wydanie i trzymaj poprzednie gotowe. Rollback powinien być jedną akcją: przełącz na poprzednią kompilację lub przywróć snapshot. Jeśli platforma wspiera snapshoty i rollback (Koder.ai to robi), rób to zanim wprowadzisz zmiany produkcyjne.

Traktuj migracje bazy jako ryzykowne w tygodniu MVP. Preferuj zmiany kompatybilne wstecz: dodawaj nowe tabele lub kolumny, nie zmieniaj nazw ani nie usuwaj, i trzymaj stare ścieżki kodu działające, aż nowa wersja będzie stabilna. Jeśli musisz uzupełnić dane, zrób to w osobnym zadaniu, nie w żądaniu użytkownika.

Trzymaj sekrety poza repozytorium. Używaj zmiennych środowiskowych lub menedżera sekretów dla kluczy API, sekretów webhooków, URLi bazy i haseł admina.

Checklista przed wydaniem:

  • Potwierdź, że staging checkout działa end-to-end z kartą testową i zdarzeniem webhook
  • Uruchom migracje na staging, potem na produkcji, i potwierdź, że tworzenie zamówień nadal działa
  • Zweryfikuj maile (potwierdzenie zamówienia, błąd płatności) i ich wygląd
  • Zrób snapshot przed wydaniem i zanotuj wersję
  • Szybki przegląd: jedna osoba wdraża, inna sprawdza listę

Typowe pułapki, które spowalniają 7-dniowe MVP

Najszybszy sposób, żeby nie zdążyć w 7 dni, to budować „fajne” funkcje, które po cichu psują przepływ pieniędzy. Punkt to sklep, który przyjmuje płatność, tworzy wiarygodne zamówienie i pozwala je zrealizować.

Częsty błąd to pozwolić przeglądarce decydować o ostatecznej cenie. Jeśli sumy, rabaty czy wysyłka są liczone po stronie klienta, ktoś prędzej czy później zapłaci niewłaściwą kwotę. Niech serwer będzie jedynym źródłem prawdy: odbuduj zamówienie z ID produktów i ilości, potem przelicz sumy przed utworzeniem płatności.

Reguły wysyłki i podatków to kolejna strata czasu. Zespoły tracą dni próbując obsłużyć każdy kraj i przypadek brzegowy. Na tydzień jeden wybierz prostą regułę i trzymaj się jej.

Płatności mogą także „działać” na stronie, ale zawieść w operacjach, jeśli webhooki brakują. Klient płaci, ale twoja baza nie oznacza zamówienia jako opłacone, więc realizacja stoi. Traktuj obsługę webhooków jako obowiązkową.

Pięć pułapek do pilnowania:

  • Zaufanie klient-side totals zamiast przeliczania na serwerze
  • Budowanie złożonych tabel wysyłki i podatków zanim pojawi się popyt
  • Pomijanie webhooków i poleganie tylko na stronach przekierowań
  • Brak jasnego komunikatu potwierdzającego zamówienie lub maila
  • Wdrażanie prosto na produkcję bez możliwości rollbacku

Przykład: klient kończy płatność, zamyka kartę przed załadowaniem strony sukcesu. Bez webhooków zakłada, że płatność nie powiodła się i próbuje ponownie — możesz skończyć z podwójnymi obciążeniami.

Jeśli budujesz z Koder.ai, używaj snapshotów i rollbacku jako rutyny: wypuszczaj małe zmiany, trzymaj znaną dobrą wersję i szybko odzyskuj, jeśli coś się zepsuje.

Szybkie kontrole przed włączeniem płatności na żywo

Uruchom na własnej domenie
Podłącz własną domenę, gdy będziesz gotowy, by udostępnić sklep klientom.

Zrób te kontrole najpierw na stagingu, potem powtórz tuż przed przełączeniem na live. Cel jest prosty: jeden klient płaci raz, zapisujesz to raz i możesz zrealizować zamówienie.

Zacznij od ścieżki kupującego. Dodaj produkt do koszyka, dokończ checkout i upewnij się, że trafiasz na jasną stronę sukcesu. Potwierdź, że widzisz opłacone zamówienie w adminie z poprawnymi sumami.

Potem testuj webhooki „na ciężko”: opóźnienia i ponowne dostawy. Webhooki mogą przyjść późno, dwukrotnie lub w złej kolejności. Logika aktualizacji zamówienia powinna być idempotentna, żeby retry nigdy nie tworzył duplikatu opłaconego zamówienia.

Checklist pre-launch:

  • Złóż testowe zamówienie end-to-end i potwierdź, że pojawia się w adminie z zapisanym transaction/payment ID
  • Wyślij to samo zdarzenie webhook ponownie i potwierdź, że nic się nie dubluje
  • Wyłącz jeden produkt i potwierdź, że znika i nie można go kupić
  • W adminie przesuń zamówienie przez statusy (new -> paid -> shipped) i dodaj notatkę wewnętrzną
  • Wdróż małą zmianę i przywróć ją w kilka minut bez utraty danych zamówień

Zrób jedno realne, niskokwotowe obciążenie zanim cokolwiek ogłosisz. Użyj prawdziwej karty, niewielkiej kwoty i własnego adresu wysyłki. Powinieneś zobaczyć zamówienie dokładnie raz, z jasnym timestampem i statusem.

Jeśli używasz Koder.ai, poćwicz to ze snapshotami: wdrożenie, złożenie zamówienia, rollback i potwierdzenie, że istniejące zamówienia wciąż się poprawnie ładują.

Przykładowy scenariusz: mały sklep, który możesz wysłać w tym tygodniu

Wyobraź sobie małą palarnię kawy, która chce sprzedać 12 opakowań kawy online. Nie potrzebują subskrypcji, recenzji ani programu lojalnościowego. Potrzebują prostego sklepu, który przyjmuje prawdziwe pieniądze i tworzy czytelne zamówienia do realizacji.

Do dnia 2 katalog jest wystarczający, jeśli każdy produkt ma wyraźne zdjęcie, cenę i krótki opis (stopień palenia, nuty smakowe, rozmiar opakowania). Trzymaj opcje minimalne: jeden rozmiar na produkt i jedna opcja wysyłki (np. stawka stała w jednym kraju).

Do dnia 4 checkout robi jedno zadanie: zbiera dane wysyłkowe, pobiera płatność kartą i pokazuje stronę potwierdzenia, którą klient może screenshotować. Wyświetl ID zamówienia i krótkie podsumowanie (pozycje, suma, adres wysyłki). Jeśli klient napisze do supportu, to ID zamówienia najszybciej pokaże, co się stało.

Do dnia 5 admin pozostaje celowo prosty. Palarnia loguje się, widzi nowe zamówienia i przesuwa je przez paid, packed, shipped. Śledzenie może przyjść później. W pierwszym tygodniu notatka typu „Wysłano pocztą, etykieta wydrukowana o 15:10” często wystarczy.

To też zakres, który dobrze pasuje do narzędzi chat-first jak Koder.ai: kilka ekranów, kilka tabel i klarowny workflow.

Tydzień 2: pomysły warte czekania: kody rabatowe, lepsze wyszukiwanie, liczniki magazynowe i bardziej automatyczne maile. Dodawaj je dopiero po tym, jak realne zamówienia pokażą, co się opłaca.

Często zadawane pytania

Co oznaczają „prawdziwe płatności” w kontekście 7-dniowego MVP ecommerce?

MVP „na serio” to taki, w którym obca osoba może pomyślnie zapłacić, Ty możesz zobaczyć opłacone zamówienie z poprawnymi kwotami i danymi wysyłkowymi, i możesz je zrealizować tego samego dnia bez zgadywania.

Jeśli potrafisz przeprowadzić 10 zamówień pod rząd bez ręcznych poprawek, jesteś w bardzo dobrym miejscu.

Jaki jest najszybszy zakres, który nadal wygląda jak prawdziwy sklep?

Wybierz jeden kraj, jedną walutę i jedną metodę płatności (zwykle karty). Utrzymaj wysyłkę i podatek do jednej prostej zasady (np. stała opłata za wysyłkę i brak podatku, jeśli to możliwe).

Zakres pozostaje mały, gdy każda decyzja wspiera: produkt → koszyk → checkout → opłacone zamówienie → realizacja.

Jakie strony naprawdę potrzebuję w pierwszym tygodniu?

Zacznij od:

  • Strony listy produktów
  • Strony szczegółów produktu
  • Koszyka (dodaj/usun/zmień ilość)
  • Checkout (imię/email + adres wysyłki + podsumowanie)
  • Strony potwierdzenia
  • Panelu admina (produkty + zamówienia)

Pomiń konta użytkowników, wishlisty, opinie, kupony, wiele walut i wiele metod płatności.

Czy użyć hosted checkout czy osadzonego formularza kart?

Hosted checkout to zwykle domyślne rozwiązanie na 7-dniowe MVP — jest szybsze i zmniejsza problemy z bezpieczeństwem i UI.

Formularze osadzone wyglądają bardziej „native”, ale zwykle wprowadzają więcej przypadków brzegowych i wymagają więcej pracy, by bezpiecznie je obsłużyć.

Dlaczego webhooki są wymagane, jeśli strona zwrotna mówi „payment succeeded”?

Traktuj webhook jako źródło prawdy. Strony przekierowań poprawiają UX, ale nie są niezawodne (karty zamykane, problemy sieciowe).

Użyj webhooka, by oznaczyć zamówienie jako opłacone dopiero po zweryfikowaniu zdarzenia i dopasowaniu oczekiwanej kwoty/waluty.

Jak zapobiec tworzeniu podwójnych opłaconych zamówień przez webhooki?

Zaimplementuj idempotentny handler webhooków:

  • Zapisz ID zdarzenia od dostawcy
  • Odrzucaj duplikaty (albo no-op, jeśli już przetworzone)
  • Aktualizuj status zamówienia/płatności w transakcji

To zapobiega podwójnym mailom, podwójnym wysyłkom i zamieszaniu „opłacone dwukrotnie”.

Jakie dane powinienem zapisać jako snapshot, aby stare zamówienia nie psuły się później?

Zapisuj snapshoty w momencie zakupu:

  • Tytuł pozycji i cena jednostkowa dla każdego elementu w zamówieniu
  • Suma zamówienia, koszt wysyłki, podatek, łączna kwota

Nie przeliczaj później sum z tabeli Product, bo ceny i zasady się zmieniają i otrzymasz niespójne zapisy.

Jakie statusy używać dla zamówień i płatności?

Utrzymuj statusy proste i skupione na realizacji:

  • Order: new, paid, packed, shipped, canceled (dodaj refunded tylko jeśli faktycznie wspierasz zwroty)
  • Payment: created, paid, failed, canceled, refunded

Cel: jednym rzutem oka wiedzieć, co robić dalej.

Jaki jest minimalny panel admina, który mnie nie spowolni?

Admin ma odpowiadać krótko na trzy pytania: co jest na sprzedaż, co zostało opłacone i co trzeba wysłać.

Minimalne funkcje admina:

  • Zabezpieczone logowanie
  • Tworzenie/edytowanie/wyłączanie produktów
  • Lista zamówień + szczegóły zamówienia
  • Dwie akcje: Mark packed i Mark shipped (opcjonalna notatka z numerem przesyłki)

Pomiń wykresy i skomplikowane role w pierwszym tygodniu.

Jaki jest bezpieczny workflow wdrożeniowy dla MVP z płatnościami?

Prosta, bezpieczna rutyna:

  • Używaj staging i production (staging w trybie testowym płatności)
  • Wersjonuj wydania, aby rollback był jednym krokiem
  • Preferuj kompatybilne wstecz zmiany w bazie podczas tygodnia MVP
  • Trzymaj sekrety w zmiennych środowiskowych (nie w repozytorium)

Jeśli używasz Koder.ai, rób snapshot przed każdym większym krokiem, aby szybko przywrócić sprawną wersję, jeśli checkout przestanie działać.

Related posts