Finished the #MidnightMurderParty editor with @larouxn tonight. Google login is in place with session-based auth for our endpoints—way better than sending a raw string! Also fixed the automatic release date generation, which was buggy and slow for no good reason. Still no luck getting the backend auth to work on my Windows machine, unfortunately. Lost a couple hours installing certificates, updating gems, uninstalling and reinstalling #Ruby, etc. to no avail. Oh well.
What's this then?
It's like keeping a journal of your work progress, but in public.
It's somewhere to talk shop and be part of a community of people making and learning cool things.
As a two-person startup Hello Code, we wanted somewhere to share what we're working on in public. This gives us accountability to ourselves and to our users. As a small team, sharing our work ideas, struggles and daily efforts also helps us feel supported and part of a community. It's the missing ingredient that gives us a place to share what we learn, and talk shop.
Also, we support Markdown formatting for posts, meaning you can include things like blockquotes, images, and code snippets.
Does this sound like your kind of thing?
Recent public logs
こんばんは, just a quick update here from the #MidnightMurderParty backend team, aka, me. We (@rhitakorrr and I) have successfully setup frontend to backend Google auth validation with built-in validation that it’s either @rhitakorrr or I logging in as well as session storage to store said auth status which we then use for our authenticated endpoints that we hit up after login. No more server side yaml key and (unencrypted) browser cookie garbage for us! 🙃
The backend is done, for now and thus, I will move on to writing MMP animation soundtrack v1.1 next, taking into account @rhitakorrr’s awesome feedback. 🎹
As it turns out, my CSS styles were bad but not beyond reuse. Finished the UI and worked with @larouxn on authentication. Login verification on the server with a Google id_token now works—well, on Nick’s machine at least. Apparently my Windows machine is missing some certificate, so I have to comment out the auth code locally still. But that’s a problem for another night.
For tonight, I’m happy to say that the #MidnightMurderParty editor front-end is in perfectly usable shape, leaving a few days to work on auth with Nick, tweak some things, and play some Dark Souls III before I have to get to work on the reader again.
I was supposed to finish the #MidnightMurderParty editor UI tonight, but I got distracted and spent 5 hours making a type system for my Google API FFI. The API code now has two main types, Gapi and AccessToken.
These types then contain (sort of) other types. For example, an access token retrieved with the “drive.readonly” and “email” scopes will have the type AccessToken (driveReadOnly :: DriveReadOnlyScope, email :: EmailScope) where DriveReadOnlyScope and EmailScope are also types. This way I can prevent passing an access token without the right set of scopes into an API call on the type level; it becomes a compiler error instead of a runtime error!
The Gapi type tracks functions involving Google’s gapi variable such that the compiler will stop me from using features I haven’t set up yet. A completely set up Gapi type for this app looks like: Gapi (auth2 :: Auth2 Ready, filepicker :: GooglePickerObject).
Way cooler than a UI. 😁
Four hours of messy CSS and long compile times later, I’ve done the entire UI for the ChapterSync module of the #MidnightMurderParty editor. One more module to go, but it’s probably the one that will need the most complicated styles. Hoping I can reuse some of the styles I made tonight, but the CSS is such a mess that a lot of it probably isn’t easily reusable. That’s the price of working fast, I guess. Can’t wait to be done with UI, though; I want to get back to stuff that isn’t awful!
👋 こんにちは littlelogs 🌊. As @rhitakorrr stated in his last log, I gave a talk of #MidnightMurderParty this past week. Last Thursday I broke down, to the best of my ability and memory, the history and learnings of MMP to a sizeable group of Shopify employees, both in-house and over the livestream.

Also, we’re planning on finishing up MMP, everything except story, within the next month or so, woo!
After a weekend gaming binge (my brother got me Dark Souls III, ‘nuff said), I just got back to coding. Last week, @larouxn gave a dev talk at his job about #MidnightMurderParty and what we’ve learned from doing this project. He sent me the slide deck, and when I got to the last slides, I saw it said that we planned to finish by June. I messaged him and said, “We planned what?” First I’d heard of it.
But I’m all for deadlines, so mid-late June is our goal. We had a meeting to roughly plan out how to tackle it. Week 1: Finish editor. Week 2: Update reader. Week 3: Integrations & testing. Week 4/5: Extra features, more testing, bug fixing, and pad time for whatever we horribly underestimated the complexity of.
I was tempted to play Dark Souls tonight, honestly, but managed to not get distracted. Good thing, too, because adding all the functionality I wanted to the editor’s main dashboard took all night.
More work on my #go parser/compiler today. I can now parse function calls, the last rule left in my minimal grammar that’ll let me make an MVP. Woo! The next step will be to actually start turning the AST into Go code.
Unfortunately I also discovered a bug in the parser library I’m using. Someone else had already submitted an issue about it last year, and the project author replied, “I’m not using this for my own work any more, sorry, you’re on your own.” I get that, but it’s still frustrating that I’ll now have to understand and fix his code to proceed with my own.
It’s been chaotic lately since I quit school, so I’ve forgotten to log in a while. Still, have had plenty of progress on #chronicle, am taking a brief break to edit #heroic some more! 😁
It’s been a crazy week! Appointments and events have been cutting into my afternoons all week, so I’ve barely had any time to work on #exist for #ios. I’m still struggling with a really annoying bug that’s affecting one user in the #applehealth #sleep integration version, so I still can’t release it to all our users. @josh is going to help me implement a fix because I’m all out of ideas.
Got the #MidnightMurderParty editor back in working condition! As I thought, tonight was dedicated to entirely rewriting the #JSON encoding/decoding using #PureScript Argonaut. Mostly, it was pretty simple—just a lot of rewriting—but I did run into one super sneaky “gotcha!” right at the end. For some reason, my encoding was leaving out a field, no matter what I was encoding.
"secretKey" := secretKey ~> "data" := postData
This was leaving out the "data" field, for example. I only figured out what was wrong because, after the server got mad at me for sending bad data (or no "data", rather), I dumped my other JSON to the console and dug through the keys until I spotted the correlation. Whichever field was encoded last just didn’t get encoded at all.
Turns out the fix was simple:
"secretKey" := secretKey ~> "data" := postData ~> jsonEmptyObject
Yup, just slap an empty JSON object onto the end of the extend (~>) chain, and it works.
Tonight I finished updating the #MidnightMurderParty editor code so it will compile and run again with the new version of #PureScript. Honestly, it all feels very brittle right now, and the #JSON encoding/decoding, while it does compile, doesn’t actually work right anymore. That’s going to be a night on its own, I suspect.
Today, for something different: every few weeks I delete our delinquent #exist accounts. These people have received 4 emails about their overdue payment, seen (hopefully) notifications on the site and in the app, had banners about it at the top of their weekly emails, and had 4-6 weeks to do something about it — but still people seem to miss it. Today was the first time ever someone replied to the automated “account deleted” email with shock. She was really nice about it though, and mentioned how much she appreciated using our mood tracking, and even offered to pay for the months she’d been overdue for. I now feel very bad about deleting this lady’s account, but it is literally all gone as that’s part of our privacy policy.
The moral of the story: update your card in services you want to keep using, so everyone involved doesn’t end up sad. 😞
Upgraded the #PureScript version for the #MidnightMurderParty editor tonight. I tried the upgrade on Sunday on my Ubuntu laptop, but nothing was working out. The upgrade went much more smoothly tonight on my Windows desktop. Go figure. In any case, PureScript is now an #npm dependency instead of a global install, and I’ve added a build task in #gulp. Still working on adapting the code since all the #JSON encoding/decoding stuff has been changed around in this version of PS and VS Code is being finicky after the upgrade.
Finally got through some tasks today that I’d been putting off. Felt good to make progress on some annoying admin stuff and get through most of today’s to-do list.
- Published a new article on the site.
- Early days but I’d say there’s been a small decrease in sales since the price rise. I need to work out if it’s a net win or not!
- Yesterday I created a feature locally for better admin login and then spent a long time getting it to work on the staging server.
Capistrano was failing to install bcrypt. Somehow the bundler cache on the server didn’t have write permissions. Deleting the folder fixed it. But it took hours to discover that solution.
Adding: set :bundle_flags, '--deployment --verbose' to deploy.rb pointed me in the right direction.
I know my tools are out of date know and ansible is what people use but I really don’t want to update :)
I’ll try and move these changes to production tonight. Hopefully that will go smoother!
I did some more work on my #go parser/compiler yesterday, getting everything organised a little better. I hadn’t touched this for weeks previously, because the scale of all the syntax I want to support felt so huge I didn’t know what to do next. But this week I realised I don’t need to support all syntax up-front — I can parse and compile a subset, enough to build some toy examples, and keep iterating in this way with more parsing rules until I can parse and compile the whole language to Go.
I think the only thing left before I can work on compiling this minimum viable language is supporting function calls. Hopefully I’ll find some time to get them happening soon.
Finished the #MidnightMurderParty editor LocalChapter/ServerChapter refactor tonight (basically rewrote half the app) and simplified some of the code I wrote last night. The new LocalChapter representation should make the UI work easier.