A trackball that scrolls the page, made for fun.
Uses a bunch of cool CSS to appear 3D, and has some cool physics!
Used AI to improve my readme a bit, but not docs
Edit: To clarify, the ONLY use of AI was for the README, nothing else.
A trackball that scrolls the page, made for fun.
Uses a bunch of cool CSS to appear 3D, and has some cool physics!
Used AI to improve my readme a bit, but not docs
Edit: To clarify, the ONLY use of AI was for the README, nothing else.
I built Tamaru, a physicsâdriven virtual trackball widget for the web!
It lets you scroll any page or container by flicking a little 3D orb, complete with inertia, audio, haptics, themes, and now⌠Stick Mode (pointerâlock scrolling), which nearly broke me (/silly) but was so worth it.
The hardest part was definitely Stick Mode. Pointer lock, scrollâtarget cycling, highlight logic, restoring state, and making it all feel like a real trackball was a whole boss fight. I figured it out by rewriting half the scroll engine, adding a targetâcycling system, and bribing the browser with sheer stubbornness (yes your browserâs now corrupt đ).
Iâm really proud of how polished it feels now, the physics, the audio, the theming, the demo, the docs, everything. It started as a tiny 6 AM experiment and somehow turned into a full npm package with real features and real users. Iâm honestly so happy with how it turned out.
So uh.
I DID IT.
I ACTUALLY SHIPPED TAMARU.
Itâs on npm.
Itâs real.
Itâs alive.
It has provenance logs and everything.
Iâm screaming.
(Iâm using the bookmarklet, by the way, in the first two images)
so uh. stick mode.
I finally did it.
I added stick to cursor mode.
And let me tell you:
this was
SO
HARD.
like âwhy am I doing this to myselfâ hard
like âpointer lock is a demonâ hard
like âscroll target cycling is a cursed ritualâ hard
BUT ALSO
SO
WORTH IT.
I had to fight the browser for custody of the mouse.
It did NOT want to give it to me.
I won.
with a smirk cause why not >:3
stick mode now forceâminimizes the orb
centers it
no more dragging the orb
no more âgo to the cornerâ
just pure raw mouse movement -> scroll velocity
like a REAL trackball
but digital!
hold Shift
scroll wheel (or two fingers on laptop)
Tamaru goes:
âoh you want to scroll THAT div?
okay let me highlight it for youâ
it even scrolls it into view configurably
because Iâm extra.
enter stick mode
exit stick mode
restore position
restore size
restore sanity (attempted, not guaranteed, often fails)
added a cute little â button
it mocks me
but it works
updated the demo again
because of course I did
stick mode works
itâs beautiful
itâs terrifying
I love it
Log in to leave a comment
So uhâŚ
I kinda want to ship this todayâŚ
Maybe a bit obsessed but hereâs another devlog haha.
I decided to try not to do like 10 things in one devlog.
And then IâŚ
did not do that.
Apparently I cannot touch this project without accidentally doing a full renovation.
Anyway.
Updated the demo again and it now is curvomorphic and prettyyy :3
Now with a working favicon.
Probably.
Confirmed now, yeah it works
I love it, itâs perfect :D
Log in to leave a comment
So uh.
I did⌠a lot of things.
Like, a silly amount of things for someone who allegedly âwas just fixing bugs.â
This commit arc is basically:
âIâm only going to clean my room a littleâ
proceeds to renovate the entire house, add two new rooms, repaint the walls, and fix a installed sound system
Anyway.
gradient, heheheheheheh
(I NEED MORE GIVE ME MOREEEEEEEEEE)
Orange, mic drop.
(but also it looks like mars sob)
Updated the demo again because if Iâm suffering, you get to see the results :3
Log in to leave a comment
So⌠I did a bunch of one thing:
This commit message best summarizes it:
I just wrote a manual audio engine
d6e51b1
¡
2 hours ago
this took ages
help
help me
someone
/j this is normal for me I made an *audio codec*
no it isn't why didn't i use audio files
WAIT
OH
OMG
AAAAAAAAAAAAAAAAAAA
So uh.
I sat down to âadd some sounds.â
Anyway, I guess I wrote a manual audio engine.
Like.
A whole one.
From scratch.
Why?
I donât know.
Ask the version of me who thought âhm yes, procedural rollingâbearing noise with dynamic playbackRate modulation sounds fun.â
Built a full WebAudio pipeline with:
Added perâevent sound design:
Implemented a rolling sound layer that:
Added speedâaware feedback everywhere so the widget feels alive and so realistic.
rollSoundLevel).Updated the demo to expose rollSoundLevel because if I suffered for this, you get to play with the dial.
DEVLOG TIMEEEEEEE
Hackatime is behaving much more nicely, kudos to the maintainers. XD
I did stuff.
Okay, actually, I turned the little trackball experiment into a proper, modular toolkit with theming, config, and haptics.
tactus package and added a simple haptic engine that calls triggerHaptic(duration)
tactus for native-feeling pulses.Log in to leave a comment
So first devlog for Tamaru!!!
I initially made this today at like 6 AM as a small JS experiment, then was like, this is actually so useful!!!
Then i decided to make this an npm module/library, for fun :3.
Stuff I did to the original JS module