https://github.com/webdevcody/newsletter-manager
https://github.com/webdevcody/newsletter-manager
Last synced: 5 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/webdevcody/newsletter-manager
- Owner: webdevcody
- License: mit
- Created: 2023-01-22T22:27:30.000Z (about 2 years ago)
- Default Branch: main
- Last Pushed: 2024-03-18T16:12:55.000Z (about 1 year ago)
- Last Synced: 2024-08-13T07:17:17.403Z (8 months 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