Users are not required to authenticate, and will use unique URLs from emails to access their account management pages and events pages. Administration will require authentication. A single app can ran run multiple mailing lists, and users can decide which lists to be on.
- Get a mailgun account and mailgun API key
- Install ruby, the version specified in .ruby-version
- Install postgres on your system. This varies system to system.
- Add a postgres superuser 'rails' with password 'rails'
$ psql postgres
postgres=# create user rails with password 'rails';
postgres=# alter role rails superuser createrole createdb replication;
- Install bundler:
$ gem install bundler
- Install everything else:
$ bundle install
- Set your development env variables in
.env
- See required keys in
config/initializers/dotenv.rb
- Each line should look like
EMAIL_DOMAIN=example.com
- See required keys in
- Prepare the database:
$ bundle exec rake db:create db:migrate
- Optionally, seed the databases with bogus data
$ bundle exec rake db:seed
- Make sure to set your environment variables in your CI and prod environments, too!
- Application
- Implement config-driven mailing list name
- Implement config-driven email domain management
- Implement config-driven domain
- Implement config-driven admin email address
- Use localhost:3000 in emails for emails sent from development env
- User Registration
- A user can register an account
- A user receives a confirmation email upon registration
- The confirmation email lists their subscriptions
- The user can confirm their email address using the confirmation email
- User self-maintanence
- A user can update their name and email address
- A user receives a confirmation email to update their email address
- A user can delete their account
- All records of syndications to that user are deleted
- All records of subscriptions by that user are deleted
- All records of RSVPs by that user are deleted
- A user can update their subscriptions
- A user can subscribe from one or all subscriptions
- A user can unsubscribe from one or all subscriptions
- Add option for user to recover their UUID by submitting their email address
- A user can update their name and email address
- Event interaction
- A user can RSVP yes/no to an event
- A user can RSVP with a +1/2 to an event
- A user can change an existing RSVP to an event
- A user can see the number of other people RSVPd to an event
- A user can see the information about the event
- Authentication
- Implement authentication for administration
- Gate necessary endpoints with admin auth
- User administration
- An admin can see a list of all users and their confirmation statuses
- An admin can admin-confirm a user
- An admin can delete a user
- Show user stats to admin
- Optionally email admin when new users sign up
- Hook this up to preferences
- Event administration
- An admin can see all future events
- An admin can see all past events
- An admin can create an event
- The event is attached to a specific mailing list
- An admin can initiate invitations to an event
- The event generates plaintext emails for everyone who has selected that option
- An admin can delete an event
- A placeholder page is set up indicating the event was deleted
- All invited users are notified that the event was deleted
- An admin can modify an event
- All RSVPd users are notified that the event was modified
- The admin may choose to omit this email (for, say, fixing a typo)
- A notice is placed on the page indicitating that the event was modified
- All RSVPd users are notified that the event was modified
- An admin can clone an existing past or future event
- Suppress flashes indicating that events have been edited for unsyndicated events
- Persist login for 30 days
- An event is associated with an address model
- Mailing list administration
- The admin can initiate an email to all members of the global mailing list
- The admin can initiate an email to all members of a subscription list
- The admin can edit, add, or remove subscription lists
- Add preferences for the admin
- List Administration
- Update the list admin page to show stats for list, plus an edit and delete button
- Give each list its own independent administration page