ideas icon indicating copy to clipboard operation
ideas copied to clipboard

Party Invitation Software (along the lines of evite/paperless post/pingg/Facebook events)

Open xenotropic opened this issue 7 years ago • 20 comments

Project Description

For many years I have felt that the world could use an open-source version of Evite, pingg, Paperless Post, Facebook Events, etc. Right now if I have a party at my house, the choice is between sending an email to my friends (no easy invitee or RSVP management), or using an ad-driven business (cluttered website with ads for me and my invitees). It would be nice to have a self-hosted option that is the best of both worlds.

There are multiple free or open source event-management server-side programs, however, the open source ones are all geared towards public events and/or academic conferences (usually written by an academic) or designed for a single one-time party (usually written by a coder who was getting married).

I'm unaware of a reasonably mature personal-invitation management software designed to handle multiple events with recurring users, and don't see any from several searches on Github. I want something that keeps a database of my friends (and their email addresses) to make it easy to create an new invitation and send it to the relevant people.

I'm actually going to describe it by taking a first shot at describing the tables in its database and its views, which might make it less daunting. Data tables:

  1. A table of contacts: Name and email are the core columns, with email being the primary key. An authorization key (a unique string of about 16-32 characters) to provide a "only users with the link can access" level of privacy. Some sort of tagging system, so you can group of people by user-defined categories (friends, family, board gamers, other subsets of friends, etc.), and therefore easily re-invite the same group of people to similar events.
  2. A table of events: An event would have a title, a date, a start time, length, description, and a list of invitations (see next item) by their primary key, and also an authorization key to provide some level of privacy. Optional fields would be: a picture; some customized text for the invitation email; boolean for admin to choose whether invitees can see each others' responses.
  3. Invitations. The primary key here would probably just be a serial number. Other columns would be whether the invitation was emailed (boolean), a contact (by that table's primary key, email), a response (yes/no/maybe) and response note from the contact. This table is essentially a relationship between a contact and an event.
  4. Administrative contacts and authentication. This would be emails and salted/hashed passwords for people authorized to create/invite events.

And then views:

  1. For a logged-in admin, an overview of all events.
  2. For a logged-in admin, CRUD (create, read, update, and delete) for the data in each event, plus a method to email the event. Ability to add invitees group-wise, by tag.
  3. For a logged-in admin, CRUD for contacts (maybe two views: one that is a list of all contacts, and then a view to edit a single contact)
  4. For login-in admin, import of contacts. This is probably just a simple file-upload form to upload a csv file that gets parsed into the database after checking for duplicates. Could probably be combined into the overall view of contacts.
  5. A view of an event for a user, which requires the authorization key of a contact and the event to view (i.e., as GET parameters in the URL that was emailed to them). This would have a form to submit an RSVP.

There could probably be other views or data that are necessary or helpful (i.e., reminder emails) but that seems like the core.

Relevant Technology

Ideally this would be something simple to install, that someone could drop into whatever self-hosted webserver without a lot of configuration or SSH access. If it was me, I'd do PHP+[some UI javascript]+SQLite for that reason, sort of like what mytinytodo was designed around.

xenotropic avatar Aug 13 '18 21:08 xenotropic

Thank you for your submission, though could you please add experience required, and a time estimate, like specified in the issue template?

Thanks :)

FredrikAugust avatar Aug 13 '18 22:08 FredrikAugust

@FredrikAugust Done, apologies. Somehow I had managed to open a regular issue rather than a template one.

xenotropic avatar Aug 13 '18 22:08 xenotropic

This sounds interesting and useful. I would love to collaborate on this project. Design would be my biggest issue though, and I would probably start with a Django Admin for quick start.

dowoncha avatar Aug 14 '18 15:08 dowoncha

An issue is that sending large amounts of emails always requires some transaction email service which will pretty much always cost money for larger amounts of emails. It would have to be designed with some sort of service in mind (maybe Mailgun free tier?). Design is simply a question of sketching. It can be done when the features and functionality is clear.

sbarfurth avatar Aug 15 '18 17:08 sbarfurth

Something that uses local SMTP (and has proper configuration of that has a dependency) seems like the most basic use-case scenario and would maintain the self-hosted nature of the project. Like PHP's mail() should be fine. If you are the sort of person that wants to self-host your invites, there's a decent chance you self-host email as well. Adding on separate commercial services could be a nice add-on. For a party of ~100 people (the max of what I would think would be typical for this sort of application) I don't think you're going to get into rate limits and such on the receiving end.

xenotropic avatar Aug 15 '18 17:08 xenotropic

It's less about rate limits and more about damaging your own mail servers reputation. Though I think 100 emails every X weeks is not a large issue. So essentially the base driver would just be something like PHP's mail and extensibility is given. Any major framework, save JS, has this kind of functionality built in. It's really a preference option if one might use Laravel, Django, Rails or anything of this nature.

sbarfurth avatar Aug 15 '18 17:08 sbarfurth

Something like AWS SES can send 10,000 mails for $1 . And they are good too

karuppiah7890 avatar Mar 12 '19 15:03 karuppiah7890

I would like to work on it. @dowoncha or anyone else working on it ?

karuppiah7890 avatar Mar 12 '19 15:03 karuppiah7890

@xenotropic I have some questions regarding the requirements.

  1. What does the "only users with link can access" privacy mean? I thought it worked like - there's a unique link for a resource and people who get that link (through any means) can view the resource, in our case it's an event page. And based on the implementation details you have given, looks like you have a different use case, which I would like to understand

  2. How will the first admin be created ? through config ? and admin can add other admin users ?

karuppiah7890 avatar Mar 12 '19 16:03 karuppiah7890

1 - It seems like no matter what you need to have a unique string for an event that goes in the URL. And if someone has just that generic event link, maybe they can RSVP as a guest if the admin has selected an option to do this.

However, you also could create a long, unique identifying string for each invitation (i.e., my table #3 above) so that when users click on the email they get a URL that leads to a view specific to them. With this URL that has the invitation code, they RSVP without having to enter any additional info. Some folks might not like that level of security (logging in by link, essentially), but my feeling is that we're designing party software here so security is less of an issue (certainly for the first iteration) and convenience is more of an issue, so users can RSVP without having to create an account, wait for an email, etc. The documnetation and emails to the users would have to indicate that the link is uniquely for them.

2 - Config is fine, or if you want to make it an easier install for users that are not comfortable editing config files, have a default admin user and password and then ask for password reset on first access. Admin can create other admin users, sure. I'd probably put "can create new admins" as a boolean flag on the table where they are stored.


Separate point: It also occurs to be in reviewing my req's above that you could consolidate admins and contacts into one "user" table, just with booleans as to whether a person is an admin (and another for whether an admin who can create another admin). Admin users would all have a username/password, of course. Ordinary users (contacts/invitees) would not by default, and could only access specific events by clicking on the URLs they get by email. But they could create an account, set a password, and then be able to see all their invitations. Some people might use this for events that are recurrent; I had one guy who emailed me recently, based on this post, who was looking for software to use for inviting people to play pickup/casual basketball every week.

xenotropic avatar Mar 12 '19 19:03 xenotropic

Cool, makes sense. Will post when I start working on this! 😄 Will first decide on what tech stack and some stories to play out and post them here. I am not very good with UI, so, I will just make it simple to start with, I guess

karuppiah7890 avatar Mar 13 '19 09:03 karuppiah7890

For the name, I am planning to have Umema - you invite or Ukumema - inviting in Zulu. At first I thought I'll call it invite-people, but then I felt it's not easy to use that as a noun 😛

karuppiah7890 avatar Mar 13 '19 13:03 karuppiah7890

@xenotropic I have started off a project https://github.com/karuppiah7890/invitebuddy/ . I have started to develop a basic story - Given event name, description and email id, send the invitation to the email id. It felt like it's a simple step and something core too, so started with that.

I have some ideas and possible features, but some of them have higher priority compared to others and also make logical sense for a first version, while others are nice-to-have / cool features which can come along iteratively. I would like to discuss the ideas and features. Shall I start off a gitter chat room may be ?

karuppiah7890 avatar Mar 16 '19 07:03 karuppiah7890

I have developed a basic feature to send one invite to an email address 🎉 The email content is based on a simple text template.

It's more like an email client now which can send one email at a time. Will work on more features - like sending mails to multiple email addresses at a time, and so on. It will become very useful once the RSVPing features come in 😄 And I have planned to do authentication and authorization later, to focus on the core first.

Will post a demo video 😄 I actually deployed it in the web and tested it. Unfortunately can't share links in public as anyone could use the link and send an email with it and the from address of the email id is static and it's mine. Don't wanna get into trouble now, and I am using AWS SES service; if someone misuses or DDoSes, too much money will be lost 🙈

But if anyone wants to check it out, let me know. I'll share the link in a private message 😄 @xenotropic It would be great to get your feedback on this. I would like to get feedback from more people actually. Always open to feedback, ideas and suggestions from people! please do give your inputs! cc @FredrikAugust @dowoncha @sebastianbarfurth

karuppiah7890 avatar Mar 16 '19 16:03 karuppiah7890

Sure, although it might take me a couple of days. You can reach me at the email address on my GitHub profile page.

xenotropic avatar Mar 17 '19 01:03 xenotropic

@xenotropic That's okay! And yes, I will share the link to the web page that I built through email 👍

karuppiah7890 avatar Mar 17 '19 05:03 karuppiah7890

Hi. What you think about? Create web API for this and front end in React.. In future you can create Android and IOS version. Currently web users very less then Android and IOS users.

dhruv-dv avatar Mar 17 '19 06:03 dhruv-dv

Currently I have created the web API with golang and the front end is in vue. If anyone is interested to create android app in the future, the web api can be used to build it. But for now, I am just going to work on web front end

karuppiah7890 avatar Mar 17 '19 06:03 karuppiah7890

Golang have internal issue with memory allocation. Please be aware with it.

dhruv-dv avatar Mar 17 '19 06:03 dhruv-dv

Does this exist somewhere? I need!

amitai avatar Sep 28 '24 21:09 amitai