- First-name is title case.
- Everything else is lowercase.
- Dates are processed as strings and only refer to that day and not the time of day.
- Dates are in the format YYYY-MM-DD.
- Scheduled e-mails are sent at noon.
- Course e-mails are sent at midnight.
- All e-mails are sent in the timezone of the server.
- E-mails missed before the date are sent at the next scheduled time.
- At the end of the course, the course is added as a tag "course course-name" to subscriber.
- Courses in MongoDB are lowercase but are displayed as title case.
Subscribe to newsletter formSubscriber list delete/tag-up formE-mail writing form inputWritten e-mails saving formBroadcast to tag formAutomatic scheduler in front-end
MongoDB DocumentsSubscribers collection, subscriber document:
{
"name": "",
"username": "",
"email": "",
"password": "",
"email-subscribers": {
"email-example@gmail.com": {
"first-name": "John"
}
},
"tags": {
"tag-example": [
"email-example@gmail.com",
"john@gmail.com",
"jane@gmail.com"
]
},
"scheduled": [
{
"date": "2020-01-01",
"tag": "tag-example",
"subject": "Subject",
"body": "Body"
},
{
"date": "2020-01-08",
"tag": "tag-example",
"subject": "Subject",
"body": "Body"
}
],
"daily-courses": [
{
"course-name1": {
"emails": [
{
"subject": "Subject",
"body": "Body"
},
{
"subject": "Subject",
"body": "Body"
}
],
"stages": {
"1": [
"John@gmail.com",
"Jane@gmail.com"
],
"2": [
"Peter@gmail.com",
"Joe@gmail.com"
]
}
}
},
{
"course-name2": {
"emails": [
{
"subject": "Subject",
"body": "Body"
},
{
"subject": "Subject",
"body": "Body"
}
],
"stages": {
"1": [
"John@gmail.com",
"Jane@gmail.com"
],
"2": [
"Peter@gmail.com",
"Joe@gmail.com"
]
}
}
}
],
"pre-written_emails": {
"template-name1": {
"subject": "Subject line",
"body": "E-mail formatted body"
},
"template-name2": {
"subject": "Subject line",
"body": "E-mail formatted body"
}
}
}
Try https://github.com/aliyusahaboadam/Registration-and-Login-ApplicationFilter homepage, signup & login only clickable by being logged in with Spring securityMake every other page redirect to loginTest all security updatesCreate email and username unique on registerCheck if CustomErrorController is needed
Create Sign-up page for creating customersCreate Login page with signup linkMake Spring use Mongo Customers to loginTest forgot passwordCreate Forgot password form on the same page as login. Use a separate post request.Create temporary password on wrong password to email from newsletterDo a check if the temp password is correct and manually login
SubscribeUnsubscribeBroadcastAdd empty tagAdd delete tagRename titleRename ownerRename emailRename passwordDelete newsletter
Test all easy endpoints
SubscribeUnsubscribeAdd email to tagRemove email from tagTest custom newsletter emailBroadcast, create username mapAdd empty tagAdd delete tagRename titleRename ownerRename emailRename password
Setup React TypescriptSetup one run for backend and frontend- Start on Material UI template
- Add basic backend functions to frontend
- Delete newsletter
- Add scheduled e-mail
- Save and write email MIME
- Add/update course
- Send scheduled e-mails at noon
- Check daily course e-mails at midnight
- Courses follow document stages
- Update to the latest Gradle
- Update to the latest Spring Boot and Java 21
- Create email list exporter for other services
- Create a backup system