Utworzyłem w nim podkatalog docs z plikami MD opisującymi wymagania funkcjonalne i techniczne, w szczególności oczekiwany przeze mnie stos technologiczny: Spring + Thymeleaf
Poprosiłem wbudowany w IntelliJ Idea “AI Chat” o wykonanie zadania: “Wygeneruj mi szkielet aplikacji zgodnie z wymaganiami opisanymi w plikach w katalogu docs”
AI Chat zabrał się ochoczo do roboty i po kilku minutach radośnie poinformował, że “Wygenerowano szkielet aplikacji wielomodułowej”.
Uwierzytelnianie i wylogowywanie w części publicznej i admina
Problem 1: AI niestety zapomniał napisać jak uruchomić utworzoną właśnie aplikację, ale upomniany o to wygenerował brakujący README.md z wymaganymi poleceniami.
Problem 2: Aplikacje spring-boot uruchomiły się poprawnie, ale po wejściu na adres, gdzie powinna być widoczna aplikacja, nie było treści i przeglądarka odmówiła jej otwarcia. Po sprawdzeniu telnetem adres był dostępny, a dopiero po sprawdzeniu poleceniem curl okazało się, że jest tam redirect (302), ale bez wskazania adresu. Upomniany AI wygenerował brakujące szablony ekranu logowania i powiązany kontroler oraz zaktualizował plik konfiguracyjny SecurityConfig.
Problem 3: Gdy już pojawił się ekran logowania, to po podaniu loginu i hasła trafiłem na stronę błędu. Niestety w logach uruchomionej aplikacji nie znalazłem żadnej informacji o błędzie ani stacktrace’u, który umożliwiłby mi sprawdzenie przyczyny. Upomniany o to AI wykonał dopiero poprawkę “Rozwiązano problem braku informacji o błędach w konsoli poprzez włączenie logowania w globalnym mechanizmie obsługi wyjątków”, pomimo że w początkowych wymaganiach było napisane “Obsługa błędów z aplikacji: ładny komunikat, unikalny numer błędu pozwalający znaleźć szczegóły w logach”. Z reszty podsumowania wykonanego zadania wynikło, że AI dopiero dodał obsługę uwierzytelniania.
Problem 4: Gdy ponownie próbowałem się uwierzytelnić tym samym loginem i hasłem (z pliku README.md), to aplikacja odrzucała mnie komunikatem “Invalid email or password.” ale w logach aplikacji nic nie było widać, więc poprosiłem AI, żeby tak poprawił implementację, aby faktyczna przyczyna była widoczna w logach.
Problem 5: Gdy już w logach znalazłem informację “powód: Bad credentials”. AI poproszony o wyjaśnienia przyznał, że zastosował “nieprawidłowy skrót haseł (BCrypt) w bazie danych” i poprawił dane testowe.
Problem 6: Niestety AI poprawił dane testowe w taki sposób, że Flyway zablokował uruchomienie aplikacji bo “Migration checksum mismatch for migration version 2”, czyli zrobił coś, czego nie wolno, czyli zmodyfikował już uruchomione skrypty. Zaproponowałem, żeby usunął i ponownie zainicjował bazę danych, a do mojego pliku .ai/coding-standards.md dodałem prośbę, żeby nie modyfikował istniejących skryptów Flyway.
Uwierzytelnienie w końcu się powiodło i zobaczyłem stronę aplikacji z informacją o zalogowanym użytkowniku.
Problem 7: Próba wylogowania się nie powiodła, dostałem błąd aplikacji i znowu w logach nie było żadnej informacji. Poprosiłem AI o utworzenie testowego end-pointu do weryfikacji, dlaczego stracktrace z aplikacji nie są widoczne w logach.
W kolejnym kroku AI poprawił strony błędów tak, że pojawia się na nich unikalny błąd, a w logach widzę stacktrace.
Problem 8: Próba logowania do aplikacji admina nie powodzi się, ale teraz widzę przyczynę w logach: NoResourceFoundException: No static resource for request ‘/’
Po drugiej próbie AI uzupełnił konfigurację tak, że pojawiła się strona dashboardu, także logowanie i wylogowywanie zadziałało.
Moduły do zarządzania administratorami i użytkownikami części publicznej
W kolejnym kroku poprosiłem AI o wygenerowanie moduły do zarządzania administratorami, bo w pierwszej iteracji został utworzony tylko placeholder.
Moduł został wygenerowany, ale wyglądał absolutnie ascetycznie, jakby w aplikacji nie było globalnego stylowania:
Problem 9: czując się jakbym sprawdzał zadanie praktykanta, pierwsze co sprawdziłem, to czy można dodać drugiego administratora o takim samym loginie jak istniejący i niestety od razu znalazłem błąd “ERROR: duplicate key value violates unique constraint “admins_username_key” Detail: Key (username)=(admin) already exists.”.
Po zgłoszeniu błędu AI poprawił go już bez problemu, zarządzanie użytkownikami w wersji minimalistycznej zadziałało.
Nie mogłem już dłużej patrzeć na te ekrany z epoki WWW 1.0, więc poprosiłem AI o dodanie frameworku Boostrap. Z tym zadaniem poradził sobie zaskakująco dobrze, bo oprócz samego dodania frameworku poprawił wygląd ekranów dodając także górne menu i stopkę oraz poprawił ekran testowego błędu aplikacji:
Ostatnią częścią tego zadania było wygenerowanie w części administracyjnej modułu do zarządzania użytkownikami części publicznej i to udało się już bez problemu:
Podsumowanie
Udało się przygotować kod działającej aplikacji w wersji absolutnego minimum z dwoma modułami typu CRUD. Wykonanie powyższego ćwiczenia razem z konfiguracją środowiska developerskiego zajęło mi trochę ponad 4 godziny. Może to nie jest jakiś imponujący wynik, bo sprawny developer operujący na podobnym stosie technologicznym pewnie byłby w stanie zrobić to szybciej. Moje doświadczenia z praktykantami ze studiów informatycznych pokazywały, że podobna funkcjonalność byłaby implementowana w ciągu kilku dni, bo iteracje testów i kolejnych poprawek wydłużają cały proces.
W tym ćwiczeniu najważniejsze było to, że w całej tej aplikacji nie napisałem ani linijki kodu.
Ważne wspomnienia jest też to, że nie robiłem żadnej weryfikacji wygenerowanego kodu. Pewnie gdybym to robił, a kontynuując to ćwiczenie będzie to potrzebne, to będę musiał uzupełnić plik .ai/coding-standards.md o oczekiwane wzorce, żeby kolejny generowany kod był już zgodny z moimi oczekiwaniami.
Drobne uwagi do AI Chat
Pracując nad powyższym kodem używałem AI Chata wbudowanego w Idea. Ten agent komunikujący się z modelem Gemini działał prawidłowo, ale wynotowałem kilka drobnych uwag:
wykonywanie poleceń działało relatywnie długo – nawet przy prostych widziałem w jego konsoli, że wykonuje wiele poleceń, które niekoniecznie są potrzebne
formatowanie poleceń działa wadliwie, np. wpisywanie potrójnych odwróconych nawiasów pojedynczych (“`) żeby wstawić blok kodu lub fragment logów jest dopełniane kolejnymi trzema ale kursor jest ustawiany za wszystkimi sześcioma, więc próba wklejenia ze schowka kończy się umieszczeniem tekstu za blokiem formatowania, a nie w jego środku – niby mały problem, ale przy wielokrotnym wpisywaniu jest to uciążliwe.
Generacja szkieletu aplikacji z użyciem AI
Jako kontynuacja poprzedniego wpisu o minimalnych wymaganiach technicznych i funkcjonalnych do “pustej” aplikacji wykonałem ćwiczenie polegające na generacji takiej aplikacji z użyciem modelu “Gemini 3 Flash Preview”.
Technicznie zorganizowałem sobie to tak:
AI Chat zabrał się ochoczo do roboty i po kilku minutach radośnie poinformował, że “Wygenerowano szkielet aplikacji wielomodułowej”.
Uwierzytelnianie i wylogowywanie w części publicznej i admina
Problem 1: AI niestety zapomniał napisać jak uruchomić utworzoną właśnie aplikację, ale upomniany o to wygenerował brakujący README.md z wymaganymi poleceniami.
Problem 2: Aplikacje spring-boot uruchomiły się poprawnie, ale po wejściu na adres, gdzie powinna być widoczna aplikacja, nie było treści i przeglądarka odmówiła jej otwarcia. Po sprawdzeniu telnetem adres był dostępny, a dopiero po sprawdzeniu poleceniem curl okazało się, że jest tam redirect (302), ale bez wskazania adresu. Upomniany AI wygenerował brakujące szablony ekranu logowania i powiązany kontroler oraz zaktualizował plik konfiguracyjny
SecurityConfig.Problem 3: Gdy już pojawił się ekran logowania, to po podaniu loginu i hasła trafiłem na stronę błędu. Niestety w logach uruchomionej aplikacji nie znalazłem żadnej informacji o błędzie ani stacktrace’u, który umożliwiłby mi sprawdzenie przyczyny. Upomniany o to AI wykonał dopiero poprawkę “Rozwiązano problem braku informacji o błędach w konsoli poprzez włączenie logowania w globalnym mechanizmie obsługi wyjątków”, pomimo że w początkowych wymaganiach było napisane “Obsługa błędów z aplikacji: ładny komunikat, unikalny numer błędu pozwalający znaleźć szczegóły w logach”. Z reszty podsumowania wykonanego zadania wynikło, że AI dopiero dodał obsługę uwierzytelniania.
Problem 4: Gdy ponownie próbowałem się uwierzytelnić tym samym loginem i hasłem (z pliku
README.md), to aplikacja odrzucała mnie komunikatem “Invalid email or password.” ale w logach aplikacji nic nie było widać, więc poprosiłem AI, żeby tak poprawił implementację, aby faktyczna przyczyna była widoczna w logach.Problem 5: Gdy już w logach znalazłem informację “powód: Bad credentials”. AI poproszony o wyjaśnienia przyznał, że zastosował “nieprawidłowy skrót haseł (BCrypt) w bazie danych” i poprawił dane testowe.
Problem 6: Niestety AI poprawił dane testowe w taki sposób, że Flyway zablokował uruchomienie aplikacji bo “Migration checksum mismatch for migration version 2”, czyli zrobił coś, czego nie wolno, czyli zmodyfikował już uruchomione skrypty. Zaproponowałem, żeby usunął i ponownie zainicjował bazę danych, a do mojego pliku
.ai/coding-standards.mddodałem prośbę, żeby nie modyfikował istniejących skryptów Flyway.Uwierzytelnienie w końcu się powiodło i zobaczyłem stronę aplikacji z informacją o zalogowanym użytkowniku.
Problem 7: Próba wylogowania się nie powiodła, dostałem błąd aplikacji i znowu w logach nie było żadnej informacji. Poprosiłem AI o utworzenie testowego end-pointu do weryfikacji, dlaczego stracktrace z aplikacji nie są widoczne w logach.
W kolejnym kroku AI poprawił strony błędów tak, że pojawia się na nich unikalny błąd, a w logach widzę stacktrace.
Problem 8: Próba logowania do aplikacji admina nie powodzi się, ale teraz widzę przyczynę w logach: NoResourceFoundException: No static resource for request ‘/’
Po drugiej próbie AI uzupełnił konfigurację tak, że pojawiła się strona dashboardu, także logowanie i wylogowywanie zadziałało.
Moduły do zarządzania administratorami i użytkownikami części publicznej
W kolejnym kroku poprosiłem AI o wygenerowanie moduły do zarządzania administratorami, bo w pierwszej iteracji został utworzony tylko placeholder.
Moduł został wygenerowany, ale wyglądał absolutnie ascetycznie, jakby w aplikacji nie było globalnego stylowania:
Problem 9: czując się jakbym sprawdzał zadanie praktykanta, pierwsze co sprawdziłem, to czy można dodać drugiego administratora o takim samym loginie jak istniejący i niestety od razu znalazłem błąd “ERROR: duplicate key value violates unique constraint “admins_username_key” Detail: Key (username)=(admin) already exists.”.
Po zgłoszeniu błędu AI poprawił go już bez problemu, zarządzanie użytkownikami w wersji minimalistycznej zadziałało.
Nie mogłem już dłużej patrzeć na te ekrany z epoki WWW 1.0, więc poprosiłem AI o dodanie frameworku Boostrap. Z tym zadaniem poradził sobie zaskakująco dobrze, bo oprócz samego dodania frameworku poprawił wygląd ekranów dodając także górne menu i stopkę oraz poprawił ekran testowego błędu aplikacji:
Ostatnią częścią tego zadania było wygenerowanie w części administracyjnej modułu do zarządzania użytkownikami części publicznej i to udało się już bez problemu:
Podsumowanie
Udało się przygotować kod działającej aplikacji w wersji absolutnego minimum z dwoma modułami typu CRUD. Wykonanie powyższego ćwiczenia razem z konfiguracją środowiska developerskiego zajęło mi trochę ponad 4 godziny. Może to nie jest jakiś imponujący wynik, bo sprawny developer operujący na podobnym stosie technologicznym pewnie byłby w stanie zrobić to szybciej. Moje doświadczenia z praktykantami ze studiów informatycznych pokazywały, że podobna funkcjonalność byłaby implementowana w ciągu kilku dni, bo iteracje testów i kolejnych poprawek wydłużają cały proces.
W tym ćwiczeniu najważniejsze było to, że w całej tej aplikacji nie napisałem ani linijki kodu.
Ważne wspomnienia jest też to, że nie robiłem żadnej weryfikacji wygenerowanego kodu. Pewnie gdybym to robił, a kontynuując to ćwiczenie będzie to potrzebne, to będę musiał uzupełnić plik
.ai/coding-standards.mdo oczekiwane wzorce, żeby kolejny generowany kod był już zgodny z moimi oczekiwaniami.Drobne uwagi do AI Chat
Pracując nad powyższym kodem używałem AI Chata wbudowanego w Idea. Ten agent komunikujący się z modelem Gemini działał prawidłowo, ale wynotowałem kilka drobnych uwag:
Archiwa
Kategorie
Ostatnie posty
Generacja szkieletu aplikacji z użyciem AI
18 czerwca 2026Szkielet aplikacji internetowej
16 czerwca 2026AsciiDoctor – dokumentacja techniczna “na poważnie”
25 września 2022Kalendarz