Package: seevooplay
SeevooplaySeevooplay is a Django app for online invitations and RSVPs. Think of it as your personal, selfhosted version of Evite (or a similar service). Throwing a party? Don't give all your friends' email addresses to Evite. Don't expect your friends to be on Facebook. Embrace the indieweb, kick the corporate middleman to the curb, and let Seevooplay send email invitations and collect responses for you! That's the pitch, anyway.Seevooplay was crafted forpersonaluse; it is not architected for scale. It is directly inspired byDaVite, a 2000-line Perl script last updated in 2004 -- a very cool and useful hack for its time, but inappropriate for use on the web in 2021. Seevooplay aims to solve the same problems DaVite did, in much the same way, but with modern, maintainable, extensible code, atop the rock-solid foundation of Python and Django.The owner of a Seevooplay instance interacts with Seevooplay mainly through Django's admin. [Screenshot 1,Screenshot 2] Invitees interact with a single public view, whose template and styling is deliberately minimalistic and intended to be customized. [Screenshot 3] Through the magic of the CSS cascade and Djangotemplate overriding, you can make what your guests see as gorgeous (or as ugly) as you like.Your invitees will receive emails containing personalized links back to your Seevooplay instance. They won't have to create any sort of account (or log in) to RSVP to your event; a UUID in their link tells Seevooplay who they are.This means that forwarded links are problematic: If Alice forwards her invitation to Bob, Bob can RSVP as Alice.In other words, from a security standpoint, Seevooplay is about as naive as it gets. For the casual, personal use cases Seevooplay is designed for, however, this model works. If it spooks you, your parties are much higher stakes than mine, and you should look for a different solution. :)Seevooplay is free software, licensed under the terms of the GNU General Public License, Version 3. See the included COPYING file for details.InstallationSeevooplay can be run as a standalone project, or integrated with an existing Django project.Run as a standalone projectThere is not (yet) a containerized distribution of Seevooplay, but if you are familiar with Python, Django, and their modern ecosystems, you should have no trouble getting Seevooplay up and running as a standalone Django project. In broad strokes, the steps are:Download the Seevooplay distribution and extract to a folder, orgit cloneit.Copy config/settings/local.py.example to config/settings/local.py and edit local.py to match your server environment.Create a Python virtual environment with your tool of choice and populate it with Seevooplay's dependencies. For example,pip install -r requirements.txtorpoetry install.The rest happens from within your virtualenv. First:./manage.py migrate
./manage.py collectstaticDo./manage.py sendtestemailto ensure your setup can send mail.Do./manage.py createsuperuserto create a superuser.Fire up the Django development server with./manage.py runserveror put your favorite server (gunicorn, nginx, apache) in front of the project.In your browser, navigate tohttp://yourdomain/adminand log in with your superuser credentials to poke around and create your first event in Seevooplay. As long as you remain logged in, you can view your first event athttp://yourdomain/rsvp/1.Integrate with an existing Django projectAdd Seevooplay to your project withpip install seevooplayorpoetry add seevooplayor whatever your Python package-manager-of-choice requires.Add to INSTALLED_APPS in your settings.py:'djrichtextfield',  # required for seevooplay
'seevooplay',Add settings for django-richtextfield in your settings.py. Seedjango-richtextfield's docsfor details, or copy the DJRICHTEXTFIELD_CONFIG stanza from Seevooplay's config/settings/base.py.In your main urls.py, add this import:from seevooplay.views import email_guests, event_page... and these urlpatterns:path('admin/email_guests/<int:event_id>/', email_guests, name='email_guests'),
path('rsvp/<int:event_id>/', event_page, name='invitation'),
path('rsvp/<int:event_id>/<guest_uuid>/', event_page),
path('djrichtextfield/', include('djrichtextfield.urls')),From within your project's virtual environment:./manage.py migrate
./manage.py collectstaticThere should now be a Seevooplay section in your project's admin, where you can start kicking the tires.What Seevooplay Lacks'Add to calendar' functionality. This is probably something I'll hack on at some point.Internationalization. I welcome pull requests to change this.HTML emails. Plain text emails don't bother me, so this is unlikely to change unless someone else does the work.Comprehensive documentation. If anyone other than me ends up using this, the docs will get better. In the meantime, if you try using Seevooplay and run into trouble, please open an issue on GitHub. I will help if I can.Perfection. This software was crafted to scratch a personal itch. It almost certainly has bugs. If you discover one, or you have a suggestion for improving the code, please open an issue on GitHub.