https://github.com/webdevcody/newsletter-manager
  
  
     
    https://github.com/webdevcody/newsletter-manager
  
        Last synced: 3 months ago 
        JSON representation
    
- Host: GitHub
 - URL: https://github.com/webdevcody/newsletter-manager
 - Owner: webdevcody
 - License: mit
 - Created: 2023-01-22T22:27:30.000Z (almost 3 years ago)
 - Default Branch: main
 - Last Pushed: 2024-03-18T16:12:55.000Z (over 1 year ago)
 - Last Synced: 2024-08-13T07:17:17.403Z (about 1 year ago)
 - Language: TypeScript
 - Homepage: https://newsletter-manager.vercel.app
 - Size: 1.05 MB
 - Stars: 79
 - Watchers: 3
 - Forks: 16
 - Open Issues: 0
 - 
            Metadata Files:
            
- Readme: README.md
 
 
Awesome Lists containing this project
- jimsghstars - webdevcody/newsletter-manager - (TypeScript)
 
README
          # Overview
This is the newsletter application I use for my youtube channel to send out updates to my subscriber.
## User Features
- a dedicated page where people can enter their email to subscribe to your newsletter
- a success page which shows a custom message after subscribing
- a dynamodb table which stores all subscriptions
- a cli command for sending out mjml emails to your subscribers
- users can unsubscribe via a rest api and link appended to all emails
## Code Features
- fully deployable using IaC via terraform and serverless framework
- api is a monolambda
- all in typescript
- yarn monorepo approach
- e2e testing using cypress
- integration and unit testing using jest
- everything can be ran locally via docker-compose
- ci/cd setup using github actions for testing and deployment
## How to Run
1. docker compose build
1. docker compose up
1. open http://localhost:3000
## How to Develop
My goal is to get all of this project 100% running in docker for local development. This means you'd need to docker exec into the shell container to do any one off commands or scripts. It's a bit more overhead, but I think it's worth it for consistency across developers and machines.
1. `docker-compose up`
2. `docker exec -it shell /bin/bash`
## Running E2E Tests
1. `docker exec -it shell /bin/bash`
1. `yarn workspace @wdc-newsletter/e2e cypress`
## How to Send Emails
1. `. ./load-env.sh .env.prod`
1. `npx ts-node ./scripts/src/sendEmailsCli.ts "My New T3 Stack Course is Live" "./data/emails/t3-course.mjml"`
## Importing Emails to Prod
1. update .env to have prod info
2. create a `src/scripts/emails.json` with array of email address
3. run `npx ts-node src/scripts/import.ts`
## Deployment
Create a Dynamodb table with the pk and sk named "pk" and "sk". Remember the name, you'll need it when setting up the user and policies.
### SES
Setup SES for your domain and verify the identity. Keep track of this identity name since you'll need to update it in the `policy.json`
#### Request SES Production Access
Request production SES to get out of sandbox mode. You'll need to convince AWS you have a legit business reason to be sending emails.
### IAM User and Policy
Create an IAM user for programmatic access and setup your keys inside your .env file.
Modify the `policy.json` file and attach it to your user.
#### ACM
Create and validate a certficate for the following:
- newsletter.webdevcody.com
- newsletter-api.webdevcody.com
#### Domain
- Setup CNAME for api
- Setup CNAME for ui
#### Deploying the UI
- setup and source .env by running `. ./load-env.sh`
- yarn deploy:ui
- make sure to add the certificate and alternate domain name to cloudfront distrubtion
#### Creating Gateway Domain
- yarn workspace @wdc-newsletter/api create-domain
#### Deploying the API
- setup and source .env by running `. ./load-env.sh`
- yarn deploy:api
# Issues