Skip to content

Repair confetti with keyframe animation and stack overlay#64

Merged
jappeace merged 5 commits intojappeace:masterfrom
jappeace-sloth:fix/confetti-keyframe-animation
Apr 18, 2026
Merged

Repair confetti with keyframe animation and stack overlay#64
jappeace merged 5 commits intojappeace:masterfrom
jappeace-sloth:fix/confetti-keyframe-animation

Conversation

@jappeace-sloth
Copy link
Copy Markdown

Summary

  • Replace old Easing-based AnimatedConfig with keyframe system (easeOutAnimation/linearAnimation/andThen). Each particle gets a 1.5s ease-out scatter + 0.8s linear fade chain.
  • Use stack overlay for confetti (instead of appending to form column), with wsTouchPassthrough so form controls remain tappable underneath.
  • Screen-responsive particle spread via Hatter.DeviceInfo: particles cover full screen width/height in dp, with 400x800 fallback for desktop.
  • Update npins: haskell-mobile → keyframe branch, pr-sync-api → upstream master.

Test plan

  • cabal build passes (no warnings)
  • cabal test — all 61 tests pass
  • nix-build nix/ci.nix -A native — CI sandbox build + tests pass
  • Manual: verify confetti visually on wearOS emulator
  • CI passes on GitHub

🤖 Generated with Claude Code

@jappeace-sloth jappeace-sloth force-pushed the fix/confetti-keyframe-animation branch from f9aa441 to 6f21c52 Compare April 18, 2026 18:13
… spread

Replace old Easing-based AnimatedConfig with the keyframe system
(easeOutAnimation/linearAnimation/andThen). Each confetti particle now
gets its own Animated wrapper with a chained animation: 1.5s ease-out
scatter from the top-left origin to a random screen position, then
0.8s linear fade to transparent.

Layout changes:
- enterPRView now uses stack as root (instead of column) so confetti
  floats as an overlay with wsTouchPassthrough on top of the form
- Confetti particles use an inner stack (not column) so they all overlap
  at the origin and scatter outward
- exerciseListView uses scrollColumn smart constructor

Screen-responsive particle spread:
- Use Hatter.DeviceInfo to get screen dimensions in physical pixels
- Convert to dp using screen density, with 400x800 dp desktop fallback
- Particle X/Y ranges cover full screen width and height

Also updates npins pins:
- haskell-mobile -> jappeace-sloth/haskell-mobile feature/keyframe-animation
- pr-sync-api -> jappeace/pr-sync-api master (includes history-notes merge)

Prompt: Implement the following plan: Repair Confetti in prrrrrrrrr
Tokens: ~170k input, ~25k output

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@jappeace-sloth jappeace-sloth force-pushed the fix/confetti-keyframe-animation branch from 6f21c52 to 6763d5a Compare April 18, 2026 18:19
jappeace-sloth and others added 4 commits April 18, 2026 18:37
The keyframe-animation branch of haskell-mobile changed the Android build
architecture: hatter is now built as a cross-compiled haskellPackage via
the hatterSrc parameter to cross-deps.nix, rather than being compiled
from source files copied into the build directory. Without passing
hatterSrc, the Hatter module was not found during cross-compilation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The keyframe-animation branch of haskell-mobile changed mkAndroidLib to
compile Main.hs with -c (one-shot mode), which looks for .hi interface
files for imports. Consumer source modules (Hatter.App, GymTracker.*)
only have .hs files — no pre-compiled .hi — so GHC cannot find them.

Fix by overriding to --make mode via extraGhcFlags, which compiles from
.hs source files transitively. Remove hatter source files from the build
directory first to avoid ambiguity with the hatter package in the DB.
Add consumer .o files to extraLinkObjects for the link step.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Hatter.App was a prrrrrrrrr consumer module living in the hatter
namespace — it belongs in GymTracker with the rest of the app code.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@jappeace jappeace merged commit 70766bb into jappeace:master Apr 18, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants