2026-02-19.00-11-12.mov
- Docker ORR
- PostgreSQL (optional)
- Redis (optional)
- sqlx cli (https://github.com/launchbadge/sqlx/blob/main/sqlx-cli/README.md)
- Rust and Cargo
-
Clone the repository:
git clone https://github.com/arjav0703/email-newsletter.git cd email-newsletter -
Setup Config file (see example.config.toml for reference):
cp example.config.toml config.yaml
-
Run the application with Docker Compose:
docker-compose up -d --build
-
Clone the repository:
git clone https://github.com/arjav0703/email-newsletter.git cd email-newsletter -
Setup Config file (see example.config.toml for reference):
cp example.config.toml config.yaml
-
Setup PostgreSQL database:
- Using docker (automatic):
scripts/postgres.sh
- Using local PostgreSQL (manual):
- Create a database named
newsletter - Run migrations using sqlx:
sqlx migrate run
- Update the
config.yamlfile with your database credentials
- Create a database named
- Using docker (automatic):
-
Setup Redis:
- Using docker (automatic):
scripts/redis.sh
- Using local Redis (manual):
- Install Redis and start the server
- Update the
config.yamlfile with your Redis credentials
- Using docker (automatic):
-
Run the application:
- With Cargo:
cargo run
- With Docker:
docker build -t email-newsletter . docker run -p 8000:8000 email-newsletterr -
Visit the URL
http://localhost:8000(or the one you setup) to access the application.
This project was built while following the book "Zero To Production In Rust" by Luca Palmieri. Though the core architecture of the project was inspired by the book, I tried to challenge myselves to do the implementation on my own as much as possible. I also additional features and improvements to the original project (like a fully functional frontend, unsubscribe feature, Docker support and other code changes). Also, i chose a different way to send emails (using resend instead of Postmark service).
I had tab completion turned on and it helped me to develop faster. I did not use any specific AI IDEs (like cursor, claude code) and sticked to neovim for development. The only area where I used AI relatively more than other parts is debugging the authentication test logic.