-
-
Two Linode clusters (Linux cloud servers) running
-
SSHing into debian-ca-central Linode and copying over program files using scp
-
Running the app (Node.js + Express.js + HTML + CSS + Bootstrap) with the npm module "forever"
-
Accessing the web app via ipv4 URL attached to the Linode
-
Linode nginx configuration
-
Linode Certbot securing http traffic
-
App running on a secured 'https' URL: https://b-day-wisher.space
-
UI for successful subscription
-
Crontab for scheduling in Linode cloud's terminal
-
Collection of gifts in MongoDB (pymongo, mongoose)
-
List of friends' info in MongoDB (pymongo, mongoose)
-
Sample email wisher 1 out of 25 possible combinations (b_day_surprise.py, smtp)
-
Sample email wisher 2 out of 25 possible combinations (b_day_surprise.py, smtp)
-
AzuraCast music playlist management system hosted on a Linode cluster (Link to AzuraCast in email body)
-
Updating AzuraCast in Linode's Weblish terminal
-
Listener interface of AzuraCast
-
Linode API; accessed with personal authentication token
-
Linode clusters' status check and report via SMS (cloud_check.py, Twilio); Planned frequency: 3 times per day
Inspiration
There are a lot of people to whom I'd like to send birthday wishes each year. I was thinking about how never to forget a friend's birthday and to deliver him or her some pleasant surprise.
What it does & how I built it
Please take a look at the screenshots and especially the subtitles under each of them. They will give you a great sense of not only B-Day Surprises' overall structure and technologies used, but also how the components are connected to one another.
What I learned
I learned a lot. Specifically, I studied how to send HTML and images instead of merely plain text in an automated email, and how to make a Node.js program running after closing the terminal with npm module "forever". Moreover, I spent a lot of time exploring Linode's amazing features, which include setting reverse proxies with nginx, creating SSL certificates for http using Certbot, setting up DNS and rDNS for a domain, Crontab scheduler, deploying AzuraCast, and its API for individual clusters.
Challenges I ran into
I had hardly ever scheduled/run any program on a Linux cloud controlled by the command line. Correctly proxying and building certificates for domains turned out to be difficult. Additionally, new Linode accounts have SMTP port restrictions in place on all clusters by default, and my email-sending Python programs, when deployed to the cloud at first, totally didn't work. I worked assiduously and spent a long time to figure out how to lift those restrictions.
It eventually turned out that the smtp feature must be enabled by a Linode human agent manually upon request.
Accomplishments that I'm proud of
I was able to create some nicely-formatted email examples and a clean and beautiful front-end page for the web subscription application. I learned a great many Linode functionalities from blank, and in a short amount of time, I connected the dots and made all parts of the project (i.e. Python notifier and checker, Node.js full-stack website, domains, which are all hosted on Linode) working as intended.
What's next for B-Day Surprise
I am looking at creating additional letter templates and types of gifts, and finding beautiful-looking background images for the email wishers. I will also perhaps launch an email server of B-Day Surprises' own in Linode to make it more like a real Internet enterprise.
Log in or sign up for Devpost to join the conversation.