Certificato: The Time-Saving Tool for Sending Certificates in Bulk
Tags: python, programming, opensource, tooling
Published: 2023-03-30 18:10:03

**Picture this**: it was a lazy summer day and I was stuck with the dreaded task of sending out over 120 certificates to participants of our college club's recent program. It felt like a never-ending mission, one by one, naming and emailing each certificate. To make matters worse, my brain was already fried from trying to come up with something cool and open source.

Now, I've always been intrigued by the idea of automating tasks with Python - like sending alerts via Telegram - so sending certificates via email seemed like the perfect opportunity to test my skills. Armed with an Excel sheet full of participant names and email addresses, I dove right into creating a simple Python program that would read the names and send out the corresponding certificates as PDFs. And the best part? Since the certificates were already named after the participants, my job was made even easier.

##But why?

But then, I'm sitting there thinking, "What if I have to make a ton of certificates from scratch? Do I really want to do that? I mean, I'm not exactly a web dev wizard or anything." But then, in a moment of caffeinated inspiration, I'm like, "Why not give Streamlit a shot?" And thus, after a whole lot of coffee and even more bug-fixing, I'm thrilled to present to you...Certificato!

Alright, so let me tell you about Certificato: 

> *Certificato is a web app developed using Streamlit to help users send certificates in large quantities when provided with an excel sheet containing the name and email address of the recipients. A single sample certificate could be used to edit and send to any number of audiences at a time.*



![Certificato main page](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uy4qvgnnqgrefo1fjo5j.png)

## Features

These are the features of the current version of Certificato:

1. The app reads the Excel sheet, extracts the name of the recipient, and creates a customized certificate with the provided name. The certificate is then sent to the recipient's email address.

2. The app is designed to use the app password of the Google account instead of the usual account password, as per the new Google security rule which doesn't allow third-party integration. This ensures that the user's account is protected and secure.

3. In addition to the current functionality, the future updates of Certificato will include the option to use sample certificates and templates and make edits on those. This feature will provide users with more flexibility in creating certificates and personalizing them according to their needs.

4. One of the key features of Certificato is its simplicity and ease of use. Users can upload their Excel sheet, select the certificate template, and send the certificates with just a few clicks. The app takes care of the rest, including creating the certificates and sending them to the recipient's email address.

5. Another advantage of Certificato is its compatibility with both Windows and Linux servers. This makes it a versatile app that can be used in various environments and by users with different technical backgrounds.

## Getting Started

* Clone this repository by running the following command:   

```
git clone https://github.com/<username>/certificato.git
```

* Install the required packages using the following command:   

```
pip install -r requirements.txt
```
* Run the following command to start the web app:   

```
streamlit run app.py
```

## Usage and Contributions

For further information and usage of the application, you could check out the repo:
https://github.com/suryan-s/Certificato

Also just wanted to give you a heads up that my app is now up and running on the Streamlit community! 
https://certificato.streamlit.app/

So, if you're interested, feel free to check it out. I'm really excited to see where this project goes and would love to hear your suggestions on what features to add next. And hey, if you run into any problems, feel free to raise an issue or even submit a pull request. Let's make this thing even better together!