nordabiz/docs/notes/2026-01-29.md
Maciej Pienczyn 74995f9b3e docs: Aktualizacja notatek o PWA, Gemini 3 i dwa modele AI
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-29 15:31:36 +01:00

5.1 KiB

Notatki z prac nad NordaBiz - 2026-01-29

Wykonane zadania

1. Upgrade NordaGPT do Gemini 3 Flash Preview (GŁÓWNA ZMIANA)

  • Zmiana: Z Gemini 2.5 Flash-Lite na Gemini 3 Flash Preview
  • Korzyści: 7x lepsze rozumowanie, thinking mode, 78% na SWE-bench
  • Pliki: app.py, gemini_service.py, templates/chat.html
  • Commit: e0df7f2 (08:38)

2. Dwa modele AI do wyboru (GŁÓWNA ZMIANA)

  • Flash (darmowy): Gemini 3 Flash Preview - szybki, bez opłat
  • Pro (płatny): Gemini 3 Pro - lepszy, limit $2/dzień
  • Funkcje:
    • Osobne klucze API (Free tier / Paid tier)
    • Wyświetlanie szacowanego kosztu miesięcznego
    • Wybór modelu w interfejsie czatu
  • Pliki: gemini_service.py, templates/chat.html
  • Commity: 26db9a7, 1b2ba66 (11:04-11:19)

3. PWA - Aplikacja mobilna (GŁÓWNA ZMIANA)

  • Funkcja: Możliwość instalacji portalu jako aplikacji na telefonie (iOS/Android)
  • Dodano:
    • Web Manifest (static/site.webmanifest)
    • Ikony 192px i 512px
    • Apple Touch Icon dla iOS
  • Commit: eac72f4 (28 stycznia 23:44)

4. Naprawa błędów 500 w blueprintach

  • Problem: url_for('classifieds_index') bez prefixu blueprintu powodował 500
  • Rozwiązanie: Zmiana na url_for('.classifieds_index') (kropka = aktualny blueprint)
  • Pliki: blueprints/community/classifieds/routes.py, calendar/routes.py, contacts/routes.py

5. Aktualizacja ikony NordaGPT na stronie głównej

  • Problem: Stara ikona robota zamiast nowej ikony NordaGPT
  • Rozwiązanie: Podmiana na SVG z /static/img/nordagpt-icon.svg
  • Plik: templates/index.html

6. Integracja wideo z portalem

  • Dodano: Modal player z wideo w sekcji Edukacja
  • Pliki:
    • blueprints/education/routes.py - lista materiałów z URL wideo
    • templates/education/index.html - player, thumbnails, badge "Nowe"
  • Wideo: static/videos/nordabiz-zajawka-final.mp4

7. Poprawki wideo zajawka (Remotion)

  • Zmiana: Ostatnia scena - logo Norda Biznes zamiast ikony NordaGPT
  • Poprawka: Polskie znaki ("Twoja sieć kontaktów", "Izba Przedsiębiorców NORDA")
  • Plik: remotion/my-video/src/NordaBizZajawka.tsx

8. Ukrycie strony /aktualnosci

  • Strona pozostaje w kodzie, ale nie jest linkowana
  • Zostanie udostępniona w przyszłości na decyzję użytkownika

9. Reorganizacja kategorii ogłoszeń

Nowe kategorie:

Kod Etykieta
internal Wewnętrzne
external Zewnętrzne
event Wydarzenie
opportunity Okazja biznesowa
partnership Partnerstwo
  • Plik: database.py - CATEGORIES i CATEGORY_LABELS

10. Usunięcie "Nowi członkowie" z footera

  • Plik: templates/base.html

11. Obsługa wielu kategorii dla ogłoszeń (GŁÓWNA FUNKCJONALNOŚĆ)

Zmiany w bazie danych:

  • Nowa kolumna: categories TEXT[] (tablica PostgreSQL)
  • Migracja: database/migrations/029_add_categories_array.sql
  • Indeks GIN dla szybkiego wyszukiwania

Zmiany w backendzie:

  • Formularz admin: checkboxy zamiast select (wiele kategorii)
  • Filtrowanie: operator PostgreSQL @> dla tablic
  • Zachowanie kompatybilności wstecznej (pole category)

Pliki:

  • app.py - routes admin_announcements_new, admin_announcements_edit, announcements_list
  • database.py - model Announcement z nowymi metodami
  • templates/admin/announcements_form.html - checkboxy kategorii
  • templates/announcements/list.html, detail.html - wyświetlanie wielu badge'ów

Składnia SQLAlchemy dla ARRAY:

# BŁĘDNE (generuje LIKE):
Announcement.categories.contains([category])

# POPRAWNE (operator @>):
from sqlalchemy.dialects.postgresql import array as pg_array
query.filter(Announcement.categories.op('@>')(pg_array([category])))

12. Aktualizacja istniejących ogłoszeń

  • ID 11 (Baza zakwaterowania): {external, opportunity}
  • ID 12 (Tytani Przedsiębiorczości): {external, event}

Błędy naprawione podczas sesji

Błąd Przyczyna Rozwiązanie
500 na /tablica/nowe Brak prefixu . w url_for Dodanie kropki
500 na /ogloszenia?category=X .any() nie istnieje dla ARRAY Użycie .op('@>')
500 (malformed array literal) .contains() generuje LIKE Użycie pg_array()

Podsumowanie release v1.20.0

Kategoria Funkcjonalność
AI Gemini 3 Flash Preview, dwa modele (Flash/Pro), osobne klucze API
PWA Aplikacja mobilna dla iOS/Android
Aktualności Wiele kategorii, nowe typy kategorii
Edukacja Wideo w portalu
Bugfixy Blueprinty, filtrowanie ARRAY

Do zrobienia (następna sesja)

  • Nagranie tutorialu NordaGPT (30s) z użyciem GIFów z portalu
  • Integracja z NotebookLM (podcast o portalu)
  • Widget wideo na dashboardzie dla zalogowanych użytkowników

Uwagi techniczne

  • PostgreSQL ARRAY wymaga operatora @> do sprawdzania zawierania
  • SQLAlchemy .contains() dla TEXT[] generuje błędne zapytanie LIKE
  • Metoda .any() nie istnieje dla kolumn ARRAY w SQLAlchemy 2.0
  • Prawidłowa składnia: column.op('@>')(pg_array([value]))