Cel: Dopieścić portfolio do poziomu AWWWARDS SOTD / FWA — zero kompromisów.
Data startu: 2026-02-13
Stack: React + Three.js (R3F) + GSAP + Vite
- Zbadać
SkyChunk.jsx— obecnyCORRIDOR_CLIP_Z = -8nie trzyma, chmury "uciekają" do korytarza - Rozważyć dodanie clippingu per-kamera zamiast stałego Z-threshold
- Dodać testy wizualne — wejście/wyjście z About w obie strony
- Pliki: SkyChunk.jsx, InfiniteSkyManager.jsx
- Debugować
handleMonitorClickwStudioRoom.jsx— kamera nie zawsze centruje monitora poprawnie - Sprawdzić czy
openOverlay(item)faktycznie otwiera overlay z poprawnymi danymi - Przetestować na mobile i desktop — inne
responsiveParams - Poprawić
GlobalOverlay.jsx—ContentCardjeśli nie pokazuje contentu poprawnie - Pliki: StudioRoom.jsx, GlobalOverlay.jsx
- Sprawdzić czytelność istniejących tekstur (SOTY, SOTD, SOTM, FEATURED) — czy nie są za małe/za duże
- Poprawić pozycje i rozmiary kart Awards w
AwardsMilestone - Dodać animację "View" — kliknięcie na kategorię nagród → wyświetlenie wszystkich nagród w danej kategorii
- Zaprojektować UI — popup/overlay na canvas lub HTML overlay
- Dodać interakcję kliknięcia na kartę Award
- Animować rozwinięcie listy (GSAP)
- Pliki: InfiniteSkyManager.jsx
- Istniejące dekoracje (
Doodles.jsx) — zweryfikować co jest renderowane i czego brakuje - Wykorzystać istniejące tekstury z
/textures/corridor/decorations/:coffee_cup.webp,coffee_debug.webp,idea_process.webp,paper_airplane.webp,paper_ball.webp,pencil.webp,while_true_loop.webp
- Dodać nowe elementy:
- Ramki/obrazki na ścianach w stylu "hand-drawn" (np. szkice projektów)
- Biurko/stoliczek z kawą i notatkami
- Znaki/strzałki prowadzące do pokojów
- Rośliny w doniczkach (styl paper/sketch)
- Regał z książkami (cienkie prostokąty z teksturami)
- Tabliczki z cytatami (motywacyjne/programistyczne)
- Rozłożyć dekoracje po obu stronach korytarza
- Dodać subtelne animacje (floating, pulsing)
- Pliki: Corridor.jsx, Doodles.jsx, CorridorWalls.jsx
- The Gallery: Dodać animowane mini-detale w tle, żeby ożywić scenę (np. dym z kominów, poruszające się dźwigi, lecące ptaki).
- Corridor: Uzupełnić puste obrazy/ramki na ścianach odpowiednimi grafikami.
- The Studio: Zaktualizować UI (HTML), które wyskakuje po prawej po kliknięciu w monitor. Dodać do monitorów miniaturki oraz wstawić prawdziwe filmy.
- About: Popracować nad chmurami (mają wyglądać lepiej) i usunąć gwiazdki. Dodać interakcję dla balona: po kliknięciu balon pęka, odsłaniając pełną nazwę technologii w sekcji "Skills".
- Contact: Wzbogacić puste środowisko (gdzie jest tylko morze i beczki): dodać w tle minimalistyczne fale, wyspę na horyzoncie i chmury na niebie.
- About Room: Sprawdzić kontrast tekstów na tle chmur (milestones)
- Gallery Room: Upewnić się, że karty projektów są czytelne na tle domków i liny
- Studio Room: Sprawdzić czy info na monitorach jest czytelne
- Contact Room: Upewnić się, że opcje kontaktowe wyróżniają się
- Korytarz: Sygnatura drzwi dobrze widoczna, dekoracje nie przytłaczają
- Dodać głębię — elementy ważne z większą opacitą, tło z mniejszą
- Pliki: Wszystkie pokoje (About, Studio, Gallery, Contact)
- Zaprojektować shader/material swap: elementy interaktywne domyślnie w grayscale
- Na hover → animowana tranzycja do pełnego koloru (GSAP lub shader uniform)
- Elementy docelowe:
- Drzwi w korytarzu (sygnatura pokoju)
- Monitory w Studio
- Karty projektów w Gallery
- Beczki social media w Contact
- Karty Awards w About
- Opcja: shader
saturationuniform animowany od 0 do 1 - Pliki: Nowe utility + modyfikacja wszystkich pokojów
- Zdecydować format:
- Opcja A: Tooltips przy pierwszym wejściu (np. "Scroll to fly" w About)
- Opcja B: Dymki informacyjne pojawiające się na 3-4 sek
- Opcja C: Pomocnik/ikona "?" w narożniku z opisem interakcji
- Poradnik per pokój:
- Corridor: "Click a door to enter" + "Use map to teleport"
- About: "Scroll to fly through my story"
- Studio: "Drag to rotate • Scroll to browse • Click to view"
- Gallery: "Scroll to browse • Click to inspect"
- Contact: "Choose a contact method"
- Wyświetlać tylko za pierwszym razem (localStorage)
- Animacja wejścia/wyjścia (fade + slide)
- Pliki: Nowy komponent UI
-
AudioManager.jsxjest ready — maplay(),stop(),fade(), volume control - Lista dźwięków do dodania:
- Ambient: Cichy background loop (papier, wiatr?)
- Corridor: Kroki / szuranie
- Doors: Otwieranie/zamykanie drzwi
- About: Wiatr podczas lotu, whoosh przy chmurach
- Studio: Bzyczenie elektroniki, klik przy wyborze monitora
- Gallery: Szelest papieru/ubrań na linie
- Contact: Szum morza, splash przy rzucaniu butelki
- UI: Hover sounds, teleport swoosh
- Utworzyć folder
/public/sounds/ - Dodać UI toggle (już istnieje
AudioControls.jsx) - Pliki: AudioManager.jsx, AudioControls.jsx
- Konami code? Sekretny pokój?
- Kliknięcie w avatar w About → animacja zmiany wyrazu twarzy
- Kliknięcie wielokrotne w samolot papierowy → looping/spin
- Ukryty element gdzieś w korytarzu (np. pod obrazkiem)
- Secret mode: Dark mode toggle (cały świat B&W → negatyw)
- Progress bar/counter: "You discovered X/Y secrets"
- Kliknięcie w kawę w korytarzu → animacja pary
- "404" drzwi gdzieś w korytarzu → zabawna animacja
- Pliki: Różne — zależnie od pomysłu
- Uzupełnić prawdziwe URL-e (YouTube, Blog, TikTok)
- Dodać thumbnails (prawdziwe grafiki lub wygenerowane)
- Zaktualizować daty i metryki
- Pliki: contentData.js
- Audit na mobile (szczególnie About — dużo clouds + milestones)
- Sprawdzić
PerformanceContext.jsx— quality reduction na słabych urządzeniach - Przetestować teleportację na wszystkie pokoje — brak glitchy
- Sprawdzić memory leaks (tworzące się
new THREE.Vector3()w useFrame!)InfiniteSkyManager.jsxlinijki 155-157, 470-471, 710-711 — nowe Vector3 co klatkę!SkyChunk.jsxlinia 145 —new THREE.Vector3()co klatkę
- LOD (Level of Detail) — mniejsza ilość chmur/doodli daleko od kamery
- A1 — Nawigacja klawiaturą w 3D:
Dodać✅ DONEkeydownlistener (Strzałki, Spacja, PgUp/PgDn) wuseInfiniteCamera.jsi zmapować na scroll. - A2 — Spacja aktywuje Contact:
Naprawić focus management —✅ Naprawione przez A3 (inert blokuje focus)tabIndex={-1}na pin-slot buttons gdy mapa zamknięta. - A3 — Tab po zamkniętych menu:
Dodać✅ DONEinertna zamkniętych panelach (mapa, audio, achievements) wNavigationUI.jsx. - A4 — Focus Trap w mapie:
Auto-focus na close button po otwarciu + obsługa✅ DONEEscape+ focus trap (Tab wraca do pierwszego elementu). - A5 — Aria labels na suwakach:
Dodać✅ DONEaria-labeliaria-valuetextdo suwaków Music/SFX. - A6 — Map hover zones jako
<button>:Zamienić✅ DONE<div>hover zones na<button>zaria-labelionFocus/onBlurwNavigationUI.jsx. - A7 — SR fallback dla Canvas:
Stworzyć niewidoczną warstwę HTML z przyciskami odpowiadającymi interaktywnym elementom 3D.✅ DONE - Responsywność (Mobile): Poprawić FOV/pozycję Z kamery na małych ekranach, viewport ucina sceny.
- Optymalizacja ładowania: Dodać wizualny feedback po kliknięciu drzwi (spinner) + preload tekstur najbliższych pokojów.
- SEO Meta Tags:
Dodać title, description, OG, Twitter Card, JSON-LD, canonical, noscript fallback.✅ DONE - Meta tagi i OG image: Dodać
<meta description>, Open Graph tags, Twitter Card doindex.html. ✅ DONE (fully dynamic via build-time plugin) - Preloader pokaże % ładowania assetów (jest
Preloader.jsx, może wymaga update)
- Cursor customowy na hover nad elementami interaktywnymi (jest w
/public/cursors/) - Parallax na tłach pokojów (hook
useMouseParallax.jsistnieje) - Smooth page transitions — paper texture transitions (jest
PaperTransition.jsx) - Dodać subtelne particle effects (pyłki w korytarzu? Świetliki w About?)
- P1 —
new THREE.Vector3()w useFrame:Przenieść do stałych modułowych.✅ DONE (4 pliki) - P2 —
setStatew useFrame (SkillsMilestone):Zamienić na✅ DONEuseRef+ imperatywne update. - P3 —
console.logw produkcji:✅ DONEStudioRoom.jsx:49,338,389usunięte. - P4 — Martwy hook
useCorridorCamera:Nie jest nigdzie importowany → usunięty.✅ DONE - P5 — Import
r3f-perfw produkcji:✅ DONEApp.jsx:4→ import usunięty.
| Kwestia | Szczegóły | Priorytet |
|---|---|---|
contentData.js — placeholder data |
Wszystkie URL-e, thumbnails = null, dane przykładowe | 🟠 |
Doodles.jsx — 310 linii ale mogą nie renderować się w pełni |
Sprawdzić czy SketchElement, AnimatedStar, ThoughtBubble etc. są aktywne |
🟡 |
AudioManager.jsx — fade() jest stub |
fade() natychmiast pauzuje zamiast gradualnie ściszać |
🟡 |
| Brak textur w Gallery | Karty projektów mogą nie mieć prawdziwych screenshot'ów | 🟠 |
Tydzień 1: #1 (chmury) → #2 (monitory) → #4 (dekoracje korytarza)
Tydzień 2: #3 (awards) → #5 (czytelność grafik) → #6 (B&W→kolor hover)
Tydzień 3: #7 (tutorial) → #10 (prawdziwy content) → #11 (performance)
Tydzień 4: #9 (easter eggs) → #13 (microinterakcje) → #8 (dźwięki)
Na koniec: #12 (accessibility) → Final QA