Skip to content

Claude/panel creation perf fz08wa#10

Open
uncleeai wants to merge 123 commits into
claude/claude-md-docs-66ys0zfrom
claude/panel-creation-perf-fz08wa
Open

Claude/panel creation perf fz08wa#10
uncleeai wants to merge 123 commits into
claude/claude-md-docs-66ys0zfrom
claude/panel-creation-perf-fz08wa

Conversation

@uncleeai

@uncleeai uncleeai commented Jul 1, 2026

Copy link
Copy Markdown
Owner

No description provided.

uncleeai and others added 30 commits June 21, 2026 10:37
Add Vercel Cron keepalive and analytics integration
Przycisk udostępniania korzysta z navigator.share (systemowy Share Sheet:
iMessage/WhatsApp…) na telefonie, z fallbackiem do schowka na desktopie.
Wykrywanie wsparcia po stronie klienta, by uniknąć rozjazdu z SSR.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Chipy „Dziś/Jutro/Piątek/Sobota 19:00" wstawiają termin jednym tapem —
mniej dłubania w pickerze daty na telefonie. Wspólny helper slotPresets.ts
użyty w formularzu tworzenia (wypełnia wiersze) i przy dodawaniu terminu na
stronie wypadu (wstawia od razu).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
UX wypadów: szybsze głosowanie i planowanie (iOS) + setup Supabase MCP
Szybkie naprzemienne klikanie powodowało „mruganie" własnego wyboru: każde
zdarzenie realtime przeładowywało całość z bazy, a odpowiedzi wracały w złej
kolejności względem niezatwierdzonych zapisów. Trzymamy ostatni zamierzony głos
w refie i nakładamy go na każde przeładowanie, aż baza go potwierdzi.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
- Ikony PNG (180/192/512) z SVG przez sharp; apple-touch-icon na PNG, bo iOS
  słabo renderuje SVG na ekranie głównym. Dodane do manifestu.
- color-scheme: dark — natywny picker daty i kontrolki w ciemnym motywie.
- statusBarStyle: black-translucent — pasek statusu pasuje do ciemnej apki.
- Większe cele dotykowe: ✕ usuwania i chipy presetów (~40px).
- Brak szarego tap-highlight, stabilny -webkit-text-size-adjust.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Przeprojektowanie warstwy wizualnej w stronę czystego, minimalnego dark mode
(Apple-like): spokojniejsza, neutralniejsza paleta, hairline'owe obramowania,
więcej powietrza, subtelne cienie i pille, segmentowana kontrolka głosowania
(Mogę/Może/Nie), kolory systemowe iOS dla yes/maybe/no, focus-ring na inputach.
Wszystkie klasy i zmienne CSS zachowane — markup bez zmian. Theme/splash kolory
zsynchronizowane z nową paletą.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Pełna przebudowa układu (nie tylko kolory):
- Dashboard: large title + powitanie, sekcje jako szare nagłówki, wypady jako
  zgrupowana lista (jedna wyspa z separatorami) z chevronami, prominentny
  „+ Nowy wypad", zdegradowany „Wyloguj", przyjazny stan pusty.
- Strona wypadu: back-link, przeprojektowany nagłówek (tytuł/miejsce/organizator),
  „Czekamy na…" jako pille, subtelniejsze „Usuń wypad".
- globals.css: nowe prymitywy iOS (list-group/list-row, section-label,
  large-title, empty-state, pill-wait/done, back-link); usunięte event-card/list-item.
Czysto prezentacyjne — logika i baza bez zmian.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Wybór awatara przy pierwszym logowaniu (emoji), zapisany w user_metadata
i profiles (nowa kolumna avatar). Dashboard wzbogacony zgodnie z kierunkiem
hybrydowym: nagłówek z ikoną appki i awatarem usera, gradientowy CTA, karty
wypadów z awatarami głosujących, ikonami daty/godziny/miejsca i paskiem
„% zagłosowało"; baner z poradą. Strona wypadu: awatary uczestników i ikonki.
Bez okładek/statystyk/dwóch kolumn — lekkie, jednokolumnowe, mobile-first.

Nowe: src/lib/avatars.ts, src/components/icons.tsx, src/components/Avatar.tsx.
Zmiana schematu: profiles.avatar (uruchom schema.sql ponownie).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
- Wgrywanie zdjęcia profilowego z galerii (iOS): Supabase Storage (bucket
  avatars + RLS), klientowy resize do 512px, avatar trzyma URL albo emoji.
- Avatar renderuje zdjęcie gdy URL, inaczej emoji/inicjały.
- ProfileMenu: klik w avatar w rogu → Zmień zdjęcie / Wybierz emoji / Wyloguj.
- SetupForm (1. logowanie): emoji albo wgranie zdjęcia, z podglądem.
- Dashboard: usunięty tytuł „Planner" i opis oraz osobny Wyloguj; góra to
  tylko „Cześć, {imię}" + avatar.

Wymaga ponownego uruchomienia schema.sql (bucket avatars + polityki Storage).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Klik w avatar w rogu otwiera wyśrodkowany modal na rozmytym (blur)
przyciemnionym tle: duży avatar z badge'em aparatu (zmiana zdjęcia),
rząd emoji, edycja nicku z zapisem i wyloguj. Zmiany avatara/nicku
aktualizują się na żywo; modal zamyka ✕ lub klik w tło. Zastępuje
dotychczasową rozwijaną listę.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Próbka kierunku Apple „Liquid Glass" na samym dashboardzie: nasycone,
statyczne tło (GlassBackground) prześwitujące przez matowe szkło kart, CTA
i banera (backdrop-blur + saturate + hairline + wewnętrzny odblask). Style
scope'owane pod .glass-page, więc strona wypadu i modale pozostają płaskie.
Bez zmian logiki/bazy.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Trzecia warstwa głębi „mokrego szkła": połyskliwa linia (gradient, jaśniejsza
w środku) na górnej krawędzi szklanych powierzchni przez ::before; mocniejszy
drop shadow (0 20px 60px /0.5), by karty wyraźniej lewitowały. Czysto CSS,
scope pod .glass-page.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Nowe adresy przy pierwszym logowaniu wyzwalają szablon „Confirm signup",
który domyślnie pokazuje link — stąd nowi użytkownicy dostawali link zamiast
kodu, a istniejący (szablon Magic Link) kod. Dokumentuj dodanie {{ .Token }}
do obu szablonów (lub wyłączenie Confirm email).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Dwie wyraźne kule zastąpione rozlaną, wielopunktową aurorą (kilka dużych,
miękkich plam koloru wtopionych w ciemną bazę) + subtelne ziarno (SVG noise,
soft-light) dla premium feel i braku bandingu. Bez wyraźnych „bańek".

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Cztery symetryczne radialne w rogach czytały się jak osobne poświaty. Środki
gradientów przeniesione poza kadr + ogromne rozmiary i ukośna baza → kolor
wpływa z brzegów i zlewa się w pasma, bez widocznych kół.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Zamiast statycznego washu — pionowe, miękkie kurtyny zorzy (zieleń/turkus +
fiolet) z maską po bokach i blendem screen, bardzo wolno falujące (skew/scale,
28-40s). Bez kosztownego blura per-klatka; szanuje prefers-reduced-motion.
Nocna baza + poświata nad horyzontem.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Wyraźniejszy ruch (większa amplituda translateX/skew, 17-25s), przygaszone
kolory (niższe alfy + opacity grupy 0.8), i jaśniejsza część gradientu
przesunięta na środek + wyższa grupa → zorza wypełnia ekran, nie tylko górę.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Przycisk „Szybkie logowanie (dev)" na ekranie logowania pojawia się tylko gdy
ustawione są NEXT_PUBLIC_DEV_EMAIL/PASSWORD; loguje hasłem do testowego konta
(signInWithPassword), omijając kod e-mail. Brak sekretów w repo — gate przez
zmienne ustawiane wyłącznie w Preview. Udokumentowane w .env.example.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Zamiast logowania hasłem ze zmiennych — przycisk „Wejdź bez logowania (gość)"
przez supabase.auth.signInAnonymously z domyślnym nickiem+avatarem (omija
ekran profilu). Pokazywany tylko na preview/localhost (hostname z „-git-"),
więc na produkcji niewidoczny i bez żadnej konfiguracji. Cofnięto zmienne
NEXT_PUBLIC_DEV_* z .env.example.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Poprzedni warunek (-git-) nie łapał URL-i per-deploy Vercela, więc guzik
gościa się nie pokazywał. Pokazujemy go na każdym *.vercel.app i localhost;
ukryty tylko na własnej domenie produkcyjnej.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Karty listy (.event-rich) — najliczniejsze i scrollowane — zamienione na
„smoked glass" bez backdrop-filter, więc nie ma rozmycia liczonego co klatkę
przy scrollu. Prawdziwy blur zostaje tylko na nielicznych elementach (CTA,
formularz, baner) i zmniejszony do 12px/150%. Wygląd zachowany, scroll lekki.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Statyczna głębia bez kosztu przy scrollu: fazowana krawędź (inset jasny
górno-lewy + ciemny dolno-prawy), refleksy światła w narożnikach i lekka
barwna refrakcja przy dolnej krawędzi kart. Dotyczy kart listy oraz
pozostałych szklanych powierzchni i CTA.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Przywrócono backdrop-filter (frosted) na kartach listy — z zachowaniem
fazowanej krawędzi i glintów. W zamian zorza wyciszona (niższe alfy + opacity
0.55) i zepchnięta na boki (pasma przy lewej i prawej krawędzi, środek
spokojniejszy). Rozmycie dodatkowo zmiękcza zorzę za kartami.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Refrakcja: chromatyczne rozszczepienie na krawędziach (chłodny błękit vs
fiolet) przez kolorowe inset-cienie + cienki, tęczowo przesunięty rant
(gradientowy border przez mask-composite). Aurora odrobinę mocniejsza
(opacity 0.55 → 0.63). Wszystko statyczne — bez kosztu przy scrollu.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Mniej „AI": neonowy zielony/cyan zastąpione stonowaną, analogiczną gamą
(przygaszony błękit → indygo → fiolet → kurzowy róż), też w poświacie bazy.
Karty mieszają się z aurorą: niższe własne przyciemnienie (0.28 → 0.20) i
wyższa saturacja rozmycia (do 195%) → glass tintuje się kolorem zorzy za sobą.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017ErbidN4HCXywidwUdDcbf
Liquid Glass UI, awatary ze zdjęciem, modal profilu, guest login
claude added 2 commits July 1, 2026 14:45
position: fixed + inset: 0 can fail to track the growing visual
viewport when Safari's address bar auto-hides on scroll, leaving the
background short of the bottom edge. Size it explicitly with
100dvw/100dvh (falling back to 100vw/100vh), matching the dvh pattern
already used for .auth-screen.
Animating grid-template-rows is a layout property — the browser was
reflowing the whole form every frame for 0.28s while closing, causing
the dropped-frame/jump you saw. Content now fades out first via
transform+opacity (compositor-only, same as the open path already
does), then grid-template-rows/margins/backdrop-filter snap instantly
once it's already invisible — one reflow in one frame instead of
smeared across ~8.
@vercel

vercel Bot commented Jul 1, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
planner Ready Ready Preview, Comment Jul 1, 2026 7:17pm

Real design fixes from screenshot review, not the full redesign pass:
- "+ Nowy wypad" and "Ustal ten termin" now use the app's existing
  accent blue (already present on the "AKTYWNY" badge) instead of the
  same flat gray as every other card, so the primary action actually
  stands out.
- Progress bar track opacity bumped slightly so it's visible even at 0%.
- "Cweluchy" (who hasn't voted) now renders as avatar chips via the
  existing AvatarStack component instead of a plain comma-joined name
  list.

The segmented voting control (Wchodzę/Może/Pas) was already color-coded
on selection in the existing CSS — the screenshot just showed a slot
with zero votes, so nothing was selected. No change needed there.
The solid rgba(10,132,255,0.9) background was too loud next to the
rest of the muted UI. Dropped to a translucent tint (0.2-0.22 alpha)
with a visible border instead — still reads as the accent color, no
longer shouts.
The previous glass-bg sizing fix wasn't the actual cause of the
persistent black bottom bar (confirmed via a real device screenshot on
a short dashboard). html/body had no min-height, so on pages shorter
than the screen, iOS Safari (with viewport-fit=cover) paints the
leftover bottom safe-area with theme-color instead of real page
content — a flat #050505 strip with no aurora glow, since it's outside
the actual document. min-height: 100dvh on body ensures the document
always fills the screen, so there's nothing left for iOS to paint in.
The app never disables double-tap-to-zoom (no maximum-scale/user-scalable
in the viewport meta), so iOS Safari holds every tap on buttons and
links for a short window to see if a second tap follows (zoom gesture).
The :active press animation fires immediately on touchstart regardless,
which is why the button visibly "presses" even when the click itself
gets delayed or dropped — especially on quick or light taps, and worse
with repeated taps. touch-action: manipulation removes that
disambiguation on interactive elements specifically, without touching
pinch-zoom elsewhere.
maximumScale: 1 matches initialScale, which disables browser zoom
gestures. This app is chrome (fixed layout, gated behind login), not
content to scale — zoom only added tap-disambiguation latency on top
of the touch-action fix. Trade-off: removes pinch-to-zoom as a
text-scaling aid for low-vision users, accepted as intentional for
this app-like use case.
overscroll-behavior-y: none stops the browser's pull-down-to-refresh
gesture chain. Supabase Realtime already pushes updates live, so a
manual page reload from an accidental upward swipe is never needed and
only risked interrupting the session.
Purely cosmetic — the visible scrollbar broke the native-app feel.
Scrolling still works identically, just no visual indicator.
scrollbar-gutter: stable was only there to reserve space for a
scrollbar that will no longer render, so it's gone too.
Two CSS-only attempts (position:fixed inset:0, then explicit
width/height:100dvh) didn't hold up on a real device — the bar came
back intermittently, self-resolving only on a fresh app relaunch.
That's the signature of dvh being unreliably recalculated at standalone
PWA launch on iOS, not a wrong formula.

GlassBackground now measures window.innerHeight on mount and on
resize/visualViewport resize, publishing it as --app-vh on
documentElement. .glass-bg and html/body now prefer that measured value
over dvh, falling back to dvh only before the effect has run (first
paint, pre-hydration).
…zing

Confirmed by the user: this never happened while the aurora was
animated. Moving blobs swept across the whole screen over time,
including the bottom, masking the fact that their resting positions
never actually reached it. Freezing the animation earlier (for
performance) froze them exactly where that gap was, exposing a real,
permanent uncovered strip — not a viewport-height calculation issue.
The last three commits (glass-bg sizing, body min-height, JS-measured
--app-vh) weren't wrong to have, just weren't the actual fix.

b6 is now centered exactly on the bottom edge (top: 100%) and widened
to 90vw, so its full-intensity core — not just the fading tail of the
gradient — sits right at the bottom, guaranteed regardless of device
screen height.
Confirmed by a second screenshot: the bar was still there on cold
start, but vanished as soon as any resize-triggering interaction
happened (e.g. focusing the "Nowy wypad" title input brings up the
keyboard). That means the fix from the last commit was directionally
right, but the very first measurement right after mount can still be
stale on a cold PWA launch, before iOS finishes settling the safe-area
layout — and nothing was forcing a re-measure without user interaction.

Now schedules re-measures at 50/200/500/1000ms after mount, plus
listens to pageshow/visibilitychange, so it self-corrects without
requiring the user to touch anything first.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants