Frameable Tech Weblog

Technical insights and musings from the friendly folks at Frameable

We made "ding" sounds in Microsoft Teams when people join a call

What is it about the way that we humans are wired — that hearing a "hello" from a colleague who just joined a long-running video call causes a jolt of surprise/panic/anxiety to those already in the call, but hearing a "ding" followed by the same "hello" causes no such alarm? Working sessions in video calls Our team will often have thematic collaborative… Read more →

You need alerts for your alerts: the case of the leaking file descriptors

The problem appears A few weeks ago, the infrastructure team here at Frameable received a report from one of our colleagues that made us feel like the floor had dropped out from under us. Our internal monitoring system – codename ‘Canary’ – had been silently failing for days! Canary is a small, simple NodeJs app that once a minute runs a series of si… Read more →

How we found sanity in a subset of Tailwind CSS

Since its inception, the idea of utility CSS has been met with both praise by some and disdain by others. Tailwind took utility CSS to the extreme, and so has been especially controversial. Those who love it will say... > - "It is a relief not having to come up with unique class names all the time!" > - "It is a relief not having to switch context back an… Read more →

A technique to store rich formatting separately from text

Some time ago we found ourselves having built a collaborative whiteboard product, where text was stored as plain text. But then we wanted to add a limited set of rich text formatting options -- bold, italics, and first- and second-level headings, and so plain text would not suffice anymore. Should we use markdown? How should we store the rich text? We… Read more →

Frameable tech stack

Video and collaboration are core to all of our products. Here's our tech stack of choice... Vue We use Vue for our front end application framework. We keep it pretty simple and straightforward with an observable store and public methods to mutate. No vuex or elaborate ceremony. Syncable For synchronizing data across clients, we use a system we ha… Read more →