- Refactor campaign.Message into campaign.Message and
campaign.CampaignMessage
- Remove ad-hoc goroutines (flawed approach) that were used to push
admin and optin notifications.
- Provision for largscale pushing of ad-hoc, non-campaign messages
such as transactional messages (in the future).
- Clean up main.go (by moving init to init.go) and improve
composition comprehension.
- Refactor app context and init struct and field names.
- Update package dependencies in initialisation.
- Lists can now be marked as single | double optin.
- Insert subscribers to double opt-in lists send out a
confirmation e-mail to the subscriber with a confirmation link.
- Add `{{ OptinURL }}` to template functions.
This is a breaking change. Adds a new field 'optin' to the lists
table and changes how campaigns behave. Campaigns on double opt-in
lists exclude subscribers who haven't explicitly confirmed subscriptions.
Changes the structure and behaviour of how notification e-mail routines,
including notif email template compilation, notification callbacks for
campaign and bulk import completions.
- unchecked returns fixed (most)
- remove unused constants
- remove unsed structs
- function parameters unused or incorrectly used
- removed if else chains for error checks
- use regex MustCompile instead of compile
- spell checks
- preallocate slice cap when size known
- scope issues inside range
- Toggle options to enable self-service data export and wipe
options on the public unsubscription page. Subscribers can get
a copy of all data on them e-mailed to them as JSON, or
instantly wipe all their data.
- Refactor "unsubscribe" pages and URIs to "subscription".
- Add export icon to subscriber admin view.
- Add a name / e-mail "quicksearch" input to the UI
- Implement row selection and aggregation at table level and a "select all" that selects all rows at the query level
- On selected subscribers, add bulk list management (add / remove / unsubscribe), blacklist, and delete