Releases: Hellowww-02/CraftLife
Release list
CraftLife v1.6.7
CraftLife v1.6.7 — "Performance & Polish" (26 Sep 2026)
An offline-first desktop RPG for real life. This release makes the app faster
to start, safer when a page crashes, and adds two requested features — Economy
Budgets and food favorites — plus a full polish sweep. Zero features removed;
existing databases upgrade in place.
✨ Highlights
⚡ Startup performance (D01)
- Per-view code splitting: 24 lazy chunks instead of one 1,614 kB bundle.
- Initial JS 1,614 → 444 kB (−72%), gzip 439 → 140 kB. Each page loads on
demand behind the familiar skeleton — navigation feels identical.
🛡️ Crash safety (D02)
- Bilingual error boundaries per view + a root safety net. A crashing page
now shows a recovery panel (Reload view / Reload app + technical details)
instead of a blank white screen. No data is ever touched.
💰 Economy Budgets (D03a)
- New Budgets tab: monthly per-category spending limits (or
*for all
spending), with live progress, remaining balance, and
On track / Almost over / Over budget states. - Budgets are included in tracker export/import.
🍱 Food favorites & recent (D03b)
- Star any food to favorite it; new All / Favorites / Recent filters above
the food grid. Recent shows your last 10 logged foods in order. - Favorites survive tracker export/import (custom and default foods).
✨ Polish sweep (D04)
- Esc closes all 47 dialogs, drawers, and popovers (one shared hook).
- Count-up animation on hero numbers (navbar gold, Economy balance),
instant under reduced-motion. - Press
?anywhere for keyboard-shortcut help (also hinted in the palette). - Structural emoji in 16 sub-headers replaced with Lucide icons.
⌨️ Palette, notifications, music & a11y (E01–E04)
- Palette: ↑↓ + Enter keyboard nav, Ctrl+1–9 quick pages, Pages/Actions
sections, empty state, one-tap complete for Habits, Dailies & Quests. - Notification bell restored: unread badge, dropdown history, per-item
and mark-all-read, Esc closes. - Music sleep timer: 15/30/60 min presets with live countdown; auto-pause.
- Tab focus trapped inside all 13 major dialogs; ARIA roles on the
palette, notifications, and dialog panels.
🍱 Catalog expansion + nutrition UX (F01–F03)
- +50 foods: Nasi Campur Bali/Jawa, Sate Maranggi/Taichan/Ponorogo,
Tongseng, Ayam Woku/Lodho/Pansuh, Mangut Lele, Ikan Arsik + more. - +50 drinks: Gayo/Toraja/Flores/Kintamani/Lanang coffees, Sanger,
STMJ, Jamu Temulawak/Jahe Merah, Saraba, Es Palu Butung + more. - Catalog 774 → 874 entries, zero duplicates; old databases receive the
new items automatically on next launch (custom foods/logs untouched). - Nutrition grid sortable by name / lowest calories / highest protein;
½×/1×/2× portion preset chips next to the portion input.
🔔 Productivity trio (G01–G03)
- Reminder snooze: postpone the selected reminder by 10 min / 1 hour /
tomorrow (repeat & sound preserved). - Pinnable notes: pin any note, pinned notes float to the top
(newpinnedcolumn, auto-added, old databases unaffected). - Friend list search: instant client-side filter by name.
🔄 Migration & compatibility
- Two additive tables (
economy_budgets,user_food_favorites) created
automatically on first launch; legacy databases keep every row. - One additive column (
notes.pinned) plus 100 catalog items, both applied
automatically on first launch; custom foods, notes, and logs untouched. - No Supabase migration (cloud optional, unaffected).
- i18n: 4,409 → 4,454 keys, identical across all 4 sources, 0 missing.
📦 Install / update
- New users: download
craftlife-1.6.7.zip, extract, runCraftLife.exe. - Existing users: the in-app updater picks up v1.6.7 automatically.
- Your
craftlife.dbupgrades itself on first launch — no action needed.
CraftLife v1.6.5
CraftLife v1.6.5 — "Food Database Update" (23 Sep 2026)
An offline-first desktop RPG for real life. This release cleans up and expands
the food database: zero duplicates, corrected nutrition values, and 33 new
Indonesian snacks and drinks. Existing databases migrate in place — food logs
and custom foods are preserved.
✨ Highlights
🍱 Deduplicated catalog (850 → 774)
- 89 duplicate groups merged into single canonical entries — Nasi Uduk, Es
Teler, Pecel Lele, Gudeg, Martabak, and 84 more. - 3 semantic duplicates merged by meaning (Kopi Susu Aren, Yogurt Greek,
Es Soda Gembira); your logs follow the surviving entry automatically.
🔬 Corrected nutrition values
- Kerupuk Udang / Ikan / Kulit were stored per 100 g — now honest per-serving
values (~65–80 kcal). - 6 more fixes: Soda, Susu Almond, Bir Pletok, Cocoa Powder, Sayur Nangka,
Dark Chocolate. - Every entry verified: macros (4·P + 4·C + 9·F) match stated calories, except
two alcohol-containing coffees where the gap is the alcohol itself.
🍘 33 new items, each with Indonesian + English names
- Kerupuk: Putih, Bawang, Mie, Kemplang, Amplang, Karak, Intip.
- Ciki & street snacks: Pilus, Kacang Sukro/Atom/Telur/Mete, Makaroni Pedas,
Mie Lidi, Basreng, Cimol, Keripik Ubi/Nangka, Kulit & Usus Krispi,
Stik Keju, Permen Jelly, Popcorn Karamel, Tahu Bulat, Telur Gulung,
Sempol, Cilor, Seblak Kering. - Drinks: Teh Botol Manis, Jus Jambu, Susu Jahe, Susu Pisang,
Infused Water Lemon.
🔄 Safe in-place migration
- Old databases sync to canonical values on first launch; only built-in rows
are touched, custom foods never change. - Verified: 13/13 food harness checks green, full regression 416/416,
live smoke 31/31.
📦 Install / update
- New users: download
craftlife-1.6.5.zip, extract, runCraftLife.exe. - Existing users: the in-app updater picks up v1.6.5 automatically
(verified download, release notes, countdown dialog, logged apply). - Your
craftlife.dbupgrades itself on first launch — no action needed.
CraftLife v1.6.4
CraftLife v1.6.4 — "Study & Stability" (23 Sep 2026)
An offline-first desktop RPG for real life. This release upgrades the Learning
space to a true NotebookLM-style workflow, makes habits and dates trustworthy,
adds database self-care, and ships an auto-updater that actually works.
✨ Highlights
📚 Learning (NotebookLM-style)
- True 3-panel shell — Sources ‖ Chat ‖ Studio — with draggable splitters,
collapsible panels, and mobile tabs. - Multi-file upload: 23 file types via picker or drag-and-drop, processed in
sequence; originals are kept and can be re-downloaded or re-extracted. - Website and YouTube sources: auto-detected, cleaned, transcribed (dual API +
oEmbed titles), each with a short AI guide. - 4 new Studio outputs — Briefing Doc, Data Table, Infographic, Slide Deck —
with CSV/HTML export; chat answers can be saved as notes. - PDF pages and images are attached to Gemini for grounded answers; LaTeX math
renders with KaTeX.
✅ Habits & date you can trust
- Real fail streaks for habits (the old "resurrected 29-day" count is gone) and
a done-today indicator that locks the Good/Bad buttons. - "Today" now ticks from the server clock and rolls over at midnight without a
full reload; open pages follow along without disturbing custom date views.
🗄️ Database self-care
- Scheduled auto-cleanup independent of retention, per-table sizes with totals,
and one-click checkpoint/VACUUM with before/after reports.
🔄 Updater that works
- Verified downloads with progress, release notes, a 15-second countdown
dialog, and a logged, abort-safe apply step (a bad package can no longer
overwrite your install).
🐛 Fixed
- Habit streak showing a lifetime total after fail/reset (fatal).
- Database sizes displayed as 0 B; first auto-clean never running.
- Update errors swallowed silently (0% hang); staging layout mis-detected.
- "Today" frozen at login; heartbeat reloaded the whole app every 60 seconds.
⬆️ Upgrade
- From v1.6.3: updating is automatic — accept the in-app update dialog and
restart. Your data (craftlife.db,.env, backups) is never touched. - Fresh install: download
craftlife-1.6.4.zipbelow, extract anywhere, run
CraftLife.exe(Windows 10+ x64, no internet required except cloud/AI/music). - Database migrates itself on first launch (new columns backfilled, old data
preserved). No manual steps.
🔧 Technical appendix
- 4,409 UI strings (Indonesian + English, fully synced).
- SQLite migrations are automatic and idempotent; one optional Supabase
migration ships for cloud installs (habits.fail_streak). - Verified: Python compile clean,
tsc0 errors, clean UI build,
416 phase tests + 31 live-server smoke checks + 4-way i18n audit, all green.
CraftLife-1.6.3
CraftLife v1.6.3 — “Quality of Life+” · Release Notes
Versi: 1.6.3 · Nama rilis: “Quality of Life+” · Tanggal: 2026-09-16 · Channel: stable
Commit phase: A01–A14 (satu commit phase) · Basis: v1.6.0 “Quality of Life”
Status: ✅ FINAL — siap dipakai untuk GitHub Release v1.6.3.
📌 Ringkasan singkat
Rilis ini menutup empat area permintaan dan tiga bug fatal, semuanya dalam satu commit phase:
| Area | Perubahan | Fase |
|---|---|---|
| 🎵 Music | Lirik mengikuti lagu saat trek berganti · pencarian lirik berkandidat + skor · import lirik manual terdokumentasi | A01–A03 |
| 📥 Semua app | Audit export/download (Qt WebEngine tidak punya handler downloadRequested) |
A03.5 |
| 📚 Learning | Esai bisa dijawab (fatal) · dua counter PG/Essay (default 15 = 10 + 5) · satu dialog per tipe generator · hasil jadi daftar artefak · shell ala NotebookLM · sitasi sumber + grounding · podcast dua host · migrasi SDK google.genai |
A04–A08 |
| 💞 Love Space | plans · memories/bucket · connection · cycle · gallery diprofesionalkan · overview jadi dashboard pasangan + Special Day → pengingat tahunan |
A09–A12 |
| 🏠 Home | Year Wrapped memakai mata uang aktif user + i18n penuh + laporan yang bisa disalin/diunduh | A13 |
| 📦 Rilis | i18n sinkron 4 arah, versi, README, Release Notes, rekap fase, smoke S1–S10 | A14 |
Angka rilis: +567 key i18n baru (3.757 → 4.324; +16 di antaranya dari A13) · 23 file ditimpa · 27 file kode baru ·
10 endpoint baru + parameter ?year= · 5 blok migrasi SQLite (auto-apply) + 3 migrasi Supabase opsional (cloud).
🎵 Music
A01 — Lirik otomatis mengikuti lagu yang diputar ✅
- Lirik diperbarui setiap trek berganti (auto-advance, next/prev, klik dari mini-player) — dulu panel tertinggal di lagu lama.
- Cache lirik per-lagu + guard balapan request (request lagu lama tidak menimpa lagu baru).
- Header panel lirik menampilkan lagu aktif; auto-scroll baris lirik berhenti otomatis 3 detik bila digulir manual.
A02 — Perluasan & akurasi pencarian lirik ✅
- Pencarian kandidat multi-sumber (LRCLIB get + search, lyrics.ovh, embedded tag) dengan skor.
- Skor memakai album, toleransi durasi bertingkat (≤2 dtk +3 · ≤5 dtk +1,5 · >15 dtk −2) dan penalti versi live / remix / karaoke / cover.
- Dialog pilih kandidat: album · durasi · badge SYNCED/PLAIN · skor · pratinjau 5 baris; pilihan user disimpan permanen (
user-pick) dan tidak ditimpa pencarian web. - Batas library 80 → 500 (
CRAFTLIFE_MUSIC_LIB_LIMIT), metadata batch untuk trek di luar listing, cache negatif 10 menit.
A03 — Import lirik manual terdokumentasi ✅
- Dialog Import + Panduan dengan drop-zone
.lrc/.txtdan template .lrc siap unduh. - Validasi sebelum simpan (baris bertimestamp, rentang waktu, jeda, metadata, 8 jenis peringatan).
- Dukungan penuh
[ar:] [ti:] [al:] [by:] [offset:±ms], multi-timestamp, baris jeda; ekspor.lrcbertimestamp atau.txtpolos.
📥 Semua App
A03.5 — Audit & perbaikan SELURUH export/download ✅
- Akar masalah: shell PyQt tidak pernah menyambungkan
QWebEngineProfile.downloadRequested→ semua unduhan dibuang diam-diam (tanpa berkas, tanpa pesan). - Kini ada
DownloadManager: berkas masuk keDownloads/CraftLife(nama uniknama (1).ext), toast menampilkan lokasi lengkap, tombol Buka folder unduhan di Settings → Manajemen Data (folder bisa diubah viaCRAFTLIFE_DOWNLOAD_DIR). - Beres untuk: ekspor nutrisi (CSV/XLSX/DOCX/PDF*), ekspor tracker (JSON), ekspor studio (TXT), lampiran chat, template lirik, ekspor lirik.
*PDF butuhreportlab; tanpa itu server otomatis memakai CSV.
📚 Learning
A04 — Kuis: jawaban essay diperbaiki + dua counter PG/Essay + skor komposit ✅
- Bug fatal diperbaiki: soal esai tidak bisa diketik karena (1) penanda
type/modelAnswerdibuang saat notebook di-refetch → soal esai tampil sebagai PG tanpa opsi, dan (2) textarea dikuncidisabledbegitu tombol Evaluate ditekan. - Dua counter terpisah: Pilihan Ganda dan Esai (default 10 + 5, total ≤ 30, preset
10/5 · 20/10 · 30/0 · 0/10); tombol Generate mati bila total 0 atau > 30, dan server tetap memotong aman bila payload datang dari luar UI. - Penilaian mandiri esai: ✅ Sesuai (1) · 🟡 Sebagian (0,5) · ❌ Belum (0) → skor komposit
PG 4/10 · Essay 3,5/5+ persentase. - Jawaban tidak hilang lagi: kunci per ID soal (bukan indeks baris) + draft otomatis
localStorageper notebook (cl_learning_quiz_draft_<nb>_<gen>). - Tombol Evaluasi ulang (tanpa menghapus jawaban), Retake, dan Lihat semua jawaban contoh.
- Counter flashcard tetap terpisah (10–30 kartu).
A05 — Dialog konfigurasi per tipe generator Studio ✅
- Setiap tipe punya dialog sendiri (ala Customize NotebookLM): klik kartu di panel Studio → dialog terbuka
dengan opsi khusus tipe tersebut; tombol ⚡ di sisi kartu tetap bisa generate cepat dengan pengaturan terakhir. - Opsi per tipe: Quiz (PG/Esai + kesulitan + bahasa) · Flashcards (5–30 kartu, gaya Istilah→Definisi /
Pertanyaan→Jawaban / Rumus→Arti) · Audio Overview (gaya host Santai/Formal/Diskusi kritis, panjang
6–8 / 14–24 / 26–36 giliran, instruksi bebas) · Mind Map (kedalaman 1–3, cabang 3–8, sub 2–6) ·
Study Guide (pilih bagian + 3–10 soal latihan) · FAQ (5–15 Q&A, jawaban Singkat/Detail) ·
Timeline (harian/mingguan/bulanan/tahunan + tanggal absolut) · Summary (≤150 / 200–400 / 500–800 kata,
Poin-poin / Naratif). - Ingat pengaturan per notebook (
localStorage cl_learning_studio_cfg_<notebook>_<tipe>) + Reset ke default,
ringkasan sumber di dalam dialog (n sumber · m kata), dan bagian Pengaturan lanjutan (fokus topik + instruksi bebas). - Semua nilai divalidasi ulang di server (whitelist + clamp rentang + pemangkasan teks), dan tanpa opsi apa pun
perilaku lama tetap identik (zero-regression).
A06 — Hasil generate = daftar artefak rapi (list ke bawah) ✅
- Semua hasil Studio kini tampil sebagai satu daftar artefak vertikal: judul (bisa diganti), badge tipe,
waktu relatif, jumlah item (15 soal/20 kartu/18 giliran/340 kata), ukuran berkas, tanda diedit. - Kontrol: filter per tipe (dengan hitungan), pencarian judul, urutan Terbaru/Terlama/Tipe, empty state.
- Klik kartu → pratinjau isi langsung di bawah kartu (kuis + kunci jawaban, kartu, dialog podcast, JSON mind map, teks).
- Aksi per kartu: Buka (tampilan interaktif) · Ganti nama · Ekspor .md · Ekspor .txt · Duplikat · Hapus.
Ekspor menghasilkan berkas rapi diDownloads/CraftLife(kuis lengkap dengan kunci ✅ dan jawaban contoh esai). - Area pratinjau interaktif (kuis dikerjakan, kartu dibalik, podcast diputar) tetap ada dan bisa dilipat.
- Perbaikan kecil menyeluruh: semua berkas unduhan kini dikirim dengan Content-Type yang benar
(.md,.txt,.csv,.lrc,.xlsx,.docx,.pdf, gambar, audio) — sebelumnya selaluapplication/octet-stream.
A07 — Shell Learning ala NotebookLM ✅
Halaman Learning direstrukturisasi mengikuti tata letak NotebookLM namun tetap berciri CraftLife:
- Rail notebook kiri (72 px → 220 px): daftar notebook dengan avatar inisial, tombol + Notebook,
ganti nama & hapus notebook, navigasi Sumber / Chat / Studio, dan pemilih bahasa id/en. - Topbar dengan ganti nama notebook langsung di tempat, chip
{n} sumber/{m} kata/
status, serta tombol Ganti nama & Ekspor. - Kolom tengah Sumber ⇄ Chat: kartu sumber (ikon tipe, jumlah kata, tanggal, chip Dipakai/Tidak dipakai),
pencarian, empty state; chat dengan 4 kartu saran saat kosong, balon pengguna/AI, kontrol font, dan klarifikasi. - Kolom kanan Studio: daftar artefak A06 + grid peluncur 8 generator A05, bisa dilebarkan/dilipat.
- Drag-resize diganti preset: Sempit 320 / Sedang 420 / Lebar 560 + sembunyikan panel, tersimpan di
localStoragecl_learning_layout, dengan migrasi otomatis daricl_learning_panel_widths. - Responsif: <1024 px rail menjadi bottom-bar dan kolom menjadi tab penuh.
- Tanpa
backdrop-filterdan hanya transisi saat interaksi (taat aturan anti-flicker R10 pada WebEngine). - Seluruh fungsi Learning lama dipertahankan 100 % (notebook, sumber, chat, 8 generator, kuis & esai, kartu, podcast, ekspor).
Uji: 11 kasus logika tata letak · 10 kasus render komponen · 24/24 smoke live (:8899) · tsc 0 error · build bersih.
i18n: +30 key → 3.998 key (id + en).
A08 — Sitasi sumber, grounding, & podcast dua host ✅
Jawaban AI bisa dilacak ke sumbernya. Model menerima daftar sumber bernomor [S1], [S2], … dan
diminta menandai setiap klaim. Penanda itu berubah menjadi chip nomor yang bisa diklik di dalam balon
jawaban: popover menampilkan judul sumber + kutipan kalimat + tombol Buka sumber (isi penuh).
Di bawah balon ada baris ringkasan sitasi, dan chip tetap muncul setelah aplikasi di-restart
(kolom baru learning_chats.citations).
Anda yang menentukan sumber (grounding). Chip Dipakai / Tidak dipakai pada tiap kartu sumber
dikirim sebagai sourceIds saat bertanya dan saat generate materi — AI hanya memakai sumber yang dicentang.
Header chat menampilkan {n} dari {total} sumber dipakai, rail sumber punya tombol Pilih semua / Kosongkan.
Model yang lupa memberi sitasi tidak membuat error — jawaban tetap tampil.
Audio Overview: suara sesuai bahasa, pemutar interaktif. Pemutar lama memakai suara bawaan sistem
tanpa lang sehingga membaca teks Indonesia dengan suara Inggris. Sekarang transkrip diubah menjadi
berkas MP3 nyata dengan...
CraftLife-1.6.0
⚒️ CraftLife v1.6.0 — “Quality of Life Release”
EN: This release ships 17 community-requested fixes & improvements — including 3 critical bug fixes (redeem codes, double-sent AI chat, couple tracking), global music playback, note attachments, and automatic monthly database cleanup.
Rilis v1.6.0 berisi 17 perbaikan yang Anda minta — termasuk 3 bug fatal — plus perawatan database otomatis biar aplikasi tetap ringan. Alur data tidak berubah: semua data tetap di file SQLite lokal milik Anda.
🚨 3 Bug fatal diperbaiki
| Masalah | Perbaikan | |
|---|---|---|
| 🧧 | Kode redeem tidak memberi hadiah | Penukaran kode kembali berfungsi — hadiah masuk, dan satu kode hanya bisa dipakai sekali per akun. |
| 💬 | Chat AI terkirim dobel | Satu kirim = satu jawaban. Hemat token hingga 2× lipat. |
| 💞 | Fitur couple error / tidak terdeteksi | Deteksi pasangan & tracking couple kembali normal, lengkap dengan badge status. |
✨ 14 Perbaikan quality of life
🖱️ Input & Tampilan
- 🔢 Input nominal mulus — backspace sampai kosong di saldo, tabungan, investasi, dll. tidak lagi “nyangkut”.
- 🎨 Tema tersimpan permanen — restart aplikasi tidak kembali ke tema default.
- 🦸 Warna avatar tampil di chip profil & navbar.
- 📏 Tren tinggi badan 7 hari tidak lagi datar.
📝 Catatan & Belajar
- 📝 Duplikat catatan tersimpan di folder & urutan yang sama — tanpa imbuhan “(copy)”.
- 📎 Lampiran catatan — gambar / PDF / txt, maks 5 MB per file, tersimpan lokal per akun.
- ∑ Palet simbol LaTeX — 7 kategori, klik untuk menyisipkan, dengan live preview.
- 📂 Folder & Learning — ikon folder bisa diganti (task & SportTrack), jumlah soal quiz mengikuti counter, soal essay, dan panel Learning bisa di-resize.
🎵 Musik
- 🎧 Musik tetap berputar saat pindah halaman — plus mini-player di navbar.
- 🖥️ Halaman Musik pas satu layar — satu scroll utama (hero + daftar lagu), deck selalu terlihat.
- 📜 Lirik akurat per detik — dicocokkan dengan durasi lagu, import file
.lrc, offset ±0,5 detik, bisa disimpan. - 🖼️ Icon playlist khusus — emoji atau foto dari komputer (auto-resize ≤512px), plus indikator shuffle/repeat ON/OFF.
- 🔇 Musik berhenti otomatis saat logout atau menutup aplikasi.
🧹 Perawatan Data
- 🧹 Pembersihan database bulanan — hanya menghapus history tracker (retensi default 30 hari, bisa diatur 0/1/7/30/90), dengan backup otomatis sebelum menghapus, lalu VACUUM. Database tidak lagi membengkak tak terkendali.
📦 Cara update
Pengguna baru
- Download
CraftLife-1.6.0.zipdi bagian Assets di bawah. - Ekstrak ke folder mana pun, jalankan
CraftLife.exe. Tanpa Python, tanpa Node, tanpa installer.
Pengguna versi lama
- Cukup buka aplikasi — updater akan mengunduh rilis ini di background dan memasangnya dengan verifikasi SHA-256. Ingin langsung? Buka Settings → Check for updates.
Data aman: file
craftlife.dblokal tidak disentuh updater. 6 migrasi SQLite berjalan otomatis saat aplikasi pertama kali dibuka — tidak ada migrasi Supabase di rilis ini, pengguna cloud tidak perlu melakukan apa pun.
SHA-256 (CraftLife-1.6.0.zip): <tempel checksum di sini setelah zip dibuat>
✅ Sudah diuji
- ✅ Kompilasi penuh — 17 modul Python · TypeScript 0 error · build frontend bersih
- ✅ Smoke test live: register → redeem kode → duplikat catatan → lirik musik (sinkron) → pembersihan DB
- ✅ i18n — 3.757 keys konsisten (id + en)
Full changelog: README — What's New · Rincian teknis per fase: UPDATES/2026-09-08-P47-P63-PHASE-SUMMARY.md
CraftLife-1.5.0
⚒️ CraftLife v1.5.0 — UI v2 "Craft Design System"
A brand-new skin, the same machine. The entire web interface has been rebuilt from the ground up
across 12 phases (U1–U12) into a custom-made design system — with zero changes to the backend,
game logic, data, translations, or database migrations. Your saves are 100% safe.ID: Kulit baru, mesin tetap — seluruh tampilan direkonstruksi jadi sistem desain "Craft" buatan sendiri.
Nol perubahan backend/logika/data. Save kamu aman 100%.
⬇️ Download · 🎮 Feature Highlights · ⚡ Performance · 🩺 QA · 📋 Changelog
✨ The Short Version
| 🎨 What changed | Every screen, every button, every card — rebuilt into a unified Craft Design System (±90 ct-* classes across 41 files) |
| 🧠 What didn't | Backend, game logic, handlers, i18n (3,694 keys), database schema (13 migrations) — untouched |
| 🏆 Certified | Contrast measured at 17.1:1 (WCAG AA needs 4.5:1) · tsc 0 errors · clean build · 20+ pages smoke-tested in a real WebEngine |
🎮 Feature Highlights
🏰 A real design language, finally
- Signature buttons with a 3D stem that physically presses down (primary · gold · success · danger · secondary · ghost)
- Bevel cards with hover lift, sockets for icons, chips & segmented tabs, and one consistent dialog system (backdrop scrim + spring pop) across every modal in the app
- Aurora background scene + XP orbs, adapted per theme — all static (see performance below)
📊 Pages, re-imagined
- Dashboard — full reconstruction: summary panel, stat tiles, calendar widget, rank dialog
- Task Core — habits/dailies/quests cards, difficulty badges (Epic glows purple), gold Quick-Add FAB, folder bar, drag-reorder intact
- 🍅 Pomodoro — the timer is now a 230px progress ring that changes color with the phase (violet focus / green break)
- 💧 Water tracker — liquid-gradient bar with a moving sheen; 🥗 nutrition tiles & BMI tools
- 💰 Economy — accent-tinted hero tiles (income/expense/net) with glowing figures, segmented tabs, unified transaction cards
- 🛒 Shop — gold-themed tabs, affordability states that are obvious without hovering, Minecraft-style 2×5 equip hotbar (empty = dashed slots, filled = glowing sockets)
- ⚒️ Crafting — requirement checklist (✓ emerald / ✗ rose) readable at a glance
- 🏆 Achievements — a museum: unlocked = glowing gold frames, locked = grayscale
- 💬 Friends chat — real chat bubbles (own vs. other), entrance animation only for new messages (3s refresh stays flicker-free), reactions as chips
- ⚔️ Guild boss battles — a proper war room: dark red-tinted panel, big tier-colored HP bar, signature attack buttons (Light=gold · Heavy=danger · Block · Ultimate=violet)
- 🌹 Love Space — dedicated rose theme
- 🏅 Leaderboard — top-3 podium chips (🥇 glow / 🥈 / 🥉)
- 💿 Music — album art becomes a spinning vinyl while playing (stops instantly on pause), mini equalizer next to the title, glowing active lyric line
- 📝 Notes / 🎓 Learning — the full rich-text toolbar and AI studio, kitted
- 📅 Calendar — today gets a gold ring; ⏰ Reminders get time chips
- 🔐 Login / Onboarding / Profile / Settings — spring toggle switches, glowing theme swatches, class-picker sockets
⚡ Performance & Stability
Built for PyQt6 WebEngine on Windows laptops — idle cost ≈ zero:
- Global flicker fixed at the root: no more
backdrop-filterover animated layers, no fullscreen blur while dialogs are open, no paint animations running while idle (this was a real bug report — thank you!) - Motion only on interaction — hover/press feedback everywhere, but a still app is truly still
- Scroll-reveal done in pure CSS (
animation-timeline) — zero JavaScript listeners - All animations are transform/opacity only (compositor-friendly);
prefers-reduced-motionkills every repeating animation
🐛 Fixes
- Popup appearing in the wrong corner (z-index/isolation)
- Global flicker/flickering (sidebar, random spots, and while dialogs were open)
- Pomodoro timer no longer resets when switching pages (existing engine — preserved)
- Latent
--ct-t2design token that was used but never defined
🩺 Quality Assurance
| Check | Result |
|---|---|
| Text contrast (measured) | body 17.1:1 · muted 7.8:1 — WCAG AA ✔ |
| Keyboard focus ring | accent ring + halo on all interactive elements |
| Reduced motion / high-contrast mode | fully functional, verified |
| Layout shift on press/hover | none (transform-only) |
| Bundle | CSS 147 KB · JS 1.02 MB |
| TypeScript / build | 0 errors · clean |
⬇️ Install / Update
Existing users (auto-update): the in-app updater will offer v1.5.0 automatically — or download craflife-1.5.0.zip below, extract, and run. Your data (craftlife.db, .env) is preserved.
💡 If anything ever looks visually odd after updating, close the app and delete the cache folder once:
%APPDATA%\CraftLife\QtWebEngine, then relaunch.
From source: clone the repo → cd web && npm install && npm run build → python MainPyQt6.py.
📋 Full Changelog
Session-by-session technical logs (format 1–7, incl. every file touched) live in UPDATES/ — 13 logs for this release:
u3.3 · u3.4 · u4-task-core · flick-fix · u5-body · u6-economy · u7-rpg · u8-social · u9-studio · u10-account · u11-motion · u12-qa-launch
Design methodology & rules R1–R10: UIUX_ROADMAP_U1_U12.md
🔮 Backlog (v2.1+)
Esc closes every modal · animated count-up numbers · per-view code splitting
Python + SQLite is the brain. React is the skin (now a much prettier one). Cloud is optional. ⚒️
CraftLife-1.4.0
CraftLife v1.4.0 — Full Parity Release
Ringkasan (ID): Setiap halaman React kini 1:1 dalam fitur & perilaku dengan referensi PyQt (P30–P46). Jam aplikasi & timestamp chat mengikuti zona lokasi pengguna (bukan zona server), dan chat Friends/Guild sudah realtime serta lengkap. Game rules tetap 100% di
database.py(backend), tidak pernah diduplikasi di TypeScript.
CraftLife v1.4.0 is a Windows-first desktop RPG life-tracker. Everything local works fully offline; Supabase cloud remains optional for multi-device sync and online social features.
✨ Highlights
- Full page parity — every React page now matches the PyQt reference feature-for-feature (P30–P46 complete).
- User-local time everywhere — the app clock and all chat timestamps now follow your device's timezone, not the server's.
- Rebuilt Friends & Guild chat — attachments, reply, edit, delete, reactions, load-earlier, typing indicator (cloud), and reliable send.
- Real boss combat feedback — every attack shows damage dealt, damage blocked, boss HP remaining, crits, shield, revive, and ultimate effects.
🆕 What's new / changed (by page)
| Page | Change |
|---|---|
| Home | Sleep↔productivity chart now stretches edge-to-edge. |
| Profile | Hero Customization moved here from Settings; class change limited to once per 7 days. |
| Habits / Dailies / Quests | Removed duplicate quick-template buttons (already in the Templates menu). |
| SportTrack | Reps chart now renders; added the folder system like habits/dailies/quests. |
| Economy | Savings accept any user-entered amount; investments store your current total value; transaction cards show the name (not category); full subscription dialog (name/icon/cost/due/period/auto-renew/notes); dialogs follow the active currency (no more hardcoded IDR). |
| Health & Food | Food DB names translated (id/en); weight/height 7-day trend charts stretch properly. |
| Love Space | Couple profile & couple account brought to 1:1 parity. |
| Learning | 3-tab slide (Sources / Chat AI / Studio Generate); layout stretches when a tab is closed. |
| Music | Faster, wider lyric search; found lyrics are live time-synced (min:sec) to playback. |
| Crafting | A consumable requirement with quantity 0 now blocks crafting. |
| Shop | Buff item descriptions shown in Bag/Inventory; consumable qty 0 displays as 0; re-buying increments by the amount bought. |
| Pets | New scaling: below level 25 = 1 pet; level 25+ = 2 + floor((level-25)/5) pets (25→2, 30→3, 35→4…). Buffs recalculate on equip/unequip. |
| Friends | Chat is now full parity: attachments (≤5), reply, edit, delete, reactions + remove, load earlier (50/page), typing indicator, 3s refresh — hybrid cloud/local storage. |
| Guild | Chat no longer "silently unsent" (fixed local send path) + full dialog (send, leader clear-all, 3s poll); Spyglass now has a real effect (reveals full boss stats); attacks show full damage/blocked-HP info; boss start is leader-only. |
| Navbar | Shows all active buffs. |
🐛 Bug fixes
- App clock was 7h off (e.g. 06:00 when it should be 13:18 WIB) — the clock now renders in the user's local timezone instead of the server's.
- Friends & Guild chat timestamps now sync exactly with the app clock via per-message epoch timestamps (works regardless of server zone: UTC, WIB, Windows
tzset()no-op, etc.). - Guild chat messages "not sent" — send path was targeting the online (cloud) guild while the page showed the local guild; now local-only, matching PyQt.
- Chart stretching, currency formatting, and translation-key gaps cleaned up across pages.
✅ Verification
py_compile— all core modules pass.tsc --noEmit— 0 errors.vite build— clean production build.- Backend smoke tests — auth, bootstrap/server clock, guild create/messages, friends chat, boss catalog all pass.
- i18n — 3,694 keys consistent across
translations.py↔WEB_I18N_KEYS↔messages.json(id + en).
⬇️ Install / update
- Windows: download
craftlife-1.4.0.zip, extract, runCraftLife.exe(no Node required). - Auto-update: the app checks
app-updates/GitHub Releases on launch and applies updates with SHA-256 verification.
☁️ Cloud (Supabase) — for self-hosters / operators
- Apply
supabase/migrations/*.sqlin file order (see README — 13 files, from20260812000000_initial_social_cloud.sqlto20260821010000_app_updates.sql). - Deploy the
chat-attachment-maintenanceEdge Function for scheduled attachment cleanup. - No new Supabase migration is required by v1.4.0 itself beyond those already in the repo.
📌 Notes
- Legacy PyQt widgets are kept and reachable with
CRAFTLIFE_WEB_UI=0; action parity (not pixel-identical skins) is the goal. - Game/business rules live only in
database.py; the frontend never re-implements RPG math. - Windows is the supported release target; Linux/macOS may run from source.