I attended an event modeling workshop a few weeks back and learned quite a lot during the sessions. So this weekend, I decided to put some of that into practice.

One of the takeaways from my previous practice session was that I thought the front end was going to be something I would have to focus on, since backend code is pretty much easily generated if you spend time in drawing out a detailed enough event model.

During the workshop I found out that the Miro Toolkit actually has an integration with Lovable where it essentially sends the JSON for the event model and Lovable builds an app based on that.

So I drew up the event model and tried it out. The output was very impressive. It basically built a pretty good-looking prototype using local storage, so it’s not exactly production ready, but the code is provided, ready to wire up to my API. This being generated with the free tier is already impressive https://nestle-together.lovable.app/

This made me realize that my lack of front end skills should no longer be a block for the ideas I want to implement (what a relief).

Now I’m excited to start building out little app ideas that I have. What I don’t want to do though is start paying for a database. I decided to spend the second half of the day implementing a file based event store that I can use for my small apps and it was pretty easy with the help of the coding genies.

https://github.com/jocelynenglund/FileBasedEventStore

Tried it out with an implementation of ChoreMonkey and it worked pretty good! At some point I will test out actually deploying it and seeing how it performs. I’m trying to figure out a structure that works in .NET. I don’t want it to be dependent on any framework just yet while I’m trying to understand how to build event-sourced applications. In my previous app I had used Marten and Wolverine and it was very easy to build, but a lot of things happen automagically.

So with every little project, I’m trying to figure out a way to organize my code better so it’s easier for both me and the coding agents to build on top of it. https://github.com/jocelynenglund/ChoreMonkey

One thing that I didn’t like about event modeling with Miro is the fact that the model sits on Miro’s platform. The toolkit is really good for building up a model, but once it’s pretty much done, I wanted a way to put it in documentation.

So I asked Claude to convert it to a notation that’s more documentation friendly. It worked so well that I’ve created an img-eno skill so i can quickly generate this from a screenshot.

This is the convention we came up with:

[Create Household]
⏹️(Name) -> 🟦CreateHousehold(HouseholdId, Name, PinCode) -> 🟧HouseholdCreated(HouseholdId, Name, PinCode)
[HouseholdName]
⏹️ -> 📗HouseholdName(HouseholdID, Name) <- 🟧HouseholdCreated
[Add Chore]
⏹️(DisplayName, Description) -> 🟦AddChore(ChoreId, Description, DisplayName, HouseholdId) -> 🟧ChoreAdded(ChoreId, Description, DisplayName, HouseholdId)
[Chore List]
⏹️ -> 📗ChoreList*(ChoreId, DisplayName, HouseholdId) <- 🟧ChoreAdded
[Generate Invite]
⏹️(HouseholdId) -> 🟦GenerateInvite(HouseholdId) -> 🟧InviteGenerated(HouseholdId, InviteId)
[Invite Link]
⏹️ -> 📗InviteLink(HouseholdId, Link) <- 🟧InviteGenerated
[InvitationHousehold]
📗InvitationHousehold(HouseholdId, InviteId, HouseholdName) <- 🟧InviteGenerated, 🟧HouseholdCreated
[Join Household]
⏹️(Nickname, PinCode) -> 🟦JoinHousehold(*MemberId, HouseholdID, InviteId, Nickname) -> 🟧MemberJoinedHousehold(*MemberId, HouseholdID, InviteId, Nickname)
[Household Landing Page]
⏹️ -> 📗HouseholdLandingPage(HouseholdId, MemberId, PinCode) <- 🟧MemberJoinedHousehold
[Access Household]
⏹️(PinCode) -> 🟦AccessHousehold(HouseholdId, MemberId, PinCode) -> 🟧AccessGranted(HouseholdId, MemberId)

I then took it a step further and created an eno-dio skill that converts that notation to a draw.io file so i can have that in my code base.

I have to say it does a pretty good job with the conversion so I think I’ll add this to my workflow. At least, have the draw.io model of the completed slices.

Having all these tools available really frees me up to become creative and I’m really enjoying building stuff again. Next up, I want to actually deploy ChoreMonkey somewhere and see how the file-based event store holds up in the real world. Might even get my family to dogfood it, maybe then we’ll actually get some chores done around here😅

Leave a comment