Potluck.my - Easy potluck organizing
Who brings/do what?

The inception
It was a sunny morning. A friend asked everyone in our WhatsApp group: "Hey, wanna meet and chill?". I promptly answered: "Yes, come to my house. Let's do a potluck." Everyone started throwing ideas on what to bring, and while it was fun, it was quite a mess with a super long thread of messages. Thankfully, someone started to organize it with a template:
Who brings/do what?
Pizza - John
And everyone starts taking turns copying the message, pasting it into the compose text field, adding items, and sending it out. It worked, but it felt like we used the wrong tool.
I'm a big fan of Trello, but not everyone in the group is fond of logging into another service for such a simple event. I found some other potluck apps, but all require authentication or downloading an app.
And so, creating a super simple potluck organizing app comes to life. The keys are: don't create yet another account, don't download yet another app, and most importantly, don't create any fuss.
The simple workflow is
A host creates an event, which has a unique and unguessable link
The host can share the link with anyone
Anyone with the link can add items
The host can hide unwanted items
Welcome to Potluck.my
The platform
I was evaluating Appwrite.io and playing around with it, so it should be an excellent chance to learn more by working on something my friends and I would use.
As with my other pet projects, I have no idea when this will materialize as I'd be working on it locally and taking my own sweet time. However, I stumbled upon the notice of Appwrite Cloud going public beta when browsing through its documentation. After logging in, it prompted me about the Cloud Hackathon hosted by Appwrite and Hasnode, and why not? A big shout out to #Appwrite and #AppwriteHackathon for providing this great opportunity to everyone.
The details
I'm Kenny (@kennyki), and I worked on this myself.
Having used a mix of Rails + Vue + Bootstrap + AWS in work, I set out to try with a leaner stack of Quasar (Vue) + Appwrite.
It was very refreshing and exciting. Quasar is very polished and has lived up to its promise as an enterprise-ready framework. Appwrite, in a way, felt like Vue to me. It is friendly to beginners yet provides some features that IMO is production-friendly out of the box.
I particularly loved the authentication, storage, and real-time features, though I bemoan the lack of support for DB transactions, migrations, and the ability to modify the schema easily which I believe will come in time. It is now even better with the cloud offering.
For Potluck.my, the features that I leverage from Appwrite are:
Authentication: to create an anonymous session
Databases: to store events and items
Functions: to create an event
Realtime: to support live collaboration
The ideal solution
As one of the main goals of the app is to require no logging in, I have to ensure that it's impossible (or rather extremely hard) for a rogue user to list all events/items.
The ideal design is to have collections of "events" and "items", then create a team per event to provide access control, as drafted in this branch. However, the Appwrite Cloud is currently in version 1.1.2 and it is impossible to create a team membership using just a user ID. I have to wait for version 1.3.x
A workable solution
So instead, the workaround design is going to be
When a host creates an event, execute a function to create a collection to represent an event. It will have a generated UUID as the collection ID and be used as the unique identifier in the event's link.
Each record in the collection has a
typeattribute used to identify its purpose, such as "metadata" and "item".
A simplistic analogy of an event
{
id: 'ID.unique()',
name: `${hostId}-${Date.now()}`,
records: [
{
type: 'metadata',
data: '{ "name": "Party on Sunday", "notice": "Everyone brings something" }'
},
{
type: 'item',
data: '{ "title": "Pizza" }'
}
]
}
Code and demo
For more details, it is available at https://github.com/kennyki/potluck.my
Here's a quick demo

Future improvements
While creating a collection per event works, IMO it is a little bit brittle. Perhaps it's due to service outages with Appwrite Cloud, sometimes the creation of attributes will be stuck at the state of "Processing" for quite a while, causing service disruptions. I think the ideal solution which doesn't require creating a collection on the fly will work better. Hopefully, version 1.3.x will come very soon.
Allow users to opt in to log in so they can continue in different browsers/devices.
That's it for now. I'm happy that it is now an actual usable product that I'll share with my friends and family. Let me know if you have any comments.
Lasst but not least, you're welcome to use https://potluck.my