0675c9f7d8
The v0.1.1 wink was rendered as a static SVG (left eye drawn as a closed curve). Once the 5% random gate picked the wink tone, the left eye stayed closed until the next page render — if the dashboard sat idle, Buddy was stuck mid-wink indefinitely. David's report: "the eye does not unblink." v0.1.2's lower probability (30% → 5%) reduced how often you'd see the stuck state, but didn't fix the underlying issue. This release makes the wink a real transient animation: - sprite.php no longer swaps the left eye for a closed path when tone is wink — both eyes are always open circles in the SVG - buddy.css adds @keyframes buddyWink that briefly closes the left eye (scaleY 0.1) for ~250ms every 2.5s, applied only when the parent has the .buddy-sprite--wink class - right eye keeps its normal 5s blink — the asymmetry is what makes it read as a wink rather than a synchronised blink - mouth/cheeks/label still differ for wink tone (those are valid static state changes); only the eye behaviour moved to animation Net effect: when the 5% chance fires, Buddy now actually winks (closes, opens, closes, opens) instead of freezing one-eye-shut.
123 lines
7.1 KiB
Markdown
123 lines
7.1 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to **Buddy** are documented here.
|
|
Format: [Keep a Changelog 1.1.0](https://keepachangelog.com/en/1.1.0/) — versioning: [SemVer](https://semver.org/).
|
|
|
|
---
|
|
|
|
## [Unreleased]
|
|
|
|
---
|
|
|
|
## [0.1.3] — 2026-05-27
|
|
|
|
### Fixed — Wink no longer gets stuck
|
|
|
|
The v0.1.1 wink was implemented as a static SVG render (left eye drawn as a closed curved line). Once the random 5% chance picked the `wink` tone, the page rendered with one eye closed and stayed that way until the next page reload — and 95% of subsequent reloads went back to a non-wink tone, but if the dashboard sat idle, Buddy was stuck mid-wink indefinitely. David reported it as *"buddy has the wink face but the eye does not unblink."*
|
|
|
|
v0.1.2's lower probability (30% → 5%) reduced how often you'd see the stuck state but did not fix the underlying issue.
|
|
|
|
v0.1.3 makes the wink a real CSS animation:
|
|
|
|
- **sprite.php** no longer renders the left eye as a closed path when tone is `wink` — both eyes are always open circles in the SVG.
|
|
- **buddy.css** has a new `@keyframes buddyWink` that briefly closes the left eye (`scaleY(0.1)`) for ~250 ms every 2.5 s. The right eye keeps its normal 5 s blink. That asymmetric pattern is what makes it read as a wink rather than a synchronised blink.
|
|
- The wink animation only runs when the parent has the `buddy-sprite--wink` class, which is still controlled by the same 5% probability gate from v0.1.2.
|
|
- The mouth (asymmetric smirk), cheek opacity (rosier), and mood label (`Cheeky 😉`) all still differ for the wink tone — those are valid static state changes. Only the eye behaviour moved from static-state to transient-animation.
|
|
|
|
Net effect: when the 5% chance fires, Buddy now actually winks (closes left eye, opens it, closes it, opens it, etc., every 2.5 s) instead of freezing one-eye-shut.
|
|
|
|
---
|
|
|
|
## [0.1.2] — 2026-05-26
|
|
|
|
### Tuned — Wink probability lowered from 30% to 5%
|
|
The wink Easter-egg added in v0.1.1 fired at 30% per page render
|
|
when Buddy's mood was ≥ 75. Default mood is 80, so most admin
|
|
visits hit the gate and ~30% of those flipped to wink. Stacked
|
|
across the main admin page + dashboard widget visible on the same
|
|
screen, Buddy ended up looking like he had one eye closed all the
|
|
time — "stuck" rather than "playful".
|
|
|
|
Dropped to 5%. Same wink visuals when it fires; just rare enough
|
|
to feel magical instead of constant. Refresh ~20 times when mood
|
|
is high and you'll catch one.
|
|
|
|
### Changed
|
|
- **`inc/state.php`**: `buddy_mood_label()` probability gate
|
|
`mt_rand( 1, 100 ) <= 30` changed to `<= 5`. Docstring updated
|
|
to reflect new ~5% rate.
|
|
- **Plugin version bumped**: header + `BUDDY_VERSION` constant
|
|
0.1.1 → 0.1.2.
|
|
- **About page** version-history card leads with v0.1.2; v0.1.1
|
|
demoted.
|
|
|
|
### Not changed
|
|
- Wink visuals (`inc/sprite.php`) — same closed-eye arc, smirk,
|
|
rosy cheeks when it fires. Just rarer.
|
|
- All other behavior identical to v0.1.1.
|
|
|
|
---
|
|
|
|
## [0.1.1] — 2026-05-25
|
|
|
|
### Added — Wink expression 😉
|
|
Buddy now has a fourth mood tone: **`wink`** — one eye closed, an
|
|
asymmetric smirk, and rosier cheeks. Rendered as a small variant
|
|
inside the existing inline-SVG sprite (still zero image files, no
|
|
new assets). When Buddy's overall mood is ≥ 75, there's a ~30%
|
|
chance on each page render that the wink replaces the standard
|
|
happy face. Refresh a few times when Buddy is content and you'll
|
|
catch it.
|
|
|
|
Why this commit exists: the v0.1.0 sprite had three tones
|
|
(happy / neutral / sad). Adding `wink` was the smallest possible
|
|
demo that the SVG expression engine is properly extensible — every
|
|
future mood/state/species can be added the same way. ~20 lines of
|
|
PHP, ~2 lines of CSS, no bundle weight, no dependencies.
|
|
|
|
### Changed
|
|
- **`inc/sprite.php`**: added `wink` to the allowed-tones list.
|
|
Left eye renders as a closed-eye curve (a small downward arc)
|
|
instead of the open circle. Right eye stays normal. Mouth shifts
|
|
to an asymmetric smirk curve. Cheek opacity bumped from 0.55 to
|
|
0.75 for extra cheekiness.
|
|
- **`inc/state.php`**: `buddy_mood_label()` now has a 30% chance of
|
|
returning the wink tone when the overall mood score is ≥ 75.
|
|
- **`assets/css/buddy.css`**: new `.buddy-widget__mood--wink` and
|
|
`.buddy-main__mood--wink` rules — warm amber pill matching the
|
|
cheeky vibe.
|
|
- **About page** version-history card leads with v0.1.1; v0.1.0
|
|
demoted to the previous entry.
|
|
- **Plugin version bumped**: header + `BUDDY_VERSION` constant
|
|
0.1.0 → 0.1.1.
|
|
|
|
---
|
|
|
|
## [0.1.0] — 2026-05-25
|
|
|
|
**Buddy is born.** First release of a new standalone WordPress plugin extracted-and-rebuilt from the tamagotchi feature that once lived inside A-WP-Notes v1.1.5 (now gracefully retired). Buddy stands on its own as a focused, charming companion plugin for the WordPress dashboard.
|
|
|
|
### Added — Phase A complete (pet exists)
|
|
- **Dashboard widget** at WP Admin → Dashboard showing the SVG character, the pet's name, a mood label ("Thriving" / "Content" / "Okay" / "Hungry" / "Distressed"), and four stat bars (Hunger / Happiness / Health / Energy).
|
|
- **Dedicated admin page** at WP Admin → Buddy → My Buddy showing the same data in a larger format with the pet's age and a placeholder note describing what's coming next.
|
|
- **About page** at WP Admin → Buddy → About with the side-by-side intro pattern, "What Buddy does" / "Who Buddy is for" / "Version history" cards, and a link to this CHANGELOG.md.
|
|
- **Settings page** at WP Admin → Buddy → Settings with a name-rename form and the Updates panel.
|
|
- **Per-user state storage** via `user_meta` (key: `buddy_state`). Each WP admin gets their own Buddy with its own name, species, and stats.
|
|
- **SVG sprite renderer** with three mood tones (happy / neutral / sad) and three sizes (sm / md / lg). Pure inline SVG with CSS keyframe animations (bobbing motion + periodic blinking). No GIFs, no sprite sheets, no image files for the character.
|
|
- **Self-hosted update checker** wired up to the Gitea repo from commit 1. Polls `/api/v1/repos/ranger/a-buddy/releases/latest` with a `/tags?limit=1` fallback. 12h success cache, 1h negative cache. UI surface lives on the Settings page.
|
|
- **Custom admin-menu icon** (`dashicons-pets`, a paw print) reinforcing the pet identity.
|
|
|
|
### Architecture (locked from day one)
|
|
- **Single-word brand name `Buddy`** — no "WP" prefix, no marketplace trademark hurdle.
|
|
- **Public GPL v2+ Gitea repo** at `ranger/a-buddy` on `git.davidtkeane.com`.
|
|
- **All persistent notice dismissals** to use `user_meta` + AJAX pattern (port from Logbook when first notice appears).
|
|
- **CSS-only animations, all assets local** — bundle stays small.
|
|
- **Single H1 per admin page**, no nested toggle boxes, no duplicate sections — Tier-1 discipline carried forward from Logbook.
|
|
|
|
### Not in this release (planned)
|
|
- Phase B — Feed / Play / Clean / Sleep interactions with cooldown timers.
|
|
- Phase C — WP-cron stat decay, "Buddy is hungry" dismissible admin notices.
|
|
- Phase D — Multiple species (dog, dragon, sprite), per-species personality phrases.
|
|
- Phase E — Site-health integration: pet stats react to `wp_get_site_health()` results, outdated plugins drain health, published posts feed hunger, cleared spam boosts happiness.
|
|
- Phase F — Pro tier with custom skins, multi-pet farm, social visits.
|