5.1 KiB
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
- Web Manifest (
- 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 wideotemplates/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-CATEGORIESiCATEGORY_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- routesadmin_announcements_new,admin_announcements_edit,announcements_listdatabase.py- modelAnnouncementz nowymi metodamitemplates/admin/announcements_form.html- checkboxy kategoriitemplates/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]))