Skip to Content

Joseki Party

See Live Project

The sim­plest game of Baduk, Weiqi, or Go this side of the in­ter­net. Start a game of Go, and play with a friend sim­ply by send­ing them a link. Invite peo­ple to wit­ness your vic­tory — or hu­mil­i­at­ing de­feat de­pend­ing on how good your friend is.


I’ve been play­ing Go (poorly) for the past 10 years or so ( on and off), so when Paul asked me if I knew how to play af­ter the re­cent tri­umph of AlphaGo over Lee Sedol, 9 Dan, I was pretty ex­cited to have an op­po­nent. Paul learned the game quick and soon was play­ing at my level (and slightly above!). We played over lunch, and one day when we were both work­ing from home rather than the of­fice, we de­cided to see what was out there for play­ing on­line.

While there are some amaz­ing servers out there for play­ing Go like Online Go, KGS, and Tygem Baduk, they all re­quired a sig­nif­i­cant amount of set up, in­vest­ment, and it was tricky for us to just pick up a game with each other right away. What we needed was a Go server where one player could send a URL to the other and start play­ing.

So we built that!

Title Screen for Joseki Party

The Big Idea

We had a cou­ple of hard re­quire­ments for the pro­ject, which shaped a lot of our de­sign de­ci­sions.

No Auth: We wanted to avoid any sort of user ac­count man­age­ment — no cre­at­ing ac­counts, no sign­ing in, no OAuth with Twitter or Facebook so you can share post your game points. This was go­ing to be about zero-fric­tion Go. Any set up where a user has to do any­thing be­yond start play­ing when they got a link was off the table.

No Server: Paul and I are front-end types — we both know plenty of NodeJS but dis­like writ­ing servers. This was go­ing to be pure client-side.

No Framework: There’s been a lot of dis­course about the state of JavaScript frame­works in 2016. And af­ter us­ing any num­ber of dif­fer­ent frame­works for any num­ber of pro­jects (and one no­table ex­am­ple of 4 frame­works in one pro­ject) I thought we could ex­per­i­ment with Vanills JS and see where that landed us.

Live: It’s a game, so we de­cided it should feel as close as pos­si­ble to sit­ting down and play­ing a game. We wanted to avoid browser re­freshes, no­ti­fi­ca­tions, and things of that na­ture. When you play, your op­po­nent sees the move. When your op­po­nent plays, you see the move.

MVI Loops: A ma­jor part of the pro­ject was get­ting deep into the prac­ti­cal­i­ties of writ­ing uni­di­rec­tional ap­pli­ca­tions with a Model → View → Intent sys­tem.

A New Visual Language: One of my ma­jor de­sign in­ter­ests is in the trans­la­tion be­tween the ana­log and the dig­i­tal. I wanted to take the same ap­proach to the aes­thet­ics of Go — at­tempt the keep the strik­ing na­ture of the game it­self but ditch any at­tempt at skeuo­mor­phism that per­vades prac­ti­cally all of the com­puter Go pro­grams I’ve ever played on.

Starting a New Game


Firebase solved a lot of our prob­lems with the prac­ti­cal­i­ties of a shared, live game state with­out us­ing a server. We de­cided on gen­er­at­ing ran­dom names for games, and sav­ing the model of the game state un­der those keys in a sin­gle Firebase pro­ject. The NPM pro­ject Weiqi by cjlarose pro­vided the es­sen­tial client-side tools for ma­nip­u­lat­ing the game, with a small ad­di­tion in a fork of the pro­ject to add a method for re­mov­ing dead stones from the board be­fore scor­ing. Surge pro­vides the host­ing, and their ex­cel­lent client side rout­ing al­lowed us to make the whole thing a sin­gle page app.

Opening State

The client side rout­ing lets us pro­vide a sin­gle link to Black, White, or a neu­tral ob­server who just wants to watch the game un­fold.

Playing the Game

The Fun Parts

Exploring dif­fer­ent aes­thet­ics that our game board could take was a real in­ter­est­ing un­der­tak­ing — one that is still on­go­ing. With the per­pet­u­ally fluid na­ture of the web, we can cre­ate any num­ber of wildly un­ortho­dox color schemes.

Changing the Color Scheme

So send me a link if you want to play! I’ve been play­ing noth­ing but 13x13 lately, so start a big­ger game and I’ll prob­a­bly be toast.