Skip to content

๐ŸŽ‚Wish your loved ones a very happy birthday & send them some joy with this birthday card.

License

Notifications You must be signed in to change notification settings

anweshandev/birthday-card

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Birthday Card

โ€œThere was a star danced, and under that was I born.โ€

Much Ado About Nothing - William Shakespeare.

Staus Badge

Firebase hosting CI/CD

Table of Contents

"Closed greeting card with prompts"

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.

"Closed greeting card with prompts & song playing"

Demo ๐Ÿ‘

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 ๐ŸŽด.

License ๐Ÿ”‘

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.

Quick Note ๐Ÿ“

I have included a ๐Ÿ’ก tips file. It contains trips & tricks which make my life & project a bit easier.

Resources used ๐Ÿ’ฟ

  1. Vite + React + Typescript & Tailwind CSS
  2. Firebase (Hosting & Storage) + Google ReCaptcha (AppCheck in Firebase & Site Protection)

V-R-T Stack with Tailwind CSS

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 ๐Ÿ˜ต.

Why did I use Firebase ๐Ÿ”ฅ?

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.

Hosting

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 ๐Ÿ™„).

Storage

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

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.

Uses of ReCaptcha V3 Badge

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.

Alternatives of Firebase

  1. For hosting a static site you may continue with:
  2. For cloud storage for free, you may try

๐Ÿ‘†๐Ÿป Most Cloud Storage services are Backend as a Service (BaaS). They are very likely to provide Cloud Functions, Database Storage etc.


Discussion

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 TODO ๐ŸŸจ

  • Partial SSR to create custom greetings.

TODO Map ๐Ÿ“

  • โญ๐Ÿ”ด 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.

Current Contributor(s)

  • Anweshan Roy Chowdhury: I go by the name @cybrix. This project is my solo undertaking ๐Ÿ™‚. Feel free to reach me out at [email protected]

Conclusion

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 โค๏ธ,

Anweshan Roy Chowdhury.