Made me chuckle π hope your throat recovers, I was nursing a cold with supasoup this week too
Posts by Matt Rossman
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
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
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!
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!
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...
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 π
The sounds are excellent π€ @joshwcomeau.com would appreciate
Visual Effects
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...
Updated my project template dashboard new.mattrossman.com to a more space-efficient masonry layout with the help of `astro-masonry`
Early builds of a rewritten SpotMenu (Spotify controls for Mac menu bar) are popping up in this thread, looking nice π
github.com/kmikiy/SpotM...
TIL about ::part() for letting web component consumers more easily style elements within the shadow DOM
Local Voice Assistant
On device voice assistant running on my Mac Mini w/Ollama and Home Assistant: mattcool.tech/posts/home-a...
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!
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...
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...
""" 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.
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).
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.
A helpful calculator for learning optimal synergies in #Balatro
efhiii.github.io/balatro-calc...
What camera / lens have you been using for these cat pics? They're so creamy!
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
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 π