Files
tykkaa.fi/api.php
Jukka Lampikoski 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

944 lines
98 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
/**
* tykkää.fi — API backend
* Tallentaa julkaisut, kommentit, tykkäykset ja kategoriat JSON-tiedostoihin.
*/
session_start();
header('Content-Type: application/json; charset=UTF-8');
// ─── VAIHDA TÄMÄ SALASANA! ──────────────────────────────────────
define('ADMIN_PASSWORD', 'passus');
// ────────────────────────────────────────────────────────────────
define('DATA_DIR', __DIR__ . '/data/');
if (!is_dir(DATA_DIR)) mkdir(DATA_DIR, 0755, true);
$action = $_GET['action'] ?? '';
$body = [];
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$raw = file_get_contents('php://input');
$body = json_decode($raw, true) ?? [];
if (!$action) $action = $body['action'] ?? '';
}
// ─── Apufunktiot ───────────────────────────────────────────────
function readData(string $file, $default = []) {
$path = DATA_DIR . $file;
if (!file_exists($path)) return $default;
$d = json_decode(file_get_contents($path), true);
return $d !== null ? $d : $default;
}
function writeData(string $file, $data): void {
file_put_contents(
DATA_DIR . $file,
json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT)
);
}
function ok($data = []): void {
echo json_encode(array_merge(['ok' => true], $data));
exit;
}
function err(string $msg, int $code = 400): void {
http_response_code($code);
echo json_encode(['error' => $msg]);
exit;
}
function isAdmin(): bool {
return !empty($_SESSION['tykkaafi_admin']);
}
function isLoggedIn(): bool {
return !empty($_SESSION['tykkaafi_user_id']);
}
function getLoggedInUser(): ?array {
if (!isLoggedIn()) return null;
$users = readData('users.json', []);
foreach ($users as $u) {
if ($u['id'] === $_SESSION['tykkaafi_user_id']) return $u;
}
return null;
}
// ─── Oletusdata ────────────────────────────────────────────────
// Kategoriat jotka on poistettu — poistetaan automaattisesti live-serveriltä
const REMOVED_CATEGORIES = ['knitting', 'kasvit', 'matkustus', 'tips'];
// Vanhojen postausten kategoria-migraatiot (null = poista postaus)
const POST_CATEGORY_MAP = [
'knitting' => 'kasityot',
'kasvit' => 'puutarha',
'tips' => 'hyvinvointi',
'matkustus' => null,
];
function defaultCategories(): array {
return [
['id' => 'recipes', 'fi' => 'Reseptit', 'en' => 'Recipes', 'emoji' => '🍳',
'subcategories' => [
['id' => 'kasvis', 'fi' => 'Kasvis'],
['id' => 'vegaaniset', 'fi' => 'Vegaaniset'],
['id' => 'jalkiruuat', 'fi' => 'Jälkiruuat'],
['id' => 'muut', 'fi' => 'Muut'],
]],
['id' => 'kasityot', 'fi' => 'Käsityöt', 'en' => 'Crafts', 'emoji' => '✂️',
'subcategories' => [
['id' => 'neulominen', 'fi' => 'Neulominen'],
['id' => 'virkkaus', 'fi' => 'Virkkaus'],
['id' => 'ommelu', 'fi' => 'Ommelu'],
['id' => 'askartelu', 'fi' => 'Askartelu'],
['id' => 'muut', 'fi' => 'Muut'],
]],
['id' => 'puutarha', 'fi' => 'Puutarha & Kasvit', 'en' => 'Garden & Plants', 'emoji' => '🌱',
'subcategories' => [
['id' => 'huonekasvit', 'fi' => 'Huonekasvit'],
['id' => 'parvekeviljeily', 'fi' => 'Parvekeviljeily'],
['id' => 'vihannekset', 'fi' => 'Vihannekset'],
['id' => 'kukat', 'fi' => 'Kukat'],
['id' => 'muut', 'fi' => 'Muut'],
]],
['id' => 'sisustus', 'fi' => 'Sisustus', 'en' => 'Interior', 'emoji' => '🏠',
'subcategories' => [
['id' => 'diy', 'fi' => 'DIY'],
['id' => 'valaistus', 'fi' => 'Valaistus'],
['id' => 'tekstiilit', 'fi' => 'Tekstiilit'],
['id' => 'muut', 'fi' => 'Muut'],
]],
['id' => 'kirjat', 'fi' => 'Kirjat', 'en' => 'Books', 'emoji' => '📚',
'subcategories' => [
['id' => 'romaanit', 'fi' => 'Romaanit'],
['id' => 'tietokirjat', 'fi' => 'Tietokirjat'],
['id' => 'muut', 'fi' => 'Muut'],
]],
['id' => 'hyvinvointi', 'fi' => 'Hyvinvointi', 'en' => 'Wellbeing', 'emoji' => '🧘',
'subcategories' => [
['id' => 'liikunta', 'fi' => 'Liikunta'],
['id' => 'uni', 'fi' => 'Uni'],
['id' => 'mieli', 'fi' => 'Mieli'],
['id' => 'arki', 'fi' => 'Arki'],
['id' => 'muut', 'fi' => 'Muut'],
]],
['id' => 'lemmikit', 'fi' => 'Lemmikit', 'en' => 'Pets', 'emoji' => '🐾',
'subcategories' => [
['id' => 'koirat', 'fi' => 'Koirat'],
['id' => 'kissat', 'fi' => 'Kissat'],
['id' => 'muut', 'fi' => 'Muut'],
]],
];
}
function defaultPosts(): array {
return [
// ── RESEPTIT ──────────────────────────────────────────────
[
'id' => 'pancakes', 'emoji' => '🥞', 'title' => 'Kuohkeat letut',
'category' => 'recipes', 'author' => 'Maija-Liisa',
'time' => '20 min', 'servings' => '4 annosta', 'type' => 'recipe',
'desc' => 'Kultaisia, voisia lettuja, jotka sulavat suuhun. Täydellisiä laiskaan sunnuntaiaamuun.',
'ingredients' => ['1½ dl vehnäjauhoja','3½ tl leivinjauhetta','1 tl suolaa','1 rkl sokeria','3 dl maitoa','1 muna','3 rkl sulatettua voita','Voita tai öljyä paistamiseen'],
'steps' => ['Sekoita kulhossa jauhot, leivinjauhe, suola ja sokeri.','Tee keskelle kuoppa ja kaada sekaan maito, muna ja sulatettu voi.','Sekoita tasaiseksi — pienet paakut ovat ok.','Kuumenna pannua keskilämmöllä.','Kaada noin ¼ dl taikinaa per lettu.','Paista kunnes pintaan nousee kuplia, käännä ja paista kullanruskeaksi.','Tarjoile vaahterasiirapilla ja marjoilla.'],
],
[
'id' => 'bolognese', 'emoji' => '🍝', 'title' => 'Klassinen spagetti bolognese',
'category' => 'recipes', 'author' => 'Tiina K.',
'time' => '1 t 20 min', 'servings' => '6 annosta', 'type' => 'recipe',
'desc' => 'Runsas, hitaasti haudutettu lihamauste al dente -spagetin päällä. Ajaton italialainen klassikko.',
'ingredients' => ['500 g jauhelihaa','400 g spagettia','1 sipuli, hienonnettuna','3 valkosipulinkynttä','800 g murskattuja tomaatteja','2 dl punaviiniä','2 rkl tomaattipyrettä','Suolaa, pippuria, basilikaa, oreganoa','Parmesaanijuustoa tarjoiluun'],
'steps' => ['Kuullota sipuli ja valkosipuli oliiviöljyssä.','Ruskista jauheliha.','Lisää viini ja anna pelkistyä (5 min).','Lisää tomaatit ja mausteet.','Hauduta miedolla lämmöllä 1 tunti.','Keitä spagetti al denteksi.','Tarjoile parmesaanin kera.'],
],
[
'id' => 'cookies', 'emoji' => '🍪', 'title' => 'Suklaahippukeksit',
'category' => 'recipes', 'author' => 'Riitta H.',
'time' => '30 min', 'servings' => '24 keksiä', 'type' => 'recipe',
'desc' => 'Sitkeä sisältä, rapea reunoilta — täydellinen kotitekoinen keksi.',
'ingredients' => ['5½ dl vehnäjauhoja','1 tl ruokasoodaa','1 tl suolaa','225 g pehmeää voita','1½ dl sokeria','1½ dl ruskeaa sokeria','2 munaa','2 tl vaniljauutetta','4 dl suklaahippuja'],
'steps' => ['Kuumenna uuni 190°C.','Sekoita jauhot, sooda ja suola.','Vatkaa voi ja sokerit kuohkeaksi.','Lisää munat ja vanilja.','Yhdistä aineet ja lisää suklaa.','Lusikoi pellille.','Paista 911 min kullanruskeaksi.'],
],
[
'id' => 'soup', 'emoji' => '🍲', 'title' => 'Täyttävä kasviskeitto',
'category' => 'recipes', 'subcategory' => 'kasvis', 'author' => 'Sinikka',
'time' => '45 min', 'servings' => '4 annosta', 'type' => 'recipe',
'desc' => 'Lämmittävä kulhollinen paksuja kasviksia rikkaassa yrttiliemessä.',
'ingredients' => ['2 rkl oliiviöljyä','1 sipuli','3 valkosipulia','3 porkkanaa, siivuina','2 perunaa, kuutioina','1 kesäkurpitsa','400 g tomaattimurskaa','1½ l kasvislientä','Timjami, rosmariini, suola, pippuri'],
'steps' => ['Kuullota sipuli ja valkosipuli.','Lisää kasvikset ja sekoittele 5 min.','Kaada liemi ja tomaatit, lisää yrtit.','Hauduta 25 min.','Lisää kesäkurpitsa, keitä 10 min.','Mausta ja tarjoile.'],
],
[
'id' => 'banana_bread', 'emoji' => '🍌', 'title' => 'Mehevä banaanileipä',
'category' => 'recipes', 'author' => 'Tiina K.',
'time' => '1 t 10 min', 'servings' => '10 siivua', 'type' => 'recipe',
'desc' => 'Täydellinen tapa käyttää ylikypsät banaanit. Kosteaa, makeaa ja ihanan aromaattista.',
'ingredients' => ['3 ylikypsää banaania','2 dl vehnäjauhoja','1 tl ruokasoodaa','½ tl suolaa','75 g sulatettua voita','1½ dl sokeria','1 muna','1 tl vaniljauutetta','½ dl smetanaa tai piimää'],
'steps' => ['Kuumenna uuni 175°C ja voitele leipävuoka.','Soseuta banaanit haarukalla.','Sekoita jauhot, sooda ja suola kulhossa.','Yhdistä banaanisose, voi, sokeri, muna ja vanilja toisessa kulhossa.','Sekoita kuivat ja märät ainekset, lisää smetana.','Kaada taikina vuokaan.','Paista 6065 min, kunnes tikku tulee puhtaana ulos.','Anna jäähtyä ennen leikkaamista.'],
],
[
'id' => 'salmon_soup', 'emoji' => '🐟', 'title' => 'Perinteinen lohikeitto',
'category' => 'recipes', 'author' => 'Sinikka',
'time' => '40 min', 'servings' => '4 annosta', 'type' => 'recipe',
'desc' => 'Kermainen ja täyteläinen lohikeitto — suomalainen sieluruoka parhaimmillaan.',
'ingredients' => ['500 g lohifileetä, kuutioina','4 perunaa, kuutioina','2 porkkanaa, siivuina','1 purjo, siivuina','1 l kalaliemi tai vesi','2 dl kuohukermaa','Tilliä, suolaa, valkopippuria','Voita paistamiseen'],
'steps' => ['Kuullota purjo voissa kattilassa.','Lisää porkkanat ja perunat, paistele 3 min.','Kaada liemi ja keitä kasvikset kypsiksi (15 min).','Lisää lohikuutiot ja keitä 57 min.','Kaada kerma ja kuumenna (ei kiehauta).','Mausta tillillä, suolalla ja pippurilla.','Tarjoile ruisleivän kera.'],
],
[
'id' => 'cinnamon_rolls', 'emoji' => '🌀', 'title' => 'Korvapuustit',
'category' => 'recipes', 'author' => 'Riitta H.',
'time' => '2 t 30 min', 'servings' => '20 kpl', 'type' => 'recipe',
'desc' => 'Pehmeät, kanelilla ja kardemummalla maustetut korvapuustit — suomalaiseen kahvipöytään kuuluvat klassikoista klassisin.',
'ingredients' => ['5 dl maitoa','50 g hiivaa','1½ dl sokeria','1 tl suolaa','2 tl jauhettua kardemummaa','noin 13 dl vehnäjauhoja','150 g pehmeää voita','Täyte: 100 g pehmeää voita, 1 dl sokeria, 2 rkl kanelia','Munaa voiteluun, karkeaa sokeria päälle'],
'steps' => ['Lämmitä maito 37°C ja liuota siihen hiiva.','Lisää sokeri, suola, kardemumma ja puolet jauhoista, sekoita.','Lisää voi ja loput jauhot, vaivaa pehmeäksi taikinaksi.','Anna kohota liinan alla 45 min.','Kauli taikina suorakaiteeksi, levitä täyte.','Kääri rullaksi ja leikkaa viipaleiksi, asettele pellille.','Anna kohota 30 min, voitele munalla, ripottele sokeria.','Paista 200°C 1215 min kullanruskeaksi.'],
],
[
'id' => 'strawberry_quark', 'emoji' => '🍓', 'title' => 'Mansikkarahka',
'category' => 'recipes', 'subcategory' => 'jalkiruuat', 'author' => 'Tiina K.',
'time' => '15 min', 'servings' => '4 annosta', 'type' => 'recipe',
'desc' => 'Helppo ja raikas jälkiruoka kesän makeimmista mansikoista. Valmistuu vartin kymmenessä minuutissa!',
'ingredients' => ['500 g tuoreita mansikoita','400 g rahkaa tai maitorahkaa','2 dl kuohukermaa','3 rkl sokeria tai hunajaa','1 tl vaniljasokeria','Mintunlehtiä koristeluun'],
'steps' => ['Soseuta puolet mansikoista haarukalla tai sauvasekoittimella.','Vatkaa kerma löysäksi vaahdoksi.','Sekoita rahka, mansikasose, sokeri ja vaniljasokeri.','Nostele kermavaahto joukkoon.','Pilko loput mansikat paloiksi ja sekoita tai laita päälle.','Jäähdytä tunnin verran ennen tarjoilua.'],
],
[
'id' => 'carrot_ginger_soup', 'emoji' => '🥕', 'title' => 'Porkkana-inkiväärikeitto',
'category' => 'recipes', 'subcategory' => 'vegaaniset', 'author' => 'Maija-Liisa',
'time' => '35 min', 'servings' => '4 annosta', 'type' => 'recipe',
'desc' => 'Kirpeä inkivääri ja makea porkkana luovat täydellisen liiton tässä lämmittävässä keitossa.',
'ingredients' => ['700 g porkkanoita, siivuina','1 sipuli','3 valkosipulinkynttä','4 cm tuoretta inkivääriä, raastettuna','1 l kasvislientä','2 dl kookoskermaa','2 rkl oliiviöljyä','Suolaa, pippuria','Korianteria tai persiljaa tarjoiluun'],
'steps' => ['Kuullota sipuli ja valkosipuli öljyssä.','Lisää inkivääri, paistele 1 min.','Lisää porkkanat ja liemi.','Keitä 20 min kunnes porkkanat ovat pehmeitä.','Soseuta keitto sauvasekoittimella.','Lisää kookoskerma ja kuumenna.','Mausta ja tarjoile yrteillä koristeltuna.'],
],
[
'id' => 'homemade_pizza', 'emoji' => '🍕', 'title' => 'Kotitekoinen pizza',
'category' => 'recipes', 'author' => 'Sinikka',
'time' => '1 t 30 min', 'servings' => '2 pizzaa', 'type' => 'recipe',
'desc' => 'Rapea, ohut pohja ja täyteläinen tomaattikastike. Kotipizza voittaa aina.',
'ingredients' => ['3 dl lämmintä vettä','1 tl kuivahiivaa','1 tl sokeria','1 tl suolaa','5 dl vehnäjauhoja','2 rkl oliiviöljyä','Kastike: 400 g tomaattimurskaa, 2 valkosipulinkynttä, oreganoa','Täytteet: mozzarella, mitä haluat'],
'steps' => ['Liuota hiiva lämpimään veteen sokerin kera, odota 5 min.','Lisää suola, öljy ja jauhot, vaivaa 8 min.','Anna kohota 1 tunti.','Keitä tomaattikastike valkosipulilla ja oreganolla 10 min.','Kuumenna uuni 250°C.','Kauli taikina ohueksi, levitä kastike, lisää täytteet.','Paista 1012 min kunnes pohja on rapea.'],
],
[
'id' => 'oat_blueberry_porridge', 'emoji' => '🫐', 'title' => 'Kaura-mustikkapuuro',
'category' => 'recipes', 'subcategory' => 'vegaaniset', 'author' => 'Maija-Liisa',
'time' => '15 min', 'servings' => '2 annosta', 'type' => 'recipe',
'desc' => 'Täyttävä aamiainen, joka antaa energiaa koko aamulle. Mustikka tekee siitä erityisen.',
'ingredients' => ['2 dl kaurahiutaleita','5 dl maitoa tai kasvijuomaa','½ tl suolaa','1 rkl voita','2 dl mustikkaa (tuore tai pakaste)','Hunajaa tai vaahterasiirappia','Mantelilastuja päälle'],
'steps' => ['Mittaa kaura ja maito kattilaan.','Kuumenna sekoittaen keskilämmöllä.','Kun puuro sakenee (n. 8 min), lisää suola ja voi.','Nosta liedeltä, lisää mustikka.','Sekoita kevyesti — mustikka saa jäädä osittain ehjäksi.','Tarjoile hunajalla ja mantelilastuilla.'],
],
[
'id' => 'chicken_risotto', 'emoji' => '🍚', 'title' => 'Kermainen kanarisotto',
'category' => 'recipes', 'author' => 'Tiina K.',
'time' => '45 min', 'servings' => '4 annosta', 'type' => 'recipe',
'desc' => 'Italialaisittain valmistettu risotto, joka muuttuu kermaisen täydelliseksi kärsivällisyydellä.',
'ingredients' => ['300 g risottoriisiä (arborio)','2 kananrintaa, paloina','1 sipuli','3 valkosipulinkynttä','1 l kuumaa kanaliemi','1 dl valkoviiniä','50 g parmesaania, raastettuna','2 rkl voita','Oliiviöljyä, suolaa, pippuria, timjamia'],
'steps' => ['Ruskista kanapalat öljyssä, ota sivuun.','Kuullota sipuli ja valkosipuli samassa pannussa.','Lisää riisi, paistele 2 min.','Kaada viini, sekoita kunnes imeytyy.','Lisää kuumaa lientä kauhallinen kerrallaan, sekoita jatkuvasti.','Jatka 2025 min kunnes riisi on al dente.','Lisää kana, parmesaani ja voi. Mausta. Tarjoile.'],
],
[
'id' => 'blueberry_pie', 'emoji' => '🫐', 'title' => 'Mustikkapiirakka',
'category' => 'recipes', 'subcategory' => 'jalkiruuat', 'author' => 'Riitta H.',
'time' => '1 t 10 min', 'servings' => '8 palaa', 'type' => 'recipe',
'desc' => 'Mummolan klassikko — murea taikina ja täyteläinen mustikkatäyte. Parasta vaniljakastikkeen kera.',
'ingredients' => ['Pohja: 150 g voita, 1 dl sokeria, 1 muna, 3½ dl vehnäjauhoja, 1 tl leivinjauhetta','Täyte: 4 dl mustikkaa, ½ dl sokeria, 1 rkl perunajauhoja','Vaniljakastiketta tarjoiluun'],
'steps' => ['Kuumenna uuni 200°C.','Vatkaa voi ja sokeri kuohkeaksi, lisää muna.','Sekoita jauhot ja leivinjauhe joukkoon.','Painele ¾ taikinasta piirasvuoan pohjalle ja reunoille.','Sekoita mustikka, sokeri ja perunajauho, levitä täyte.','Murustele loppu taikina päälle.','Paista 3540 min kullanruskeaksi.'],
],
[
'id' => 'avocado_pasta', 'emoji' => '🥑', 'title' => 'Kermainen avokadopasta',
'category' => 'recipes', 'subcategory' => 'kasvis', 'author' => 'Sinikka',
'time' => '20 min', 'servings' => '2 annosta', 'type' => 'recipe',
'desc' => 'Nopea arkipäivän pasta, jonka kastike valmistuu siinä ajassa kuin pasta kiehuu.',
'ingredients' => ['200 g pastaa','2 kypsää avokadoa','1 valkosipulinkynsi','1 sitruunan mehu','2 rkl oliiviöljyä','Suolaa, pippuria','Kirsikkatomaatteja, basilikanlehtiä tarjoiluun','Parmesaania päälle'],
'steps' => ['Keitä pasta al denteksi, säästä 1 dl keitinvettä.','Soseuta avokado, valkosipuli, sitruunanmehu ja öljy tehosekoittimessa.','Lisää keitinvettä tarpeen mukaan tasaisen kastikkeen saamiseksi.','Mausta suolalla ja pippurilla.','Sekoita pasta ja kastike.','Koristele tomaateilla, basilikaalla ja parmesaanilla.'],
],
[
'id' => 'meatballs', 'emoji' => '🍖', 'title' => 'Lihapullat ruskeassa kastikkeessa',
'category' => 'recipes', 'author' => 'Pekka',
'time' => '1 t', 'servings' => '4 annosta', 'type' => 'recipe',
'desc' => 'Perinteiset kotimaiset lihapullat kermaisen ruskean kastikkeen kera. Tarjoile muusiperunan ja puolukan kera.',
'ingredients' => ['500 g jauhelihaa (naudan ja sian sekoitus)','1 dl korppujauhoja','1 dl maitoa','1 muna','1 sipuli, hienonnettuna','Suolaa, pippuria, maustepippuria','Kastike: 3 dl lihalientä, 1½ dl kermaa, 1 rkl vehnäjauhoja'],
'steps' => ['Liota korppujauhot maidossa.','Sekoita kaikki lihapullan aineet tasaiseksi massaksi.','Pyörittele märillä käsillä tasaisia palloja.','Ruskista lihapullat voissa pannulla.','Siirrä uunivuokaan ja paista 175°C 15 min.','Tee kastike: sekoita jauhot kermaan, lisää liemi, keitä paksuksi.','Tarjoile lihapullat kastikkeessa muusiperunan kera.'],
],
[
'id' => 'cauliflower_soup', 'emoji' => '🥦', 'title' => 'Samettinen kukkakaalikeitto',
'category' => 'recipes', 'subcategory' => 'kasvis', 'author' => 'Sinikka',
'time' => '30 min', 'servings' => '4 annosta', 'type' => 'recipe',
'desc' => 'Silky-sileä kukkakaalikeitto — yllättävän täyteläinen ja herkullinen arki-illalliseksi.',
'ingredients' => ['1 kukkakaali, paloina','1 sipuli','2 valkosipulinkynttä','1 l kasvislientä','2 dl kermaa','2 rkl oliiviöljyä','Suolaa, valkopippuria','Paahdettuja pähkinöitä tai yrttejä tarjoiluun'],
'steps' => ['Kuullota sipuli ja valkosipuli öljyssä.','Lisää kukkakaalipalat ja liemi.','Keitä 20 min kunnes kukkakaali on pehmeää.','Soseuta keitto silkinsileäksi.','Lisää kerma ja kuumenna.','Mausta suolalla ja valkopippurilla.','Tarjoile paahdettujen pähkinöiden kera.'],
],
[
'id' => 'karjalanpaisti', 'emoji' => '🥘', 'title' => 'Karjalanpaisti',
'category' => 'recipes', 'author' => 'Pekka',
'time' => '34 t', 'servings' => '6 annosta', 'type' => 'recipe',
'desc' => 'Perinteinen suomalainen pataruoka, joka hautuu uunissa itsekseen. Tuoksu täyttää koko kodin.',
'ingredients' => ['600 g naudanlihaa (esim. lapa), kuutioina','400 g sianlihaa (esim. niska), kuutioina','2 sipulia, lohkottuna','2 porkkanaa, siivuina','2 laakerinlehteä','10 maustepippuria','Suolaa','Vettä tai lihalientä'],
'steps' => ['Kuumenna uuni 175°C.','Laita lihat, sipulit ja porkkanat uunipastaan tai pataan.','Lisää laakerinlehdet ja maustepippurit.','Kaada vettä tai lientä juuri lihan verran.','Mausta suolalla.','Peitä kannella tai foliolla.','Hauduta uunissa 34 tuntia kunnes liha on ylikypsää ja irtoaa.','Tarjoile perunoiden ja puolukkahillon kera.'],
],
// ── KÄSITYÖT - Neulominen ────────────────────────────────
[
'id' => 'knitting_scarf', 'emoji' => '🧶', 'title' => 'Helppo huivi aloittelijalle',
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Riitta H.', 'type' => 'post',
'desc' => 'Neulo kaunis huivi muutamassa tunnissa — täydellinen ensimmäinen projekti!',
'body' => '<p><strong>Tarvitset:</strong></p><ul><li>Paksu lanka (noin 200 g)</li><li>Pyöröneulat nro 68</li></ul><p><strong>Ohje:</strong> Luo 20 silmukkaa. Neulo suoraan (edestakaisin oikein silmukoin) kunnes huivi on noin 150 cm pitkä. Päättele silmukat ja viimeistele päät. Valmis! 🎉</p><p>Vinkki: Paksuilla langoilla ja suurilla neuloilla saat huivista nopeasti valmiin, vaikka olisit aloittelija.</p>',
],
[
'id' => 'knitting_mittens', 'emoji' => '🧤', 'title' => 'Peukalolapaset aloittelijalle',
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Maija-Liisa', 'type' => 'post',
'desc' => 'Yksinkertaiset lapaset jotka valmistuvat viikonloppuna — lämpimät ja persoonalliset.',
'body' => '<p><strong>Tarvitset:</strong></p><ul><li>Villalankaa nro 45 (noin 100 g per lapanen)</li><li>Neulat nro 4</li><li>Pistomerkki</li></ul><p><strong>Ohje:</strong></p><ol><li>Luo 36 silmukkaa pyöröneulalle ja neulo 2×2-joustinta 8 cm.</li><li>Vaihda sileään neuleeseen ja lisää peukaloreikää varten 8 silmukkaa.</li><li>Neulo suora 15 cm peukaloreikään saakka.</li><li>Sulje yläpää vähentämällä 8 silmukkaa joka toisella kerroksella.</li><li>Neulo peukalo erillisistä silmukoista.</li></ol><p>Vinkki: Käytä värillistä lankaa tekemään kirjoneuleraita, niin lapasista tulee yksilölliset! 🎨</p>',
],
[
'id' => 'knitting_hat', 'emoji' => '🎩', 'title' => 'Yksinkertainen pipo',
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Sinikka', 'type' => 'post',
'desc' => 'Pipo syntyy parissa illassa — kiva lahja tai itselle talven varalle.',
'body' => '<p>Pipo on helppo ja nopea projekti, täydellinen aloittelijalle!</p><p><strong>Tarvitset:</strong></p><ul><li>Villalankaa, paksuus nro 45</li><li>Pyöröneulat 40 cm, nro 4</li></ul><p><strong>Ohje (koko S/M):</strong></p><ol><li>Luo 88 silmukkaa ja liitä rengasneuleeksi.</li><li>Neulo 2×2-joustinta 8 cm.</li><li>Vaihda sileään neuleeseen ja neulo 18 cm.</li><li>Pienennä: * 8 oikein, 2 yhteen * — toista koko kerrokselle.</li><li>Neulo 1 kerros suoraan. Toista pienennykset kunnes jäljellä on 9 silmukkaa.</li><li>Vedä lanka silmukoiden lävitse ja kiristä napakasti.</li></ol>',
],
[
'id' => 'knitting_socks', 'emoji' => '🧦', 'title' => 'Ensimmäiset villasukat',
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Maija-Liisa', 'type' => 'post',
'desc' => 'Sukat ovat hauskempia neuloa kuin luulet — ja miten hyvältä ne tuntuivatkaan jalassa!',
'body' => '<p>Villasukat ovat yksi neulomisen perinteisimmistä ja palkitsevimmista projekteista.</p><p><strong>Tarvikeet:</strong></p><ul><li>Sukkawool-lankaa (noin 100 g per pari)</li><li>5 sukkaneulaa, nro 2,5</li></ul><p><strong>Rakenne:</strong></p><ol><li><strong>Varsi:</strong> Luo 60 silmukkaa 5 neulalle. Neulo 2×2-joustinta 1520 cm.</li><li><strong>Kantapää:</strong> Neulo 30 silmukkaa edestakainen 30 kerrosta, tee kantapäämuoto lyhentämällä.</li><li><strong>Jalka:</strong> Nosta silmukat, neulo tasaisesti 1820 cm tai kenkänumeron mukaan.</li><li><strong>Varvas:</strong> Pienennä symmetrisesti kunnes 16 silmukkaa jäljellä. Sulje Kitchener-ompeleella.</li></ol><p>Ensimmäinen sukka näyttää hassulta — älä luovuta! Toinen onnistuu jo paremmin. 😄</p>',
],
[
'id' => 'knitting_basics', 'emoji' => '📚', 'title' => 'Neulomisen perusteet — näin aloitat',
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Riitta H.', 'type' => 'post',
'desc' => 'Oletko aina haaveillut neulomisesta mutta et tiedä mistä aloittaa? Tässä kaikki mitä tarvitset tietää.',
'body' => '<p>Neulominen on rentouttava harrastus, jonka voi aloittaa hyvin pienellä välineistöllä.</p><h3>Perusvälineet</h3><ul><li><strong>Neulat:</strong> Aloita paksuilla neuloilla (nro 68) — ne ovat helpompia käsitellä.</li><li><strong>Lanka:</strong> Paksu akryyliä tai villalankaa on aloittelijalle paras.</li><li><strong>Sakset ja lanka-neula</strong></li></ul><h3>Perustekniikat</h3><ol><li><strong>Silmukoiden luominen:</strong> Tee lenkkejä peukalonympäri tai käytä puikolle-tekniikkaa.</li><li><strong>Oikea silmukka:</strong> Pistä neula silmukan läpi takaa eteen, kierrä lanka ja vedä läpi.</li><li><strong>Nurja silmukka:</strong> Pistä neula silmukan läpi edestä taakse, kierrä lanka ja vedä läpi.</li></ol><p>Harjoittele ensin pienellä neliöllä ennen kuin alat varsinaiseen projektiin. Pian kädet muistavat liikkeet itsestään! 🧶</p>',
],
[
'id' => 'knitting_baby_hat', 'emoji' => '👶', 'title' => 'Vauvan neulottu pipo',
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Sinikka', 'type' => 'post',
'desc' => 'Söpö ja pehmeä pipo vauvalle — syntyy muutamassa tunnissa ja on heti käyttövalmis.',
'body' => '<p>Vauvan pipo on ihanteellinen lahjaprojekti — pieni, nopea ja aina tarpeellinen. Sopii noin 06 kk ikäiselle.</p><p><strong>Tarvikeet:</strong></p><ul><li>Pehmeää merino- tai bambuvillalankaa (lankavahvuus 23)</li><li>Pyöröneulat 40 cm, nro 33,5</li></ul><p><strong>Ohje:</strong></p><ol><li>Luo 72 silmukkaa ja liitä rengasneuleeksi.</li><li>Neulo 2×2-joustinta 3 cm.</li><li>Vaihda sileään neuleeseen, neulo 8 cm.</li><li>Pienennä: * 4 oikein, 2 yhteen * — toista. Neulo 1 kerros suoraan.</li><li>Jatka pienentämistä kunnes jäljellä on 12 silmukkaa. Vedä lanka läpi.</li></ol><p>💡 Valitse aina pehmeä, ihoa ärsyttämätön lanka vauvoille!</p>',
],
[
'id' => 'knitting_dishcloth', 'emoji' => '🫧', 'title' => 'Neulottu tiskiliina',
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Tiina K.', 'type' => 'post',
'desc' => 'Ekologinen vaihtoehto kertakäyttöisille tiskisienille. Valmistuu tunnissa ja kestää vuosia.',
'body' => '<p>Neulottu tiskiliina on täydellinen ensiprojekti — yksinkertainen, nopea ja hyödyllinen!</p><p><strong>Tarvikeet:</strong></p><ul><li>Puuvillalankakerä (noin 50 g)</li><li>Neulat nro 3,54</li></ul><p><strong>Ohje:</strong></p><ol><li>Luo 30 silmukkaa.</li><li>Neulo helmineuletta: * 1 oikein, 1 nurjin * — toista joka kerros.</li><li>Jatka kunnes tiskiliina on neliön muotoinen (noin 20×20 cm).</li><li>Päättele silmukat löysästi.</li></ol><p>Helmineule tarkoittaa, että molemmat puolet ovat samannäköisiä. Tee useampia eri väreissä! 🎨</p>',
],
[
'id' => 'knitting_cowl', 'emoji' => '🌀', 'title' => 'Kauluri talveen',
'category' => 'kasityot', 'subcategory' => ['neulominen'], 'author' => 'Sinikka', 'type' => 'post',
'desc' => 'Muhkea kauluri pitää lämpimänä ja on käytännöllisempi kuin huivi — ei liiku paikaltaan!',
'body' => '<p>Kauluri pysyy paikallaan eikä tipu, toisin kuin huivi. Tämä kauluri on nopea neuloa.</p><p><strong>Tarvikeet:</strong></p><ul><li>Paksua villalankaa, lankavahvuus 56, noin 150 g</li><li>Pyöröneulat 60 cm, nro 6</li></ul><p><strong>Ohje:</strong></p><ol><li>Luo 80 silmukkaa pyöröneulalle. Liitä rengasneuleeksi.</li><li>Merkitse kierroksen alku pistomerkillä.</li><li>Neulo 2×2-joustinta koko kierros.</li><li>Jatka kunnes kauluri on 30 cm pitkä.</li><li>Päättele joustinpäättelyllä (löysästi!).</li></ol><p>Joustinpäättely antaa kauniin ja joustavan reunuksen. ✨</p>',
],
[
'id' => 'crochet_basket', 'emoji' => '🧺', 'title' => 'Virkkaa kori langantähteistä',
'category' => 'kasityot', 'subcategory' => ['virkkaus'], 'author' => 'Tiina K.', 'type' => 'post',
'desc' => 'Käytä lankatähteet hyödyksi! Kori syntyy muutamassa tunnissa ja sopii kaikkeen säilyttämiseen.',
'body' => '<p>Tässä pääset eroon lankatähteistä luovasti. Yhdistä eri värejä raidalliseen koriin!</p><p><strong>Tarvikeet:</strong></p><ul><li>Paksu puuvilla- tai jutelajanka, eri värejä (yhteensä noin 200 g)</li><li>Virkkuukoukku nro 56</li></ul><p><strong>Ohje:</strong></p><ol><li><strong>Pohja:</strong> Luo taikusilmukka. Virkkaa 12 pistettä ensimmäiseen kierrokseen. Lisää joka toisella kierroksella 6 pistettä. Jatka 5 kierrosta kunnes halkaisija on noin 15 cm.</li><li><strong>Reunat:</strong> Virkkaa vain jokaisen pisteen takimmaisen silmukan lävitse (pystyy korin reunan). Virkkaa suoraan ylöspäin 1015 cm.</li><li><strong>Viimeistely:</strong> Päätä piste tiukasti ja piilota langat.</li></ol><p>💡 Paksuilla langoilla kori kasvaa nopeasti. Kokeile tehdä eri kokoisia koreja sarjana!</p>',
],
// ── HYVINVOINTI - vinkkejä ────────────────────────────────
[
'id' => 'tip_morning', 'emoji' => '💡', 'title' => 'Rauhallinen aamurutiini',
'category' => 'hyvinvointi', 'subcategory' => ['mieli'], 'author' => 'Maija-Liisa', 'type' => 'post',
'desc' => 'Pienet muutokset aamurutiiniin tekevät koko päivästä paremman.',
'body' => '<p>Kokeile näitä vinkkejä parempaan aamuun:</p><ul><li>🌅 Herää 15 minuuttia aiemmin kuin tarvitset</li><li>💧 Juo lasi vettä ennen kahvia</li><li>📵 Älä katso puhelinta heti herätessä</li><li>🚶 Pieni lenkki tai venyttely ennen päivää</li></ul><p>Pienet muutokset, iso vaikutus!</p>',
],
[
'id' => 'tip_digital_detox', 'emoji' => '📵', 'title' => 'Digipaasto — kokeile viikon ajan',
'category' => 'hyvinvointi', 'subcategory' => ['mieli'], 'author' => 'Riitta H.', 'type' => 'post',
'desc' => 'Vähennä ruutuaikaa ja huomaa miten elämä muuttuu. Ei tarvitse lopettaa kokonaan!',
'body' => '<p>Kokeilin viime kuussa viikon digipaastoa ja muutos oli hämmästyttävä. Tässä omat vinkkini:</p><h3>Käytännön vinkit</h3><ul><li>📱 <strong>Puhelin makuuhuoneen ulkopuolelle yöllä</strong> — heräät virkeämpänä</li><li>⏰ <strong>Ruutuaikaikkunat</strong> — esim. sähköposti vain klo 9 ja 15</li><li>🚫 <strong>Poista some-sovellukset puhelimesta</strong> ja käytä selainta tietokoneella</li><li>📚 <strong>Korvaa selaaminen kirjalla</strong> — 20 min ennen nukkumista</li></ul><p>Nukuin paremmin jo ensimmäisestä yöstä alkaen. Ja parasta: tajusin, miten paljon aikaa minulla oikeasti on!</p>',
],
[
'id' => 'tip_budgeting', 'emoji' => '💰', 'title' => 'Säästövinkit arkeen',
'category' => 'hyvinvointi', 'subcategory' => ['arki'], 'author' => 'Sinikka', 'type' => 'post',
'desc' => 'Pienet muutokset arjessa voivat säästää satoja euroja vuodessa — ilman että elämänlaatu kärsii.',
'body' => '<p>Olen oppinut säästämään arjessa ilman tinkimistä mieluisista asioista. Tässä parhaat vinkkini:</p><h3>Ruokaostokset</h3><ul><li>Tee kauppalista ennen kauppaan menoa ja pidä siitä kiinni</li><li>Käytä tarjoukset hyödyksi — pakasta erikoistarjouksessa ostettu liha</li><li>Kasvata omia yrttejä ikkunalaudalla</li><li>Kokkaa isompia eriä ja pakasta loput</li></ul><h3>Energia</h3><ul><li>LED-polttimot kaikkialle</li><li>Pyykinpesukone yöllä (halvempi sähkö)</li><li>Laske vesilämmitin 60°C → 55°C</li></ul><p>Ja muista: paras kauppa on se johon et mene lainkaan! 😄</p>',
],
[
'id' => 'tip_balcony_garden', 'emoji' => '🌱', 'title' => 'Kasvimaa parvekkeella',
'category' => 'puutarha', 'subcategory' => ['parvekeviljeily'], 'author' => 'Maija-Liisa', 'type' => 'post',
'desc' => 'Oma tomaatti tai yrtit parvekkeen laatikoista — helpompaa kuin luulet!',
'body' => '<p>Parvekeviljelyä voi harrastaa vaikka asuisi kerrostalossa. Tässä helppo aloitus:</p><h3>Mitä viljellä parvekkeella</h3><ul><li>🌿 <strong>Yrtit:</strong> basilika, persilja, ruohosipuli — helppoja ja käytännöllisiä</li><li>🍅 <strong>Tomaatit:</strong> parveketomaatit (pieni lajike) tuottavat hyvin pienessäkin ruukussa</li><li>🌶️ <strong>Paprikat:</strong> kasvavat hyvin ruukussa lämpimällä paikalla</li><li>🥬 <strong>Salaatit:</strong> kasvavat nopeasti ja voit korjata lehti kerrallaan</li></ul><h3>Tärkeimmät vinkit</h3><ul><li>Valitse tarpeeksi iso ruukku — liian pieni kuivuu nopeasti</li><li>Kastele säännöllisesti, kesällä ehkä päivittäin</li><li>Lannoita kerran viikossa nestemäisellä lannoitteella</li><li>Sijoita aurinkoisen paikan suojaan tuulelta</li></ul><p>Oman sadon maku on aivan eri kuin kaupan — kannattaa ehdottomasti kokeilla! 🌞</p>',
],
[
'id' => 'tip_eco_cleaning', 'emoji' => '♻️', 'title' => 'Ekologinen siivous',
'category' => 'hyvinvointi', 'subcategory' => ['arki'], 'author' => 'Sinikka', 'type' => 'post',
'desc' => 'Puhdista koti turvallisilla aineilla — parempi sinulle, parempi ympäristölle ja halvempaa!',
'body' => '<p>Tehokkain siivousaine löytyy usein kaapistasi: etikka, ruokasooda ja sitruuna tekevät ihmeitä.</p><h3>Perusreseptit</h3><ul><li>🧹 <strong>Yleispuhdistusaine:</strong> 1 osa etikkaa + 1 osa vettä + muutama tippa astianpesuainetta. Toimii lähes kaikkialla.</li><li>🪥 <strong>Hankausaine:</strong> Ruokasooda + muutama tippa nestesaippuaa. Ihanteellinen altaisiin ja uuniin.</li><li>🍋 <strong>Kalkkitahrat:</strong> Sitruunanpuolisko suoraan hanaan tai pinnoille. Anna vaikuttaa 10 min ja huuhtele.</li></ul><h3>Mitä kannattaa vältellä</h3><p>Klooripohjaiset aineet ovat tehokkaita mutta raskaita ympäristölle ja hengitysteille. Useimmissa kotitöissä pärjät ilman niitä. Säilytä ne vain tosi tarpeelliseen.</p>',
],
// ── KÄSITYÖT ─────────────────────────────────────────────
[
'id' => 'craft_crochet_heart', 'emoji' => '🧶', 'title' => 'Virkattu sydän — helppo lahja',
'category' => 'kasityot', 'subcategory' => ['virkkaus'], 'author' => 'Riitta H.', 'type' => 'post',
'desc' => 'Pieni virkattu sydän syntyy tunnissa ja on täydellinen lahja tai koriste.',
'body' => '<p>Tämä söpö sydän on helppo myös aloittelijalle!</p><p><strong>Tarvikeet:</strong></p><ul><li>Puuvillalankakerä, noin 20 g</li><li>Virkkuukoukku nro 3</li><li>Täytevanua</li></ul><p><strong>Ohje:</strong></p><ol><li>Luo taikusilmukka. Virkkaa 3 ketjusilmukkaa (= 1 pylväs).</li><li>Kierros 1: Virkkaa 2 pylvästä taikusilmukkaan, 3 ketjusilmukkaa, 2 pylvästä, 3 ketjua, 1 pylväs. Sulje.</li><li>Jatka kiertämällä ja lisäämällä pylväitä sydämen muodon mukaan — YouTube-tutoriaalit auttavat!</li><li>Tee kaksi samanlaista osaa, ompele yhteen ja täytä vanulla.</li></ol><p>💡 Kaksivärinen lanka tekee sydämestä erityisen kauniin!</p>',
],
[
'id' => 'craft_tote_bag', 'emoji' => '👜', 'title' => 'Ompele oma kangaskassi',
'category' => 'kasityot', 'subcategory' => ['ommelu'], 'author' => 'Tiina K.', 'type' => 'post',
'desc' => 'Ekologinen ja persoonallinen kangaskassi onnistuu jopa ilman ompelukonetta — mutta koneella nopeammin!',
'body' => '<p>Kangaskassi on helppo ensimmäinen ompelutyö. Tarvitset vain suorat saumat!</p><p><strong>Tarvikeet:</strong></p><ul><li>Kangaspalanen 40×80 cm (esim. puuvillaa)</li><li>Kaitale kantohihnoja varten: 2 kpl, 60 cm pitkiä</li><li>Ompelukone tai neula ja lanka</li></ul><p><strong>Ohje:</strong></p><ol><li>Taita kangas oikeat puolet vastakkain, leveyssuunnassa puoliksi.</li><li>Ompele sivusaumat ja pohja (jätä aukon yläreuna auki).</li><li>Viimeistele yläreuna kääntämällä noin 2 cm sisäänpäin ja ompele.</li><li>Kiinnitä kantohihnat ompelemalla lujasti yläreunaan, molemmille puolille.</li><li>Käännä oikea puoli ulos — valmis!</li></ol><p>Vinkki: Pese kangas ennen ompelemista, niin se ei enää kutistu käytössä. 🧺</p>',
],
[
'id' => 'craft_macrame', 'emoji' => '🎨', 'title' => 'Makramee-seinäkoriste',
'category' => 'kasityot', 'subcategory' => ['askartelu'], 'author' => 'Maija-Liisa', 'type' => 'post',
'desc' => 'Trendikäs makramee-koriste syntyy muutamassa tunnissa ja koristaa seinää vuosia.',
'body' => '<p>Makramee on solmimistaidetta joka näyttää vaikeammalta kuin onkaan!</p><p><strong>Tarvikeet:</strong></p><ul><li>Makrameelankaa (3-säikeistä puuvillaa), noin 50 m</li><li>Puinen keppi tai oksa, noin 30 cm</li><li>Sakset</li></ul><p><strong>Perussolmut:</strong></p><ul><li><strong>Tasainen solmu (Square knot):</strong> Käytä 4 lankaa — 2 ulompaa solmitaan 2 sisemmän ympäri vuorotellen.</li><li><strong>Puolisolmu:</strong> Kuten tasainen mutta vain toiseen suuntaan — syntyy kierre.</li></ul><p><strong>Ohje:</strong></p><ol><li>Leikkaa 8 lankaa, kukin 2 m pitkiä. Taita puoliksi ja ripusta kepille larkshead-solmulla.</li><li>Tee 3 tasaista solmua peräkkäin jokaisella 4 langan ryhmällä.</li><li>Vaihda ryhmiä: ota 2 lankaa viereisestä ryhmästä ja tee uusi solmu (luo verkkokuvion).</li><li>Jatka haluamasi pituuteen, viimeistele hajanaisilla langanpäillä.</li></ol>',
],
// ── PUUTARHA ─────────────────────────────────────────────
[
'id' => 'garden_tomatoes', 'emoji' => '🍅', 'title' => 'Tomaatit ruukussa — oma sato parvekkeelta',
'category' => 'puutarha', 'subcategory' => ['parvekeviljeily', 'vihannekset'], 'author' => 'Sinikka', 'type' => 'post',
'desc' => 'Parveketomaatti on helppo aloittelijan kasvi — ja oma sato maistuu aina kaupan tomaatilta paremmalta.',
'body' => '<p>Tomaatit viihtyvät mainiosti ruukussa, kunhan valitset parvekelajikkeen.</p><h3>Lajikkeen valinta</h3><p>Valitse <strong>parveketomaatti</strong> tai <strong>kirsikkatomaatti</strong> — ne kasvavat pieniksi ja sopivat ruukkuun. Isot beef-tomaatit tarvitsevat enemmän tilaa.</p><h3>Hoito-ohjeet</h3><ul><li>🌱 Istuta keväthallojen jälkeen (toukokuu) isoon ruukkuun (min. 15 litraa)</li><li>☀️ Tomaatti rakastaa aurinkoa — valitse valoisin paikka parvekkeella</li><li>💧 Kastele säännöllisesti, mutta älä anna seistä vedessä</li><li>🌿 Lannoita kerran viikossa tomaattilannoitteella kun kasvi alkaa kukkia</li><li>✂️ Poista sivuversot (hanganversot) kasvun aikana</li></ul><p>Ensimmäinen oma tomaatti on kuin pieni ihme! 🍅</p>',
],
[
'id' => 'garden_herbs', 'emoji' => '🌿', 'title' => 'Yrttipuutarha ikkunalaudalle',
'category' => 'puutarha', 'subcategory' => ['parvekeviljeily'], 'author' => 'Maija-Liisa', 'type' => 'post',
'desc' => 'Tuoreita yrttejä suoraan ikkunalaudalta — basilika, persilja ja ruohosipuli onnistuvat helposti.',
'body' => '<p>Yrttipuutarha on helpoin tapa aloittaa viljely. Pienikin ikkunalauta riittää!</p><h3>Parhaat yrtit aloittelijalle</h3><ul><li>🌿 <strong>Basilika</strong> — haluaa lämpöä ja valoa, pidä kosteana</li><li>🌱 <strong>Ruohosipuli</strong> — kestävin, sietää hieman varjoa</li><li>🪴 <strong>Persilja</strong> — kasvaa hitaasti mutta on kestävä</li><li>🍃 <strong>Minttu</strong> — kasvaa niin reippaasti, pidä omassa ruukussa!</li></ul><h3>Hoitovinkit</h3><ul><li>Käytä yrttiä säännöllisesti — leikkaaminen edistää kasvua</li><li>Kastele mieluiten alta (aseta lautaselle vettä)</li><li>Ikkunalaudalla etelään päin on paras paikka</li></ul><p>Tuore basilika pastaan tai ruohosipuli munakkaaseen — yksinkertaiset ilot ovat parhaita! 🌞</p>',
],
[
'id' => 'garden_strawberries', 'emoji' => '🍓', 'title' => 'Mansikat parvekkeen laatikoissa',
'category' => 'puutarha', 'subcategory' => ['parvekeviljeily', 'vihannekset'], 'author' => 'Riitta H.', 'type' => 'post',
'desc' => 'Mansikat viihtyvät hyvin parvekkeen laatikoissa — kesä on makulomaa kun omat mansikat kypsyvät.',
'body' => '<p>Mansikka on yksi parhaista parvekekasveista — helppohoitoinen ja tuottava!</p><h3>Istutus</h3><ul><li>Osta taimia puutarhamyymälästä toukokuussa</li><li>Käytä pitkää, matalaa laatikoita tai amppeliruukkuja</li><li>Sekoita multaan hieman hiekkaa — mansikka ei pidä seisovasta vedestä</li></ul><h3>Hoito</h3><ul><li>💧 Kastele päivittäin kuumalla säällä — multaa ei saa päästää kuivumaan</li><li>🌿 Lannoita kerran viikossa mansikkalannoitteella</li><li>✂️ Poista rönsyt (pitkät varret) ellei halua lisätä taimia</li></ul><p>Ensimmäinen oma mansikka suusta — sen makua ei unohda! 🍓</p>',
],
[
'id' => 'garden_sunflowers', 'emoji' => '🌻', 'title' => 'Auringonkukat — ilon kasvattajia',
'category' => 'puutarha', 'subcategory' => ['kukat'], 'author' => 'Tiina K.', 'type' => 'post',
'desc' => 'Auringonkukka on helpoin kukkakasvi — siemenet maan ja kesän lopussa on metrin taimi.',
'body' => '<p>Auringonkukka piristää koko naapuruston ja kasvaa lähes itsekseen!</p><h3>Kylvö ja kasvatus</h3><ul><li>Kylvä toukokuussa suoraan maahan tai isoon ruukkuun</li><li>Peitä siemen noin 2 cm mullalla</li><li>Kastele säännöllisesti, varsinkin idätysvaiheessa</li><li>Harvenna taimet niin ettei jää liian tiuhaan</li></ul><h3>Vinkit</h3><ul><li>☀️ Täysi aurinko on ehdoton — varjossa kasvi ei kuki kunnolla</li><li>🌬️ Tukipuu pitkille lajikkeille — tuuli kaataa helposti</li><li>🐝 Auringonkukka houkuttelee mehiläisiä — hyvä koko puutarhalle</li></ul><p>Elokuussa voit korjata siemenet — ne maistuvat paahdettuna! 🌻</p>',
],
// ── SISUSTUS ─────────────────────────────────────────────
[
'id' => 'deco_flea_market', 'emoji' => '🏺', 'title' => 'Kirpputorilöydöt sisustukseen',
'category' => 'sisustus', 'subcategory' => ['muut'], 'author' => 'Tiina K.', 'type' => 'post',
'desc' => 'Parhaat sisustushelmet löytyvät kirpputoreilta — vinkit mitä etsiä ja miten hyödyntää.',
'body' => '<p>Kirpputorit ovat aarreaittoja sisustajalle. Tässä vinkkini parhaiden löytöjen tekemiseen!</p><h3>Mitä kannattaa etsiä</h3><ul><li>🕯️ <strong>Kynttilänjalat ja maljakot</strong> — näistä maksetaan kaupoissa paljon, kirpparilla saa euroilla</li><li>🖼️ <strong>Taulut ja peilit</strong> — vanhat kultakehyksiset peilit ovat trendikkäitä</li><li>🧺 <strong>Korit ja säilytysastiat</strong> — rottinkikorit ovat aina käyttökelpoisia</li><li>🪑 <strong>Tuolit</strong> — vanha tuoli uudella verhoilukankaalla muuttuu täysin</li></ul><h3>Maalaamisen taito</h3><p>Lähes mikä tahansa kirpparilöytö paranee maalaamalla. Kreidemaali tarttuu hyvin ilman pohjamaaliakin ja luo kauniin mattapinnan. Suosikkivärejäni ovat valkoinen, savia ja tummanvihreä.</p><p>Parhaat löydöt odottavat sinua! 🔍</p>',
],
[
'id' => 'deco_candles', 'emoji' => '🕯️', 'title' => 'Kynttilät tunnelman luojina',
'category' => 'sisustus', 'subcategory' => ['valaistus'], 'author' => 'Maija-Liisa', 'type' => 'post',
'desc' => 'Kynttilät ovat halvin ja tehokkain tapa muuttaa huoneen tunnelma — vinkit niiden käyttöön.',
'body' => '<p>Kynttilät ovat sisustuksen salaisin ase. Tässä miten käytän niitä kotonani:</p><h3>Ryhmittely toimii</h3><p>Älä laita yksittäisiä kynttilöitä ympäri huonetta — ryhmittele niitä kolmen tai viiden ryhmiin. Eri korkuiset kynttilät samalla tasolla luovat kauniin asetelman.</p><h3>Kynttilänjalat</h3><ul><li>Lasiset ja metallisiaset yhdistyvät hyvin</li><li>Luonnolliset materiaalit (puu, kivi) sopivat skandinaaviseen tyyliin</li><li>Kirpparilta löytää parhaita!</li></ul><h3>Turvallisuus</h3><ul><li>Älä jätä kynttilää palaamaan ilman valvontaa</li><li>LED-kynttilät ovat hyvä vaihtoehto lapsiperheen kotiin</li></ul><p>Hämärässä kynttilänvalossa kaikki tuntuu paremmalta. 🕯️</p>',
],
[
'id' => 'deco_gallery_wall', 'emoji' => '🖼️', 'title' => 'Gallerioseinä kotiin — näin se onnistuu',
'category' => 'sisustus', 'subcategory' => ['diy'], 'author' => 'Sinikka', 'type' => 'post',
'desc' => 'Gallerioseinä on tehokkain tapa tuoda persoonallisuutta kotiin. Tässä ohjeet suunnitteluun ja toteutukseen.',
'body' => '<p>Gallerioseinä kuulostaa hankalalta mutta onnistuu helposti kun suunnittelee ensin!</p><h3>Suunnittelu</h3><ol><li>Valitse seinä — mieluiten suuri yhtenäinen pinta</li><li>Kokoa taulut, valokuvat, peilit — sekoita rohkeasti eri kokoja</li><li>Asettele ne ensin lattialle ja kokeile erilaisia järjestyksiä</li><li>Ota kuva puhelimella kun löydät mieluisan järjestyksen</li></ol><h3>Ripustus</h3><ul><li>Aloita keskimmäisestä taulusta, laajene siitä ulospäin</li><li>Käytä paperimalleja — leikkaa taulujen kokoiset paperit ja teippaa seinälle ensin</li><li>Command-strips ovat ystävällisiä seinälle (ei reikiä!)</li></ul><p>Oma gallerioseinä on kuin kotimuseo parhaista muistoistasi! 🖼️</p>',
],
// ── KIRJAT ───────────────────────────────────────────────
[
'id' => 'book_summer_reads', 'emoji' => '📖', 'title' => 'Kesän lukuvinkit — kirjoja jotka upposi',
'category' => 'kirjat', 'subcategory' => ['romaanit'], 'author' => 'Riitta H.', 'type' => 'post',
'desc' => 'Kolme kirjaa joihin upposi tänä kesänä — vaihtelevaa luettavaa eri mielentiloihin.',
'body' => '<p>Kesä on parasta lukuaikaa. Tässä kolme kirjaa jotka pysäyttivät minut:</p><h3>1. Jännitys</h3><p>Pohjoismainen jännityskirjallisuus ei petä koskaan. Tunnelma, kylmä ilmasto ja monimutkaiset hahmot tekevät siitä koukuttavaa. Etsi kirjastosta suomalaisia tai ruotsalaisia rikosromaaneja.</p><h3>2. Kevyt kesälukeminen</h3><p>Välillä tarvitaan kirja jossa on hyvä loppu. Romantiikka tai humoristinen kotimainen proosa sopii täydellisesti mökkilaiturin tunnelmaan.</p><h3>3. Tarina joka jäi mieleen</h3><p>Paras kesäkirja on se johon palaa ajatuksissaan vielä syksyllä. Sellainen löytyy usein yllättäen — anna kirjaston vinkata!</p><p>Hyvää lukuhetkeä! 📚</p>',
],
[
'id' => 'book_audiobooks', 'emoji' => '🎧', 'title' => 'Äänikirjat — luen nyt enemmän kuin koskaan',
'category' => 'kirjat', 'subcategory' => ['muut'], 'author' => 'Sinikka', 'type' => 'post',
'desc' => 'Äänikirjat muuttivat tapani "lukea" — kuuntelen nykyään keittiössä, lenkillä ja käsitöitä tehdessä.',
'body' => '<p>Äänikirjat ovat mullistaneet lukuharrastukseni. Tässä miksi suosittelen:</p><h3>Milloin kuuntelen</h3><ul><li>🍳 Ruoanlaittoa ja tiskailua</li><li>🚶 Kävelylenkeillä</li><li>🧶 Neulomisen tai virkkaamisen aikana</li><li>🚗 Automatkoilla</li></ul><h3>Palvelut</h3><ul><li><strong>Storytel</strong> — suuri suomenkielinen valikoima</li><li><strong>Kirjasto</strong> — monella kirjastolla on ilmaisia äänikirjoja (Ellibs, OverDrive)</li><li><strong>Spotify</strong> — löytyy myös joitain äänikirjoja</li></ul><p>Vinkki: Aloita hitaammalla puhenopeudella (0.9×) jos et ole tottunut. Sopeutut nopeasti ja voit nostaa tahdin! 🎧</p>',
],
// ── HYVINVOINTI ──────────────────────────────────────────
[
'id' => 'wellness_morning', 'emoji' => '🌅', 'title' => 'Aamurutiini joka oikeasti toimii',
'category' => 'hyvinvointi', 'subcategory' => ['mieli'], 'author' => 'Maija-Liisa', 'type' => 'post',
'desc' => 'Kolme pientä muutosta aamuun jotka muuttivat koko päivän laadun.',
'body' => '<p>Olen kokeillut monia aamurutiinejä. Tässä se mikä oikeasti toimii minulle:</p><h3>1. Puhelin pois ensimmäiseksi puoleksi tunniksi</h3><p>En katso puhelinta ennen kuin olen juonut kahvin. Tuntuu aluksi vaikealta, mutta mieli on paljon rauhallisempi koko aamun.</p><h3>2. Lasi vettä heti herätessä</h3><p>Ennen kahvia. Keho on kuivunut yön aikana ja vesi käynnistää aineenvaihdunnan.</p><h3>3. Jokin asia joka ilahduttaa</h3><p>Minulle se on rauhallinen kahvihetki ikkunan ääressä. Sinulle se voi olla lenkki, meditaatio tai hyvä podcast. Viisi minuuttia riittää.</p><p>Et tarvitse täydellistä aamurutiinia — tarvitset vain kolme pientä asiaa. 🌅</p>',
],
[
'id' => 'wellness_yoga', 'emoji' => '🧘', 'title' => 'Kotijoogaa aloittelijalle — 15 min päivässä',
'category' => 'hyvinvointi', 'subcategory' => ['liikunta'], 'author' => 'Tiina K.', 'type' => 'post',
'desc' => 'Et tarvitse joogastudiota tai erityisiä vaatteita — tässä helppo aloitus kotona.',
'body' => '<p>Jooga tuntuu pelottavalta aloittaa mutta on itse asiassa hyvin helppo! Tässä oma 15 min aloittelijan ohjelma:</p><h3>Alkuasento: Lapsen asento (Balasana)</h3><p>Polvillaan, istuen kantapäillä, kädet edessä lattialla. Hengitä syvään 5 kertaa. Rentouttaa selkää ja rauhoittaa mielen.</p><h3>Koira katsoo alas (Downward Dog)</h3><p>Kädet ja jalat lattialla, lantio ylös — muodostuu kolmio. Kantapäät kohti lattiaa (ei haittaa vaikka eivät yletä). 5 hengitystä.</p><h3>Soturi I (Warrior I)</h3><p>Hyvä asento alaraajoihin. Yksi jalka eteen, toinen taakse, kädet ylös. Pidä 5 hengitystä, vaihda puoli.</p><p>YouTube on täynnä ilmaisia aloittelijaohjeita — hae "jooga aloittelijoille suomi"! 🧘</p>',
],
[
'id' => 'wellness_sleep', 'emoji' => '😴', 'title' => 'Parempi uni — vinkit jotka toimivat',
'category' => 'hyvinvointi', 'subcategory' => ['uni'], 'author' => 'Riitta H.', 'type' => 'post',
'desc' => 'Nukuin huonosti vuosia ennen kuin opin nämä yksinkertaiset asiat.',
'body' => '<p>Uni on tärkein hyvinvoinnin pilari, mutta niin monelle se on haasteellista. Tässä mitä minulle toimi:</p><h3>Illalla</h3><ul><li>📵 <strong>Puhelin pois tunnin ennen nukkumaanmenoa</strong> — sininen valo häiritsee melatoniinia</li><li>🌡️ <strong>Viileä makuuhuone</strong> (1618°C on ihanteellinen)</li><li>📖 <strong>Kirja tai rauhoittava podcast</strong> — ei uutisia tai someselailua</li></ul><h3>Aamulla</h3><ul><li>☀️ <strong>Luonnonvalo heti herätessä</strong> — auttaa vuorokausirytmiä</li><li>⏰ <strong>Sama heräämisaika joka päivä</strong> — myös viikonloppuisin</li></ul><p>Nukkuminen ei parane yhdessä yössä, mutta jo viikon rutiinilla huomaa eron. 😴</p>',
],
[
'id' => 'wellness_forest', 'emoji' => '🌲', 'title' => 'Metsäkävelyjen taika',
'category' => 'hyvinvointi', 'subcategory' => ['liikunta', 'mieli'], 'author' => 'Sinikka', 'type' => 'post',
'desc' => 'Tutkimukset vahvistavat sen minkä jokainen suomalainen jo tietää: metsässä oleminen tekee hyvää.',
'body' => '<p>Olen alkanut käydä metsässä vähintään kerran viikossa, ja muutos hyvinvoinnissani on selvä.</p><h3>Miksi metsä auttaa?</h3><ul><li>🌿 Fytonsidit — puiden erittämät yhdisteet alentavat stressihormoneja</li><li>👁️ Vihreä väri rauhoittaa hermostoa</li><li>🔇 Hiljaisuus tai luonnon äänet antavat aivoille lepoa</li><li>🚶 Epätasainen maasto aktivoi kehoa eri tavalla kuin asfaltti</li></ul><h3>Miten lähden metsään?</h3><p>En lataa podcastia. En kuuntele musiikkia. Vain minä ja metsä. Aluksi hiljaisuus tuntuu oudolta — pian se tuntuu parhaimmalta asialta maailmassa.</p><p>Jopa 20 minuuttia metsässä laskee verenpainetta. Kokeile! 🌲</p>',
],
// ── LEMMIKIT ─────────────────────────────────────────────
[
'id' => 'pet_dog_training', 'emoji' => '🐕', 'title' => 'Koiran peruskoulutus kotona',
'category' => 'lemmikit', 'subcategory' => ['koirat'], 'author' => 'Maija-Liisa', 'type' => 'post',
'desc' => 'Istu, maahan ja paikka onnistuvat kotona ilman kouluttajaa — kärsivällisyys on avain.',
'body' => '<p>Kouluttanut koiriani itse jo 15 vuotta. Tässä parhaat peruskäskyt ja vinkit:</p><h3>Perusperiaatteet</h3><ul><li>✅ <strong>Positiivinen vahvistaminen</strong> — palkitse onnistumiset, älä rankaise epäonnistumisia</li><li>⏱️ <strong>Lyhyet harjoitustuokiot</strong> — 510 min kerrallaan, useita päivässä</li><li>🔄 <strong>Johdonmukaisuus</strong> — kaikki perheenjäsenet käyttävät samoja käskyjä</li></ul><h3>Istu-käsky</h3><ol><li>Pidä herkku nenän edessä</li><li>Vie herkku hitaasti koiran pään yli taaksepäin</li><li>Koira istuu automaattisesti seuratessaan herkkua</li><li>Sano "istu" juuri kun takamus osuu lattiaan</li><li>Palkitse heti!</li></ol><p>Koiran kouluttaminen on mukavaa yhdessäoloa. Nauti siitä! 🐕</p>',
],
[
'id' => 'pet_cat_enrichment', 'emoji' => '🐈', 'title' => 'Kissan elämää rikastuttavat aktiviteetit',
'category' => 'lemmikit', 'subcategory' => ['kissat'], 'author' => 'Riitta H.', 'type' => 'post',
'desc' => 'Sisäkissa tarvitsee virikkeita — nämä helpot ideat pitävät kissan virkeänä ja onnellisena.',
'body' => '<p>Sisäkissa elää pitkän ja terveen elämän, mutta tarvitsee virikkeita. Tässä mitä meillä toimii:</p><h3>Päivittäiset leikkituokiot</h3><ul><li>🪄 <strong>Sulkasauva</strong> — simuloi saaliin liikettä, aktivoi metsästysvaiston</li><li>🔴 <strong>Laserpiste</strong> — loistava liikuttaja, mutta lopeta aina oikeaan leluun niin kissa saa "saaliin"</li><li>📦 <strong>Pahvilaatikot</strong> — kissan suosikki, täysin ilmainen!</li></ul><h3>Ympäristön rikastaminen</h3><ul><li>🪟 Kissanikkuna tai hylly ikkunan eteen — kissa voi seurata lintuja</li><li>🌿 Kissanruoho (catnip tai valerian) — osa kissoista rakastaa</li><li>🗼 Kiipeilyteline — kissa haluaa olla korkealla</li></ul><p>15 minuuttia leikkiä päivässä tekee isoja ihmeitä! 🐈</p>',
],
[
'id' => 'pet_winter', 'emoji' => '❄️', 'title' => 'Lemmikki talvella — vinkit kylmään aikaan',
'category' => 'lemmikit', 'subcategory' => ['muut'], 'author' => 'Tiina K.', 'type' => 'post',
'desc' => 'Kylmä talvi tuo omat haasteensa lemmikkien hoidossa — nämä vinkit auttavat.',
'body' => '<p>Suomen talvi on rankka sekä meille että lemmikeillämme. Tässä mitä olen oppinut:</p><h3>Koiran talvihoito</h3><ul><li>🧥 Lyhytkarvaiset rodut tarvitsevat takin — ne eivät ole turhia hempeilyjä</li><li>🐾 Tarkista tassuista suolan aiheuttamat haavat lenkiltä palatessa</li><li>🛁 Pese tassu suolosta lenkiltä tultuasi, tai käytä tassusuojaa</li><li>⏱️ Lyhennä lenkki pakkasen kiristyessä alle -20°C</li></ul><h3>Kissan talvi</h3><ul><li>🔥 Varmista ettei kissa nuku liian lähellä lämpöpatteria — kuivattaa ihoa</li><li>💧 Lisää vesipisteitä — talvi-ilma on kuivaa</li></ul><p>Lemmikki ei valita — sinun tehtäväsi on huomata! ❄️</p>',
],
// ── PUUTARHA - Huonekasvit ───────────────────────────────
[
'id' => 'plant_beginners', 'emoji' => '🪴', 'title' => 'Helpoimmat huonekasvit — ei voi tappaa',
'category' => 'puutarha', 'subcategory' => ['huonekasvit'], 'author' => 'Sinikka', 'type' => 'post',
'desc' => 'Jos olet tappanu jokaisen kasvin jonka olet ostanut, nämä lajikkeet ovat sinulle.',
'body' => '<p>Kaikki voivat kasvattaa huonekasveja! Avain on valita oikea kasvi oikeaan paikkaan.</p><h3>Top 4 helpointa</h3><ul><li>🌵 <strong>Aloe vera</strong> — kastele kerran kahdessa viikossa, rakastaa aurinkoa. Täysin anteeksiantava!</li><li>💚 <strong>Pothos (viinikasvi)</strong> — viihtyy varjossakin, juontuu vedessä, kasvaa milloin tahansa</li><li>🪨 <strong>Mehikasvit</strong> — kastele kerran kuussa, älä enempää. Ikkunalauta riittää.</li><li>🌱 <strong>Sansevieria (anoppien kieli)</strong> — kestää kuivuutta, varjoa, lähes kaiken</li></ul><h3>Yleisin virhe</h3><p>Liikakastelu tappaa enemmän kasveja kuin kuivuus. Epäillessäsi — älä kastele. Enemmän on harvoin parempi. 💧</p>',
],
[
'id' => 'plant_monstera', 'emoji' => '🌿', 'title' => 'Monstera — kuningattaren hoito-opas',
'category' => 'puutarha', 'subcategory' => ['huonekasvit'], 'author' => 'Maija-Liisa', 'type' => 'post',
'desc' => 'Monstera deliciosa on tämän hetken suosituin huonekasvi — ja hyvästä syystä. Tässä kaikki mitä sen hoidosta pitää tietää.',
'body' => '<p>Monstera on upea kasvi johon rakastuin heti. Tässä mitä olen oppinut sen hoidosta:</p><h3>Valo</h3><p>Epäsuora kirkas valo on paras. Suora aurinko polttaa lehdet. Sopii hyvin ikkunan viereen etelä- tai länsiseinustalle.</p><h3>Kastelu</h3><p>Kastele kun ylimmäinen 5 cm multaa on kuivaa. Talvella harvemmin kuin kesällä. Käytä huoneenlämpöistä vettä.</p><h3>Lannoitus</h3><p>Kasvukaudella (maaliselokuu) kerran kuussa nesteylannoitteella. Talvella ei tarvita.</p><h3>Tukikeppi</h3><p>Monstera haluaa kiivetä. Sammalpatsas (moss pole) pitää kasvun pystysuorana ja lehdet kasvavat isommiksi!</p><p>Palkitsevin kasvi jonka minulla on. 🌿</p>',
],
[
'id' => 'plant_seeds', 'emoji' => '🌱', 'title' => 'Kasvien kasvatus siemenistä — kevätprojekti',
'category' => 'puutarha', 'subcategory' => ['vihannekset'], 'author' => 'Riitta H.', 'type' => 'post',
'desc' => 'Oman kasvin kasvattaminen siemenestä on tyydyttävintä mitä puutarhassa voi tehdä.',
'body' => '<p>Kun ensimmäinen oma taimi nousee mullasta, tuntuu kuin olisi luonut jotain ihmeellistä.</p><h3>Milloin aloittaa?</h3><p>Helmikuumaaliskuu on hyvä aika aloittaa sisäkylvöt. Taimet siirretään ulos toukokuussa hallojen jälkeen.</p><h3>Mitä tarvitaan?</h3><ul><li>🌱 Kylvömultaa — tavallinen multaa on liian raskas</li><li>☀️ Valoa — ikkunalauta tai kasvivalo</li><li>💧 Tasainen kosteus — älä päästä kylvöalustaa kuivumaan</li><li>🌡️ Lämpöä — 2022°C on ihanteellinen itämislämpötila</li></ul><h3>Helpot aloittelijakasvit siemenestä</h3><ul><li>🌻 Auringonkukka — nopea, iso ja näyttävä</li><li>🌿 Basilika — hyödyllinen ja nopea</li><li>🥬 Salaatti — kerätään jo 46 viikossa</li></ul><p>Aloita pienestä, nauti prosessista! 🌱</p>',
],
// ── KÄSITYÖT - Ommelu ────────────────────────────────────
[
'id' => 'craft_sew_apron', 'emoji' => '👘', 'title' => 'Ompele oma esiliina',
'category' => 'kasityot', 'subcategory' => ['ommelu'], 'author' => 'Riitta H.', 'type' => 'post',
'desc' => 'Kaunis ja käytännöllinen esiliina syntyy parissa tunnissa — täydellinen lahja tai itselle.',
'body' => '<p>Esiliina on yksi parhaimmista ensimmäisistä ommeluprojekteista: suorat saumat, näkyvä tulos, oikeasti hyödyllinen.</p><p><strong>Tarvikeet:</strong></p><ul><li>Kangas 60×80 cm (puuvilla tai pellava)</li><li>Nauha tai kanttinauha noin 2,5 m</li><li>Ompelukone ja lanka</li></ul><p><strong>Ohje:</strong></p><ol><li>Leikkaa esiliinan muoto: yläosa kapeampi (rintaosa), alaosa leveä. Tai tee yksinkertaisesti suorakaide.</li><li>Viimeistele kaikki reunat kääntämällä 1 cm ja ompelemalla, tai käytä kanttinauhaaan.</li><li>Ommel nauha yläreunaan kaulan ympäri meneväksi lenikiksi.</li><li>Kiinnitä vyönauhat molempiin sivuihin selän taakse solmittavaksi.</li></ol><p>Vinkki: Öljypohjainen kangas (wax cotton) on käytännöllinen keittiöesiliinaksi — pyyhkiytyy helposti. 👨‍🍳</p>',
],
// ── KÄSITYÖT - Askartelu ─────────────────────────────────
[
'id' => 'craft_painted_pot', 'emoji' => '🪣', 'title' => 'Koristele ruukku — helppo askarteluprojekti',
'category' => 'kasityot', 'subcategory' => ['askartelu'], 'author' => 'Sinikka', 'type' => 'post',
'desc' => 'Tavallisesta saviastiaruukusta tulee taideteos muutamalla pensselin vedolla — kokeile rohkeasti!',
'body' => '<p>Koristeltu ruukku on täydellinen askarteluprojekti: halpa, nopea ja lopputulos on aina käyttökelpoinen.</p><h3>Tarvikeet</h3><ul><li>Terrakottaruukku (saatavilla puutarhaliikkeistä edullisesti)</li><li>Akryylimaalia, 23 väriä</li><li>Pensselit, erivahvuisia</li><li>Maaliteippi (voit tehdä geometrisiä kuvioita)</li><li>Akryylilakka viimeistelyyn (kestävyyttä varten)</li></ul><h3>Tekniikat</h3><ul><li>🎨 <strong>Geometriset kuviot:</strong> Teippaa raidat tai kolmiot ja maalaa alueet. Irrota teippi kuivan maalin päältä.</li><li>🖌️ <strong>Ombre-efekti:</strong> Maalaa pohjalla tumma, häivytä vaaleampaan ylöspäin märkää maaliin.</li><li>🌿 <strong>Vapaapiirros:</strong> Maalaa lehtiä, pisteitä tai viivoja — ei tarvitse olla täydellinen!</li></ul><p>Lakka loppuun ulkokäyttöä varten. Sisällä pärjää ilmankin. Hauska tehdä samaa aikaan lasten kanssa! 🎨</p>',
],
// ── KÄSITYÖT - Muut ──────────────────────────────────────
[
'id' => 'craft_pressed_flowers', 'emoji' => '🌸', 'title' => 'Pressatut kukat — ikuistaa kesän muistot',
'category' => 'kasityot', 'subcategory' => ['muut'], 'author' => 'Maija-Liisa', 'type' => 'post',
'desc' => 'Kukkainen kesä kestää ikuisesti kun pressaat kukat. Upeita kortteihin, kehyksiin ja kirjanmerkkeihin.',
'body' => '<p>Kukkaisten pressaus on yksi vanhimmista käsityöperinteistä — ja se on helpompaa kuin luulet.</p><h3>Miten pressataan</h3><ol><li>Poimi kukkia aamulla kun kastepiste on kuivunut</li><li>Aseta kukat rautalehden päälle paksun kirjan sivujen väliin</li><li>Laita kirjan päälle lisää painoa (muita kirjoja)</li><li>Odota 24 viikkoa — älä kiiruhda!</li><li>Nosta varovasti — pressatut kukat ovat hauraita</li></ul><h3>Parhaat kukat pressaukseen</h3><ul><li>🌼 Päivänkakkarat — tasainen ja litteä muoto</li><li>🌸 Pansyt — väri säilyy hyvin</li><li>💐 Pelargoniat — kauniit terälehdet</li><li>🌿 Saniainen — upeat siluetit kortteihin</li></ul><p>Pressattuja kukkia voi liimata postikortteihin, kehystää, laminoida kirjanmerkiksi tai koristella kynttilöitä. 🌷</p>',
],
[
'id' => 'craft_recycled_art', 'emoji' => '♻️', 'title' => 'Taidetta kierrätysmateriaalista',
'category' => 'kasityot', 'subcategory' => ['muut'], 'author' => 'Tiina K.', 'type' => 'post',
'desc' => 'Roskasta syntyy taidetta — kokeile kierrätysmateriaaleista askartelua lasten kanssa tai yksin.',
'body' => '<p>Paras askartelumateriaali löytyy usein roskakorista tai kierrätyksestä. Tässä suosikkiprojektejani:</p><h3>Ideoita</h3><ul><li>🥫 <strong>Säilykepurkit kynätelineiksi:</strong> Poista etiketti, maalaa tai päällystä siistillä paperilla. Ryhmittele erikokoiset yhteen — näyttää designmaiselta!</li><li>📰 <strong>Sanomalehtipunos:</strong> Rullaa lehdet tiukoiksi puikoiksi, punos kori tai kulho. Lakkauksella kestää.</li><li>🧴 <strong>Shampoopullot kukkaruukuiksi:</strong> Leikkaa yläosa pois, maalaa, istuta mehikasveja.</li><li>🪵 <strong>Vanhat laudat tauluiksi:</strong> Hio, maalaa tai jätä luonnolliseksi, lisää koukku — rustiikkinen seinäkoriste.</li></ul><p>Kierrätysaskartelun idea on, ettei tulosten tarvitse olla täydellisiä — prosessi on yhtä tärkeä kuin lopputulos! 🎨</p>',
],
// ── PUUTARHA - Kukat ─────────────────────────────────────
[
'id' => 'garden_spring_bulbs', 'emoji' => '🌷', 'title' => 'Sipulikukat — istuta syksyllä, iloitse keväällä',
'category' => 'puutarha', 'subcategory' => ['kukat'], 'author' => 'Maija-Liisa', 'type' => 'post',
'desc' => 'Tulppaanit, narsissit ja krookukset: istuta lokakuussa ja unohda — ne kukkivat itsekseen keväällä.',
'body' => '<p>Sipulikukat ovat puutarhanpidon ihanteellisin juttu: teet työn syksyllä ja saat palkinnon keväällä.</p><h3>Parhaat lajit aloittelijalle</h3><ul><li>🌷 <strong>Tulppaani</strong> — klassikko, sadoittain lajikkeita, kukki huhtikuussa</li><li>💛 <strong>Narsissi</strong> — helppo, monivuotinen, tulee vuodesta toiseen</li><li>🟣 <strong>Krookus</strong> — pienen pieni mutta rohkea, kukki jo maaliskuussa</li><li>💜 <strong>Hyasintti</strong> — vahva tuoksu, hieno myös ruukussa sisällä</li></ul><h3>Istutusohje</h3><ol><li>Istuta lokakuussa ennen pakkasten tuloa</li><li>Syvyys: 3× sipulin halkaisija (tulppaani noin 15 cm)</li><li>Terävä pää ylöspäin</li><li>Peitä multa — kukinnon voi unohtaa talveksi</li></ol><p>Keväällä ensimmäiset versot ovat aina pieni ihme. 🌱</p>',
],
// ── PUUTARHA - Muut ──────────────────────────────────────
[
'id' => 'garden_compost', 'emoji' => '🍂', 'title' => 'Kompostointi kotona — multa maksutta',
'category' => 'puutarha', 'subcategory' => ['muut'], 'author' => 'Riitta H.', 'type' => 'post',
'desc' => 'Kompostointi on helpoin tapa tehdä puutarhalle hyvää ja vähentää kotitalousjätettä samaan aikaan.',
'body' => '<p>Olen kompostoinut kolme vuotta ja se on yksinkertaisesti paras asia mitä puutarhurina olen tehnyt.</p><h3>Mitä kompostiin?</h3><ul><li>✅ Kuoret, kahvinporot, teepussit, munankuoret</li><li>✅ Puutarhajäte: lehdet, ruohonleikkuu, naatit</li><li>✅ Sanomalehtipaperi pieneksi revittynä</li><li>❌ Liha, kala, maitotuotteet (houkuttelee tuholaisia)</li><li>❌ Sairaita kasveja (tauti leviää kompostiin)</li></ul><h3>Onnistumisen salaisuus</h3><p>Tasapaino märän ja kuivan välillä. Liian märkä haisee — lisää kuivaa (lehtiä, paperia). Liian kuiva ei hajoa — kostuta. Käännä kauhalla tai haravan varrella kuukausittain, niin happea pääsee sisään.</p><p>Valmis komposti on tummaa, mureavaa ja haisee metsältä — ei koskaan pahalta. Käytä kasvien lannoitteena tai mullite! 🌱</p>',
],
[
'id' => 'garden_winter_prep', 'emoji' => '🍁', 'title' => 'Puutarhan syyskunnostus — näin valmistaudut talveen',
'category' => 'puutarha', 'subcategory' => ['muut'], 'author' => 'Sinikka', 'type' => 'post',
'desc' => 'Muutama tunti syksyllä tekee suuren eron keväällä. Tärkeimmät tehtävät puutarhan talvettamiseen.',
'body' => '<p>Syyskunnostus kuulostaa isolta projektilta mutta muutamassa tunnissa pärjää hyvin. Tässä omat rutiinini:</p><h3>Tehtävät syys-lokakuussa</h3><ul><li>🌿 <strong>Leikkaa perennat</strong> — useimmat leikataan maahan, mutta jätä siemeninen versot linnuille</li><li>🍂 <strong>Haravointi</strong> — lehdet kompostiin tai hakkeeksi puiden juurelle suojaamaan</li><li>🧴 <strong>Ruukut sisään</strong> — terrakotta halkeilee pakkasessa, tuo sisälle tai suojaa</li><li>🧰 <strong>Puhdista välineet</strong> — poista multa, öljyä metalliset osat ruostumisen estämiseksi</li><li>🌷 <strong>Istuta sipulikukat</strong> (tulppaanit, narsissit) ennen pakkasen tuloa</li></ul><h3>Jätä tekemättä</h3><p>Älä leikkaa kaikkea siistiksi — korsien ja siemenpäiden alla talvehtii hyönteisiä. Luonnollinen puutarha on eläväinen myös talvella. ❄️</p>',
],
// ── SISUSTUS - Tekstiilit ─────────────────────────────────
[
'id' => 'deco_cushion_covers', 'emoji' => '🛋️', 'title' => 'Vaihda tyynynpäälliset — halvin tapa uudistaa huone',
'category' => 'sisustus', 'subcategory' => ['tekstiilit'], 'author' => 'Tiina K.', 'type' => 'post',
'desc' => 'Uudet tyynynpäälliset muuttavat olohuoneen tunnelman kymmenessä minuutissa. Vinkit väreihin ja materiaaleihin.',
'body' => '<p>Jos haluat uudistaa olohuonetta ilman remonttia, tyynynpäälliset ovat halvin ja nopein tapa.</p><h3>Materiaalit</h3><ul><li>🌿 <strong>Pellava</strong> — luonnollinen, rento skandinaavinen tunnelma. Rypistyykin — se kuuluu asiaan.</li><li>🧶 <strong>Sametti</strong> — ylellinen ja lämmin, toimii syyskaudella</li><li>🪡 <strong>Puuvilla</strong> — helppohoitoinen, edullinen, kestää pesun</li></ul><h3>Värien valinta</h3><p>Ota yksi väri huoneesta (esim. maton sävy) ja toista se tyynyissä. Kolme tyynynpäällistä: 2 samaa väriä + 1 erilainen on helppo ja toimiva yhdistelmä.</p><h3>Koot</h3><p>50×50 cm on yleisin. Osta täyte pyöreänä — pehmeä täyte tekee tyynyistä pulleat ja houkuttelevan näköiset. Litteä täyte näyttää halvalta. 🛋️</p>',
],
[
'id' => 'deco_curtains', 'emoji' => '🪟', 'title' => 'Oikeat verhot muuttavat huoneen täysin',
'category' => 'sisustus', 'subcategory' => ['tekstiilit'], 'author' => 'Maija-Liisa', 'type' => 'post',
'desc' => 'Verhot ovat sisustuksen aliarvostetuimpia elementtejä. Tässä miten valitset oikeat ja ripustat ne oikein.',
'body' => '<p>Verhot voivat tehdä tai rikkoa huoneen tunnelman. Yksi virhe toistuu lähes joka kodissa — verhot ripustetaan liian alas ja ne ovat liian lyhyet.</p><h3>Kultainen sääntö</h3><p><strong>Ripusta tanko mahdollisimman lähelle kattoa</strong> (510 cm katon alla). <strong>Verhot lattiapitkät tai juuri lattian yläpuolella.</strong> Tämä tekee huoneesta korkeamman näköisen vaikka se ei olisi.</p><h3>Verhon leveys</h3><p>Verhotangon tulisi olla 3060 cm leveämpi kuin ikkuna molemmin puolin. Näin verhot eivät peitä ikkunaa valoisana aikana ja tila näyttää suuremmalta.</p><h3>Materiaalit</h3><ul><li>☀️ <strong>Ohuet pellavat/voilee</strong> — päästävät valoa, kauniit päivällä</li><li>🌙 <strong>Paksumpi kangas</strong> — pimentää, pitää lämpimän, yksityisyys</li></ul><p>Pienet muutokset, iso vaikutus! 🪟</p>',
],
// ── SISUSTUS - DIY ────────────────────────────────────────
[
'id' => 'deco_diy_shelf', 'emoji' => '🪵', 'title' => 'Tee oma seinähylly — helppo aloittelijaprojekti',
'category' => 'sisustus', 'subcategory' => ['diy'], 'author' => 'Sinikka', 'type' => 'post',
'desc' => 'Yksinkertainen seinähylly syntyy parissa tunnissa minimaalisilla välineillä — ja pitää vuosikymmeniä.',
'body' => '<p>Ensimmäinen oma puutyöprojektini oli seinähylly. Se roikkuu vieläkin seinällä, seitsemän vuotta myöhemmin.</p><h3>Tarvikeet</h3><ul><li>Lauta: mäntyä tai lehtikuusta 20×2 cm, haluamasi pituinen</li><li>Hyllykannakkeet (23 kpl riippuen pituudesta)</li><li>Ruuvit + puutappeja seinään kiinnitykseen</li><li>Pora, vatupassi, ruuvimeisseli</li></ul><h3>Ohje</h3><ol><li>Hio lauta 120-hiomapaperilla, pyöristä reunat.</li><li>Maalaa tai öljyä lauta (pellavaöljy antaa kauniin luonnollisen sävyn).</li><li>Merkitse hyllykannakkeiden paikat vatupassia käyttäen — tämä on tärkein vaihe!</li><li>Poraa kiinnitysreiät, asenna kiinnikkeet seinäänpuutapeilla.</li><li>Ruuvaa lauta kannakkeiden päälle.</li></ol><p>Seinähylly kestää parhaiten kun kiinnität sen seinärakenteeseen tai käytät oikeita puutappeja. Kysy rautakaupasta neuvoa! 🪛</p>',
],
// ── SISUSTUS - Valaistus ──────────────────────────────────
[
'id' => 'deco_fairy_lights', 'emoji' => '✨', 'title' => 'Valosarjat sisätiloihin — tunnelmaa ympäri vuoden',
'category' => 'sisustus', 'subcategory' => ['valaistus'], 'author' => 'Riitta H.', 'type' => 'post',
'desc' => 'Valosarjat eivät ole vain joulukoristelu — oikein käytettynä ne luovat pysyvää tunnelmaa kotiin.',
'body' => '<p>Olen pitänyt valosarjat esillä ympäri vuoden jo kolme vuotta. Ei ole ainoa joka on löytänyt tämän!</p><h3>Missä toimii hyvin</h3><ul><li>🛏️ <strong>Makuuhuone</strong> — sängyn päätyyn tai ikkunakarmiin, sopii yövaloksi</li><li>📚 <strong>Hyllyllä kirjojen joukossa</strong> — peittää takalevyn ja tuo syvyyttä</li><li>🪟 <strong>Ikkunalaudan reunus</strong> — kaunis ulkoa katsottuna pimeällä</li><li>🖼️ <strong>Taustana taulukokonaisuuden takana</strong> — korostaa gallerioseinää</li></ul><h3>Vinkit</h3><ul><li>LED-valosarjat ovat energiatehokkaat ja pysyvät viileinä</li><li>Lämmin valkoinen (27003000 K) on tunnelmallisempi kuin kylmä valkoinen</li><li>Ajastin helpottaa — ei tarvitse muistaa sammuttaa</li></ul><p>Pimeänä syysiltana niiden valo on korvaamatonta! ✨</p>',
],
// ── KIRJAT - Romaanit ────────────────────────────────────
[
'id' => 'book_autumn_reads', 'emoji' => '🍂', 'title' => 'Syyskauden lukuvinkit — kirjoja takkavalkean äärelle',
'category' => 'kirjat', 'subcategory' => ['romaanit'], 'author' => 'Maija-Liisa', 'type' => 'post',
'desc' => 'Syysillan paras seura on hyvä kirja. Tässä kolme teemaa jotka sopivat täydellisesti tähän vuodenaikaan.',
'body' => '<p>Jokin syksyssä tekee lukemisesta erityistä. Tässä kolme lukuteemaa syksyyn:</p><h3>Pohjoismainen noir</h3><p>Synkkä sää ulkona, jännittävä murhamysteeri kädessä — täydellinen yhdistelmä. Pohjoismaiset kirjailijat osaavat tunnelman. Etsi kirjastosta suomalaisia, ruotsalaisia tai norjalaisia dekkareita.</p><h3>Tarina joka vie mukanaan</h3><p>Paksu romaani jossa maailmaan voi uppoutua päiviksi. Historiallinen fiktio toimii tähän erinomaisesti — opit samalla ja tarina kuljettaa. Kysy kirjastovirkailijalta suosituksia.</p><h3>Helppolukuinen huumori</h3><p>Ei aina tarvita raskasta luettavaa. Hauska romaani tai kotimainen huumori piristää pimeitä syysiltoja. Nauraa saa myös yksin! 😄</p><p>Parasta syksyä — kahvi, viltti ja kirja. 📚</p>',
],
// ── KIRJAT - Tietokirjat ─────────────────────────────────
[
'id' => 'book_nonfiction_picks', 'emoji' => '🧠', 'title' => 'Tietokirjoja jotka muuttivat tapani ajatella',
'category' => 'kirjat', 'subcategory' => ['tietokirjat'], 'author' => 'Sinikka', 'type' => 'post',
'desc' => 'Parhaat tietokirjat eivät vain opeta faktoja — ne muuttavat tavan katsoa maailmaa. Tässä omat suosikkini.',
'body' => '<p>Olen lukenut tietokirjoja innolla jo vuosia. Nämä kolme teemaa ovat antaneet eniten:</p><h3>Psykologia ja käyttäytyminen</h3><p>Kirjat ihmismielen toiminnasta ovat aina ajankohtaisia. Ne selittävät miksi teemme valintoja joita teemme, miksi muutokset ovat vaikeita, ja miten tottumukset syntyvät. Tätä aihetta käsittelevät kirjat ovat usein myös kirjoitettu selkeästi ja lukevat helposti.</p><h3>Luonto ja ympäristö</h3><p>Luontodokumentit televisiossa ovat hienoja — mutta kirjoissa pääsee vielä syvemmälle. Puiden elämää, lintujen vaellusta tai meren salaisuuksia käsittelevät tietokirjat ovat usein kaunokirjallisuutta kauniimmin kirjoitettuja.</p><h3>Historia läheltä</h3><p>Tavallisten ihmisten historiat ovat kiehtovampia kuin kuninkaiden elämäkerrat. Etsi muistelmia tai mikrohistoriaa — arjen historia on meistä jokaisen historiaa.</p><p>Kirjasto on paras paikka aloittaa. Kysy suosituksia — kirjastoammattilaiset ovat alan parhaita asiantuntijoita! 📚</p>',
],
[
'id' => 'book_history', 'emoji' => '📜', 'title' => 'Historia kertomuksena — tietokirjoja jotka vievät mukanaan',
'category' => 'kirjat', 'subcategory' => ['tietokirjat'], 'author' => 'Riitta H.', 'type' => 'post',
'desc' => 'Historiatietokirjat voivat olla yhtä koukuttavia kuin dekkarit — kun löytää oikeat kirjat.',
'body' => '<p>Koulussa historia tuntui tylsältä. Sitten löysin tietokirjat jotka kertoivat historian ihmisten kautta — ja koukku oli selvä.</p><h3>Mitä etsiä</h3><p>Paras historiatietokirja seuraa ihmisiä, ei tapahtumia. Kun historia kerrotaan yksittäisen henkilön silmistä — tavallisen ihmisen, ei sotaherran — se muuttuu eläväksi.</p><h3>Teemoja joista pidän</h3><ul><li>🇫🇮 <strong>Suomen historia</strong> — sota-ajan arki, siirtolaisten tarinat, kaupungistuminen</li><li>⚓ <strong>Merimatkat ja löytöretket</strong> — inhimilliset tarinat äärimmäisissä olosuhteissa</li><li>🏙️ <strong>Kaupunkien historia</strong> — miten tutut paikat ovat muuttuneet</li></ul><p>Hyvä historiatietokirja ei päästä irti ennen kuin on valmis — ja jälkeen haluaa heti lisää. 📜</p>',
],
// ── HYVINVOINTI - Uni ────────────────────────────────────
[
'id' => 'wellness_power_nap', 'emoji' => '😴', 'title' => 'Päiväunet oikein — 20 minuuttia virkistää täydellisesti',
'category' => 'hyvinvointi', 'subcategory' => ['uni'], 'author' => 'Riitta H.', 'type' => 'post',
'desc' => 'Lyhyet päiväunet ovat tieteellisesti todistettu hyvinvoinnin työkalu — kunhan tietää miten ne otetaan.',
'body' => '<p>Päiväunet eivät ole laiskuutta — ne ovat tehokkuustyökalu. Tässä miten hyödyntää ne oikein:</p><h3>Täydellinen kesto: 1020 minuuttia</h3><p>Alle 20 minuuttia ja et ehdi mennä syväuneen — herääminen on helppoa ja tunnet olosi virkistyneeksi. Yli 30 minuuttia ja saatat herätä sekavana (unihorroksessa) ja yöunet kärsivät.</p><h3>Paras ajoitus</h3><p>Kello 1315 on luonnollinen energiatason lasku useimmille. Silloin lyhyt tauko toimii parhaiten. Älä nuku myöhemmin kuin kello 15, tai yöunet kärsivät.</p><h3>Käytännön vinkit</h3><ul><li>☕ <strong>Kahvipäiväunet</strong>: juo kahvi juuri ennen nukkumaan menoa — kofeiini alkaa vaikuttaa juuri kun heräät (n. 20 min)</li><li>📱 Aseta hälytys 20 minuuttiin — poistaa huolen ylinukkumisesta</li><li>😎 Silmämaski tai tumma huone auttaa nukahtamaan nopeammin</li></ul><p>Kokeile viikon ajan — ero on selvä! 😴</p>',
],
// ── HYVINVOINTI - Muut ───────────────────────────────────
[
'id' => 'wellness_hobbies', 'emoji' => '🎨', 'title' => 'Harrastus on paras investointi hyvinvointiin',
'category' => 'hyvinvointi', 'subcategory' => ['muut'], 'author' => 'Tiina K.', 'type' => 'post',
'desc' => 'Harrastus josta et saa rahaa on arvokkaampi kuin luuletkaan — tutkimukset ja oma kokemus puhuvat puolestaan.',
'body' => '<p>Olen pitänyt harrastukseni yllä kiireisinäkin aikoina, ja se on yksi parhaista päätöksistäni. Tässä miksi:</p><h3>Miksi harrastus on tärkeä</h3><ul><li>🧠 <strong>Aivot lepäävät</strong> — kun teet jotain mitä rakastat, et ajattele töitä tai huolia</li><li>🌊 <strong>Flow-tila</strong> — harrastuksessa ajantaju katoaa, mikä on syvä rentoutumisen muoto</li><li>🤝 <strong>Yhteisö</strong> — harrastuksen kautta löytyy usein ystäviä joilla on samoja kiinnostuksen kohteita</li><li>✅ <strong>Onnistumisia</strong> — harrastuksessa kehittyminen antaa pätevyyden tunnetta, jonka työ ei aina tarjoa</li></ul><h3>Jos harrastus on hukassa</h3><p>Kokeile kolme kuukautta jotain aivan uutta. Ei tarvitse olla hyvä heti. Ei tarvitse sitoutua ikuisesti. Pelkkä kokeileminen on jo askel. 🎨</p>',
],
[
'id' => 'wellness_social', 'emoji' => '🤝', 'title' => 'Ihmissuhteet ovat hyvinvoinnin perusta',
'category' => 'hyvinvointi', 'subcategory' => ['muut'], 'author' => 'Sinikka', 'type' => 'post',
'desc' => 'Tutkimukset ovat yksimielisiä: laadukkaat ihmissuhteet ennustavat hyvinvointia enemmän kuin mikään muu.',
'body' => '<p>Harvardissa seurattiin ihmisiä yli 80 vuotta selvittääkseen mikä tekee elämästä merkityksellisen. Vastaus ei ollut raha tai menestys — vaan ihmissuhteiden laatu.</p><h3>Mitä tämä tarkoittaa arjessa</h3><ul><li>📱 Viesti ystävälle vaikka lyhyesti — yhteys syntyy pienistä teoista</li><li>☕ Tapaa ihmisiä kasvotusten kun mahdollista — some ei korvaa tätä</li><li>👂 Ole läsnä kun olet jonkun kanssa — puhelin pöydälle kääntämällä</li><li>🙏 Kiitä — ääneen, viestillä, kortilla</li></ul><h3>Yksinäisyydestä</h3><p>Yksinäisyys on yleisempää kuin uskomme. Ei ole hävettävää. Mutta se ei muutu itsestään — ensimmäinen askel on aina oma. Yksikin ihminen riittää.</p><p>Pidä ihmiset lähellä. 🤝</p>',
],
// ── LEMMIKIT - Koirat ────────────────────────────────────
[
'id' => 'pet_dog_nutrition', 'emoji' => '🦴', 'title' => 'Koiran ruokinta — mitä kannattaa tietää',
'category' => 'lemmikit', 'subcategory' => ['koirat'], 'author' => 'Maija-Liisa', 'type' => 'post',
'desc' => 'Koiran ruokavaliolla on suuri vaikutus sen terveyteen ja elämänlaatuun. Perusasiat kuntoon ensin.',
'body' => '<p>Olen ruokkinut koiriani eri tavoilla ja oppinut kantapään kautta. Tässä tärkeimmät asiat:</p><h3>Kuivaruoka vs. raakaruoka</h3><p><strong>Kuivaruoka</strong> on käytännöllinen, säilyy pitkään ja laadukas kuivaruoka kattaa ravitsemuksen hyvin. Valitse sellainen jossa liha on ensimmäisenä ainesosalistalla — ei viljoja tai lisäaineita ensin.</p><p><strong>Raakaruoka</strong> voi sopia joillekin koirille, mutta vaatii enemmän tietoa oikean tasapainon saavuttamiseksi. Jos kiinnostaa, perehdy huolella.</p><h3>Muistisäännöt</h3><ul><li>🍽️ Säännöllinen ruokinta-aika — koira pitää rytmistä</li><li>💧 Aina raitis vesi saatavilla</li><li>🍫 <strong>Vaarallisia ihmisruokia:</strong> suklaa, sipuli, viinirypäleet, xylitoli (purukumi) — nämä voivat tappaa</li><li>⚖️ Pidä paino kunnossa — ylipaino lyhentää koiran elämää merkittävästi</li></ul><p>Eläinlääkäri on paras neuvonantaja oman koirasi ruokinnan suhteen! 🐕</p>',
],
// ── LEMMIKIT - Kissat ────────────────────────────────────
[
'id' => 'pet_cat_diy_toys', 'emoji' => '🧶', 'title' => 'Tee itse kissanleluja — kissat rakastavat',
'category' => 'lemmikit', 'subcategory' => ['kissat'], 'author' => 'Tiina K.', 'type' => 'post',
'desc' => 'Kalliit lelupussit jäävät usein huomiotta — kotitekoiset lelut voittavat lähes aina. Tässä parhaat.',
'body' => '<p>Kissani on jättänyt kaupan lelut täysin huomiotta mutta leikkii kotitekoisilla tuntikausia. Tässä suosikkini:</p><h3>Helpot kotitekoiset lelut</h3><ul><li>📰 <strong>Rypistys</strong> — rypistä sanomalehtipaperi palloksi. Valmis. Kissat rakastavat.</li><li>🧦 <strong>Sukkabertilä</strong> — laita vanha sukka toiseen sukkaan, solmi. Heitä kissalle.</li><li>🎀 <strong>Naruleluja</strong> — kiinnitä pala nahkanauhaa puikoon. Vedä lattialla — kissan metsästysvaisto herää.</li><li>📦 <strong>Pahvilaatikko reijillä</strong> — tee reikiä pahvilaatikkoon, laita sisälle pieniä palloja. Kissan palapeli!</li></ul><h3>Turvallisuus</h3><ul><li>Valvo leikkiä kun kissoilla on naruja tai pieniä osia — ne voivat niellä vahingossa</li><li>Tarkista lelut säännöllisesti, vaihda rikki menneet</li></ul><p>Paras lelu on silti sinä itse — 15 minuuttia päivässä sulkasauvan kanssa tekee kissan onnelliseksi! 😸</p>',
],
];
}
function getOrInitPosts(): array {
if (!file_exists(DATA_DIR . 'posts.json')) {
$posts = defaultPosts();
writeData('posts.json', $posts);
return $posts;
}
$posts = readData('posts.json', []);
$changed = false;
$result = [];
foreach ($posts as $post) {
$cat = $post['category'] ?? '';
if (array_key_exists($cat, POST_CATEGORY_MAP)) {
$newCat = POST_CATEGORY_MAP[$cat];
if ($newCat === null) { $changed = true; continue; } // poista postaus
$post['category'] = $newCat;
$changed = true;
}
$result[] = $post;
}
if ($changed) writeData('posts.json', $result);
return $result;
}
function getOrInitCategories(): array {
if (!file_exists(DATA_DIR . 'categories.json')) {
$cats = defaultCategories();
writeData('categories.json', $cats);
return $cats;
}
$cats = readData('categories.json', []);
// Merge in subcategories (and new ones) from defaults if missing
$defaults = defaultCategories();
$defaultMap = [];
foreach ($defaults as $d) { $defaultMap[$d['id']] = $d; }
$changed = false;
foreach ($cats as &$cat) {
$defSubs = $defaultMap[$cat['id']]['subcategories'] ?? [];
if (!isset($cat['subcategories'])) {
$cat['subcategories'] = $defSubs;
$changed = true;
} else {
// Add any new subcategory ids from defaults that don't exist yet
$existingIds = array_column($cat['subcategories'], 'id');
foreach ($defSubs as $ds) {
if (!in_array($ds['id'], $existingIds)) {
$cat['subcategories'][] = $ds;
$changed = true;
}
}
}
}
unset($cat);
// Remove deprecated/merged categories
$before = count($cats);
$cats = array_values(array_filter($cats, fn($c) => !in_array($c['id'], REMOVED_CATEGORIES)));
if (count($cats) !== $before) $changed = true;
// Append brand-new default categories that don't exist in file yet
$existingCatIds = array_column($cats, 'id');
foreach ($defaults as $def) {
if (!in_array($def['id'], $existingCatIds)) {
$cats[] = $def;
$changed = true;
}
}
if ($changed) writeData('categories.json', $cats);
return $cats;
}
// ─── Routing ───────────────────────────────────────────────────
switch ($action) {
case 'posts':
ok(['posts' => getOrInitPosts()]);
case 'categories':
ok(['categories' => getOrInitCategories()]);
case 'likes':
$likes = readData('likes.json', new stdClass());
$user = getLoggedInUser();
if ($user) {
$userLikes = $user['likes'] ?? [];
} else {
$userLikes = $_SESSION['user_likes'] ?? [];
}
ok(['likes' => $likes, 'userLikes' => $userLikes]);
case 'toggle_like':
$postId = $body['postId'] ?? '';
if (!$postId) err('Missing postId');
$likes = readData('likes.json', []);
$user = getLoggedInUser();
if ($user) {
$users = readData('users.json', []);
$userLikes = $user['likes'] ?? [];
$idx = array_search($postId, $userLikes, true);
if ($idx === false) {
$likes[$postId] = ($likes[$postId] ?? 0) + 1;
$userLikes[] = $postId;
$liked = true;
} else {
$likes[$postId] = max(0, ($likes[$postId] ?? 1) - 1);
array_splice($userLikes, $idx, 1);
$liked = false;
}
foreach ($users as &$u) {
if ($u['id'] === $user['id']) { $u['likes'] = array_values($userLikes); break; }
}
unset($u);
writeData('users.json', $users);
$_SESSION['user_likes'] = array_values($userLikes);
} else {
$userLikes = $_SESSION['user_likes'] ?? [];
$idx = array_search($postId, $userLikes, true);
if ($idx === false) {
$likes[$postId] = ($likes[$postId] ?? 0) + 1;
$userLikes[] = $postId;
$liked = true;
} else {
$likes[$postId] = max(0, ($likes[$postId] ?? 1) - 1);
array_splice($userLikes, $idx, 1);
$liked = false;
}
$_SESSION['user_likes'] = array_values($userLikes);
}
writeData('likes.json', $likes);
ok(['liked' => $liked, 'count' => $likes[$postId] ?? 0]);
case 'comments':
$postId = $_GET['postId'] ?? '';
$comments = readData('comments.json', []);
ok(['comments' => $comments[$postId] ?? []]);
case 'add_comment':
$postId = $body['postId'] ?? '';
$name = trim($body['name'] ?? '');
$text = trim($body['text'] ?? '');
if (!$postId || !$name || !$text) err('Missing fields');
$now = time();
$win = 10 * 60;
$times = array_values(array_filter($_SESSION['comment_times'] ?? [], fn($t) => $now - $t < $win));
if (count($times) >= 3) err('Liian monta kommenttia. Odota hetki.');
$times[] = $now;
$_SESSION['comment_times'] = $times;
$comments = readData('comments.json', []);
if (!isset($comments[$postId])) $comments[$postId] = [];
$comment = [
'name' => htmlspecialchars($name, ENT_QUOTES | ENT_HTML5, 'UTF-8'),
'text' => htmlspecialchars($text, ENT_QUOTES | ENT_HTML5, 'UTF-8'),
'time' => date('d.m.Y'),
];
$comments[$postId][] = $comment;
writeData('comments.json', $comments);
ok(['comment' => $comment]);
case 'add_post':
$post = $body['post'] ?? [];
if (empty($post['title'])) err('Missing title');
$post['id'] = preg_replace('/[^a-z0-9_]/', '', strtolower($post['id'] ?? '')) ?: 'post_' . time();
$posts = getOrInitPosts();
$posts[] = $post;
writeData('posts.json', $posts);
ok();
case 'update_post':
if (!isAdmin()) err('Unauthorized', 403);
$post = $body['post'] ?? [];
if (empty($post['id'])) err('Missing id');
$posts = getOrInitPosts();
foreach ($posts as &$p) {
if ($p['id'] === $post['id']) { $p = $post; break; }
}
unset($p);
writeData('posts.json', $posts);
ok();
case 'delete_post':
if (!isAdmin()) err('Unauthorized', 403);
$id = $body['id'] ?? '';
if (!$id) err('Missing id');
$posts = array_values(array_filter(getOrInitPosts(), fn($p) => ($p['id'] ?? '') !== $id));
writeData('posts.json', $posts);
ok();
case 'save_categories':
if (!isAdmin()) err('Unauthorized', 403);
writeData('categories.json', $body['categories'] ?? []);
ok();
case 'seed_posts':
if (!isAdmin()) err('Unauthorized', 403);
$posts = defaultPosts();
writeData('posts.json', $posts);
ok(['count' => count($posts)]);
case 'seed_categories':
if (!isAdmin()) err('Unauthorized', 403);
$cats = defaultCategories();
writeData('categories.json', $cats);
ok(['count' => count($cats)]);
case 'admin_login':
if (($body['password'] ?? '') === ADMIN_PASSWORD) {
$_SESSION['tykkaafi_admin'] = true;
ok();
}
err('Väärä salasana');
case 'admin_logout':
$_SESSION['tykkaafi_admin'] = false;
ok();
case 'admin_check':
ok(['loggedIn' => isAdmin()]);
// ─── Käyttäjätunnukset ─────────────────────────────────────
case 'user_register':
$nickname = trim($body['nickname'] ?? '');
$email = trim($body['email'] ?? '');
$password = $body['password'] ?? '';
if (!$nickname || !$password) err('Nimimerkki ja salasana vaaditaan.');
if (mb_strlen($nickname) < 2 || mb_strlen($nickname) > 30) err('Nimimerkin tulee olla 230 merkkiä.');
if (mb_strlen($password) < 6) err('Salasanan tulee olla vähintään 6 merkkiä.');
if ($email && !filter_var($email, FILTER_VALIDATE_EMAIL)) err('Sähköpostiosoite ei kelpaa.');
$users = readData('users.json', []);
foreach ($users as $u) {
if (mb_strtolower($u['nickname']) === mb_strtolower($nickname)) {
err('Nimimerkki on jo käytössä.');
}
}
$user = [
'id' => 'user_' . time() . '_' . random_int(1000, 9999),
'nickname' => htmlspecialchars($nickname, ENT_QUOTES | ENT_HTML5, 'UTF-8'),
'email' => htmlspecialchars($email, ENT_QUOTES | ENT_HTML5, 'UTF-8'),
'password' => password_hash($password, PASSWORD_DEFAULT),
'likes' => $_SESSION['user_likes'] ?? [],
'created' => date('Y-m-d'),
];
$users[] = $user;
writeData('users.json', $users);
$_SESSION['tykkaafi_user_id'] = $user['id'];
ok(['user' => ['id' => $user['id'], 'nickname' => $user['nickname'], 'likes' => $user['likes']]]);
case 'user_login':
$nickname = trim($body['nickname'] ?? '');
$password = $body['password'] ?? '';
if (!$nickname || !$password) err('Nimimerkki ja salasana vaaditaan.');
$users = readData('users.json', []);
foreach ($users as $u) {
if (mb_strtolower($u['nickname']) === mb_strtolower($nickname)) {
if (password_verify($password, $u['password'])) {
$_SESSION['tykkaafi_user_id'] = $u['id'];
$_SESSION['user_likes'] = $u['likes'] ?? [];
ok(['user' => ['id' => $u['id'], 'nickname' => $u['nickname'], 'likes' => $u['likes'] ?? []]]);
}
err('Väärä salasana.');
}
}
err('Nimimerkkiä ei löydy.');
case 'user_logout':
unset($_SESSION['tykkaafi_user_id']);
ok();
case 'user_check':
$user = getLoggedInUser();
if ($user) {
ok(['loggedIn' => true, 'user' => [
'id' => $user['id'],
'nickname' => $user['nickname'],
'likes' => $user['likes'] ?? [],
]]);
}
ok(['loggedIn' => false]);
// ─── Yhteydenotto ──────────────────────────────────────────
case 'contact':
$name = trim($body['name'] ?? '');
$email = trim($body['email'] ?? '');
$message = trim($body['message'] ?? '');
if (!$name || !$email || !$message) err('Täytä kaikki kentät.');
if (!filter_var($email, FILTER_VALIDATE_EMAIL)) err('Sähköpostiosoite ei kelpaa.');
if (mb_strlen($message) > 5000) err('Viesti on liian pitkä.');
// Tallenna varmuuskopio
$messages = readData('messages.json', []);
$messages[] = [
'name' => htmlspecialchars($name, ENT_QUOTES | ENT_HTML5, 'UTF-8'),
'email' => htmlspecialchars($email, ENT_QUOTES | ENT_HTML5, 'UTF-8'),
'message' => htmlspecialchars($message, ENT_QUOTES | ENT_HTML5, 'UTF-8'),
'date' => date('Y-m-d H:i:s'),
];
writeData('messages.json', $messages);
// Lähetä sähköposti
$to = 'info@tykkaa.fi';
$subject = "tykkää.fi: viesti käyttäjältä $name";
$body = "Nimi: $name\nSähköposti: $email\n\nViesti:\n$message";
$headers = "From: noreply@tykkaa.fi\r\nReply-To: $email\r\nContent-Type: text/plain; charset=UTF-8";
@mail($to, $subject, $body, $headers);
ok(['sent' => true]);
default:
err('Unknown action');
}