When Ksusha and I got married, I decided to use it as an opportunity to write some software to manage all aspects of our wedding, from tracking guests and RSVPs to generating place cards for printing. Given that half of the fun of wedding preparation (for us at least) was DIY projects, what better than to mix in a DIY software project?
After requests from a few friends, I finally got around to packaging up and posting this software as a starting-point for others (and you can download it here). I'm releasing it under the MIT License, meaning you can pretty much do whatever you want with it as long as you don't sue me, even if some bug somehow ruins your perfect day.
The djWed package is personal web-based wedding management software written in the Python Django web framework. This is intended entirely as a starting point of code to develop from, and is not intended to be something that works out-of-the-box. Rather, it is software that you can hack to do what you want.
When writing software for your own wedding, one initially encounters a pleasant design constraint that is rarely encountered in software engineering: code designed to be used exactly once. In fact, I intend to get married exactly once (now complete) and thus never use djWed ever again.
This meant that I took many short-cuts that I might not have otherwise
taken, but which made sense for expediency. For example, generating
mass emails or PDF/PS output from SVG templates is fairly awkward.
However, it didn't make sense for me to develop an elegant user
experience for functions that would be executed exactly once by just one
person. Similarly, I hard-coded in that I'd have two wedding and
reception venues ("MA" and "CA") as that
simplified some code. I was also much worse about documenting the code or developing regression or unit tests than I would have been if I was developing production software.
However, now that our wedding is finished, some friends have asked to use this code. As such, these friends may need to live with the consequences of these decisions if they wish to start from this code base. They will encounter many bugs, hacks, quirks, and perhaps even a few squirrels. If you are one of these people, you are welcome to do the same as I did and adapt the code for your single use, or you can do cleanup to generalize this software so that it could more readily be used by others. If you do clean it up and post it, let me know so I can link to it from here.
Some of the features included are:
- Track guests and invitees (where each invitee may consist of multiple guests).
- Each invitee has an "invite code" that they can use to login.
- Invitees can update their contact information and leave comments.
- Invitees can RSVP and select meals and other options.
- Send mass emails to invitees with form-filling.
- Web-based reports on RSVPs, meal selections, and more.
- Spreadsheet exports of reports.
- Gift and thank-you note tracking.
- Generate mailing labels for invitees.
- Table assignment tracking (but no automated table-assignments).
- Multiple venue support (currently hard-coded at two venues in some places).
- Integrated photo gallery using a modified version of Photologue that lets guests upload their photos.
- Web-based editing of informational pages (HTML "page snippets").
- Initial import of guest information from a CSV spreadsheet.
- Generation of printed materials from SVG templates, including:
- Save-the-date cards with RSVP invite codes.
- Personalized place cards (even including food selection)
- Personalized RSVP cards
- Personalized envelopes with artwork
Now that this is done, perhaps I'll never need to look at this code again, although I have already reused some snippets from it for other projects.
At some point in the future, I may post some examples of printed materials generated, as well as some of the artwork we created. (We have plenty of wedding DIY projects that I should go back and write-up here.)
Note that subsequently Chris Shabsin and Dana Scott forked this software and used it for their wedding, as has at least one other person.