Alex Grad
grad.dev
Alex Grad
@grad.dev
Building macOS & iOS apps in public and sharing everything I learn.
Finally built my dream custom keyboard! Really happy with the result. The feel and sound are super satisfying!

PCB: @wooting.io 60HE+ Module
Case: Tofu60 Redux in Meteorite Gray
Keycaps: GMK MTNU Graphite
Switches: GEON Raw HE
March 20, 2025 at 12:54 PM
Ported dkaraush's rotating ASCII donut GLSL shader to Metal + SwiftUI 🙃

Repo: github.com/graddotdev/S...
February 21, 2025 at 10:31 AM
Just open-sourced NeoShadow, a SwiftUI component for creating smooth shadows! Perfect for neumorphic interfaces.

Check it out: github.com/graddotdev/S...
February 19, 2025 at 10:33 AM
Ported Figma's "Beautiful Shadows" plugin by Alex Widua to SwiftUI. Considering making this open source – would love to hear if there's interest from the SwiftUI community.
February 18, 2025 at 12:26 PM
10 days since upgrading from 16" MBP (Intel, 2019) to 14" MBP (M4 Pro, 2024). Hard to express how awesome this machine is — lightweight, beautiful, powerful and truly portable. Perfect for working from the couch.
February 14, 2025 at 12:27 PM
The only minor complaint I have is how dark (nearly black) the bulbs appear when they're off in the shimmering animation. This is particularly noticeable on a white background. @simonbs.dev, any chance you can add an option for this?
December 25, 2024 at 5:57 AM
The festivitas.app by @simonbs.dev is awesome!
December 25, 2024 at 5:57 AM
December 25, 2024 at 5:08 AM
I've completed day 25 of #AdventOfTypeScript.

Merry Christmas!
December 25, 2024 at 5:06 AM
I've completed the main part of day 24 of #AdventOfTypeScript but decided not to finish it since it focuses more on reverse engineering rather than type system knowledge. I've attached that part of the solution for anyone who's interested.
December 24, 2024 at 1:59 PM
Day 23 of #AdventOfTypescript required me to look at HotScript's repo to solve the task. Really like this approach. Definitely learned something new today.
December 23, 2024 at 2:25 PM
I've completed day 21 of #AdventOfTypeScript. Last year's tasks were much harder. I miss those days 😔

adventofts.com/events/2024/21
December 21, 2024 at 5:52 AM
However, using an accumulator is more efficient.
December 20, 2024 at 7:10 AM
I've completed day 20 of #AdventOfTypeScript.
Same task, same solution. Déjà vu.

adventofts.com/events/2024/20
December 20, 2024 at 7:10 AM
December 19, 2024 at 7:11 AM
I've completed day 18 of #AdventOfTypeScript. Easy one if you know about `NoInfer`.

adventofts.com/events/2024/18
December 18, 2024 at 7:00 AM
I also found a new way to bypass the test cases. 🙃
December 17, 2024 at 7:38 AM
I've completed day 17 of #AdventOfTypeScript. It took me some time to realize that `x[0]` is not working with the `string` type.

adventofts.com/events/2024/17
December 17, 2024 at 7:31 AM
Here's the fixed solution, as the previous one was not working correctly. Thanks to @andarist.bsky.social for pointing out the problem.
December 16, 2024 at 1:16 PM
Oh, now I see what you mean. I just need to move one line up to fix it.
December 16, 2024 at 1:06 PM
Here's a "brute force" solution as a bonus:
December 16, 2024 at 7:22 AM
I've completed day 16 of #AdventOfTypeScript. I had type-safe and working solution, but it fails t4. This test case forced me to rewrite my solution and wasted a lot of my time. I don't think that test case belongs there.

adventofts.com/events/2024/16
December 16, 2024 at 7:22 AM
There is also a "brute force solution":
December 15, 2024 at 9:44 AM
I've submitted the solution for day 15 of #AdventOfTypeScript using the cmd + y shortcut. The problem is that submitting using this shortcut accepts any solution, even a blank one. I hope today's scores don't count for the leaderboard.

#AdventOfTypeScript
adventofts.com/events/2024/15
December 15, 2024 at 9:39 AM
I just can't submit the solution today, so my leaderboard position is fucked. There are a lot of errors in the console. What a nice way to start the day. 😡

#AdventOfTypeScript
adventofts.com/events/2024/15
December 15, 2024 at 5:42 AM