17 Commits

Author SHA1 Message Date
fa09f6cc09 Add admin_update_user API endpoint
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-09 18:15:06 +02:00
74c31f898c Add subcategory management to admin panel + Kala/Liha defaults
Categories now show their subcategories as tags with remove buttons,
plus an input field to add new subcategories directly from admin.
Added Kala and Liha as default subcategories for Reseptit.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 12:48:01 +02:00
44de6ef76d Add mbstring polyfill for Plesk PHP without mbstring extension
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 12:34:48 +02:00
68ee03ba21 Add error handling to API for better debugging on Plesk
- writeData now returns JSON error if file write fails
- Global error/exception handler returns JSON instead of blank 500

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 12:33:54 +02:00
30d57c80c0 Add user list to admin panel and validated/guest badges on posts
Admin panel: new "Käyttäjät" section showing all registered users with
post count, likes count, email and join date.

Posts: submissions by logged-in users show a green "Vahvistettu" badge,
while guest submissions show a random code (e.g. #L01U51) for tracking.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 12:02:50 +02:00
dcc1205244 Restore contact form and make it functional with email sending
- Replace mailto link with original contact form (name, email, message fields)
- Add contact API endpoint that sends email via mail() and saves to messages.json
- Restore .contact-form CSS styles and translation keys

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 11:28:26 +02:00
5dfbbacf39 Add user registration/login, persistent likes, category hiding, and contact email
- User auth: register (nickname + password + email), login, logout with PHP sessions
- Persistent likes: logged-in users' likes saved to users.json, anonymous via session
- "Tykkäämäni" filter button next to search — filter liked posts, combinable with search
- Hide empty/sparse categories from filter buttons until posts exist
- Replace broken contact form with simple mailto link (info@tykkaa.fi)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 11:08:22 +02:00
f14913cb4b Add 19 example posts to fill empty and sparse subcategories
Covers all previously empty subcategories:
kasityot/muut, puutarha/muut, sisustus/tekstiilit,
kirjat/tietokirjat, hyvinvointi/muut

Adds a 2nd post to thin subcategories:
kasityot/ommelu + askartelu, puutarha/kukat,
sisustus/diy + valaistus, kirjat/romaanit,
hyvinvointi/uni, lemmikit/koirat + kissat

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 09:51:45 +02:00
844e5c338b Restructure categories: merge knitting→käsityöt, kasvit→puutarha, remove matkustus & tips categories
- All 9 neulominen posts moved from 'knitting' to 'kasityot' with subcategory ['neulominen']
- crochet_basket moved to 'kasityot' with subcategory ['virkkaus']
- 3 kasvit posts moved to 'puutarha' with matching subcategories
- 3 matkustus posts (travel_lapland, travel_tallinn, travel_saaristo) removed
- 5 tips posts moved to 'hyvinvointi' (mieli/arki) or 'puutarha' (tip_balcony_garden)
- Added POST_CATEGORY_MAP constant for automatic live-server migration
- getOrInitPosts() now auto-migrates old category references and drops matkustus posts
- Updated code section comments to reflect new structure

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 09:27:44 +02:00
6be4414da5 Lisää 8 uutta kategoriaa ja esimerkkipostaukset (2-4 per kategoria)
Kategoriat: Käsityöt ✂️, Puutarha 🌱, Sisustus 🏠, Kirjat 📚,
            Hyvinvointi 🧘, Lemmikit 🐾, Kasvit 🪴, Matkustus ✈️
- Jokaisessa 2–4 esimerkkipostausta, yhteensä 26 uutta
- Tekijänimet vähennetty 5:een: Maija-Liisa, Tiina K., Riitta H., Sinikka, Pekka
- Pekka vain resepteissä (bolognese, lihapullat, karjalanpaisti)
- getOrInitCategories() lisää uudet kategoriat automaattisesti live-serverille

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 09:11:49 +02:00
22a03c10a0 Alikategoria-parannukset: monivalinta, Muut-kategoria, emoji pois administa
- api.php: lisätään 'Muut'-alikategoria Resepteihin, Neulomiseen ja Vinkkeihin
- api.php: getOrInitCategories() lisää puuttuvat alikategoriat automaattisesti
- admin.html: poistetaan emoji-kenttä (emoji tulee kategoriasta automaattisesti)
- admin.html: alikategoriat checkboxeina → voi valita useamman samanaikaisesti
- script.js: subcategory tallennetaan aina taulukkona
- script.js: filterPosts tukee pilkulla eroteltuja alikategorioita (postSubs.includes)
- script.js: renderCards kirjoittaa subcategory-arrayn pilkulla eroteltuna data-attribuuttiin

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 08:30:10 +02:00
993a137508 Korjaa alikategoria-ongelmat
- api.php: getOrInitCategories() päivittää automaattisesti subcategories-kentän
  olemassaolevaan categories.json-tiedostoon ilman manuaalista seedausta
- index.html: alikategoria-valitsin julkaisulomakkeeseen (näkyy kun kategorialla on alikategoriat)
- script.js: subcategory tallennetaan uuteen julkaisuun
- script.js: filterPosts null-turva + hakukenttä etsii myös alikategoria-id:llä
- script.js: updateSubcategoryPicker() päivittää alikategoriat kategorian vaihtuessa

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 08:24:24 +02:00
416db62e5c Logo, emoji pois lomakkeesta, alikategoria-bugifi
- logo.svg: SVG-tekstilogo (sydän + tykkää kursiivillaa + .fi cream)
  korvaa emoji+h1-yhdistelmän; .logo-svg CSS-luokka headeriin
- index.html: emoji-kenttä poistettu julkaisulomakkeesta;
  kategoria-select ilman erillistä paria
- script.js: emoji haetaan automaattisesti kategoriasta, ei lomakkeen
  kentästä; sub-emoji poistettu reset-listalta
- api.php: seed_categories-toiminto päivittää categories.json:n
  uusilla subcategories-tiedoilla
- admin.html: seedPosts() kutsuu myös seed_categories ensin →
  alikategoriat toimivat nyt heti "Lataa esimerkkisisältö" -napin jälkeen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 01:52:09 +02:00
f98aa72ca0 Alikategoriat: välilehdet kategorian alla
- defaultCategories(): subcategories-kenttä jokaisella kategorialla
  (reseptit: kasvis/vegaaniset/jälkiruuat, neulominen: aloittelijoille/
  vaatteet/kodin tekstiilit)
- 30 julkaisua merkitty subcategory-kentällä
- script.js: currentSubFilter-tila, setSubFilter(), renderSubFilters()
  renderöi alafiltterit kun kategoria on valittu; filterPosts() ottaa
  molemmat filtterit huomioon; cards saavat data-subcategory-attribuutin
- index.html: #subCategoryFilters-div kategoriafilttereiden alle
- style.css: .sub-filter-btn -tyyli (pienempi, tummanharmaa aktiiviasennossa)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 01:43:50 +02:00
4c5b275225 30 julkaisua oletussisältönä, seed-toiminto adminiin
- 17 reseptiä (letut, bolognese, keksit, kasviskeitto, banaanileipä,
  lohikeitto, korvapuustit, mansikkarahka, porkkana-inkiväärikeitto,
  pizza, mustikkapuuro, kanarisotto, mustikkapiirakka, avokadopasta,
  lihapullat, kukkakaalikeitto, karjalanpaisti)
- 9 neulomis-/virkkausohjetta
- 4 vinkkijulkaisua
- "Admin"-tekijät vaihdettu suomalaisiin nimimerkkeihin
- seed_posts-API-toiminto kirjoittaa oletussisällön posts.json:iin
- "Lataa esimerkkisisältö" -nappi admin-headerin oikeaan yläkulmaan

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 01:37:31 +02:00
Jukka Lampikoski
ae343212da Vaihda admin-salasana 2026-03-08 00:57:31 +02:00
Jukka Lampikoski
4248e69ab7 Initial commit: tykkää.fi sivusto
- Julkaisualusta resepteille, neuloville, vinkeille
- PHP-backend (api.php) palvelinpuolen datalle
- Admin-paneeli salasanasuojauksella
- Kuvaupload (upload.php)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 00:20:17 +02:00