S
StartupCRM
Wróć do bazy wiedzy
2026-09-098 min czytaniaAutomatyzacje

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:

  1. 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.
  2. Sprawdzamy, czy w systemie pojawią się pliki. Dokumenty, zdjęcia i załączniki przy Supabase są gotowym modułem, przy Neonie wymagają osobnego storage.
  3. Ustalamy, czy dane mają być odpytywane z przeglądarki. Jeżeli wszystko idzie przez serwerowe API Next.js, przewaga Supabase mocno maleje.
  4. 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.
  5. 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.
  6. 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.

Krzysztof Olejnik

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

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.