โThere was a star danced, and under that was I born.โ
Much Ado About Nothing - William Shakespeare.
- Demo ๐
- License ๐
- Quick Note ๐
- Resources used ๐ฟ
- Discussion
- Current Contributor(s)
- Conclusion
A birthday is a very special occassion for anyone regardless of their age. Just send them this card and your special wishes to your friend (or foe), just to make them feel special ๐.
If it's your birthday, then you have my best wishes ๐๐ป. Enjoy the day ๐, with a little dance ๐๐ป with that special one and understand with one extra notch up your belt your duties have been extended by one โจ.
It's your day from 0๏ธโฃ0๏ธโฃ:0๏ธโฃ0๏ธโฃ to 2๏ธโฃ3๏ธโฃ:5๏ธโฃ9๏ธโฃ and you should live to the fullest.
They say a demo is worth a thousand words. So if you head to the website ๐https://birthday.cybrix.in, you would be greeted ๐ฏโโ๏ธ๐ฏโโ๏ธ with a birthday card ๐ด.
The project is open-source ๐ & used a MIT License ๐. For more info on the scope of a MIT License, please check ๐ https://choosealicense.com/licenses/mit/.
To get a copy ๐จ of the license included, please see LICENSE.md.
I have included a ๐ก tips file. It contains trips & tricks which make my life & project a bit easier.
- Vite + React + Typescript & Tailwind CSS
- Firebase (Hosting & Storage) + Google ReCaptcha (AppCheck in Firebase & Site Protection)
ViteJS is a library of happiness in disguse. ViteJS uses Rollup for "packing & building" a site, which alone is excellent. Vitejs flaunts a HMR (Hot Module Replacement ๐ฅ) feature, without a loss in state ๐คฏ. It has open-source scaffolding for almost all popular front-end stacks (like React, Svelte and even VanillaJS & VanillaTS). It is my go to choice for all projects ๐.
ReactJS is a library, I work with professionally ๐ค๐ป. I do not hate Vue or Svelte etc, by there is something comfortable ๐๐ป for me working with ReactJS. I would not argue it has plenty room for improvement ๐ค (and should be inspired from Next.js).
Typescript is one of the libraries I personally hated ๐คง. Over time โณ, I have realized ๐ค that extra piece of work ๐ง I have to do ahead during development saves me from bugs ๐. I am even more productive โ with Typescript, than without. P.S. It saves me from lot of embarrassment ๐ณ ahead of time ๐.
Tailwind CSS is one of my favourite โฃ inline style builder ๐งฑ. The range of utility classes predefined & flexibility๐คบ is mind-blowing ๐ต.
I have been using Firebase for a long time now as a BaaS. Firebase has it's pros ๐ and cons ๐, yet it is a strong contender ๐ช๐ป in the field of BaaS providers.
In my experience my Firebase Hosting ๐ is quite fast and easy to deploy, with the free domains *.web.app
and *.firebaseapp.com
. The Firebase CLI ๐จ๐ปโ๐ป makes it extremely fast to deploy the same ๐. Before utilizing the main resources we can use a temporary preview channel to get a feel of the site in a real-world domain ๐ฎ (not merely localhost where everything works and then breaks ๐).
On the other hand, I am using Firebase Storage ๐ as a Content Delivery Network for my assets ๐ผ. Secured by rules ๐ค my specific bucket ๐งบ (here birthday) is secure ๐ from manipulation and can be read ๐ by everyone. Morever it is protected ๐ก by a token which is only generated if the request originates for whitelisted origins ๐. I can speak from my experience Storage in GCP is quite fast ๐จ (may be not the fastest) and get's my job done โ .
AppCheck by Firebase is just a feature to verify ๐ง all requests that originates for Firebase Resources (like Firestore, Storage, Functions etc...), are from whitelisted origins ๐. These origins are controlled seperately in the Google ReCaptcha V3 settings and the same secret ReCaptcha Key ๐คซ is shared with Firebase. On the other hand ๐ค๐ป, the client (i.e. your browser ๐ธ & my app ๐ฑ) knows the public/site key ๐ฃ. By knowlege ๐ (and high level stuff ๐), we know Google secures misuse ๐ค resources.
In particular that part could be really be skipped ๐. This site (or any other site using AppCheck) does not need any ReCaptcha Badge Protection ๐ก. As I did not include โ a privacy policy, this is my way of declare ๐ฃ, the site used ReCaptcha.
- For hosting a static site you may continue with:
- Github Pages [Experienced. Demo: https://anrcry.github.io]
- Render [Never Tried]
- Netlify [Partially tried. Very Fast ๐]
- Vercel [Partially tried. Very Fast ๐]
- Fly.io [Never tried]
- Coolify.io [Never tried]
- Backendless [Never tried]
- For cloud storage for free, you may try
- AWS S3 (Free Tier) [Never tried]
- Supabase Storage [Partially tried. No comments ๐ค]
- nhost.io Storage [Never tried]
- Back4App [Never tried]
- Backendless [Never tried]
๐๐ป Most Cloud Storage services are Backend as a Service (BaaS). They are very likely to provide Cloud Functions, Database Storage etc.
I would someday ๐ like to further develop this with an admin ๐ฉ๐ปโ๐ป panel or something of that sort. That way I could issue random links ๐ for each of my friends. Their details (name, email and phone number) will be filled โ๐ป in dynamically.
- Partial SSR to create custom greetings.
- โญ๐ด Add my social links to the birthday site pointing to myself... ๐ฑ
- ๐ด Know your audience:
- Add a custom popup, to send a message to us directly (with feeback). If the user is known (due to dynamic link, no name is required).
- โ Server Side: Curating the feedback/message from the user to improve/thank them later.
- ๐ก Admin Panel to make stuff dynamic.
- ๐ต Dynamic URL linking (Optional)
- ๐ก โ Server Side: CRON job to read Firestore once everyday at 0๏ธโฃ0๏ธโฃ:0๏ธโฃ0๏ธโฃ (IST), to send out SMS and/or email via API with birthday greetings.
๐ด - High Priority
๐ก - Medium Priority
๐ต - Low Priority
โ - Probably Server Side
โญ- Currently working on this.
- Anweshan Roy Chowdhury: I go by the name @cybrix. This project is my solo undertaking ๐. Feel free to reach me out at [email protected]
I would like to conclude by saying, I loved developing this project. As always every project makes me learn something new.
3๏ธโฃ 2๏ธโฃ 1๏ธโฃ ... ๐๐๐ ... ๐๐
Developed with lots of love โค๏ธ,