Ładowanie...
Ładowanie...
Zielnik zmian
Jak rósł Majeranek: od pierwszego commita 7 stycznia 2026 do dziś. Oś czasu, wszystkie wydania i plan na kolejne wersje.
01 · od zalążka do dziś
Start repozytorium jako RankIt
Pierwszy commit: architektura platformy rankingowej RankIt (NestJS + Prisma + Next.js 14.1 + React 18), tego samego dnia MVP z funkcjami społecznościowymi.
RankIt staje się ListAI
Projekt przemianowany na ListAI z rekomendacjami opartymi na AI.
Przejście na Supabase (auth + baza)
Frontend przechodzi na Supabase Auth i PostgreSQL z RLS; migracja 001_initial_schema z triggerem handle_new_user.
Nazwa Majeranek
Pierwsze przemianowanie na Majeranek (razem z poprawką RLS tabeli items, migracja 002_fix_items_rls); 2026-01-08 motyw kolorystyczny majeranku, 2026-01-09 nawigacja zmienia logo z ListAI na Majeranek (#41).
Wersje 0.1.0 i 0.2.0
Pierwsze MVP oraz przejście na Supabase i ListAI.
Wersja 0.3.0
Pastelowy redesign UI, personalizacja pozycji listy, tier listy.
CI/CD w GitHub Actions oraz Terraform/Kubernetes
Pierwszy pipeline CI/CD; dodana infrastruktura jako kod (Terraform + Kubernetes), później porzucona na rzecz Vercela.
Pierwsze wdrożenie na Vercelu
Konfiguracja i przewodniki wdrożenia na Vercelu, usunięcie localhosta — frontend wdrażany tylko przez Vercel.
Claude API przez trasy Next.js
Trasy app/api do rozpoznawania pozycji przez AI z @anthropic-ai/sdk; porównania ELO i powiadomienia realtime (#37). W tym samym dniu moduł płatności Stripe w NestJS, nigdy nieużyty produkcyjnie.
Wersja 0.4.0
Polski język interfejsu, przełącznik języka w nawigacji, flagi SVG, polska treść generowana przez AI (#91).
Frontend przestaje zależeć od NestJS
Analityka, feed i panel admina przepisane na bezpośrednie zapytania do Supabase; migracja 002_analytics_tables.
Kohorty (003)
Tabele cohorts/cohort_members dla klastrowania ML i fanclubów Premium.
2FA przez Supabase MFA
Prawdziwe dwuetapowe logowanie oparte o Supabase MFA.
Wersja 0.5.0
Panel admina, analityka, dashboard na Supabase.
115+ szablonów rankingów
Biblioteka szablonów rozszerzona z 26 do ponad 115.
Wersja 0.6.0
Prawdziwe dane zamiast mocków, porządki w kodzie, poprawki przycinania polskich znaków.
Ciemny motyw aurora wycofany
Ciemny motyw w stylu aurora wdrożony i cofnięty tego samego dnia; późniejszy PR z dark glass zamknięty bez merge'a (#159).
Dwie rundy audytu bezpieczeństwa
Walidacja wejścia, autoryzacja, widoczność, ochrona przed prompt injection.
Brakujące tabele i RPC (004)
Dodane brakujące tabele i funkcje bazy.
Poprawki RLS (005) i limity AI
Naprawa polityk RLS i limitowanie zapytań AI.
Wersja 0.7.0
Stabilizacja realtime, refaktor auth, bezpieczeństwo RLS.
Przerwa marzec–maj
Brak commitów od 2026-03-06 do 2026-05-24.
Powrót: domykanie MVP
Usunięte blokery MVP, trasy porównań ELO, historia ELO, nawigacja mobilna, onboarding, SEO, strony prawne; migracje 006–009 (historia ELO, fankluby, osiągnięcia, wyrównanie schematu z kodem).
Cofnięty PR production-readiness
PR #177 cofnięty (#178) i ponownie wdrożony z naprawionym lockfile'em pod Vercel (#179).
Wersja 0.8.0
Gotowość produkcyjna: synchronizacja schematu, limity AI, idempotentne lajki.
Audyt logiki aplikacji (010–012)
51 poprawek idempotencji, hydratacji stanu i liczników; poprawki schematu przed startem; kolekcje i tagi.
Wersja 0.9.0
Porównania ELO przestawiają ranking, mniej głosów do wyniku, ELO widoczne na pozycjach; migracje 013–015.
Sentry i ochrona kosztów AI
Sentry, limity kosztów AI, rate limit i odporniejsza rejestracja.
Integralność danych, dziennik admina, triggery liczników (016–018)
Eksport danych RODO, dziennik audytu admina, liczniki utrzymywane triggerami; CI frontendu.
Wersja 0.10.0
Kreator /create od nowa: jeden widok, drag-and-drop, tablica tierów, autozapis szkicu, „Uszereguj za mnie”, automatyczne obrazki.
Odświeżony landing i dashboard
Okładki gier ze Steama, kinetyczny nagłówek, licznik społeczności na prawdziwych danych, dashboard w nowym systemie wizualnym.
Zamknięta beta z kodem dostępu
Rejestracja za kodem dostępu zamkniętej bety; poprawki poziomego przewijania na telefonach.
Wersja 0.11.0
Odporne obrazki, mobilne siatki, stonowana strona /about, plakietka alpha przy logo.
PR z okładkami RAWG zamknięty
#257 zamknięty bez merge'a; zastąpiony podejściem steam-first z RAWG jako uzupełnieniem.
Powiadomienia społecznościowe i samonaprawa profili (021–022)
Dwie migracje dodane w ramach audytu gotowości MVP.
Silnik rekomendacji, liczniki, status konta (023–025)
Rekomendacje item-based CF, triggery integralności liczników, bany i strona /suspended; OG obrazki, embed, powiązane rankingi.
Stripe: FREE + PRO w PLN
Subskrypcje Stripe (19/190 zł) z synchronizacją przez webhook; stan „wkrótce”.
Wersja 0.12.0
Gotowość do publikacji: blokery prawne/IP, zgody, moderacja, SEO, rozliczenia.
Przerwa lipiec–wrzesień
Brak commitów od 2026-06-22 do 2026-09-27.
Powrót: utwardzenie bezpieczeństwa (026–029)
Ratowanie starych gałęzi, utwardzenie zapisów RLS, prywatne pola profilu przez RPC i uprawnienia kolumnowe.
Ilustracje zielnika na landingu
Ilustracje zielnika, etykiety okazów, plakat CTA; polskie i angielskie szablony maili auth.
Wersja 0.13.0
Utwardzenie bazy, szablony maili, nowy landing w stylu zielnika.
Silnik gustu i odkrywanie (030–033)
Osobiste pojedynki /duels, profil gustu /taste, onboarding /start, strony /item, trending, retencja i mierzenie.
Limity, popularność, polecenia (034–036)
Limity wyświetleń/udostępnień, items.popularity_score i seed katalogu, polecenia (referred_by), SSR profili i rankingów.
Wersja 0.14.0
Silnik gustu, odkrywanie, retencja, SSR i SEO.
CI uruchamia migracje SQL
Migracje i skrypty weryfikacyjne w CI (harness Postgres), martwe workflowy usunięte; migracja 037 przycina zdarzenia i limity.
Next 14.2
Next podniesiony do 14.2.35 z powodu poprawek bezpieczeństwa.
Next 15.5 + React 19, generowane typy Supabase
Frontend przeniesiony na Next 15.5 i React 19; wszystkie klienty Supabase typowane generowanymi typami z kontrolą dryfu w CI; migracja 038 (skalowalne RPC).
NestJS i ai-services zamrożone
Backend NestJS (z nieużywanym Glicko-2 i schematem Prisma) oraz serwisy Python zamrożone i wyłączone z CI; frontend samowystarczalny.
Wersja 0.15.0
Next 15, React 19, porządki w kodzie, zamrożenie legacy.
Nowy Anthropic SDK i Sentry v10
Aktualne modele Claude, Sentry 10, łatki zależności.
Wersja 0.16.0
Dostępność modali, polskie liczby mnogie, tablica nieprzypisanych na tier boardzie, lokalny stack i smoke; migracja 039.
Integralność, prywatność, MFA (040–044)
Moderacja i integralność społeczności, widoczność i prywatność, poprawki gustu, wyszukiwanie, egzekwowanie MFA aal2.
Najbardziej pracowity dzień projektu
228 commitów w jednym dniu w rundzie 4 (naprawy we wszystkich obszarach).
Zapasowe pojedynki i edycja komentarzy (045)
Poprawki po ponownych testach w przeglądarce.
Wersja 0.17.0
Runda 4: poprawki płatności, social, SEO, logowania i 2FA, moderacji, tworzenia i edycji rankingów; migracje 040–045.
Wersja 0.18.0
Na stronie rankingu pojawiła się sekcja „AI dla tej listy”: właściciel ulepsza listę, a każdy zalogowany dostaje rekomendacje na podstawie listy. Sugestie i analiza luk AI nie pobierają kredytu za puste odpowiedzi i nie proponują pozycji, które już są na liście. Pierwsza edycja na /create z prefilla zastępuje oczekujący szkic. Projekt dostał historię wersji: changelog, oś czasu, roadmapę, publiczną zakładkę /log i skrypt wydań.
02 · co dalej
wersja 0.19.0
Włączenie cotygodniowego digestu e-mail
Kod digestu jest gotowy i działa w paczkach przez RPC get_digest_payloads (migracja 038), ale jest wyłączony flagą. Po skonfigurowaniu Resend zostaje ustawienie nadawcy i włączenie flagi, a poniedziałkowy workflow wyśle digest osobom, które się na niego zapisały.
0.19.0S
Powiadomienie o zaproszeniu dopiero po potwierdzeniu e-maila
Trigger z migracji 041 wysyła zapraszającemu „Ktoś dołączył dzięki Twojemu zaproszeniu” już przy rejestracji, choć licznik zaproszeń od migracji 039 liczy tylko potwierdzone konta. Powiadomienie ma przyjść razem z potwierdzeniem, żeby nie zapowiadało kont, które nigdy nie powstaną.
0.19.0S
Domknięcie tłumaczeń: nazwy z AI i zdania z liczebnikami
Nazwy generowane przez AI w PatternAnalysisChart nie mają tłumaczenia, a zdania z liczebnikiem w home.membersCount i admin.*Count nie używają jeszcze form {count, plural} z #329. Do tego test parytetu i18n powinien sprawdzać zgodność {placeholderów} między pl.json i en.json, nie tylko zbiór kluczy.
0.19.0S
Plausible i source mapy Sentry
Integracja Plausible jest gotowa i włączana zmienną środowiskową (bez ciasteczek, CSP już dopuszcza plausible.io). Source mapy Sentry dadzą czytelne stack trace’y zamiast zminifikowanych. Obie rzeczy to sama konfiguracja w Vercel.
0.19.0S
Odświeżenie zależności w obrębie wersji głównych
Bezpieczne podbicia z pnpm outdated: @supabase/supabase-js 2.90→2.118, @tanstack/react-query 5.90→5.104, react/react-dom 19.2→19.3, chart.js 4.6, date-fns 4.4, postcss, autoprefixer. Weryfikacja przez pnpm test:ci i lokalny smoke.
0.19.0S
Porządek w dokumentacji developerskiej
Stara roadmapa ze stycznia 2026 trafiła do archiwum razem z wydaniem 0.17.0, a jej miejsce zajęły CHANGELOG, oś czasu i nowa roadmapa (zakładka /log). Do zrobienia zostało: ITERATION_LOG.md, który kończy się na 2026-02-19, oraz uzgodnienie w CLAUDE.md uwagi o padającym buildzie na Windows (/icon, /apple-icon, /opengraph-image) ze STATUS.md, gdzie po #314 build lokalny przechodzi.
0.19.0S
wersje 0.20.0–0.22.0
Przygotowanie do Next 16 i ESLint 9+
Next 16.4 jest już dostępny. Przed migracją trzeba zastąpić next lint (używany w lint i test:ci) wywołaniem ESLint CLI z flat config (eslint 8.57 → 9/10) i ustawić images.qualities. Potem next i eslint-config-next 15.5 → 16.
0.20.0M
Major bumpy zależności: Sentry 11, Anthropic SDK 1.x, @supabase/ssr 0.12, Stripe 23
Sentry 11 wyszedł 2026-09-23. @anthropic-ai/sdk 0.131 → 1.3, @supabase/ssr 0.8 → 0.12, stripe 22 → 23, zustand 5, vitest 5, @dnd-kit/sortable 10. Każdy osobnym PR-em z testami tras AI, auth i webhooka Stripe.
0.20.0M
Usunięcie zamrożonego backendu NestJS, ai-services i schematu Prisma
src/backend/api (NestJS i Prisma z 53 modelami, rozjechanymi z migracjami Supabase) oraz src/ai-services (bez testów, pyproject rozjechany z requirements) nie są wdrażane i są wyłączone z CI. Przeniesienie ich do archiwum zmniejszy szum dla ludzi i agentów oraz usunie mylący drugi opis bazy.
0.20.0M
Aktywacja płatności PRO (Stripe)
Backend billingu jest gotowy: checkout, portal, webhook z deduplikacją faktur (#319, migracja 039), anulowanie subskrypcji przy usuwaniu konta i polska strona /settings/subscription (#320). Do włączenia zostaje produkt PRO z cenami 19 zł/mies. i 190 zł/rok, metadata tier=PRO, webhook i flaga NEXT_PUBLIC_BILLING_ENABLED. Decyzja biznesowa właściciela.
0.20.0M
Kreator /create: wprowadzenie do 3 metod dodawania i dopracowanie
Krótkie wprowadzenie do trzech sposobów dodawania pozycji, animacja wylądowania pozycji, zwinięcie karty CreationProgress do jednej linii oraz aria-pressed i powiązanie etykiet dla wyboru typu i widoczności (dokończenie a11y).
0.20.0M
Testy przeglądarkowe w CI (Playwright) i Lighthouse
Testy w src/frontend/tests pokrywają logikę i trasy API (ok. 150 plików), ale nie ma żadnych testów komponentów ani przebiegów w przeglądarce w CI. Smoke z scripts/local-stack/smoke.mjs działa tylko ręcznie. Przeniesienie go (albo Playwright) do CI razem z budżetem Lighthouse zamknie tę lukę.
0.21.0M
Logowanie przez Google (OAuth)
Decyzja otwarta w planie STATUS. Przed wdrożeniem trzeba zmienić klucz user_metadata.locale używany przez szablony maili na email_locale, bo koliduje z polem OIDC locale, i wyprowadzać username z e-maila.
0.21.0M
Sprzątanie nieużywanych kluczy i18n
Około 340 kluczy w messages/pl.json i en.json wygląda na nieużywane. Nie zostały usunięte, bo część może być składana dynamicznie. Potrzebna analiza z listą wzorców dynamicznych, potem usunięcie, co zmniejszy paczki tłumaczeń.
0.21.0S
Wzmianki @username w komentarzach
Odpowiedzi w komentarzach już działają (replyTo w Comments.tsx). Wzmianka @username z powiadomieniem dla wspomnianej osoby to naturalny następny krok z fazy 7.2 starej roadmapy.
0.21.0M
Pojedynek dnia
Codzienne wyzwanie w /duels: jedna wspólna para dla wszystkich i wynik społeczności po oddaniu głosu. Opiera się na istniejących seriach aktywności (migracja 033) i konsensusie pozycji (032), wzmacnia retencję. Odpowiada pozycji „Daily challenges” ze starej roadmapy.
0.21.0M
Ukrywanie zgłoszonych treści i moderacja przy zapisie
Zgłoszenia trafiają do kolejki i są logowane, ale zgłoszona treść nie znika z feedu, explore ani widoku szczegółów, dopóki nie zajmie się nią admin. Przed otwarciem rejestracji: flaga do przeglądu i filtr na głównych ścieżkach odczytu, opcjonalnie moderacja tekstu i obrazów przed zapisem.
0.22.0M
wersja 1.0.0 i dalej
Otwarcie rejestracji: koniec zamkniętej bety i znaczka „alpha”
Rejestracja jest za kodem dostępu (RegisterGate, /api/register-gate), a navbar ma znaczek „alpha”. Ścieżka do 1.0.0: SMTP z własnej domeny, moderacja zgłoszonych treści, smoke na produkcji i włączony billing. Potem usunięcie bramki i znaczka.
1.0.0M
Skalowanie odczytów: paginacja kursorowa i dokładna dystrybucja kategorii
Paginacja kursorowa (keyset) dla feedu obserwowanych zamiast offsetu oraz RPC z group by dla getCategoryDistribution(), które dziś liczy po stronie klienta z limitem 1000 wierszy. Wyzwalacz: duże listy obserwowanych i rosnąca tabela rankings.
1.0.0M
Optymalizacja obrazów z własnym loaderem
next/image działa wszędzie z unoptimized, bo okładki to dowolne URL-e, a hosty spoza remotePatterns wywracały optymalizator. Własny loader albo proxy dla nieznanych hostów, optymalizacja tylko znanych. Wyzwalacz: koszt transferu obrazów.
1.0.0M
Tailwind 4 i daisyUI 5
tailwindcss 3.4 → 4.3, daisyui 4 → 5, tailwind-merge 3. Duża migracja konfiguracji palety (sage, forest, lavender, rose, sand) i klas, do zrobienia osobno, ze zrzutami przed i po.
1.0.0L
Instalowalna aplikacja (PWA)
Zamiast natywnej aplikacji React Native ze starej roadmapy (faza 6.2): manifest, ikony i instalacja na ekran główny, a w przyszłości powiadomienia push o pojedynkach i serii. Dziś w public/ i app/ nie ma manifestu.
1.xM
Publiczne API i dokumentacja
Faza 7.3 starej roadmapy: dokumentacja OpenAPI, limity zapytań per klucz API, webhooki. Osadzanie rankingów (ShareEmbed) już działa, więc API byłoby rozszerzeniem dla integracji.
1.xL
03 · od najnowszego
Na stronie rankingu pojawiła się sekcja „AI dla tej listy”: właściciel ulepsza listę, a każdy zalogowany dostaje rekomendacje na podstawie listy. Sugestie i analiza luk AI nie pobierają kredytu za puste odpowiedzi i nie proponują pozycji, które już są na liście. Pierwsza edycja na /create z prefilla zastępuje oczekujący szkic. Projekt dostał historię wersji: changelog, oś czasu, roadmapę, publiczną zakładkę /log i skrypt wydań.
Runda czwarta: 18 tematycznych PR-ów z poprawkami w całej aplikacji (płatności, social, SEO, nawigacja mobilna, logowanie i 2FA, moderacja, pulpit, tworzenie i edycja rankingów, wyszukiwarka, profil, ustawienia, AI, pojedynki) oraz migracje 040–045. Dwuetapowe logowanie naprawdę chroni konto (sesja tylko z hasłem, aal1, nie wystarcza), rankingi „niepubliczne” działają po linku, a wyszukiwanie ignoruje polskie znaki. Do tego łatka bezpieczeństwa Next 15.5.28.
Wersja porządkująca fundamenty: nowe modele Claude i aktualne SDK, Sentry 10, zero znanych podatności w zależnościach produkcyjnych. Do tego dostępność (prawdziwe okna dialogowe, nazwane kontrolki, przełączniki prywatności), polskie formy liczby mnogiej, przetłumaczone nazwy kategorii, lżejsze strony /dashboard i /create oraz migracja 039. Pojawił się też lokalny stos Supabase z automatycznym testem dymnym po zalogowaniu.
Wersja porządków i stabilności. Usunięcie konta anuluje subskrypcję, treści można zgłaszać, a frontend przeszedł na Next.js 15 i React 19 z poprawkami bezpieczeństwa. Migracje SQL są sprawdzane w CI, typy bazy generowane, martwy kod usunięty, a nieużywany backend NestJS i serwis AI zamrożone (migracje 037–038).
Wersja silnika gustu. Majeranek dostał osobiste pojedynki, onboarding, profil gustu z uzasadnionymi rekomendacjami i strony pojedynczych pozycji z konsensusem społeczności, a pulpit zalogowanego zaczyna się od gustu. Doszły też serie dni, nowe powiadomienia, cotygodniowy digest i zaproszenia. Profile, rankingi i kategorie są renderowane na serwerze, a katalog zasilono popularnymi pozycjami (migracje 030–036).
Wersja bezpieczeństwa i nowej oprawy wizualnej. Baza danych dostała trzy migracje utwardzające (026–029): użytkownik nie może już zmienić sobie planu ani statusu konta, zapisy przez publiczne API są domknięte, a prywatne dane profili przestały być widoczne publicznie. Równolegle landing i większość stron przeszły na styl druku riso z ilustracjami „Zielnik”, a e-maile logowania dostały polskie i angielskie szablony.
Duża wersja przygotowująca publikację MVP: dwa audyty jakości naprawiły kilkadziesiąt błędów (podwójne głosy ELO, powiadomienia, zakładka polubionych), doszły udostępnianie z obrazkami OG i widżetem embed, rekomendacje oparte na podobieństwie rankingów oraz sekcje odkrywania. Usunięto blokery publikacji (prywatność, egzekwowanie banów, zgody przy rejestracji), a plany FREE i PRO z płatnościami Stripe pojawiły się jako „wkrótce”.
Wersja skupiona na wyglądzie i pierwszym wrażeniu: kreator dostał żywą okładkę WYSIWYG i reagujące tło, strona główna przeszła odświeżenie z prawdziwymi okładkami, a pulpit ujednolicono z nowym systemem wizualnym. Usunięto poziome przewijanie na telefonach, strony przestały się wysypywać na nieznanych obrazkach, rejestracja trafiła za kod zamkniętej bety, a logo dostało oznaczenie „alpha”.
Wersja, w której Majeranek przeszedł utwardzanie przed MVP (fazy 0–2): limity i kontrola kosztów AI, eksport danych RODO, monitoring błędów i spójne liczniki. Jednocześnie kreator rankingów został przebudowany od zera: jeden widok, prawdziwe przeciąganie, żywa okładka, pojedynek „ułóż za mnie” i automatyczne obrazki dla pozycji.
Wersja naprawcza i dopracowująca: audyt logiki usunął 51 błędów klasy „kliknięcie nic nie robi”, a porównania ELO zostały gruntownie przebudowane — działają stabilnie, wymagają znacznie mniej głosów i od razu przestawiają opublikowany ranking. Doszły kolekcje rankingów oraz ochrona tras dla niezalogowanych.
Wersja, w której frontend przestał zależeć od backendu NestJS: wyszukiwanie, fankluby, profile, porównania ELO i osiągnięcia działają bezpośrednio na Supabase. Doszły strony prawne, odzyskiwanie hasła, SEO, menu mobilne i pełny system osiągnięć, a seria poprawek usunęła krytyczne błędy runtime przed startem produkcyjnym.
Wersja, w której Majeranek dostał nowy wygląd: odświeżoną paletę kolorów, przebudowaną stronę główną i szklane efekty świetlne. Równolegle przeszedł dwie rundy hartowania bezpieczeństwa (walidacja wejścia, przywrócone reguły RLS, ochrona przed prompt injection, miesięczne limity AI), a tworzenie rankingu z szablonu lub AI zaczęło działać jednym zapisem.
Wersja porządkująca: zamiast danych pozornych aplikacja wszędzie korzysta z prawdziwego API, a liczba szablonów rankingów wzrosła z 26 do ponad 115. Rozpoznawanie pozycji ze zdjęcia działa w modelu serverless, tłumaczenia PL/EN objęły całą aplikację, a strona główna dostała nowy, redakcyjny wygląd. Dołączył też przewodnik CLAUDE.md i dokumentacja architektury Vercel + Supabase.
Wersja skupiona na pulpicie i analityce: prawdziwe statystyki, wykresy, seria aktywności i strona analityki pojedynczego rankingu, oparte na nowych tabelach śledzenia wyświetleń i udostępnień. Feed dostał siatkę w stylu Instagrama, odkrywanie filtry i widoki, a pozycje podgląd obrazka po najechaniu. AI odpowiada po polsku, pojawiły się zapisane rankingi, pełne ustawienia z 2FA i panel administracyjny działający bezpośrednio na Supabase.
Wersja, w której Majeranek dostał swoje najważniejsze mechaniki: inteligentne dodawanie pozycji z pomocą AI (zdjęcie, głos, opis słowny), tryb porównań ELO i powiadomienia w czasie rzeczywistym. Interfejs przeszedł na dwujęzyczność PL/EN z przełącznikiem języka, pojawiła się strona O nas, profil /u/[username] i ustawienia, a funkcje AI trafiły do tworzenia i edycji rankingów.
Przełomowe wydanie: frontend przeszedł na Supabase (logowanie, baza, RLS) i przestał zależeć od backendu NestJS, a projekt zmienił nazwę na Majeranek. Pojawiła się pastelowa szata graficzna, edycja rankingów, personalizacja pozycji oraz wybór typu listy: numerowana albo tier lista.
Druga faza dodała warstwę społecznościową: obserwowanie, komentarze, feed, wyszukiwarkę i porównywanie pozycji parami (ELO). Projekt zmienił nazwę z RankIt na ListAI i dostał pierwsze rekomendacje AI z panelem analityki.
Pierwsze wydanie projektu pod roboczą nazwą RankIt: spisana architektura platformy rankingowej i działające MVP na NestJS, Prisma i Next.js. Można się zarejestrować, zbudować ranking z wyszukiwarką pozycji, przeglądać rankingi innych i je polubić.
Wersje do 0.17.0 zostały odtworzone z historii repozytorium. Pytania i uwagi: O projekcie.