Commit Graph

24 Commits

Author SHA1 Message Date
d24c4e5acb Limit author search to registered users only
Only validated (logged-in) users' names are searchable, not seed data authors.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 15:00:59 +02:00
55ff3d0f6e Add author name to search filter
Posts can now be found by searching the author/username.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 14:57:52 +02:00
734b67cbc7 Add shareable URLs for posts with copy link button
Hash-based URLs (#resepti/slug) allow sharing individual posts on social media.
Modal shows "Kopioi linkki" button, hash auto-opens post on page load.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 14:31:10 +02:00
03f8663520 Change Vahvistettu badge to Kirjautunut and bold logged-in author names
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 13:29:59 +02:00
d9ecfe4c97 Sort subcategories alphabetically with Muut always last
Applied sortSubcategories() to submission form picker, admin category
list, and admin subcategory checkboxes. Added the helper function to
admin.html since it's a standalone file.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 12:59:41 +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
69902035ab Add bot protection (honeypot + captcha) to registration form
Same spam protection as the post submission and comment forms:
hidden honeypot field and a simple math captcha question.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-08 11:53:40 +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
da6654638a Make entire post card clickable to open post
Clicking anywhere on a card opens the post modal. Like button and
like count have stopPropagation so they work independently. Added
cursor:pointer to card for visual affordance.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 09:39:23 +02:00
af55297452 Add image lightbox — click gallery image to view full-screen
Clicking any image in a post modal opens it full-screen with a dark
overlay. Close by clicking outside, the ✕ button, or pressing Escape.
Added zoom-in cursor and hover opacity to signal clickability.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 09:36:40 +02:00
7bb5924cf6 Remove recipe/post toggle — auto-detect type from category selection
When user selects Reseptit category, recipe fields (time, servings,
ingredients, steps) appear automatically. All other categories show
the post body field instead. Removed the manual toggle buttons and
cleaned up related CSS.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 09:33:22 +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
88e17d2b92 Hero-teksti takaisin vanhaan tyyliin, lisätty 'Jaa ja löydä' alkuun
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 08:18:00 +02:00
ebffa64111 Tekstit yhteisöhenkisiksi: ei enää oma blogi vaan avoin yhteisö
- Tagline: "Jaa asioita joista tykkäät"
- Hero: kuka tahansa voi jakaa
- About: avoin yhteisö kaikille
- Footer: "Avoin yhteisö kaikille"
- About-emoji 👩‍🍳🤝

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 08:15:23 +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
5fa93a49ad Kopioi ostoslista -nappi + tykkäysten localStorage-muisti
- Ainesluettelon vieressä 'Kopioi ostoslista' -nappi: kopioi
  julkaisun nimen ja ainesosat ostoslistamuodossa leikepöydälle
- Tykkäykset tallennetaan localStorage:en — muistetaan vaikka
  PHP-sessio vanhenisi (selain muistaa oman tykkäyshistoriansa)
- Latauksessa yhdistetään server-sessio ja localStorage

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 01:39:36 +02:00
bb9541d526 Parempi virheenkäsittely uploadissa: näytä palvelimen tarkka vastaus
- upload.php: ob_start()+error_reporting(0) estää PHP-varoitusten
  sekoittumisen JSON-vastaukseen; ob_clean() ennen jokaista echoa
- script.js + admin.html: lue vastaus ensin tekstinä, yritä sitten
  JSON-parsinta ja näytä tarkka virheviesti (HTTP-koodi + raakavastaus)
  jos JSON ei onnistu

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-08 01:20:20 +02:00
a1a7a2167f Näytä tarkka virheviesti uploadissa 2026-03-08 01:15:51 +02:00
9872093fb7 Nosta uploadraja 8 MB → 20 MB 2026-03-08 01:09:07 +02:00
d380884248 Automaattinen kuvanpienennys ja paremmat virheilmoitukset uploadissa 2026-03-08 01:06:45 +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