Case study

zlitego.pl

Sklep z meblami z drewna litego: płatności Stripe, wysyłka InPost, panel admina, moduł CAD. Pierwsza rzecz, jaką zbudowałem z AI.

2023–2024 pierwszy projekt z AI PHP React live

Otwórz stronę

Kontekst

Robię meble z drewna litego i potrzebowałem miejsca, w którym mógłbym je pokazać — a przy okazji chciałem się nauczyć, jak zbudować sklep od podszewki. To był mój pierwszy projekt zrobiony z AI: powstał z własnej potrzeby, nie na zlecenie.

Problemy nie były przez to wymyślone. Meble z drewna litego to egzemplarze pojedyncze, nie produkty katalogowe — każdy stół czy strugnica istnieje raz. Sklep musiał to odzwierciedlić: rezerwować towar w koszyku, żeby dwie osoby nie kupiły tego samego egzemplarza, i traktować dostawę inaczej dla mebli, których transportu nie da się wycenić z góry.

Co zbudowałem

  • Stronę główną z pięcioma ścieżkami: sprzedaż, galeria realizacji, odkup starych mebli, kontakt i szkicownik.
  • Galerię projektów z opisem wyrobu i zdjęciami z pracowni.
  • Koszyk z regułą wygaszania opcji dostawy przy produktach wymagających indywidualnej wyceny transportu.
  • Rezerwacje towaru w koszyku, które wygasają i wracają do sprzedaży.
  • Płatności online przez Stripe i wysyłkę przez InPost ShipX.
  • Panel administracyjny z blokadą logowania po adresie IP.
  • Szkicownik CAD, w którym klient rysuje konstrukcję z wymiarami w milimetrach i wysyła projekt do wyceny.

Sedno

Decyzje techniczne

Dlaczego sklep odbiera klientowi wybór dostawy?

Strugnicy dębowej za 3300 zł nie wyśle się paczkomatem. Sklep to wie: przy produktach wymagających indywidualnej wyceny transportu wygasza opcje wysyłki i zostawia sam odbiór osobisty, zamiast pozwolić zamówić kuriera i tłumaczyć się później. Reguła siedzi w koszyku, nie w regulaminie — klient nie może wybrać czegoś, czego i tak nie da się zrobić.

Dlaczego rezerwacje towaru wygasają?

Meble z drewna litego to egzemplarze pojedyncze — nie ma „drugiej sztuki z magazynu”. Dodanie do koszyka rezerwuje egzemplarz, żeby dwie osoby nie kupiły tego samego stołu, ale rezerwacja wygasa i wraca do sprzedaży. Bez wygasania porzucony koszyk zamrażałby towar na zawsze.

Dlaczego blokada logowania do panelu siedzi w pliku, a nie w sesji?

Bo blokada w sesji nie jest blokadą. Atakujący, który nie odsyła ciasteczka, dostaje nową sesję przy każdym żądaniu — licznik prób startuje od zera i limit znika. Licznik trzymany w pliku, po adresie IP, tego nie da się obejść skasowaniem ciasteczka. Pięć nieudanych prób blokuje adres na 15 minut.

Skąd pomysł na Szkicownik?

Klient wie, czego chce, ale nie umie tego opisać — a ja nie umiem wycenić opisu. Szkicownik odwraca kolejność: klient rysuje konstrukcję z prawdziwymi wymiarami w milimetrach, wysyła projekt, a ja go wykonuję. Zamiast wymiany maili „coś takiego, ale niższe” dostaję rysunek techniczny.

Jak to wygląda

Stack

  • PHP 8
  • React
  • Stripe
  • InPost ShipX
  • MySQL
  • Apache / OVH
  • PL/EN

Sklep działa produkcyjnie pod własną domeną — zobacz go w akcji.

Otwórz stronę

Na górę strony