Sunly is een vrolijke weerapp die altijd de zonzijde ziet. Geen doemvoorspellingen, wel positieve labels, leuke tips per dag en bijhorende muziek.
Gebouwd in 4u tijdens een Claudathon — daarom zo'n lange changelog in zo'n korte tijd 😅
0.10.5 — 2026-05-28
Share fallback bij user-gesture verlies
- iOS Safari is streng: als de await-pipeline (fetch + image loads + canvas) te lang duurt, vervalt de user-gesture en weigert navigator.share()
- Nu vangen we die rejection apart op: bij failure na canShare-check → automatisch download-fallback met duidelijke melding
- Garandeert dat de PNG altijd ergens belandt, ook als de native share-popup om gesture-redenen faalt
0.10.4 — 2026-05-28
Brand-iconen op Iconen pagina
iconUsage() uitgebreid met 5 brand-iconen: logo (dag), logo-moon (nacht), mascot-thumb, mascot-knipoog, mascot-sleeping- Elke entry heeft optioneel een
path veld; frontend gebruikt dat als source ipv standaard /img/weather/ - Brand-iconen krijgen een coral "brand" pill ipv WMO codes
- Logica blijft backwards-compatible: weather icons zonder path werken zoals voorheen
0.10.3 — 2026-05-28
Share PNG via Canvas API — geen html2canvas meer
- html2canvas verwijderd, was te flaky op mobile (onverklaarbare onbekende errors)
- Volledig handmatig gerenderd op een 2× scale Canvas: header card met logo + titel + subtitel, per dag een cream card met icoon links/rechts + temps + verdict pill in het midden met pijltje
- Preload alle benodigde icoontjes en wacht tot ze geladen zijn vooraleer te tekenen
- Veel robuuster: geen externe library, geen CORS gedoe, geen DOM-cloning surprises
- Footer "Gemaakt met Sunly ☀️" onderaan
0.10.2 — 2026-05-28
Share button in Sunly stijl + robuustere error
- Share-knop nu in navy/cream stijl (zoals Spotify pill), met enkel het WhatsApp logo in groen
- Geen volledig fluo-groene knop meer — past beter in de Sunly UI
- Error message bij failed share: undefined fallback opgevangen, krijgt nu duidelijke melding "probeer op je telefoon" omdat desktop browsers vaak geen file share ondersteunen
0.10.1 — 2026-05-28
Compare-verdict polish + changelog allesinclusief
- Verdict pill: padding 0.25/0.55 → 0.4/0.85rem, font 0.75 → 0.95rem
- Dagnaam in midden 0.9 → 1.1rem, datum 0.72 → 0.85rem
- Min-width middencolumn van 100 → 130px → meer ademruimte tussen sides
- Pijltje naar de winnaar in de verdict pill:
← Gent +7° of Barcelona +5° → — geen pijl bij gelijkspel - Changelog limit van 14 → 50 → alle entries zichtbaar in Over Sunly
- Vanaf nu krijgen nieuwe entries een tijdstip om de hackathon-evolutie te kunnen volgen
0.10.0 — 2026-05-28
Deel op WhatsApp vanaf de vergelijker 📱
- Groene WhatsApp pill-knop onderaan de vergelijker (boven Terug)
- Klik bouwt off-screen een wrapper met:
- Sunly logo + "Gent vs Barcelona" banner
- Kopie van de huidige compare-list met alle dag-rijen
- The Happy Weather App — sunly.app baseline
html2canvas (on-demand geladen via CDN) maakt er een 2x scale PNG van- navigator.share met
files opent het iOS/Android share-sheet → WhatsApp + Telegram + Mail + ... - Fallback bij browsers zonder file-share: PNG wordt gedownload + alert om manueel te delen
- AbortError (user cancelt) wordt stil afgehandeld
0.9.7 — 2026-05-28
Over Sunly pagina met changelog
- Hamburger item "Over Sunly" opent nu een echt scherm i.p.v. een alert
- Intro-card met mascotte + korte tekst over de app + hackathon context
- Changelog live gerenderd vanuit
CHANGELOG.md via mini Markdown-parser in PHP - Per versie een cream card met coral titel + bold subsections + bullet lists
- Inline
code styling met geel highlightje - Limiet op 14 entries om de pagina niet te lang te maken
- Back-knop onderaan, footer eronder
0.9.6 — 2026-05-28
Geen kleurmismatch meer tussen header en pagina
body.is-night header-bg override verwijderd (amber → bleek hét visuele kapotmaken op compare/icons/etc waar de screen bg nog day-cream was)body.is-night .screen--home gradient override ook weggehaald- Night theme = nu enkel de logo-swap (sun → moon), achtergronden blijven consistent
- Screen gradients verlengd: sky-cream blijft solid tot 22% en transitioneert dan naar amber → coral, zodat geen lijn meer onder de header
0.9.5 — 2026-05-28
Afmelden altijd zichtbaar + solid header
- Afmelden in hamburger is nu altijd zichtbaar (was niet zichtbaar als je via localStorage binnen kwam zonder server-session check te triggeren)
- handleLogout werkt altijd: server logout (faalt stil als niet ingelogd) + localStorage wissen + naar onboarding → effectief een "Reset" knop ook
- Header bg solid sky-cream i.p.v. fading gradient → geen lichtere band meer onder de header bij compare/icons/profile/install
0.9.4 — 2026-05-28
Afmelden vanuit hamburger
- Hamburger menu item "Afmelden" onderaan (coral, met logout SVG)
- Alleen zichtbaar wanneer ingelogd via
body.is-logged-in class - Wordt gezet bij: signup, login, server-session detected op boot
- Wordt gewist bij: logout
- handleLogout() doet: server logout → localStorage wissen → naar onboarding
- Profile-logout knop hergebruikt dezelfde functie
0.9.3 — 2026-05-28
Compare-head: weg met sticky/fixed
- Gewoon bovenaan in normale flow, scrolt mee met content
- Geen position fixed, geen z-index, geen bg-overlay, geen padding-juggling
- Screen padding terug naar standaard
0.9.2 — 2026-05-28
Boot fixes + compare positionering
- Compare-sticky-head leakte naar andere screens omdat
position: fixed niet door visibility: hidden van parent gehide werd → expliciet display: none behalve op body[data-screen="compare"] - Screen--compare padding-top opgetrokken met +130px om ruimte te maken voor de fixed sticky-head
- Boot doet nu ook server-session check: zonder localStorage + zonder cookie → onboarding (zoals het hoort). Met cookie + DB data → hydrate localStorage en home (cross-device ervaring)
0.9.1 — 2026-05-28
Installeer-als-app pagina + compare fix
- Hamburger menu item "Installeer als app" → opent nieuw
#screen-install - Per platform een cream card met instructies (Sunly stijl):
- iPhone · Safari (4 stappen)
- iPhone · Chrome (omleiding naar Safari)
- Android · Chrome (3 stappen + banner-tip)
- Mac/Windows · Chrome/Edge (3 stappen + menu-tip)
- Mac · Safari (File → Voeg toe aan Dock)
- Cream cards met subtiele border, gele "note" blokken voor extra tips
- Back-knop onderaan zoals andere subpagina's
- Compare-pagina:
.compare__sticky-head van sticky naar position: fixed zodat hij altijd vast onder de header staat (was issue met grote gap)
0.9.0 — 2026-05-28
Auth-flow herwerkt
Intro (onboarding)
- Tabs bovenaan: Account aanmaken (default) / Heb je al een account?
- Signup mode: naam + locatie + e-mail (optioneel) + wachtwoord (optioneel)
- Geen account = enkel localStorage
- Wel account = direct account aanmaken + ingelogd
- Login mode: enkel e-mail + wachtwoord; bij succes wordt DB-data opgehaald en home getoond
- Volledige flow speelt zich af binnen het intro-scherm, geen sprong meer naar profiel
Profiel
- Niet meer ingelogd: enkel "Account aanmaken" form (e-mail + wachtwoord), geen tabs, geen login
- Naam komt uit localStorage (zonder profiel-aanmaak in intro)
- Na signup → auto-ingelogd, profile-view verschijnt
- Aanmelden op een ander toestel = via het intro-scherm (toelichting onderaan)
Onder de motorkap
pushDataToServer() helper gebruikt voor sync na signup- Geen tabs meer in profiel-scherm
- Onb-login-link verwijderd (tabs vervangen die functie)
0.8.6 — 2026-05-28
Dynamic header height — geen gap meer
- JS meet
app-header.offsetHeight en zet --header-height als CSS variabele - Re-meet bij
load, resize en elke showScreen (zodat hidden→visible ook werkt) - Alle screens gebruiken nu
padding-top: var(--header-height, 130px) ipv vaste 130px .compare__sticky-head ook top: var(--header-height) ipv 108px- Werkt zo correct met safe-top, custom logo grootte, en orientatie-wissels
0.8.5 — 2026-05-28
App-feel + onboarding login
- Viewport meta uitgebreid met
maximum-scale=1, minimum-scale=1, user-scalable=no → géén pinch-zoom of double-tap-zoom meer, true app feel - Logo links in de header is nu een button (
#home-brand-link) → klik = naar home, overal in de app - Onboarding-scherm heeft nu onderaan: "Heb je al een account? Log in" link
- Klik op die link → springt naar profielscherm in login-modus (alleen e-mail + password, geen naam)
- Bij succesvolle login met volledige DB-data wordt automatisch doorgesprongen naar home
0.8.4 — 2026-05-28
Sticky head: title + selectors samen
- Titel "Vergelijker" en de selectors zitten nu in één gedeelde
compare__sticky-head block - Het hele blok is sticky bij
top: 108px — net onder de fixed app-header - Geen aparte sticky meer op selectors; geen losse achtergrond meer
- Bij scroll blijven titel + selectors samen zichtbaar, content schuift er netjes onder
- Sticky background match nu de page-bg, met soft drop shadow voor scheiding
0.8.3 — 2026-05-28
Compare layout fine-tuning
- Sticky selectors gaan nu van rand tot rand via
margin: 0 -1.1rem → schermbreed - Sticky achtergrond iets donkerder (
#FFD55F i.p.v. sky-cream) zodat content er visueel ONDER verdwijnt i.p.v. erin oplost - Diepere drop shadow onder sticky voor extra scheiding
- Compare-side iconen 64 → 54px — sides nóg compacter
- compare-side padding weg → maximaal ruimte voor middencolumn
0.8.2 — 2026-05-28
Compare layout — sides ademen weer
- Grid van
1fr auto 1fr → auto 1fr auto: sides krimpen naar hun content (icoon + temps), midden krijgt de overgebleven ruimte - Gap van .3 → .9rem zodat sides en middencolumn niet meer tegen elkaar duwen
- Winner-ring inset van
-6px -10px → -4px -2px zodat de gele border binnen de side blijft en niet over de verdict-pill plakt
0.8.1 — 2026-05-28
Sticky strakker + dropdown navigatie fix
- Compare-titel margin van .8 → .4rem zodat selectors dichter onder de titel staan
- Selector-padding van .7/.8 naar .55/.6rem
- Fading gradient bg verwijderd; nu solid sky-cream + subtiele drop shadow onderaan
- Bug fix: bij klikken van een favoriet in de locatie-dropdown vanaf compare/icons/profile schakelt de app nu meteen naar home (anders bleef je op de vorige pagina staan terwijl de locatie wel wijzigde)
- Idem voor nieuwe locatie toevoegen vanuit een andere pagina
0.8.0 — 2026-05-28
Accounts + cross-device sync 🔐
Backend
- Nieuwe
app/Auth.php class met PHP-session auth + bcrypt password hashing - API endpoint
/api/auth.php met acties: signup / login / logout / me - API endpoint
/api/user-data.php voor GET (lees) en POST (schrijf) van data blob - Sessie cookie:
sunly_session, HttpOnly, SameSite=Lax, 30 dagen geldig
Database
- Nieuwe column
users.data_json TEXT NULL — bevat de hele user state (naam, favorieten, locatie) als JSON - Migratie file:
sql/migrations/2026-05-28-add-user-data.sql - Belangrijk: run deze migratie op productie vóór gebruik:
```
mysql -u sunly_user -p sunly < sql/migrations/2026-05-28-add-user-data.sql
```
Profielscherm (#screen-profile)
- Twee tabs: Aanmelden / Account aanmaken
- Bij signup: voornaam + e-mail + wachtwoord (min. 6 tekens) → auto-login + push localStorage naar DB
- Bij login: pull data uit DB → hydrate localStorage → home rendert opnieuw met DB-data
- Logged-in view: mascotte + Welkom + naam + email + coral afmeld-knop
- Helder error-feedback bij verkeerde input
Cross-device sync
saveUser() doet nu ook een best-effort POST naar /api/user-data.php bij elke save- Server returnt stil 401 als niet ingelogd → werkt zonder errors voor anonieme gebruikers
- Bij login op nieuw device wordt de DB-data automatisch geladen
0.7.2 — 2026-05-28
Compare polish
- Locatie-selectors zijn nu
position: sticky; top: 92px op de compare-pagina → blijven zichtbaar bij scrollen door dagen - Lichte sky-cream fade-bg onder de selectors zodat content erachter niet door schemert
- Compare-row cards iets smaller met
margin: 0 .35rem aan beide zijden, padding van .85 naar .75rem - 1.5px subtiele border toegevoegd op compare-rows voor extra definitie
- Winner-ring opgetrokken van 2 → 3px, opacity .7 → .85 → duidelijker visueel
0.7.1 — 2026-05-28
Dropdown fixes + temperatuur-overrides
Locatie dropdown
- Klik op touch werkt weer: omdat
.loc-dropdown__item touch-action: none heeft (nodig voor drag), genereert de browser geen native click; pointerup synthetiseert nu een .click() op het juiste child element - Dropdown positionering: van
absolute (ankerd onder de marker-knop) naar fixed met left/right op de app-column → vult de volledige beschikbare breedte, nooit breder dan het scherm - Z-index opgetrokken naar 110 zodat dropdown boven alles staat
Temperatuur-overrides op iconen
zonnig-heet icoon vervangt zonnig wanneer max temp ≥ 30 °C (heldere of licht bewolkte lucht)zonnig-koud icoon vervangt zonnig wanneer max temp ≤ 0 °C met heldere lucht- Bijhorende happy labels: "snikheet", "tropisch", "volle bak zon" voor heet — "zonnig en vriezend", "winterzon" voor koud
- iconUsage geüpdatet: zonnig-heet/zonnig-koud niet meer als decoratief, eigen omschrijving
0.7.0 — 2026-05-28
Iconen-pagina + dropdown overlap fix
- Dropdown overlap fix: hamburger sluit locatie-dropdown bij open en omgekeerd
- Nieuw API endpoint
/api/icons.php retourneert lijst van alle iconen + WMO codes WeatherClient::iconUsage() static method levert de data- Nieuwe screen
#screen-icons met: - Sectie-titel "Iconen"
- Per icoon een card: thumbnail (76px) + naam + omschrijving + gele WMO-code-pills
- Decoratieve iconen (regenboog, sneeuwman, winderig, zonnig-heet, zonnig-koud, zonnig-wind) gemarkeerd met grijze "decoratief" pill
- Back-knop onderaan
- Menu item "Iconen" toegevoegd aan hamburger met SVG icoontje
- Header zichtbaar op home + compare + icons; verborgen op splash/onboarding
0.6.2 — 2026-05-28
Gedeelde header + back-button onderaan
- Header (logo + naam + locatie-knop + hamburger) is nu één gedeeld element bovenaan alle "app-pagina's"
<header id="app-header"> zit top-level in body, position: fixed, met fading sky-cream gradient onderaan- Showt enkel op home + compare; verborgen op splash + onboarding
- Screens (
screen--home, screen--compare) hebben padding-top: 130px om ruimte te maken - Compare-pagina: oude top-header verwijderd, "Vergelijker" als gecentreerde sectie-titel onder de header
- Compare back-button verhuisd van top naar onderaan boven de footer (dark navy pill met chevron)
0.6.1 — 2026-05-28
Spotify variatie + app-feel
PLAYLISTS constant geüpgraded van 1 playlist/groep naar 3-4 per groepsuggestionFor() accepteert $usedPlaylistNames + interne pickWithDedupe() helper rouleert beide pools (activities + playlists) zonder dubbels op één pagina- Voor regen bv: "Singin' in the Rain" / "Rainy Day Jazz" / "Cosy Rainy Day" / "Riders on the Storm"
- Double-tap zoom uitgeschakeld:
touch-action: manipulation op html/body user-select: none op body (inputs blijven selecteerbaar) → echt app-gevoel, geen tekstselectie bij tap
0.6.0 — 2026-05-28
Vergelijker + hamburger menu
Header herorganisatie
- Info-knop verdwenen
- Right-side actions volgorde:
[Locatie marker] → [Hamburger menu] - Hamburger geeft cream dropdown panel met menu items + SVG icoontjes
Hamburger menu items
- Vergelijker → opent compare-screen
- Mijn profiel → placeholder alert
- Over Sunly → placeholder alert
Compare screen (#screen-compare)
- Back-knop (chevron left) + titel "Vergelijker" gecentreerd
- Twee
<select> dropdowns naast elkaar met "vs" tussen → user kiest twee uit favorieten - Default selection: locatie A = huidige, B = volgende favoriet
- Per dag een 3-kolom rij: [icoon + max/min A] · [dagnaam + datum + verdict pill] · [icoon + max/min B]
- Winner-verdict in goudgele pill: bv "Barcelona +5°" of "gelijkspel" als delta = 0
- Winnende kant krijgt gouden border ring rond de icoon-side + coral max-temp kleur
- Async fetcht beide locaties parallel via
/api/weather.php
Onder de motorkap
screens.compare toegevoegd aan state machineopenCompareScreen() populates selects + switcht screenfetchWeather(location) helper geëxtraheerd uit oude home-fetch logica- Hamburger en location dropdowns sluiten allebei op outside-click
0.5.2 — 2026-05-28
Footer opkuis + tip dedupe
- "Installeer als app" knop verwijderd onderaan
- Oude "Sunly v0.1 — built …" footer verwijderd, alleen "The Happy Weather App." baseline blijft
WeatherClient::suggestionFor() accepteert nu een $used array zodat dezelfde tip niet twee keer op één pagina verschijnt; valt terug op seeded keuze als pool uitgeput
0.5.1 — 2026-05-28
DnD fix bugje opgelost: clicks werken weer
setPointerCapture verwijderd → child click handlers (.name, .icon, [data-remove]) krijgen weer normaal events- Pointermove/up nu via
document listeners i.p.v. capture - Drag-vs-click discriminator: bij echte drag wordt de volgende click 300ms geblokkeerd via capture-phase listener
- Drag activatie drempel van 4 → 5px voor net iets meer tap tolerance
0.5.0 — 2026-05-28
Nacht-thema + nieuwe iconen + DnD fix + footer baseline
Nieuwe iconen geïmporteerd via normaliseer-pipeline naar public/img/
weather/motregen.png — wolk met fijne druppels (drizzle, WMO 51/53/55)weather/hevige-regen.png — "het regent katten en honden" wolk (WMO 65, 82)brand/mascot-sleeping.png — slapende zon met nachtmutsbrand/logo-moon.png — Sunly maan-variant met regenboog
WeatherClient mapping aangepast
- Code 51/53/55 (drizzle) → icon
motregen (was regen) - Code 65 (heavy rain) → icon
hevige-regen - Code 82 (violent rain) → icon
hevige-regen
Nacht-thema
- Logo linksboven wisselt na 21u of voor 6u naar
logo-moon.png body.is-night class toegevoegd; achtergrond-gradient subtiel donkerder (warm sunset i.p.v. dag-cream)- Functie
applyNightTheme() in app.js, draait bij elke renderHome() - Sleeping mascot beschikbaar voor toekomstig gebruik (loading state 's nachts?)
Drag-and-drop bug fix
- Idempotent guard toegevoegd: alleen DOM reorder als doel-positie verschilt
- Voorkomt snap-back wanneer cursor tijdens slow-drag over een al-correcte boundary beweegt
Footer baseline
- "The Happy Weather App." in bold Fredoka, coral-punt accent
- Versie-string discreet eronder
Footer info zodat we kunnen herstarten na pause
- Alle versie/CSS/JS verwijzingen via
?v=<?= $v ?> in public/index.php - SW cache version in
public/service-worker.js (zelfde nummer) - localStorage key voor user =
sunly.user (incl. favorites array) - localStorage key voor install dismiss =
sunly.install.dismissed - Bij bump van assets: bump BEIDE
$v in index.php én CACHE_VERSION in sw.js, en voeg entry toe in CHANGELOG.md
0.4.2 — 2026-05-28
Tip-toggle in eigen kader
- "Tip voor [dag]" niet meer als losse tekst maar in een eigen dashed-border kaartje
- Lichtere achtergrond (
#FFF6E0) zodat het visueel onderscheidt van de actieve activity-card - Kleine coral "TIP" badge links + chevron rechts die roteert (180°) bij open
- Vloeiende rotate-animatie via cubic-bezier
0.4.1 — 2026-05-28
Activity-card tweaks
- Achtergrond niet meer puur cream maar warme peach-cream (
#FFEDC8) → past beter bij de gele page bg - Label "VANDAAG IS PERFECT VOOR" nu in coral-sunset (
#FF7C5C), iets groter en bolder - Spotify icoontje inline SVG (geen webfont dependency meer) → komt nu zichtbaar in de knop
- Spotify-knop rechts uitgelijnd
- Tekst iets groter: 1 → 1.05rem
0.4.0 — 2026-05-28
Activiteit-kader + Spotify per dag
- Per weertype 5 positieve activiteit-teksten (sunny, clear_night, partly_day, overcast, nevel, mist, drizzle, rain, snow, showers, storm, thunder, freezing)
- Per weertype een Spotify search-link met playlist-naam
- Activiteit wordt random gekozen met de datum als seed → consistent op reload, verschilt per dag
- Onder elke forecast-rij een activity-card
- Vandaag: automatisch open met dashed Sunly-border + Spotify pill in navy
- Overige dagen: ingeklapt, "Tip voor [dag]" knop met lampje-icoon, expand on tap
- Tabler icons webfont toegevoegd voor het Spotify icoon
0.3.3 — 2026-05-28
Label-variatie per dag
WeatherClient::describeCode() accepteert nu een $variantIdx parameter- Per weertype 4-6 happy labels gedefinieerd (zonnig: 6, regen: 6, sneeuw: 6, ...)
- Dag-index rotateert door de varianten → 3 opeenvolgende regen-dagen tonen "groei-weer / tuinregen / gulle regen" i.p.v. 3x "lichte miezer"
- Smaaktest: thunderstorm = "spektakel-weer / kosmisch concert / donderparade / vuurwerk-weer"
0.3.2 — 2026-05-28
Dropdown vergroot
- Dropdown breedte 280 → 380px
- Alle teksten en spacing in dropdown ~35% groter
- Marker-icoontje 22 → 30px, drag-handle 1.2 → 1.6rem
- Search input 1 → 1.35rem, item naam 1 → 1.35rem
- Suggest-lijst onder zoekveld 1 → 1.2rem met meer padding
- Border-radius items 12 → 16px
0.3.1 — 2026-05-28
Drag-and-drop op favorieten
- Elke favoriete locatie in de dropdown krijgt een drag-handle (⋮⋮)
- Pointer-event drag werkt op touch én desktop, geen externe library
- Tijdens drag: item licht op met box-shadow, gele highlight
- DOM reorder live tijdens slepen, volgorde wordt gepersist op pointerup
- Klikken op naam/icoon/× blijft gewoon werken (drag wordt pas actief vanaf 4px beweging)
0.3.0 — 2026-05-28
Locatie dropdown + favorieten
- Marker-knop rechtsboven opent dropdown panel (Sunly cream, pop-animatie)
- Bovenaan: search-veld om locatie te zoeken (autocomplete via /api/geocode.php)
- Klik op een suggestie = locatie toegevoegd aan favorieten + home schakelt erheen
- Lijst eronder toont alle favorieten, huidige locatie is gehighlight
- × per favoriet om te verwijderen
- localStorage user model uitgebreid met
favorites: []; migratie van oude user.location als eerste favoriet - Klik buiten dropdown sluit hem; ARIA expanded toegankelijk
0.2.2 — 2026-05-28
Temperatuur tweaks
- Max temp 1.6 → 1.85rem, min temp 1 → 1.2rem (allebei iets groter)
- Temperaturen volgen nu de kant-uitlijning van hun rij: rechts-uitgelijnd wanneer temps rechts staan, links wanneer ze links staan
0.2.1 — 2026-05-28
Datum + NL locatienamen + grotere UI
- Datum naast dagnaam in forecast: "Vandaag · 28 mei", "Morgen · 29 mei", "Donderdag · 30 mei"
- Open-Meteo geocoding switch van
language=en naar language=nl → Gent i.p.v. Ghent, Brussel i.p.v. Brussels - Logo links 54 → 108px, cirkelknoppen 48 → 58px, weericoon per rij 60 → 90px
- "Goeieavond" en voornaam groter, dagnaam 1.35rem bold, max temp 1.6rem bold
- Minder rij-padding zodat balken niet meer leeg ogen
- Versie-scheme gereset van v10 naar 0.2.1 (semver, voelt meer als pre-release)
0.2.0 — 2026-05-28
Home screen geïmplementeerd
WeatherClient::describeCode() mapt WMO codes naar Sunly icon-slug + happy Dutch label- "regen" → "groei-weer", "miezer" → "lichte miezer", "thunderstorm" → "spektakel-weer"
/api/weather.php retourneert 7-day forecast met icon + label per dag- Home HTML: logo + naam links, info/menu cirkels rechts, locatie + datum, lijst met alternerende icon-positie
app.js haalt weer op via API en rendert 7 dagen
0.1.5 — 2026-05-28
Plesk routing workaround
- Iconen verhuisd van
/icons/ naar /img/icons/ (Plesk 404'de op /icons/ om onbekende reden) - Manifest terug naar plain
manifest.webmanifest, apple-touch-icon zonder query string
0.1.4 — 2026-05-28
App-frame + install button styling
- Schermen geconstraind naar max 480px breed gecentreerd (mobile-style op desktop)
- Install button proper gestyled (was schermbreed)
- Safari-aware install button: toont inline instructie i.p.v. modal
0.1.3 — 2026-05-28
Bolder font + iOS PWA icoon
- Splash tagline + home greeting van Just Another Hand naar Fredoka 700
- Apple-touch-icon op solide gele achtergrond (no transparency voor iOS)
- 180/167/152/120 varianten voor alle iPhone/iPad sizes
0.1.2 — 2026-05-28
Splash + onboarding flow
- Drie schermen met state machine: splash (1.5s) → onboarding (eerste bezoek) → home
- Onboarding: naam + locatie autocomplete (via geocode API)
- localStorage persistance onder
sunly.user
0.1.1 — 2026-05-28
Sunly icon library
- 18 weericonen genormaliseerd naar
/img/weather/ (transparant, 512×512, geoptimaliseerd) - 3 brand mascot varianten in
/img/brand/ (logo, knipoog, thumb) - 4 UI iconen (info/marker/loading/heart) in
/img/ui/ - PWA app icons (192/512/maskable) gegenereerd
0.1.0 — 2026-05-28
Initial scaffold
- PHP backend (bootstrap, Database, WeatherClient, helpers)
- PWA frontend (manifest, service worker, base CSS/JS)
- MySQL schema, Plesk deployment docs
- Project rename Sunvy → Sunly