Repository navigation
Releases: cyryllo/craty
Release list
Craty v1.2.3
Wydanie z poprawkami po lokalnym teście penetracyjnym. Aplikację zaatakowano na wersji testowej na trzy sposoby: ręcznie, z konta magazyniera i administratora, oraz narzędziami OWASP ZAP i sqlmap. Skanery nie znalazły wstrzyknięć SQL ani poważnych błędów, a ręczne próby wykazały kilka problemów, które ta wersja poprawia. Zalecana aktualizacja dla wszystkich instalacji.
Poprawki bezpieczeństwa
Bezpieczne znaki w kodach i nazwach lokalizacji
Kody kategorii, magazynów i pomieszczeń oraz nazwy regałów, półek i pojemników przyjmowały dowolne znaki. Ponieważ składają się na numer ewidencyjny, a ten na nazwę pliku z kodem QR, regał nazwany np. /../../x powodował zapisanie pliku QR poza przeznaczonym na to katalogiem. Teraz kody mogą zawierać tylko litery, cyfry, myślnik i podkreślnik, a nazwy regałów, półek i pojemników dodatkowo spację. Nazwa pliku QR jest też zawsze czyszczona, więc nawet stary numer ewidencyjny z nietypowymi znakami nie wyprowadzi pliku poza katalog kodów QR. Istniejące kody nie są zmieniane, ograniczenie działa przy dodawaniu i edycji.
Bezpieczny eksport CSV
Tytuł lub opis oferty zaczynający się od =, +, - albo @ mógł zostać wykonany jako formuła po otwarciu wyeksportowanego pliku w Excelu lub LibreOffice (np. =HYPERLINK(...) prowadzący do obcej strony). Takie wartości dostają teraz w pliku apostrof na początku, dzięki czemu arkusz pokazuje je jako zwykły tekst.
Reset hasła nie zdradza, kto ma konto
Formularz „Nie pamiętasz hasła?” dla nieistniejącego adresu odpowiadał komunikatem, że takiego użytkownika nie ma, co pozwalało sprawdzać, czy dany adres ma konto. Teraz odpowiedź jest zawsze taka sama.
Link „Wróć” tylko w obrębie strony
Link „Wróć do wszystkich ofert” na stronie oferty brał adres z nagłówka przeglądarki i w pewnych przypadkach mógł wskazywać obcą domenę. Teraz prowadzi wyłącznie do listy ofert na tej samej stronie, zachowując wybrany filtr kategorii.
Nagłówki bezpieczeństwa także na stronach błędu
Nagłówki bezpieczeństwa z wersji 1.2.2 nie były wysyłane na stronach „nie znaleziono” (404). Teraz są dodawane do każdej odpowiedzi aplikacji, a do zestawu doszedł nagłówek oddzielający okno aplikacji od okien otwartych z innych stron.
Sprawdzone i w porządku
Ochrona formularzy przed podrobionymi żądaniami, ignorowanie ukrytych pól przy edycji przedmiotu, blokada akcji administratora dla magazyniera, brak możliwości usuwania cudzych zdjęć, logowanie niezdradzające istnienia kont, nowa sesja po zalogowaniu, wylogowanie tylko przyciskiem, niewyświetlanie hasła SMTP oraz import CSV bez zapisywania plików na serwerze. Każdy z poprawionych problemów ma test, który pilnuje, żeby nie wrócił.
Aktualizacja
Panel administratora → Ustawienia → Aktualizacje → wgraj paczkę poniżej. Ta wersja nie zmienia bazy danych (brak nowych migracji). Jak zawsze: zrób kopię plików i bazy danych przed wgraniem. Po aktualizacji warto uruchomić ./security-check dla swojej domeny.
Paczka do wdrożenia: craty-1.2.3.zip (SHA-256: b00b447cee6c3ba52bc7c1123b4a7a10dcdbce1a3689d8062132bebe66aa0630)
Craty v1.2.2
Wydanie poświęcone bezpieczeństwu. Po przeglądzie działającej instalacji i kodu aplikacji poprawiono dwie realne luki, dołożono kilka warstw ochrony i zestaw automatycznych testów, które pilnują, żeby te problemy nie wróciły. Zalecana aktualizacja dla wszystkich instalacji. Zbiera też drobne zmiany z wersji 1.2.1.
Poprawki bezpieczeństwa
Załączniki przyjmują tylko bezpieczne typy plików
Do tej pory jako załącznik przedmiotu można było wgrać dowolny plik, także skrypt .php, a załączniki trafiają do publicznie dostępnego katalogu /storage/. Zalogowany użytkownik mógł więc wgrać skrypt i uruchomić go na serwerze. Teraz załącznik musi być plikiem PDF, dokumentem biurowym (Word, Excel, LibreOffice, RTF), obrazem, plikiem tekstowym, CSV albo archiwum ZIP, a typ jest rozpoznawany po zawartości pliku, nie po jego nazwie. Dodatkowo serwer nie uruchomi ani nie wyświetli jako strony żadnego skryptu czy pliku HTML z katalogu /storage/, nawet gdyby taki się tam znalazł.
Wyłączone konto naprawdę traci dostęp
Konto wyłączone przez administratora wciąż mogło się zalogować i przeglądać pulpit oraz listę przedmiotów (blokada działała tylko przy zmianach danych). Teraz logowanie na wyłączone konto jest odrzucane, a osoba zalogowana w chwili wyłączenia konta zostaje wylogowana przy następnym kliknięciu.
Brak listingu katalogów i porządek w /storage/
Na części serwerów katalog /storage/ pokazywał listę wszystkich plików, czyli zdjęcia wszystkich przedmiotów, także tych niewystawionych na sprzedaż. Wyłączenie listingu było dotąd uzależnione od modułu serwera, którego wiele hostingów nie ma. Teraz jest włączone zawsze, a z /storage/ dostępne są wyłącznie zdjęcia, kody QR i logo. Migracja przy aktualizacji usuwa też stare, prywatne katalogi, które przy dawnej zmianie układu plików mogły trafić do publicznego magazynu (w tym kopie kodu z usuniętej funkcji cofania aktualizacji). Zdjęcia, kody QR i logo zostają nietknięte.
Nagłówki bezpieczeństwa
Aplikacja wysyła teraz nagłówki chroniące przed osadzaniem strony w ramce na obcej witrynie, przed zgadywaniem typu plików przez przeglądarkę i przed wyciekiem pełnych adresów stron do zewnętrznych serwisów, a dostęp do aparatu ogranicza do samej aplikacji. Wysyła je sama aplikacja, a nie plik .htaccess, bo na niektórych hostingach nagłówki dodane w .htaccess po drodze znikają.
Mniejsze wzmocnienia
- Favicon i logo nie przyjmują już plików SVG (SVG może zawierać skrypt), tylko PNG, ICO, JPG, WebP i GIF.
- Zablokowany dostęp do ukrytych plików i katalogów (np.
.git) oraz plików dokumentacji.md, co ma znaczenie przy instalacji przezgit cloneprosto na serwer. - Wyłączono nieużywane trasy Laravela do serwowania i wgrywania plików prywatnych.
Testy i narzędzia
Automatyczne testy bezpieczeństwa (tests/Feature/Security/): mapa uprawnień sprawdza każdą stronę aplikacji, czyli kto ma do niej dostęp (gość, magazynier, administrator), i nie przejdzie, jeśli ktoś doda nową stronę bez przemyślenia uprawnień. Kolejne testy sprawdzają wgrywanie złośliwych plików, wstrzykiwanie kodu w nazwach przedmiotów, próbę nadania sobie roli administratora, wyłączone konta i blokadę logowania po pięciu błędnych hasłach.
Skrypt security-check sprawdza działającą instalację z zewnątrz: ./security-check https://twoja-domena.pl. Wykonuje wyłącznie zapytania odczytu, bez logowania, więc można go bezpiecznie uruchamiać na produkcji, np. po każdej aktualizacji. Sprawdza, czy nie da się pobrać plików z kodem i hasłami, czy nie ma listingu katalogów, czy panel wymaga logowania, czy strona błędu nie zdradza szczegółów, oraz nagłówki, ciasteczka i przekierowanie na HTTPS.
Zgłaszanie luk: lukę bezpieczeństwa można teraz zgłosić prywatnie przez GitHub Security Advisories, zamiast w publicznym zgłoszeniu.
Pozostałe zmiany (1.2.1)
- „Ustawienia sklepu” nazywają się teraz „Opcje sprzedaży”, bo Craty to program magazynowy, a nie sklep.
- README opisuje założenia projektu, plany na przyszłość, jak pomóc i jak dbać o bezpieczeństwo. Projekt ma też stronę na GitHub Pages i formularze do zgłaszania błędów oraz pomysłów.
Aktualizacja
Panel administratora → Ustawienia → Aktualizacje → wgraj paczkę poniżej. Aktualizacja uruchamia jedną migrację (sprzątanie starych katalogów z publicznego magazynu plików) i nadpisuje plik .htaccess w katalogu głównym nową wersją. Jeśli wprowadzałeś w nim własne zmiany, zapisz je przed aktualizacją. Jak zawsze: zrób kopię plików i bazy danych przed wgraniem. Po aktualizacji warto uruchomić ./security-check dla swojej domeny.
Paczka do wdrożenia: craty-1.2.2.zip (SHA-256: 1f3e46b3a1d7dde06cdf53d70b50516dcd84ab724039e7e1bdfd0ec67e372cad)
Craty v1.2.0
Wersja 1.2 domyka publiczną stronę główną. Pchli targ dostał własne miejsce w ustawieniach, gdzie można opisać, kto i na jakich zasadach sprzedaje, oraz dodać politykę prywatności i regulamin. Do tego prostsze włączanie sklepu, własna ikonka karty przeglądarki i wygodniejsze oglądanie zdjęć ofert. Zbiera zmiany z wersji 1.1.18 i 1.2.0.
Co nowego
Ustawienia sklepu
Nowy kafelek w Ustawieniach (tylko dla Administratora, widoczny przy włączonym module Sprzedaż) zbiera wszystko, co dotyczy publicznej strony głównej. Opis sklepu pojawia się na stronie głównej w ramce kontaktu, nad e-mailem i telefonem: to dobre miejsce na informację, kto sprzedaje, jak odebrać rzecz i jak zapłacić. Na stronach pojedynczych ofert opisu nie ma, żeby nie zasłaniał samego przedmiotu. Tutaj przeniesiono też e-mail i telefon kontaktowy, wcześniej schowane w Ustawieniach aplikacji. Zapisane wcześniej dane zostają bez zmian.
Polityka prywatności i regulamin
W Ustawieniach sklepu można wkleić politykę prywatności i regulamin. Linki do nich pojawiają się w stopce strony głównej i stron ofert tylko wtedy, gdy tekst jest wpisany, a po kliknięciu tekst otwiera się w okienku, bez osobnych podstron. Wszystkie teksty sklepu (opis, polityka, regulamin) pisze się prostym Markdownem: akapity, pogrubienie, nagłówki, listy i linki. Wklejony HTML i niebezpieczne linki są pomijane, więc strona zostaje bezpieczna niezależnie od tego, co zostanie wklejone.
Pchli targ włącza się razem ze Sprzedażą
Usunięto osobny przełącznik „Publikuj publiczną stronę pchli targ”. Strona główna pokazuje wystawione oferty zawsze, gdy włączony jest moduł Sprzedaż, a przy wyłączonym tylko informację, że nic nie jest wystawione. Uwaga przy aktualizacji: jeśli masz włączoną Sprzedaż, a pchli targ był dotąd wyłączony, wystawione oferty staną się publicznie widoczne od razu po wgraniu tej wersji. Jeśli tego nie chcesz, przed aktualizacją wycofaj oferty albo wyłącz moduł Sprzedaż.
Własny favicon
W Ustawieniach aplikacji, pod logo, można wgrać własną ikonkę karty przeglądarki (PNG, ICO, SVG, JPG, WebP albo GIF, do 512 KB). Bez niej ikonką jest wgrane logo, a bez logo domyślne logo aplikacji. Wcześniej karta przeglądarki nie miała żadnej ikonki.
Zdjęcia oferty w okienku
Na stronie oferty kliknięcie zdjęcia otwiera je w okienku na ciemnym tle, zamiast w nowej karcie. Zdjęcia przełącza się strzałkami po bokach, klawiszami ← → albo klikając miniatury na dole, a licznik pokazuje, które to zdjęcie. Zdjęcie zawsze mieści się na ekranie z marginesem, także na telefonie. Okienko zamyka krzyżyk, klawisz Esc albo kliknięcie w tło.
Drobne zmiany
- Odnośniki do pchlego targu w panelu (w Sprzedaży i w ustawieniach) otwierają się w tej samej karcie.
- Dane przykładowe (instalator, opcja „załaduj dane demo”) zawierają przykładowy opis sklepu, politykę prywatności i regulamin, napisane z punktu widzenia osoby prywatnej sprzedającej własne rzeczy. To tylko wzory: przed użyciem na prawdziwej stronie trzeba je sprawdzić i dopasować do siebie.
- Instrukcja użytkownika (
INSTRUKCJA.md) opisuje Ustawienia sklepu, favicon i okienko zdjęć.
Aktualizacja
Panel administratora → Ustawienia → Aktualizacje → wgraj paczkę poniżej. Aktualizacja uruchamia dwie migracje bazy (pole na favicon oraz pola na opis sklepu, politykę prywatności i regulamin). Jak zawsze: zrób kopię plików i bazy danych przed wgraniem.
Paczka do wdrożenia: craty-1.2.0.zip (SHA-256: 63768f6a28447a4e4fcd1a35b995125f446316bdcb3c6e48e6bafca0c8331470)
Craty v1.1.17
Duże wydanie porządkujące dwie rzeczy: to, co widzi gość odwiedzający adres aplikacji, i to, jak zarządza się miejscami w magazynie. Pchli targ staje się stroną główną, a magazyny, pomieszczenia i lokalizacje tworzą jedno czytelne drzewo zamiast trzech osobnych tabel. Do tego bezpieczniejsze usuwanie miejsc, grafika dla przedmiotów bez zdjęć i pełniejsza historia wypożyczeń.
Co nowego
Pchli targ jako strona główna
Wejście na sam adres aplikacji (np. https://twoja-domena.pl/) pokazuje teraz pchli targ z wystawionymi ofertami. Gdy pchli targ jest wyłączony (albo moduł Sprzedaż), strona główna nie zwraca błędu, tylko pokazuje informację, że nic nie jest wystawione. Do panelu wchodzi się przez kłódkę w prawym górnym rogu; zalogowani widzą w tym miejscu przycisk „Panel”. Zainstalowana na telefonie aplikacja (PWA) dalej otwiera się od razu na panelu ewidencji. Strony pojedynczych ofert są pod /offer/{id}, a stary adres /flea-market został usunięty. Jeśli komuś wysłałeś link pod tym adresem, wyślij nowy, główny adres.
Struktura magazynu (Ustawienia → Struktura magazynu)
Magazyny, pomieszczenia, regały, półki i pojemniki są teraz w jednym drzewie zamiast w trzech płaskich tabelach. Magazyn to szeroki nagłówek, pomieszczenia to karty w dwóch kolumnach, a pod nimi są regały (do zwijania), półki i pojemniki jako małe „chipy”. Przy każdym miejscu widać liczbę przedmiotów (łącznie z tym, co niżej, bez sprzedanych i wycofanych). Po najechaniu myszką pokazuje się dymek z nazwami przedmiotów i notatką miejsca. Kliknięcie otwiera listę przedmiotów z tego miejsca, z przyciskiem szybkiego powrotu do Struktury magazynu. Przyciski „+ Pomieszczenie”, „+ Regał w: …”, „+ Półka” i „+ Pojemnik” otwierają formularz z już wpisanym magazynem, pomieszczeniem, regałem i półką. Dawne listy magazynów, pomieszczeń i lokalizacji przekierowują na nową stronę, a usuwanie przeniesiono na dół formularzy edycji.
Usuwanie miejsc nie gubi przedmiotów
Usunięcie pomieszczenia, w którym coś leży, nie jest już blokowane. Wszystkie jego przedmioty (także z regałów, półek i pojemników) przechodzą do samego magazynu. Usunięcie regału, półki albo pojemnika przenosi przedmioty poziom wyżej: do „całego pomieszczenia”, a bez pomieszczenia do „całego magazynu”. Komunikat po usunięciu mówi, ile przedmiotów i dokąd przeniesiono, a każde przeniesienie zapisuje się w historii przedmiotu. Magazynu z przedmiotami nadal nie da się usunąć.
Koniec modułu „Rozszerzony magazyn”
Skoro Struktura magazynu sama pokazuje tyle szczegółów, ile się w niej założy, osobny przełącznik przestał mieć sens. Pomieszczenia i lokalizacje są zawsze dostępne, a kto ich nie potrzebuje, po prostu ich nie zakłada. Ustawienia → Moduły zawierają teraz tylko Sprzedaż.
Grafika „Brak zdjęcia”
Przedmioty i oferty bez zdjęcia nie zostawiają już pustego szarego pola. Na liście przedmiotów, na pchlim targu i na stronie oferty pojawia się prosta ikona z podpisem, w jasnym i ciemnym motywie.
Komu wypożyczono, w historii przedmiotu
Historia przedmiotu zapisuje teraz osobny wpis przy wypożyczeniu (komu i do kiedy) i przy zwrocie (od kogo wrócił), a nie tylko zmianę statusu. Pole „komu” jest obowiązkowe, a błąd pustego pola pokazuje się bezpośrednio przy nim.
Drobne zmiany
- Migracja uzupełnia lokalizację „cały magazyn” w magazynach, w których jej brakowało.
- Dane przykładowe (instalator, opcja „załaduj dane demo”) zawierają teraz pomieszczenia, regały, półki i pojemniki.
- Instrukcja użytkownika (
INSTRUKCJA.md) opisuje Strukturę magazynu, nową stronę główną i historię wypożyczeń.
Aktualizacja
Panel administratora → Ustawienia → Aktualizacje → wgraj paczkę poniżej. Aktualizacja uruchamia jedną migrację bazy (uzupełnienie lokalizacji „cały magazyn”). Jak zawsze: zrób kopię plików i bazy danych przed wgraniem.
Paczka do wdrożenia: craty-1.1.17.zip (SHA-256: 5b171a2928eb831dde0b9a156ebafcb9c3b66e611ffbf7b0f2a194ab4cd06e29)
Craty v1.1.16
Wydanie porządkujące widok magazynu i poprawiające błąd na publicznym pchlim targu. Zbiera zmiany z wersji 1.1.14–1.1.16. Najważniejsze: sprzedane i wycofane przedmioty przestają zaśmiecać listę przedmiotów i statystyki, a kliknięcie kategorii na pchlim targu nie kończy się już błędem 502.
Co nowego
Sprzedane i wycofane przedmioty znikają z magazynu
Przedmiot ze statusem „Sprzedany” albo „Wycofany” fizycznie nie leży już w magazynie, więc nie ma go też w widoku magazynu. Nie pokazuje się na liście przedmiotów (w siatce, w liście i w wynikach wyszukiwania), nie liczy się do liczby ani łącznej wartości przedmiotów na Panelu i nie trafia do list „Ostatnio dodane” oraz „do uzupełnienia”. Domyślna opcja filtra statusu nazywa się teraz „wszystkie (w magazynie)”. Żeby zobaczyć takie przedmioty, wybierz w filtrze status „Sprzedany” albo „Wycofany”. Nic nie jest kasowane: przedmiot zostaje w bazie razem z historią zmian i ofertą sprzedaży, a jego karta i kod QR z naklejki dalej działają.
Poprawione linki na pchlim targu (błąd 502 przy kategoriach)
Na części hostingów, gdzie HTTPS jest obsługiwany przed samą aplikacją, kliknięcie kategorii na pchlim targu kończyło się błędem 502. Aplikacja budowała linki jako pełne adresy z http://, a hosting nie umiał ich obsłużyć. Teraz wszystkie linki wewnątrz pchlego targu (kategorie, przełącznik siatka/lista, karty ofert, „Więcej informacji”, logo w nagłówku) są względne, więc przeglądarka zawsze używa adresu i protokołu, pod którym faktycznie otworzyła stronę. Przy okazji link „Wszystkie” nie zostawia już pustego „?” na końcu adresu.
Drobne zmiany
- README (polskie i angielskie) ma zrzut ekranu aplikacji.
- Instrukcja użytkownika (
INSTRUKCJA.md) opisuje ukrywanie sprzedanych i wycofanych przedmiotów.
Aktualizacja
Panel administratora → Ustawienia → Aktualizacje → wgraj paczkę poniżej. To wydanie nie zmienia bazy danych (brak nowych migracji). Jak zawsze: zrób kopię plików i bazy danych przed wgraniem.
Paczka do wdrożenia: craty-1.1.16.zip (SHA-256: bf933b6e0a632d7a8259c23fc91019279f2e9de526a9bdefb75c3b9ffc1c94de)
Craty v1.1.13
Pierwsze oficjalne wydanie od wersji 1.1.8, zbierające zmiany z wersji 1.1.9–1.1.13. Najwięcej dzieje się wokół sprzedaży i pchlego targu: oferty można powiązać z ogłoszeniem na OLX, Allegro albo Vinted, pchli targ dostał osobną stronę dla każdej oferty, a edycja ofert wreszcie działa tak, jak powinna. Do tego nowy moduł „Rozszerzony magazyn” dla tych, którym nie jest potrzebny podział na pomieszczenia i regały.
Co nowego
Link do oferty na OLX / Allegro / Vinted
Każda oferta sprzedaży może mieć opcjonalny link do tego samego ogłoszenia na zewnętrznym portalu. Można go podać od razu przy tworzeniu oferty, ale ponieważ link zwykle powstaje dopiero po wystawieniu ogłoszenia, da się go też dopisać, zmienić albo usunąć później — z okienka podglądu, które otwiera się po kliknięciu oferty na zakładce „Przygotowane” lub „Wystawione”. Oferty z linkiem mają w tabeli ikonkę 🔗, a na pchlim targu link pokazuje się jako przycisk „Zobacz na OLX / Allegro / Vinted” (nazwa portalu rozpoznawana z samego adresu). Dozwolone są tylko adresy http/https.
Poprawiona edycja ofert sprzedaży
Przycisk „edytuj treść” w zakładce „Przygotowane” otwierał w rzeczywistości formularz tworzenia nowej oferty — platforma wracała zawsze na OLX, a zapis zakładał drugą ofertę dla tego samego przedmiotu. Teraz „edytuj” jest dostępne na obu zakładkach (także dla ofert już wystawionych), otwiera formularz z zapisanymi danymi i aktualizuje tę samą ofertę — łącznie ze zmianą platformy. Pole opisu w tym formularzu rośnie razem z tekstem i da się je rozciągnąć w dół.
Strona oferty na pchlim targu
Każda oferta na publicznym pchlim targu ma teraz własną stronę z wszystkimi zdjęciami (siatka przyciętych miniatur, kliknięcie otwiera pełny rozmiar), pełnym opisem, stanem technicznym, przyciskiem do ogłoszenia na OLX/Allegro/Vinted i kontaktem — e-mail otwiera się od razu z tytułem oferty w temacie. Lista ofert jest za to prostsza: zdjęcie (z liczbą zdjęć, gdy jest ich więcej), nazwa, cena, stan i przycisk „Więcej informacji”, bez opisu. Przycisk „Wróć do wszystkich ofert” zachowuje wybraną kategorię i stronę listy. Sprzedane, wycofane i nieopublikowane oferty dają błąd 404, tak samo jak wyłączony pchli targ.
Odnośnik do pchlego targu w Sprzedaży
Gdy pchli targ jest włączony, obok zakładek „Przygotowane” / „Wystawione” pojawia się odnośnik „🛒 Pchli targ”, który otwiera publiczną stronę w nowej karcie — wygodny podgląd tego, co widzą odwiedzający.
Moduł „Rozszerzony magazyn” (Ustawienia → Moduły)
Pomieszczenia i szczegółowe lokalizacje (regał/półka/pojemnik) stały się modułem, który można wyłączyć. Bez niego w Ustawieniach nie ma kafelków „Pomieszczenia” i „Lokalizacje”, a na formularzu przedmiotu wybiera się po prostu magazyn. Wyłączenie modułu niczego nie kasuje — przedmiot leżący na konkretnym regale zachowuje tę lokalizację, także po zwykłym zapisie formularza, a ponowne włączenie przywraca wszystko. Na nowej instalacji moduł startuje wyłączony; jeśli korzystacie już z pomieszczeń lub regałów, aktualizacja włącza go automatycznie, więc nic Wam nie zniknie.
Drobne poprawki
- Pionowe zdjęcia na kafelkach pchlego targu są teraz przycinane do ramki i nie rozpychają już kafelka.
- Kafelki w siatce przedmiotów (
/items) mają w każdym rzędzie równą wysokość. - Instrukcja użytkownika (
INSTRUKCJA.md) opisuje wszystkie powyższe zmiany.
Aktualizacja
Panel administratora → Ustawienia → Aktualizacje → wgraj paczkę poniżej. Aktualizacja uruchamia trzy migracje bazy (link do oferty, Vinted, moduł „Rozszerzony magazyn”). Jak zawsze: zrób kopię plików i bazy danych przed wgraniem.
Paczka do wdrożenia: craty-1.1.13.zip (SHA-256: 4d810ab88b37f75c8c2bce45d4884ad449892647eb79c77cfd2df2360bdc938a)
Craty v1.1.8
Kolejna aktualizacja w serii 1.1.x — skupiona na wygodzie codziennej pracy z ewidencją: łatwiejsze porządkowanie zdjęć, prostszy podział magazynu na pomieszczenia i możliwość poprawienia numeru ewidencyjnego/kodu QR, gdy przedmiot dodano "na szybko".
Co nowego
Regeneracja numeru ewidencyjnego i kodu QR
Jeśli przedmiot trafił do ewidencji bez uzupełnionej kategorii lub lokalizacji, numer ewidencyjny dostawał segmenty "GEN"/"BRAK" (np. GEN-BRAK-2026-00042). Teraz na karcie przedmiotu, obok kodu QR, jest przycisk do ponownego wygenerowania obu na podstawie aktualnych danych — z potwierdzeniem, bo unieważnia to już wydrukowaną etykietę. Stary plik QR jest przy tym usuwany, żeby nie zostawiać śmieci na dysku.
Szersze rozpoznawanie kodów kreskowych
Skaner kamerą (/scan) obok własnych kodów QR i EAN/UPC/Code128 rozpoznaje teraz też Code 39, Code 93, Codabar i ITF — częste na etykietach z numerem seryjnym sprzętu.
Zmiana kolejności zdjęć przedmiotu
Na formularzu edycji przedmiotu zdjęcia można teraz przesuwać strzałkami — pierwsze zdjęcie w kolejności zawsze staje się okładką widoczną na liście i karcie przedmiotu.
Magazyn bez szczegółowej lokalizacji
Dotąd magazyn bez choć jednej zdefiniowanej lokalizacji (regał/półka/pojemnik) był niewybieralny przy dodawaniu przedmiotu. Teraz każdy magazyn dostaje automatycznie "bazową" lokalizację reprezentującą po prostu cały magazyn — przydatne, gdy nie chce się rozpisywać szczegółowego podziału. Dotyczy to też magazynów założonych wcześniej.
Pomieszczenia (Ustawienia → Pomieszczenia)
Nowy, opcjonalny poziom między magazynem a regałem/półką/pojemnikiem — dla magazynów, które mają więcej niż jedno pomieszczenie/halę. Działa na tej samej zasadzie co magazyn: pomieszczenie od razu dostaje własną bazową lokalizację, więc jest wybieralne bez rozpisywania regału/półki/pojemnika.
Drobne poprawki
- Baner powiadomień o zapisie/zmianach nie nachodzi już na nagłówek podstrony i znika sam po 10 sekundach.
- Komunikat o zduplikowanej lokalizacji (ten sam regał/półka/pojemnik) teraz podaje kod już istniejącej lokalizacji i przypomina, że jedna lokalizacja może trzymać kilka przedmiotów naraz — nie trzeba zakładać nowej.
Aktualizacja
Panel administratora → Ustawienia → Aktualizacje → wgraj paczkę poniżej. Jak zawsze: zrób kopię plików i bazy danych przed wgraniem.
Paczka do wdrożenia: craty-1.1.8.zip (SHA-256: 179103e288f1cf362d48608d3f547faac956c58ccf4077a264a03c262ddce8b5)
Craty v1.1.6 — pierwsza wersja do wdrożenia
To pierwsza wersja Craty, którą uznajemy za gotową do realnego wdrożenia poza własnym środowiskiem deweloperskim. Wszystkie uwagi, zgłoszenia błędów i propozycje nowych funkcji są bardzo mile widziane.
Co potrafi Craty
Ewidencja i organizacja
- Kategorie, magazyny i lokalizacje (magazyn → regał → półka → pojemnik)
- Automatyczne numery ewidencyjne + kody QR dla każdego przedmiotu
- Kartoteka przedmiotu: zdjęcia, załączniki, specyfikacja, wartość, stan techniczny, numer seryjny/EAN
- Pełna historia zmian każdego przedmiotu
- Import masowy istniejącego spisu z pliku CSV
- Druk etykiet (3 rozmiary naklejek, opcjonalna cena, druk zbiorczy)
Wypożyczenia
- Ewidencja wypożyczeń z terminem zwrotu, ostrzeżenie o przeterminowanych na pulpicie
- Opcjonalne codzienne e-mailowe podsumowanie przeterminowanych wypożyczeń dla personelu
Sprzedaż (moduł opcjonalny — włącz/wyłącz w Ustawieniach)
- Przygotowanie ofert, eksport do CSV pod OLX
- Publiczna strona „Pchli targ” dla wystawionych ofert (bez logowania, wyłączona domyślnie) - Wyślij link znajomym niech wiedząco chces spredać ;)
Mobilność
- Instalacja jako aplikacja PWA na telefonie/tablecie
- Skanowanie kodów QR i kreskowych (EAN/UPC) wprost kamerą
- Szybkie dodawanie przedmiotu po nietrafionym skanie (zdjęcie + nazwa, reszta do uzupełnienia później)
Administracja
- Role: Administrator / Magazynier, zarządzanie kontami
- Ustawienia: nazwa i logo appki, język (PL/EN), poczta SMTP, powiadomienia, moduły
- Samodzielna aktualizacja appki przez panel (upload paczki .zip — bez SSH/Composera)
- Webowy kreator instalacji dla świeżego wdrożenia na dowolnym hostingu
- Tryb ciemny
Wymagania i instalacja
Zwykły hosting: PHP ≥ 8.3, MySQL/MariaDB, Apache z mod_rewrite i AllowOverride All, HTTPS. Pełne instrukcje w README. Kreator instalacji pod /install sam sprawdza wymagania i prowadzi krok po kroku.
Znane ograniczenia
- Brak automatycznego backupu przed aktualizacją — zalecamy ręczną kopię plików i bazy danych przed każdym wgraniem nowej wersji. (pracujemy nad automatyzacją tego)
- To wciąż wczesna wersja produkcyjna — jeśli coś nie zadziała jak powinno, daj znać.
Paczka do wdrożenia: craty-1.1.6.zip (SHA-256: f5e6115d1a96ff76f00a0162f6750af2f23eeb38dae60d0ebe202542bb6963ed)
Craty v1.0.0
Pierwsze wydanie — kompletna appka do ewidencji sprzętu i magazynu, gotowa do wdrożenia zarówno przez Docker, jak i na zwykłym hostingu (bez SSH), z modułem samo-aktualizacji.
Ewidencja i magazyn
- Kategorie → magazyny → lokalizacje (regał/półka/pojemnik) z automatycznym kodem lokalizacji
- Kartoteka przedmiotu: zdjęcia, załączniki, opis, wartość, stan, numer seryjny/EAN
- Automatyczny numer ewidencyjny + kod QR generowany dla każdego przedmiotu, z etykietą do druku
- Historia zmian przedmiotu i wypożyczenia
Sprzedaż
- Pipeline: przygotowana → wystawiona → sprzedana/wycofana, z eksportem CSV pod OLX
- Popup podglądu oferty z przyciskami kopiowania (tytuł/cena/opis) i miniaturami zdjęć — szybkie ręczne wystawianie na OLX/Allegro
- Publiczna strona „pchli targ” dla wystawionych ofert (włączana w Ustawieniach)
PWA i skaner
- Instalacja appki jako PWA na telefonie/tablecie
- Skanowanie kodów QR i kreskowych (EAN/UPC) wprost kamerą przeglądarki
- Nietrafiony skan proponuje szybkie dodanie nowego przedmiotu (zdjęcie + nazwa + kod)
Wdrożenie bez SSH
- Webowy kreator instalacji (
/install) — sprawdza wymagania środowiska, zbiera dane do bazy, zakłada konto administratora - Trzy warianty paczki instalacyjnej pod różne hostingi:
-full— klasyczny układ (kod appki poza document rootem)-hosting— spłaszczony układ dla hostingów zopen_basedirograniczonym do samego document rootu (typowe na współdzielonych hostingach)-update— do wgrania przez panel administracyjny na już zainstalowanej appce
- Każda paczka ma dołączony plik
.sha256do weryfikacji integralności - Moduł Aktualizacje w panelu (Ustawienia → Aktualizacje) — samo-aktualizacja appki z automatycznym backupem kodu i możliwością rollbacku
Ustawienia
- SMTP (własny serwer pocztowy) z testowym mailem
- Kopie zapasowe bazy i plików (harmonogram, retencja, przywracanie)
- Zarządzanie użytkownikami (role administrator/magazynier)
- Personalizacja: nazwa appki, logo, domyślny język
Wymagania
PHP ≥ 8.3, MySQL 8+/MariaDB 10.3+, rozszerzenia pdo_mysql, mbstring, gd, zip, bcmath, exif, intl. Pełna dwujęzyczność PL/EN.
Craty v1.0.0 (English)
First release — a complete inventory/asset management app, ready to deploy via Docker or on plain shared hosting (no SSH needed), with a self-update module.
Inventory & warehouse
- Categories → warehouses → locations (rack/shelf/bin) with auto-generated location codes
- Item records: photos, attachments, description, value, condition, serial number/EAN
- Auto-generated inventory numbers with QR codes for every item, plus printable labels
- Item change history and loans
Sales
- Pipeline: prepared → listed → sold/withdrawn, with CSV export for OLX
- Listing preview popup with copy buttons (title/price/description) and photo thumbnails — quick manual listing on OLX/Allegro
- Public "flea market" page for listed items (toggle in Settings)
PWA & scanner
- Installable as a PWA on phone/tablet
- QR and barcode (EAN/UPC) scanning straight from the browser's camera
- A miss suggests quickly adding a new item (photo + name + code)
Deploying without SSH
- Web-based installer (
/install) — checks environment requirements, collects database credentials, creates the administrator account - Three installation package variants for different hosting setups:
-full— classic layout (app code outside the document root)-hosting— flattened layout for hosts withopen_basedirrestricted to the document root itself (common on shared hosting)-update— for uploading through the admin panel on an already-installed app
- Every package ships with a
.sha256checksum file - In-panel Updates module (Settings → Updates) — self-updates the app with an automatic code backup and rollback support
Settings
- SMTP (custom mail server) with a test-email button
- Database and file backups (schedule, retention, restore)
- User management (administrator/warehouse worker roles)
- Branding: app name, logo, default language
Requirements
PHP ≥ 8.3, MySQL 8+/MariaDB 10.3+, extensions pdo_mysql, mbstring, gd, zip, bcmath, exif, intl. Fully bilingual PL/EN.