Matt Rossman's Avatar

Matt Rossman

@mattrossman.com.bsky.social

AI Tooling @supabase.com Writing: mattrossman.com I build web applications with emerging tech. Geeked about @effect-ts.bsky.social

78 Followers  |  265 Following  |  69 Posts  |  Joined: 06.07.2023  |  2.0687

Latest posts by mattrossman.com on Bluesky

Made me chuckle πŸ˜† hope your throat recovers, I was nursing a cold with supasoup this week too

12.09.2025 02:26 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
A silver MacBook Pro with a black skin and green Supabase logo adhered, its lid lifted, positioned atop the original laptop box relabeled with masking tape as "SupaBook Pro".

A silver MacBook Pro with a black skin and green Supabase logo adhered, its lid lifted, positioned atop the original laptop box relabeled with masking tape as "SupaBook Pro".

Supabase laptop looking fresh

11.09.2025 21:29 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Post image

Supabase Select brings together the top builders in the industry

Join Guillermo Rauch, CEO and Founder of @vercel.com speaking in Track 1

Apply today: select.supabase.com

02.09.2025 19:09 β€” πŸ‘ 7    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0
Matt stands in front of a wall of greenery wearing a black hoodie with Supabase branding atop a green T-shirt, and a black ball cap with the Supabase logo.

Matt stands in front of a wall of greenery wearing a black hoodie with Supabase branding atop a green T-shirt, and a black ball cap with the Supabase logo.

Delighted to share that I’ve joined @supabase.com to work on AI tools!

Open source has taught me so much, so it’s a privilege to now contribute full-time in this space. Excited to help make this excellent developer platform even better!

13.08.2025 22:10 β€” πŸ‘ 5    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Post image

We're really proud to show off the final design for Pebble Time 2*! It's quite a bit sleeker and imo more awesome looking than the original design for Core Time 2 we showed off in March. I hope you like it!

13.08.2025 12:57 β€” πŸ‘ 361    πŸ” 48    πŸ’¬ 59    πŸ“Œ 13
#1615: Viverse’s WebXR Publishing Strategy with James C. Kane & β€œIn Tirol” Game – Voices of VR Podcast

My Voices of VR interview is out! I spoke to @kentbye.com at @awexr.com about my game, WebXR broadly, and publishing on @viverse.com. I'm a huge fan of this podcast b/c of Kent's journalistic objectivity and ethics, but also his genuine enthusiasm and deep experience

voicesofvr.com/1615-viverse...

06.08.2025 15:26 β€” πŸ‘ 13    πŸ” 6    πŸ’¬ 0    πŸ“Œ 0
let arr = new Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]);
console.log(arr.toBase64());
// 'SGVsbG8gV29ybGQ='
console.log(arr.toHex());
// '48656c6c6f20576f726c64'
let string = 'SGVsbG8gV29ybGQ=';
console.log(Uint8Array.fromBase64(string));
// Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100])

string = '48656c6c6f20576f726c64';
console.log(Uint8Array.fromHex(string));
// Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100])

let arr = new Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]); console.log(arr.toBase64()); // 'SGVsbG8gV29ybGQ=' console.log(arr.toHex()); // '48656c6c6f20576f726c64' let string = 'SGVsbG8gV29ybGQ='; console.log(Uint8Array.fromBase64(string)); // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100]) string = '48656c6c6f20576f726c64'; console.log(Uint8Array.fromHex(string)); // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100])

ECMAScript excitement πŸ˜‰

Congrats to @bakkot.com on advancing UInt8Array ↔️ Base64/Hex to Stage 4 at TC39 this week πŸŽ‰

UInt8Array.prototype.
toBase64
toHex

UInt8Array.
fromBase64
fromHex

It lets you convert directly between binary data and Base64/Hex strings πŸ‘

30.07.2025 06:56 β€” πŸ‘ 40    πŸ” 9    πŸ’¬ 1    πŸ“Œ 0
Preview
Create beautiful images of your code Turn your code into beautiful images. Choose from a range of syntax colors, hide or show the background, and toggle between a dark and light window.

Note to self for the generated image

08.07.2025 20:29 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Visual Effect - Interactive Effect Playground An interactive visualization tool for the Effect library that demonstrates how Effect operations execute over time with animated visual representations and synchronized sound effects.

Demo link from twitter for posterity

06.07.2025 14:55 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

The sounds are excellent 🀌 @joshwcomeau.com would appreciate

06.07.2025 14:53 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Video thumbnail

Visual Effects

06.07.2025 02:20 β€” πŸ‘ 7    πŸ” 2    πŸ’¬ 2    πŸ“Œ 2
Quicktime Color Management: why so many ISSUES?!
YouTube video by LE LABO DE JAY Quicktime Color Management: why so many ISSUES?!

Exporting video with correct colors from #DaVinciResolve is unexpectedly difficult... Something that looks great in editor looks maddeningly "off" in different viewers. I have a lot respect for creators who have mastered this!

www.youtube.com/watch?v=1Qln...

01.07.2025 00:32 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
Quality is a trap It is a proxy phrase, often born of an inability or unwillingness to articulate other concerns.

I wrote about why I'm tired of reading about takes on quality. ericwbailey.website/published/qu...

25.06.2025 14:07 β€” πŸ‘ 51    πŸ” 14    πŸ’¬ 6    πŸ“Œ 2
Preview
GitHub - OlivierEstevez/astro-masonry: Zero-dependency responsive masonry layout component for Astro with minimal setup. Zero-dependency responsive masonry layout component for Astro with minimal setup. - OlivierEstevez/astro-masonry
25.06.2025 15:23 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

Updated my project template dashboard new.mattrossman.com to a more space-efficient masonry layout with the help of `astro-masonry`

25.06.2025 15:23 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

Early builds of a rewritten SpotMenu (Spotify controls for Mac menu bar) are popping up in this thread, looking nice πŸ‘€

github.com/kmikiy/SpotM...

25.06.2025 04:50 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
::part() - CSS | MDN The ::part CSS pseudo-element represents any element within a shadow tree that has a matching part attribute.

TIL about ::part() for letting web component consumers more easily style elements within the shadow DOM

24.06.2025 18:22 β€” πŸ‘ 3    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0
Local Voice Assistant

Local Voice Assistant

On device voice assistant running on my Mac Mini w/Ollama and Home Assistant: mattcool.tech/posts/home-a...

18.06.2025 14:40 β€” πŸ‘ 2    πŸ” 1    πŸ’¬ 0    πŸ“Œ 0
Preview
mattrossman/mcp-starter

An example to start from:

14.06.2025 01:13 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Video thumbnail

The @vercel.com MCP adapter works with @val.town HTTP triggers (for streamable HTTP at least) meaning you can write and deploy MCP servers with TypeScript instantly, right in your browser!

14.06.2025 00:53 β€” πŸ‘ 5    πŸ” 1    πŸ’¬ 1    πŸ“Œ 0
Video thumbnail

Spotted on the changelog for Deno Deploy EA...

Playgrounds!

- Create and edit playgrounds
- Multi-file playground support
- Playground templates and settings

docs.deno.com/deploy/early...

12.06.2025 15:30 β€” πŸ‘ 30    πŸ” 6    πŸ’¬ 1    πŸ“Œ 3
Preview
Matt Rossman on X: "I can't shake the feeling that React is missing a primitive for managing resources that affect first paint. This `useResource` hook is impossible to write while respecting strict mode. https://t.co/Cv1KHBCuUc" / X I can't shake the feeling that React is missing a primitive for managing resources that affect first paint. This `useResource` hook is impossible to write while respecting strict mode. https://t.co/Cv1KHBCuUc

I'd go a step further and say it should support a cleanup function too. State initializers can have side effects and solving this today adds re-renders. I want a hook that combines the strengths of useState (state management) and useEffect (dependencies, lifecycle management).

x.com/the_ross_man...

12.06.2025 00:59 β€” πŸ‘ 1    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
"""
Usage in browser console:

webRTCApp.smallWebRTCTransport.sendMessage({
  type: "user_content",
  content: "What's the weather in SF?"
})
"""

@transport.event_handler("on_app_message")
async def on_app_message(transport, message: dict):
    match message:
        case {"type": "user_content", "content": content}:
            await task.queue_frames(
                [
                    LLMMessagesAppendFrame([{"role": "user", "content": content}]),
                    context_aggregator.user().get_context_frame(),
                ]
            )

""" Usage in browser console: webRTCApp.smallWebRTCTransport.sendMessage({ type: "user_content", content: "What's the weather in SF?" }) """ @transport.event_handler("on_app_message") async def on_app_message(transport, message: dict): match message: case {"type": "user_content", "content": content}: await task.queue_frames( [ LLMMessagesAppendFrame([{"role": "user", "content": content}]), context_aggregator.user().get_context_frame(), ] )

When testing @pipecat.bsky.social examples with their prebuilt UI, you can manually submit user messages (or trigger other behavior of your choice) through the browser console via app messages by including a handler like this.

11.06.2025 16:09 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0
Preview
Cost of running a thin client home server

I use a $35 HP T620 Thin Client as my home server. I measured its energy usage over the past couple of months to assess how much it costs me to run a lightweight always-on server with #HomeAssistant and media management software (around $0.08/day).

10.06.2025 17:08 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Preview
Naive promise interruption

Sometimes I want to interrupt an async function that doesn't support abort signals. In situations without side-effects, here's a wrapper to abort a promise and lazily discard its result. I generally prefer safer interruption patterns (as in #Effect-TS) but it's handy in a pinch.

09.06.2025 12:19 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0
Balatro Calculator Calculate the score of any Balatro hand

A helpful calculator for learning optimal synergies in #Balatro

efhiii.github.io/balatro-calc...

01.06.2025 12:00 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

What camera / lens have you been using for these cat pics? They're so creamy!

31.05.2025 22:06 β€” πŸ‘ 0    πŸ” 0    πŸ’¬ 1    πŸ“Œ 0

I like to put `ignore/` in .gitignore for most projects I work on.

When I want to create an untracked file (e.g. private notes, large static asset for dev) I can toss it in an `ignore/` folder anywhere. Wish something like this came in more starter templates! #git

20.05.2025 20:06 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

I was going nuts trying to figure out why Cloudflare logs for my MCP server were showing requests every 5 minutes from my location. Turns out Claude Desktop was the culprit, even though I closed the app and removed the MCP server config it left an `mcp-remote` process running in the background πŸ™ƒ

17.05.2025 22:51 β€” πŸ‘ 2    πŸ” 0    πŸ’¬ 0    πŸ“Œ 0

@mattrossman.com is following 19 prominent accounts