So I’ve had this idea for a while now that I want to try out. I want to re-create a conference, or a meetup over video-conferencing, but the problem is that these events aren’t * just * webinars:

1. There's usually time at the beginning or end where you get to meet the other people interested in the topic.

2. The format can vary. It can be one person talking, a panel. There could be questions at the end. We could split into different groups.

3. Conferences specifically aren't single room affairs. Different kinds of talking happen over the event space.

The idea, flexchat, is an application with a schedule which specifies different interaction formats over time, and a way to define these different formats.

Here are different kinds of formats we could handle:

Example

The easiest way to have people network and meet other people at the event is to use a kind of speed-dating/“chatroulette” format, where people are paired for 1-1 conversations every say, 5 minutes:

Schedule
----
6pm-6:30pm: Groups of 2, changed every 5 minutes

Then we want the focus to go to an organizer who introduces the meetup and the next speaker

6:30pm-6:35pm: @Organizer1 speaks

Then, after the first speaker we want to have 5 minutes for questions. The Questions format still has the main speaker, but there is a queue of slots people can join, and they get to speak, then they give focus back to the main speaker. This goes on until the time is out.

6:35-6:55pm: @Speaker1 speaks
6:55-7:00pm: @Questions queue

Let’s say we want to take a break for 10 minutes, but leave everyone in small groups of 4 if they want to talk to others instead of 1 giant lobby:

7:00pm-7:10: Groups of 4

After this we move into a panel of 5 speakers:

7:10pm-7:40pm: @PanelSpeaker{1,2,3,4,5} speak

Many videoconference tools can handle one or two of these formats, but none have the flexiblity to do them all, and switch between them.

Programmable Formats

The core goal is to have programmable formats, that can be switched based on a schedule. For example, more complicated formats like “split into pairs, then join pairs into groups of 4, then groups of 8” could be written.

Some of the formats could be “we all watch a youtube video”, or they could involve more interactive games. On the far end of this there could be some kind of tournament mode where there are many rooms, each playing the same game, and the rules for tournament progression are written into the format.

So what I want flexchat to be is a “framework” that runs different formats, and have an API for Formats to use, so we can write custom formats.

Current Direction

As a proof of concept, I want to make something that might look useful to a lot of people.

What I’m trying to implement is re-creating a conference, which usually have different “formats” in different parts of the event space:

  • A basic joining lobby
  • A “1-1 meeting space” where you can meet others(chatroulette style), kind of like a hallway track
  • A main conference room with a talking schedule
  • Maybe an “unconference” module, where people can vote on speaking topics, and then rooms for the particular topics get created at a specific time
  • Possibly the ability to have multiple tracks, each on different schedules

I’m also thinking of making a “map” module where you can see where in the space participants are.

Some implementation ideas (what I have so far)

This should use WebRTC to be accessible to enough people.

WebRTC is fiendlishly complicated.

To counteract this I’m going to try to re-use Jisti Meet for the video component. To control the different formats we’ll make users join different jitsi-meet rooms. For example, to pair two different users, the backend could create a unique room id, and then send a message to each user’s frontend to go join that room. To make a chatroulette format the backend would create N/2 such rooms and pair people into them appropriately (also handling new arrivants and people leaving).

A lot of this functionality would be perfect for Phoenix (this is basically a high-level chat room with lots of moving rooms), but I want to use JS to be as accessible as possible, and to be able to host on glitch for free.

The idea is that “chatroulette mode”, or “panel mode” will be called Formats. A Format has to take all the current users, and maybe more application state, and then map all the users to a room.

In the future, a Format could specify some kind of Room UI to use for each room. Like, “Questions mode” a format could specify some React component to render, or it could include extra info to the frontend to render like a theme or a youtube URL.

For example, a “1-1 meeting mode” could should add user bios for both users.

I’m planning on defining Schedules using xState state machines, so they will be easy to define and visualize.

There might even be some xState drag and drop builder for someone to create their own event schedules without coding.

I might get carried away and create a lot of UI for building a conference, and using User IDs, just for fun & to keep practicing full stack work.


comments powered by Disqus