
Neon vs Supabase – jaką bazę danych wybrać pod panel klienta i system rezerwacji
Przy wycenie systemu rezerwacji albo panelu klienta prędzej czy później pada pytanie o bazę danych. Zwykle brzmi ono prosto: "na czym to postawimy?". Odpowiedź rzadko jest prosta, bo wybór bazy nie jest wyborem technologii samej w sobie, tylko wyborem tego, ile gotowych elementów aplikacji dostajemy z pudełka, a ile trzeba napisać.
W projektach opartych o Next.js dwie nazwy pojawiają się najczęściej: Neon i Supabase. Obie opierają się na PostgreSQL, więc na poziomie samych danych, tabel i zapytań SQL różnicy praktycznie nie ma. Różnica zaczyna się piętro wyżej: przy logowaniu użytkowników, przechowywaniu plików, uprawnieniach i tym, jak szybko da się uruchomić pierwszą działającą wersję.
Dla właściciela firmy ta decyzja przekłada się na dwie konkretne rzeczy: koszt wdrożenia i to, jak łatwo system będzie później rozbudować. Dlatego warto ją podejmować razem z zakresem projektu, a nie osobno. Jeżeli dopiero zastanawiasz się nad zakresem, dobrym punktem wyjścia jest opis tego, kiedy własny system rezerwacji ma sens, a decyzję o bazie podjąć dopiero po ustaleniu funkcji.
Czym różnią się Neon i Supabase
Neon to serverless PostgreSQL. Dostajemy bazę danych i niewiele więcej: connection string, panel do zarządzania, autoskalowanie i mechanizm branchowania bazy, czyli tworzenia kopii bazy pod gałąź kodu albo środowisko testowe. Neon nie narzuca sposobu logowania użytkowników, nie ma wbudowanego storage na pliki i nie dokłada własnego SDK do aplikacji. To po prostu Postgres, do którego łączymy się z aplikacji Next.js, najczęściej przez ORM taki jak Prisma albo Drizzle.
Supabase to Postgres opakowany w zestaw usług: uwierzytelnianie użytkowników, storage na pliki, automatycznie generowane API do tabel, realtime, funkcje brzegowe i mechanizm uprawnień na poziomie wierszy (Row Level Security). Baza jest ta sama, ale wokół niej stoi gotowa infrastruktura, którą przy Neonie trzeba by złożyć z osobnych klocków.
Najprościej opisać to tak: Neon daje bazę, Supabase daje bazę plus zaplecze aplikacji. Nie znaczy to, że Supabase jest lepszy. Znaczy to, że w projekcie bez logowania i bez plików spora część tego, za co płacimy złożonością, po prostu nie zostanie użyta.
Kiedy wystarczy Neon
Neon sprawdza się wtedy, gdy aplikacja potrzebuje trwałego miejsca na dane, a cała logika i tak jest pisana po stronie Next.js. Typowo dotyczy to projektów, w których nie ma kont użytkowników albo jest jedno konto administratora.
Neon zwykle wystarcza, gdy:
- system rezerwacji zapisuje terminy, usługi i dane klientów, ale klient nie loguje się do żadnego panelu,
- panel administratora obsługuje jedna osoba albo mały zespół, a logowanie można oprzeć o proste rozwiązanie po stronie aplikacji,
- nie ma potrzeby przechowywania plików, zdjęć ani dokumentów w bazie,
- dane odczytuje i zapisuje wyłącznie serwer aplikacji, nigdy przeglądarka bezpośrednio,
- projekt ma być maksymalnie lekki, a każda dodatkowa usługa to dodatkowy element do utrzymania,
- zespół chce mieć pełną kontrolę nad schematem i migracjami przez ORM, bez dodatkowej warstwy pośredniej.
W takim układzie Neon ma jeszcze jedną praktyczną zaletę: branche bazy. Można zrobić kopię produkcyjnej bazy pod gałąź z nową funkcją, przetestować migrację na realnych danych i usunąć branch po wdrożeniu. Przy systemach rezerwacji, gdzie zmiana schematu dotyka istniejących terminów, to realne zabezpieczenie przed kosztownym błędem.
Kiedy warto wybrać Supabase
Supabase zaczyna się opłacać w momencie, w którym w projekcie pojawia się słowo "logowanie". Zbudowanie własnego uwierzytelniania od zera to nie jest jeden wieczór pracy: trzeba obsłużyć rejestrację, reset hasła, sesje, wygasanie tokenów, role i całą obsługę błędów. Supabase daje to jako gotowy moduł.
Supabase warto rozważyć, gdy:
- klienci albo kontrahenci logują się do panelu i widzą wyłącznie swoje dane,
- system ma role i uprawnienia, na przykład administrator, pracownik, klient,
- w aplikacji pojawiają się pliki: dokumenty, zdjęcia, protokoły, faktury, zdjęcia sprzętu,
- potrzebne jest logowanie przez Google albo magic link zamiast klasycznego hasła,
- w interfejsie ma się dziać coś na żywo, na przykład status zlecenia aktualizujący się bez odświeżania strony,
- projekt ma szybko dojść do działającej wersji, a budżet nie przewiduje pisania własnej warstwy autoryzacji.
To dokładnie ten scenariusz, który występuje w projektach typu panel klienta B2B w Next.js. Tam logowanie nie jest dodatkiem, tylko podstawą całej funkcjonalności, a dane jednego kontrahenta nigdy nie mogą wyciec do drugiego.
Uprawnienia, czyli najczęstszy punkt zwrotny w decyzji
Największa różnica praktyczna nie dotyczy tego, gdzie leżą dane, tylko tego, kto może je zobaczyć.
Przy Neonie z aplikacją w Next.js dostęp do bazy ma wyłącznie serwer. Przeglądarka nigdy nie łączy się z bazą bezpośrednio, więc każde zapytanie przechodzi przez kod, który sami kontrolujemy. Uprawnienia egzekwujemy w warstwie aplikacji: sprawdzamy sesję, sprawdzamy, czy dany rekord należy do zalogowanego użytkownika, i dopiero wtedy zwracamy dane. Jest to proste do zrozumienia i łatwe do audytu, ale odpowiedzialność leży w całości po stronie kodu.
Supabase pozwala dodatkowo zejść z uprawnieniami do samej bazy przez Row Level Security. Reguła zapisana na tabeli mówi, że użytkownik widzi wyłącznie wiersze, w których jego identyfikator występuje w konkretnej kolumnie. Nawet jeżeli ktoś popełni błąd w kodzie frontendu, baza i tak nie odda cudzych rekordów. To mocne zabezpieczenie, ale wymaga dyscypliny: źle napisana albo niewłączona polityka RLS potrafi otworzyć tabelę szerzej, niż ktokolwiek zakładał.
W obu przypadkach obowiązuje ta sama zasada, którą opisaliśmy szerzej przy okazji tematu bezpieczeństwa danych i uprawnień w systemach firmowych: uprawnienia trzeba zaprojektować przed napisaniem pierwszego widoku, a nie dokleić po fakcie.
Jak wygląda wybór w praktyce
W projektach, które realizujemy, decyzja zapada zwykle w kilku krokach:
- Spisujemy listę ról w systemie. Jeżeli role są dwie i jedna z nich to "właściciel firmy", a druga to "nikt zalogowany", jest to sygnał w stronę Neona.
- Sprawdzamy, czy w systemie pojawią się pliki. Dokumenty, zdjęcia i załączniki przy Supabase są gotowym modułem, przy Neonie wymagają osobnego storage.
- Ustalamy, czy dane mają być odpytywane z przeglądarki. Jeżeli wszystko idzie przez serwerowe API Next.js, przewaga Supabase mocno maleje.
- Szacujemy horyzont rozwoju. Panel administratora, który za pół roku ma dostać logowanie dla klientów, lepiej od razu postawić na Supabase niż migrować później.
- Projektujemy schemat bazy: terminy, usługi, klienci, statusy, historia zmian. Ten etap jest identyczny niezależnie od wyboru, bo w obu przypadkach to zwykły Postgres.
- Podłączamy bazę do reszty procesu, czyli do powiadomień e-mail i do CRM, tak żeby rezerwacja albo zamówienie nie kończyły się na wpisie w tabeli.
Ostatni krok jest ważniejszy niż sam wybór dostawcy. Baza danych nie jest celem projektu, tylko jednym z jego elementów. Dane muszą trafić dalej: do skrzynki właściciela, do CRM, do raportu. Sposób, w jaki te elementy się ze sobą łączą, opisaliśmy przy okazji architektury komponentów w Next.js, a samo połączenie z systemem sprzedaży to już temat wdrożenia CRM.
Co warto ustawić niezależnie od wyboru
Kilka rzeczy trzeba zrobić w obu wariantach, a bywają pomijane w szybkich wdrożeniach:
- kopie zapasowe i sprawdzenie, że da się z nich faktycznie odtworzyć bazę,
- osobne środowisko testowe, żeby migracje nie były testowane na produkcji,
- migracje schematu trzymane w repozytorium, a nie klikane ręcznie w panelu,
- indeksy na kolumnach używanych do filtrowania terminów i statusów,
- lokalizacja serwera bazy w Europie, ze względu na opóźnienia i na RODO,
- rozdzielenie danych osobowych klientów od danych operacyjnych tam, gdzie to możliwe,
- logowanie zmian statusów, żeby dało się odtworzyć historię zlecenia albo rezerwacji.
Wady i ograniczenia
Neon wymaga dopisania tego, co Supabase daje gotowe. Jeżeli w trakcie projektu okaże się, że jednak potrzebne jest logowanie klientów i storage plików, dołożenie tych elementów zajmuje czas i podnosi koszt. Trzeba też pilnować sposobu łączenia z bazą, bo w środowisku serverless liczba jednoczesnych połączeń potrafi być realnym problemem i zwykle wymaga poolera.
Supabase z kolei dokłada zależność od jednego dostawcy w większej liczbie miejsc niż tylko baza. Migracja samych danych Postgresa jest prosta, ale przeniesienie kont użytkowników, polityk RLS i plików to już osobny projekt. Darmowy plan usypia nieużywane instancje, co przy stronie z małym ruchem bywa mylące. Doliczyć trzeba też koszt nauki: RLS wygląda prosto na przykładach, a w realnym systemie z rolami potrafi być najbardziej wymagającą częścią wdrożenia.
Wspólne ograniczenie jest takie, że żadne z tych narzędzi nie zastąpi CRM. Baza aplikacji przechowuje rezerwacje i zamówienia, ale historia kontaktu, oferty i faktury zwykle mieszkają gdzie indziej i trzeba te dwa światy świadomie połączyć.
Ile to kosztuje
Po stronie narzędzi oba rozwiązania mają darmowe plany wystarczające do uruchomienia projektu i pierwszych miesięcy działania małej firmy. Płatne plany startują w okolicach 20-25 dolarów miesięcznie za projekt i rosną wraz z ilością danych oraz ruchem. Dla typowego systemu rezerwacji małej firmy usługowej to koszt rzędu kilkudziesięciu do stu kilkudziesięciu złotych miesięcznie.
Po stronie wdrożenia różnica jest wyraźniejsza. Postawienie schematu bazy i podłączenie go do istniejącego formularza rezerwacji to zwykle kilka do kilkunastu godzin pracy. Panel z logowaniem klientów, rolami i uprawnieniami to już osobny etap projektu, liczony w dniach, i to właśnie tam Supabase potrafi realnie skrócić czas. Orientacyjne widełki dla całych wdrożeń znajdziesz w cenniku.
Dla jakich projektów to ma sens
- systemy rezerwacji na własnej stronie, bez prowizji od terminu,
- panele klienta B2B z indywidualnymi cenami i historią zamówień,
- portale statusu zlecenia w serwisach i warsztatach,
- wypożyczalnie sprzętu z kalendarzem dostępności,
- gabinety i kliniki z kartotekami pacjentów oraz dokumentacją,
- szkoły i firmy szkoleniowe z zapisami na zajęcia i limitami miejsc,
- wewnętrzne aplikacje operacyjne zastępujące arkusze kalkulacyjne.
Wspólny mianownik jest prosty: im więcej osób z zewnątrz ma się logować i im więcej plików krąży w procesie, tym mocniej decyzja przechyla się w stronę Supabase. Im bardziej system jest zamknięty i obsługiwany wyłącznie przez firmę, tym rozsądniej wybrać sam Postgres w Neonie.
Podsumowanie i CTA
Neon i Supabase nie są konkurentami w tym sensie, w jakim się je czasem przedstawia. To ten sam PostgreSQL z inną ilością gotowej obudowy. Neon wybieramy wtedy, gdy potrzebna jest baza i nic ponadto, a całą logikę i tak piszemy w Next.js. Supabase wybieramy wtedy, gdy w projekcie są konta użytkowników, pliki i uprawnienia, a budowanie tego od zera nie ma ekonomicznego sensu.
Praktyczny przykład drugiego wariantu opisaliśmy w case study systemu rezerwacji dla gabinetu Neuromassage, gdzie Supabase obsługuje terminy i dostępność w rozwiązaniu działającym bez prowizji dla zewnętrznej platformy.
Jeżeli planujesz system rezerwacji albo panel klienta i nie chcesz przepłacać za funkcje, których nie użyjesz, zobacz system rezerwacji Next.js i aplikacje webowe albo skontaktuj się z nami, żeby dobrać zakres i bazę do realnych potrzeb firmy.

O autorze
Krzysztof Olejnik
Wdrażam Dolibarr CRM, systemy rezerwacji i automatyzacje procesów dla małych firm usługowych i B2B. Piszę tu o rzeczach, które realnie wdrażam u klientów: integracjach formularzy z CRM, obsłudze leadów, rezerwacjach online i Next.js.
Powiązane wpisy
Automatyzacje
Vercel, ISR i szybkość strony – dlaczego to ma znaczenie dla SEO systemów rezerwacji
Automatyzacje
Resend i React Email – jak wyglądają automatyczne potwierdzenia rezerwacji i powiadomienia w praktyce
Aplikacje B2B
Portal śledzenia statusu naprawy dla warsztatu i serwisu – klient widzi co się dzieje z jego zleceniem
Chcesz wdrożyć podobne rozwiązanie?
Możemy pomóc w uporządkowaniu CRM, formularzy, rezerwacji, leadów i automatyzacji procesów w Twojej firmie.