Robert Bartel Product Software Engineer

​Product Software Engineer, East Coast

I build
products,
and the toolsbehind them.

Currently
Staff Software Engineer at Airbnb, leading the CRM platform
Previously
Founding Product Engineer at Brightwave; led a team of 13 at Meta

Projects

On the side, in 2026

  • Show silt on the stage

    01

    silt

    A small, statically typed language built around tasks and channels.

    silt-lang.com source

    -- examples/concurrent.silt
    let ch = channel.new(10)
    
    let producer = task.spawn { ->
      channel.send(ch, "hello")
      channel.send(ch, "from")
      channel.send(ch, "silt")
      channel.close(ch)
    }
    
    let consumer = task.spawn { ->
      -- receive until closed
    }
    $ silt run concurrent.silt
    hello from silt
    Fig. 1, silt
  • Show sediment on the stage

    02

    sediment

    Local-first semantic memory for AI agents, in a single binary.

    sediment.sh source

    • sediment store \"The user prefers pnpm over npm for all JavaScript projects"
    • sediment store \"Deploys go to Vercel; the production branch is main"
    • sediment store \"Run cargo clippy before opening a pull request"
    • sediment store \"Write commit messages in the imperative mood"
    • sediment store \"The staging database is reset every night"

    Which package manager should I use?

    1. 0.41 The user prefers pnpm over npm for all JavaScript projects
    2. 0.39 Deploys go to Vercel; the production branch is main
    Fig. 2, sediment
  • Show debrief on the stage

    03

    debrief

    A written note after every run, with every number checked against your data.

    debrief.fit

    Tempo run, July 10, 2026

    On pace, it landed almost exactly where your history says it should, averaging 5:25/km. What didn’t match was the cost: average HR ran at 102% of threshold, and decoupling came in at 7.1%. Same pace, higher strain: that points straight at the weather, with a dew point of 22.4 °C. It lines up with your own pattern too: against the same route four days ago in cooler air, you actually ran faster today (-11 s/km), but decoupling jumped by nearly ten points relative to that day.

    Every number checked against your watch file

    Fig. 3, debrief

Experience

17 years, since 2009

  1. 2025–now Airbnb Staff Software Engineer Lead the CRM platform and the Community Center, where hosts ask questions and help each other.
  2. 2023–2025 Brightwave Founding Product Engineer Led UX engineering for agentic AI tools that research large data sets, from product strategy to interface engineering and user research.
  3. 2015–2023 Meta Staff Software Engineer Instagram and Facebook: led a team of 13 on VR and wearables, and grew Today In to 3M+ daily users.6 highlights, Instagram and Facebook

    Instagram

    • Brought VR and wearables to Instagram, including Meta Gallery storage, the Ray-Ban | Meta launch and live streaming from the glasses.
    • Unified sharing infrastructure across Meta's apps.
    • Built curated shopping collections and the tools to curate them.

    Facebook

    • Built Today In, a local news product, in the US and Australia, and grew its team from 4 to 23 engineers.
    • Helped launch Facebook News.
    • Scaled personalized video generation from 100k to 3M+ videos a day, and built its editor in React and React Native.
  4. 2014–20152014–15 AKQA Senior Web Developer
  5. 2012–20142012–14 SinnerSchrader Frontend Engineer
  6. 2009–20122009–12 DotsUnited Web Developer

Open source

From 2011 to 2013, still in use

2,902 stars on GitHub, about 1M downloads a year

  • easy-pie-chart

    2,058 stars, about 1M downloads a year

    Animated pie charts for single values.

    rendro.github.io source

    Fig. 4, easy-pie-chart
  • vintageJS

    844 stars

    Vintage photo effects, rendered in the browser.

    vintagejs.com source

    Fig. 5, vintageJS
  • mocha-given

    12k downloads a year

    Given, When, Then syntax for Mocha tests.

    source

    // counter.spec.jsdescribe("a counter", () => {  Given(() => { this.n = 24 })  When(() => { this.n++ })  And(() => { this.n *= 2 })  Then(() => this.n === 50)})
    $ mocha --ui mocha-given  a counter    ✓ then this.n === 50   1 passing
    Fig. 6, mocha-given