
Senior Frontend Engineer passionate about DX | @vuejs | @nuxt_js | @aboutyou_com ( SCAYLE ) 🍣.
Croatia/Australia
Joined June 2008
- Tweets5.4K
- Following553
- Followers409
- Likes8.4K
aussieboi retweeted
Software is more than just code
Thanks @abei557832, @Unans___, @enzonotario_, @_aussieboi and @LyashenkoG for having believed in it. I'm sorry for failing but glad to have had you on my team.
Thank you @Atinux, @benjamincanac and @hugorcd for Nuxt UI
soubiran.dev/posts/software-…
aussieboi retweeted
Doom now runs in @typescript types. What a journey this one's been.
aussieboi retweeted
It’s live! 🎉
New series: The Complete Guide to Building a Vue.js Component Library
We’re covering everything: @geteslint, @typescript, @vuejs, @vitest_dev, @tailwindcss 4, @histoire_dev, Radix Vue, @nuxt_js, Unplugin, and more!
Dive in now 👇
soubiran.dev/series/the-comp…
aussieboi retweeted
Vue DevTools Vite Plugin is now available in the Nuxt App 🌟. Also, Nuxt DevTools is coming to Component Tree/State Panel 👀(github.com/nuxt/devtools/pul…)
aussieboi retweeted
🎉 I am so happy to share with you that `eslint-flat-config-viewer` is now the official ESlint Config Inspector! 🚀
Huge thanks to @slicknet and the @geteslint team for offering the chance and being very supportive! 💜
Give it a try and I hope you will find it helpful! 😆
Replying to @geteslint
This release also includes the new config inspector written by the prolific @antfu7:
eslint.org/blog/2024/04/esli…
aussieboi retweeted
Made a fun exploration on @geteslint... that might turn out to be useful? 👀
github.com/antfu/eslint-type…
aussieboi retweeted
We got there! New lazygit release is OUT!!! Thanks to everyone who helped make this happen, and thanks to all the lazygit users for being so cool.
github.com/jesseduffield/laz…
aussieboi retweeted
Nuxt CLI v3.11 is out as well ✨
🔎 Improved Nuxt modules search
✅ Check module format before installing
🧠 Install the module as dev dependency or not based on your package.json
nuxt.com/docs/api/commands/m…
aussieboi retweeted
Big update for TypeScript users!
🚫 Stop using compilerOptions#paths
✅ Start using package.json#imports
package.json#imports uses Node.js conventions, solving a specific pain point for monorepo folks.
Video coming. Too excited, had to insta-tweet.
Stay tuned.

ALT A screenshot of my editor highlighting import bits to show off to make package.json#imports work. The first highlight shows `"imports": { #components/*: "./components/*" }`. The second highlight shows `"devDependencies": { typescript: ^5 }`. The third highlight shows `export const TesterComponent = () => { return <div>Tester</div> }`. The fourth highlight shows me starting to type `<Tester` and the auto-complete window open to show the auto-import coming from "#components/tester.jsx".
Announcing TypeScript 5.4! 📢
Now with:
✅ Smarter control-flow analysis in closures
✅ The `NoInfer` utility type
✅ Broader support for bundlers and runtimes
✅ Quick fixes for missing parameters
✅ Improved auto-imports
and more! Try it today!
devblogs.microsoft.com/types…
aussieboi retweeted
Use Zod to parse your environment variables once, then use that inference to type process.env throughout your app.
Also, a beautiful example of how you can extend an interface from a VALUE, not a type.
aussieboi retweeted
CSS Trick 🎞️
You can create an infinite marquee/carousel animation without duplicate items 🤙
li { --destination: calc(var(--idx) * -100%); }
@keyframes slide { to { translate: var(--destination) 0;}}
Animate the items, not the list 😎
Here's the next <noscript>! 👇
The main trick here is animating the items and not the list. You can lean into custom properties to work out the origin and destination of an item.
Inline some custom properties on the list and the items.
<ul style="--count: 4;">
<li style="--index: 0;"></li>
<li style="--index: 1;"></li>
<li style="--index: 2;"></li>
<li style="--index: 3;"></li>
</ul>
Then use these to calculate the origin and the destination for each item in the list ⭐️
li {
--origin: calc((var(--count) - var(--index)) * 100%);
--destination: calc((var(--index) + 1) * -100%);
}
The last piece is hooking up the animation
li {
--duration: calc(var(--speed) * 1s);
--delay: calc(
(var(--duration) / var(--count)) * var(--index, 0)
);
animation:
slide var(--duration)
calc(var(--delay) - (var(--count) * 0.5s))
infinite linear;
}
The important part here is using those custom properties to define and calculate the animation properties for the items in the list 🤙
It's hard to cover everyone's use case in one demo 😅
But we try 🙏
As always, any requests, suggestions, questions, etc. Hit me up! 🤙
@CodePen link below 👇
p.s Can anyone recommend a decent lavalier microphone so I can record these better on the road 😭
CSS Tip! 🎠
You can create a responsive infinite marquee animation with container queries and no duplicate items 🤙
li{ animation: slide; }
@keyframes slide {
to { translate: 0% calc(var(--i) * -100%);}}
The trick is animating the items, not the list 😎
More tricks 👇
To get this one working, you need to animate the items and not the list (Watch the video first?). Each item needs to know its row index (--i) in the list and the parent needs to know how many rows are in the list:
ul { --count: 12; }
li:nth-of-type(1),
li:nth-of-type(2) { --i: 0; }
li:nth-of-type(3),
li:nth-of-type(4) { --i: 1; }
Once you have that, translate each item based on its row index in the list
li {
translate: 0% calc((var(--count) - var(--i)) * 100%);
}
Now for the animation. The key here is that each row has an animation-delay calculated from its index (--i). That number is offset to make it negative so the animation start is offset ✨
ul { --duration: 10s; }
li {
--delay:
calc((var(--duration) / var(--count)) * (var(--i) - 8));
animation:
slide var(--duration) var(--delay) infinite linear;
}
Make sure to wrap that animation in:
@media (prefers-reduced-motion: no-preference) { ... }
Lastly, the fun parts! 🤓
To create the "vignette" mask. Use a layered mask on the container 😷
.scene {
--buff: 3rem;
height: 100%;
width: 100%;
mask:
linear-gradient(transparent, white var(--buff) calc(100% - var(--buff)), transparent),
linear-gradient(90deg, transparent, white var(--buff) calc(100% - var(--buff)), transparent);
mask-composite: intersect;
}
To create the 3D skewed effect, use a chained transform (Try toggling it in the demo ⚡️):
.grid {
transform:
rotateX(20deg)
rotateZ(-20deg)
skewX(20deg);
}
As for the responsive part, use container queries! 🔥
article { container-type: inline-size; }
When the article (card) is narrower than 400px update the grid and animation settings 🤙 Double the rows means double the duration!
@container (width < 400px) {
.grid {
--count: 12;
grid-template-columns: 1fr;
}
li:nth-of-type(1) { --i: 0; }
li:nth-of-type(2) { --i: 1; }
li:nth-of-type(3) { --i: 2; }
li:nth-of-type(4) { --i: 3; }
li {
--duration: 20s;
}
}
CSS has the magic to be able to update those animations at runtime based on your custom property values 😎
An added bonus in this demo is that it doesn't require any JavaScript at all, for any of it 🤯 We can use CSS :has() for those toggles that update the styles, even the theme toggle! 🫶
Any questions, let me know! Make sure to check out the video. Will do a walkthrough one to follow-up 🤙
@CodePen link below! 👇
aussieboi retweeted
🌈 Shiki v1.0 is here!
github.com/shikijs/shiki/rel…
aussieboi retweeted
Building a SaaS is quick and easy with @nuxt_js.
And I'll prove it.
I'll build, ship, and open-source one before the week is over.
✅ Domain is purchased. See you soon.
💖 I'm sponsoring @yaeeelglx because of his amazing tools in @nuxt_js ecosystem, also thanks for Pinceau, amazing, love it. github.com/sponsors/Tahul?sc…
aussieboi retweeted
Vitest 1.0 is here!
- easier to read snapshots (say goodbye to \\")
- improved coverage support
- improved typechecking support
- performance optimizations
- --project option for workspaces
- a lot of bug fixes!
github.com/vitest-dev/vitest…






















