Sign in

Christian Grøngaard

@hamburger.cloud
169 followers 108 following 107 posts

Father of two children and countless software bugs Currently working on the text editor used in the very core of the @Sanity.io Content Operating System: github.com/portabletext/editor.

PostsRepliesMedia
Reposted by Christian Grøngaard
Cody @codey.bsky.social · 22/09/2026
I stopped using Safari @sanity.io because of wobbly spinners. Now I can use it again thanks to zoom banter & humans working together, & writing a @github.com PR _by hand_ (NO AI)! It didn't require convincing @jensimmons.bsky.social to add no-wobbles to Baseline 2027! www.sanity.io/engineering/...
0122
Christian Grøngaard @hamburger.cloud · 02/08/2026
Spent some quality time with my son today
Nintendo 64 with GoldenEye 007 loaded up on the screen
030
Christian Grøngaard @hamburger.cloud · 22/07/2026
Today, I helped ship native Portable Text tables in @sanity.io Studio: www.sanity.io/docs/changel... Portable Text always supported nested structures, but making them inline editable was a whole new beast, one we've been chipping at since vendoring Slate in Feb. Gonna talk more about this soon!
sanity.io
Portable Text table editing, smarter content releases, and more reliable Studio and CLI behavior | Sanity Docs
191
Christian Grøngaard @hamburger.cloud · 16/05/2026
Spinning some super furry animals
Super Furry Animals - Radiator spinning vinyl
010
Christian Grøngaard @hamburger.cloud · 01/01/2026
As expected, it was *incredibly* difficult to delete my Facebook account. However, after some UI debugging and browser switching, I finally succeeded, and it looks like 2026 is off to a flying start.
020
Reposted by Christian Grøngaard
henry ✷ @strange.website · 01/01/2026
you’re right! it feels mostly awful to Go Online™, these days. the internet in a sad state, for reason after reason after reason. but there is a way to fix it; to trade the voidful howling for a quiet & joyful song. here’s how to win the war for the soul of the internet, and build the Web We Want.
henry.codes
A Website To End All Websites | Henry From Online
How to win the war for the soul of the internet, and build the Web We Want.
10325125
Reposted by Christian Grøngaard
Sanity @sanity.io · 15/12/2025
You vibe-coded a site. Content lives in markdown. It works. Then your client asks for a login. The Sanity MCP Server lets your agent set up and manage a real content backend in the same conversation you used to build everything else. www.sanity.io/blog/sanity-...
sanity.io
You’ll need a CMS eventually. Let your agent set it up. | Sanity
With the Sanity MCP server, your AI agent can now create schemas, content, and editorial interfaces from prompts.
073
Christian Grøngaard @hamburger.cloud · 17/10/2025
Couldn't sleep so I built Game of Life in @sanity.io's Portable Text Editor 👉 portable-text-of-life.vercel.app 🧑‍💻 github.com/portabletext...
2195
Christian Grøngaard @hamburger.cloud · 04/08/2025
Now that's what I call vacation
GitHub contribution chart with three consecutive blank weeks
150
Reposted by Christian Grøngaard
Sanity @sanity.io · 08/05/2025
The age of Headless CMS is over. Say hello to the Sanity App SDK, Functions, AI Agents, and more—all part of The Content Operating System. www.sanity.io/spring-relea...
sanity.io
Spring Release | Sanity
Build, automate, and run every content workflow with native apps, schema-aware AI, and serverless functions—all in Sanity.
2193
Christian Grøngaard @hamburger.cloud · 27/04/2025
error TS6133: 'someVariable' is declared but its value is never read. That's terrible. Better fail the whole build immediately.
020
Christian Grøngaard @hamburger.cloud · 30/03/2025
Partial solar eclipse, March 29, as seen from Denmark (through the right glasses)
The sun, visible through dark clouds, partially eclipsed by the moon
030
Christian Grøngaard @hamburger.cloud · 16/03/2025
Found my Wolfenstein 3D floppy
Blue floppy disk containing Wolfenstein 3D Episode One: Escape from Wolfenstein
140
Christian Grøngaard @hamburger.cloud · 15/03/2025
Maybe a 🌶️ take, but I generally don't like this trick. If one of your default/known values changes - e.g., "alert" is renamed to "warning" - your call sites won't break, and subtle, hard-to-discover bugs can be introduced. Any string is allowed, remember?
230
Christian Grøngaard @hamburger.cloud · 14/03/2025
It's so good. And... psst... guess what's driving the behaviours in and around the code block: www.portabletext.org/concepts/beh...
portabletext.org
Behaviors
Description of behaviors
020
Christian Grøngaard @hamburger.cloud · 08/03/2025
Looks like last.fm still doesn't offer a way to export your data. So... I guess I might as well revive my 20-year-old account for the second(?) time! Do you have one? www.last.fm/user/christi... (I want to listen to more music again, and maybe this can be a weird sort of motivation.)
last.fm
christianhg’s Music Profile | Last.fm
Listen to music from christianhg’s library (85,044 tracks played). christianhg’s top artists: Radiohead, The Beatles, Tom Waits. Get your own music profile at Last.fm, the world’s largest social music...
320
Christian Grøngaard @hamburger.cloud · 23/02/2025
My MacBook from 2007. Still boots. And I still hate computers.
MacBook A1181 with various stickers, including "I Hate Computers", on a couch
020
Christian Grøngaard @hamburger.cloud · 08/02/2025
It really is a special feeling sitting in your car, listening to a podcast, as you've done so many times before, but this time YOU'RE THE GUEST! Thank you, @simeongriggs.dev, for inviting me on to talk about Portable Text, text editors, Behaviours, Gherkin and state machines and more.
My car dashboard showing Code && Content episode "The final boss of front-end: block editors"
092
Christian Grøngaard @hamburger.cloud · 04/02/2025
Very soon, you'll be able to hear @simeongriggs.dev and me talk about the Portable Text Editor—the challenges behind the scenes, as well as the cool new APIs we're cooking up.
070
Christian Grøngaard @hamburger.cloud · 03/02/2025
The Behavior API for @sanity.io's Portable Text Editor will allow you to configure the editor in ways that where previously not possible. Behaviors can be bundled in Plugins to easily turn them on and off. Here's an example of a simple <OneLinePlugin /> that restricts the editor to one block.
2113
Christian Grøngaard @hamburger.cloud · 23/01/2025
Why is the first cup of coffee always an emergency?
010
Christian Grøngaard @hamburger.cloud · 14/01/2025
Trying to use Copilot for a simple, boring task
Me asking GitHub Copilot how I can close it again (it was genuinely difficult to figure out)
020
Christian Grøngaard @hamburger.cloud · 09/01/2025
So cool that we can finally ship this as the first step towards a more pleasant and modern writing experience in the @sanity.io Studio. For the interested, here's a link to the source code of the markdown behaviours found in the Portable Text Editor repository: github.com/portabletext...
github.com
192
Christian Grøngaard @hamburger.cloud · 05/01/2025
Me releasing I've spent the past 10 years writing JavaScript full-time
Small 7000(?) year old sculpture of a person, sitting with an open mouth and hands on their cheeks
130
Christian Grøngaard @hamburger.cloud · 02/01/2025
Opened up my work laptop after almost two weeks off and this is the first thing that meets me. I guess I left in the middle of a debug session?
Chromium Dev Tools "Paused in debugger" debug menu
040
Christian Grøngaard @hamburger.cloud · 01/01/2025
I keep toggling bold on and off again
010
Reposted by Christian Grøngaard
Simeon Griggs @simeongriggs.dev · 19/12/2024
Setting up a WYSIWYG editor in React is new to me—and a real neat UI challenge at the same time. Build this with Tailwind, Typography & Headless UI. That editing pane just has the `prose` class on it. Sick! 👏 @hamburger.cloud this is immense work! www.portabletext.org
251
Christian Grøngaard @hamburger.cloud · 18/12/2024
So proud of this and can't wait to take it even further.
050
Christian Grøngaard @hamburger.cloud · 17/12/2024
git: I'm dying me: git checkout -b docs-fix-typo-2
❯ git checkout -b docs-fix-typo                         
fatal: a branch named 'docs-fix-typo' already exists
030
Christian Grøngaard @hamburger.cloud · 10/12/2024
I wish GitHub (git?) was better at showing stacked diffs. Me: Let me carefully and surgically refactor this function in one commit and then rename it in the next commit GitHub: EVERYTHING CHANGED
110
Christian Grøngaard @hamburger.cloud · 08/12/2024
Two-step username/password forms Can we please stop with that
040
Christian Grøngaard @hamburger.cloud · 06/12/2024
React v19 *just* dropped and @codey.bsky.social already made sure our Portable Text Editor is up-to-date 💙 github.com/portabletext...
github.com
GitHub - portabletext/editor
Contribute to portabletext/editor development by creating an account on GitHub.
060
Christian Grøngaard @hamburger.cloud · 02/12/2024
I've used Little Snitch for 16 years. Of course I'm going to upgrade when they release a new major version.
Prompt informing me about the successful registration of Little Snitch 6
010
Christian Grøngaard @hamburger.cloud · 26/11/2024
Today, I released the library we use to drive >200 tests using Gherkin to make sure @sanity.io's Portable Text Editor behaves correctly. Pkg: www.npmjs.com/package/race... Src: github.com/portabletext... PTE Gherkin spec: github.com/portabletext... PTE Gherkin test suite: github.com/portabletext...
npmjs.com
racejar
A testing framework agnostic Gherkin driver. Latest version: 1.0.1, last published: 4 hours ago. Start using racejar in your project by running `npm i racejar`. There are no other projects in the npm ...
1196
Christian Grøngaard @hamburger.cloud · 22/11/2024
This was really good www.youtube.com/watch?v=YCjN...
youtube.com
Half-Life 2: 20th Anniversary Documentary
YouTube video by Valve
000
Christian Grøngaard @hamburger.cloud · 19/11/2024
Let's just say, we've been cooking
060
Christian Grøngaard @hamburger.cloud · 16/11/2024
The moment I became an adult was the moment I turned off code ligatures and started writing JavaScript with semicolons.
220
Christian Grøngaard @hamburger.cloud · 15/11/2024
Looks like @github.com fixed the merge experience 😲
GitHub merge section with a clear summary of the CI checks, highlighting what checks failed
000
Christian Grøngaard @hamburger.cloud · 13/11/2024
Seeing this in the XState release notes takes me back to when I was first introduced to XState back in 2017. Just a little functional, stateless JS library where Machines had a `.transition()` method to advance to the next state. Still love and use XState to this day. github.com/statelyai/xs...
import { transition } from 'xstate';

const [nextState, actions] = transition(actorLogic, currentState, event);
// Execute actions as neededimport { Machine } from 'xstate';

const lightMachine = Machine({
  key: 'light',
  initial: 'green',
  states: {
    green: {
      on: {
        TIMER: 'yellow',
      }
    },
    yellow: {
      on: {
        TIMER: 'red',
      }
    },
    red: {
      on: {
        TIMER: 'green',
      }
    }
  }
});

const currentState = 'green';

const nextState = lightMachine
  .transition(currentState, 'TIMER')
  .value;

// => 'yellow'
000
Christian Grøngaard @hamburger.cloud · 12/11/2024
I would be introducing regressions on a daily basis if it wasn't for @vitest.dev. Super stoked that @sanity.io is now sponsoring the project.
0172
Reposted by Christian Grøngaard
Sanity @sanity.io · 12/11/2024
Open source software is crucial to the success of Sanity, so it makes sense to give back to great projects that we and our community use every day. That's why we joined the @opensourcepledge.com with a $112k donation to great projects and maintainers. 🫶 www.sanity.io/blog/sanity-...
sanity.io
Sanity joins the Open Source Pledge
We are joining the Open Source Pledge, committing to pay $2,000 per year per full-time developer directly to open source maintainers and foundations.
811927
Christian Grøngaard @hamburger.cloud · 09/11/2024
Skip to the end. Use React Aria.
020
Christian Grøngaard @hamburger.cloud · 07/11/2024
Time to get off that other platform
Email from the other platform stating my data is ready for download
160
Christian Grøngaard @hamburger.cloud · 06/11/2024
Hey, that's my team! ♥️
050
Christian Grøngaard @hamburger.cloud · 04/11/2024
One of the things I love about Gherkin is that it literally only takes seconds to add new scenarios if you have a good set of existing steps to use. Here, I've expanded a Scenario Outline with a few more examples to root out an edge I just found in github.com/portabletext....
Four rows of examples added to an "Inserting text at the edge of a decorated annotation" Gherkin Scenario Outline
010
Christian Grøngaard @hamburger.cloud · 03/11/2024
It's absolutely wild that there exists more than 900,000,000 ways to combine six 2×4 LEGO bricks. Here's combo #659,297,982.
2×4 LEGO brick combo card
030
Christian Grøngaard @hamburger.cloud · 02/11/2024
Oh no, @bsky.app has awoken the urge to buy more (silly) domains. Also, welcome to the fold, christian.monster.
030
Christian Grøngaard @hamburger.cloud · 31/10/2024
"Testing is documenting" Especially if your tests are written in a human-readable language. I'm currently working on @sanity.io's text editor, and here Gherkin is working really well for documenting and keeping all the different behaviours in check. github.com/portabletext...
Gherkin Scenario Outline: Inserting text at the edge of a decorator
151