Categories
Uncategorized

Project Reflection

Our project, Furever Matchup, is a pet adoption platform that seeks to enhance compatibility matching between adopters and pets. My work on the project has played a key role in incorporating the email feature, ensuring easy communication between users and shelters. I also presented our progress to keep our team aligned and emphasize our development.

Challenges and Solutions

One of the most challenging tasks was to make email functionality stable and secure. I originally struggled to set up email server settings and ensure that messages weren’t marked as spam. We resolved this by properly setting up SMTP authentication, utilizing flask-mail, and implementing email verification techniques. I definitely had to rely on some team-mates to help me troubleshoot.

Project Expectations

I chose this project because I wanted to be doing something worthwhile and useful. It has far exceeded my expectations in terms of functionality and collaboration. Seeing our platform take shape and understanding it could potentially make pet adoption processes easier has been incredibly rewarding.

Lessons Learned

  1. Email integration is tricky – Email functionality handling involves working with security components, rate limits, and spam filtering.
  2. MongoDB is agile – Using a NoSQL database allowed us to store and access pet and adopter data efficiently.
  3. Communication is the key – Frequent check-ins kept the team on track and aligned.
  4. Real-world applications make a difference – Working on a project with real-world applications made it so much more engaging.
  5. Presentations improve understanding – Explaining our work to others helped to cement my own understanding.
Categories
Uncategorized

Navigating the Tech Stack for Furever Matchup


Working on Furever Matchup has been a deep dive into some interesting technologies, and like any project, there have been highs and lows when it comes to learning and integrating them. From sending emails to handling API authentication, I’ve spent a lot of time figuring out how different tools fit together. Some were surprisingly easy to pick up, while others tested my patience—but in the end, they all played a role in making the project better.

Microsoft Graph API

It’s incredibly powerful, but with that comes a steep learning curve. Documentation is dense; getting authentication working correctly with OAuth took more troubleshooting than I was expecting. I did however appreciate the thorough documentation available to me, and the ease accessibility to create access tokens. This was something Flask-Mail did not offer. Flask Mail is simple, straightforward, and does exactly what it promises. Setting up and sending emails from our Flask app felt surprisingly smooth. But I could never fully get it to work with OAuth2.

The Tech That Grew on Me

At first, dealing with API authentication, especially with the Microsoft Graph API, was a real pain in the neck. Once I wrapped my head around it, though, I came to appreciate the level of security and flexibility it delivers. OAuth is complex for a reason—it ensures that data stays protected while giving allowance for full-on integrations between platforms. I still wouldn’t call it my favorite, but I respect what it brings to the table.

Conclusion

Each of the technologies used was a series of highs and lows; however, they all played an integral role in making Furever Matchup function (Kind-of…side note but the email functionality has still not made it past the ever evolving auto spam filter). Authentication was really a headache to implement but well needed. That’s just how it goes when building software-some things are smooth, and others make you want to pull your hair out. In the end, though, the learning process is what makes it all worth it.

How about you? Have you ever implemented an automated emailing system? Let me know, I want to hear it!

Categories
Uncategorized

Code Well vs. Code Smell

Clean Code

Clean code is defined by its readability, simplicity, and how easily it can be maintained. Writing clean code ensures that codebases are understandable and modifiable by any developer at any point in time. This leads to improved collaboration, reduced errors, and more efficient development processes.

For example, let’s take a function that calculates the area of a rectangle:

def a(w, h):

    return w * h

While logically and syntactically sound, the above code is not very clear. We can easily fix this by renaming the function and its parameters to more descriptive names. See the improved function below.

def calculate_area(width, height):

    return width * height

Better right? This is a very simplified example of how we can keep our code clean and understandable but there are many others.

Smelly Code

Code smells are pieces or attributes of code that could cause issues within the codebase. Ignoring these signs can result in over complication, more bugs, and difficulties maintaining. For example, long classes or methods can make code harder to understand and modify. Let’s look at the example function below that has multiple responsibilities:

def process_data(data):

    # Validate data

    if not validate(data):

        return None

    # Transform data

    transformed = transform(data)

    # Save data

    save_to_database(transformed)

This function is handling many responsibilities: validation, transformation, and saving. Refactoring into separate functions makes your code much easier to understand and maintain.

def process_data(data):

    if not validate(data):

        return None

    transformed = transform(data)

    save_to_database(transformed)

def validate(data):

    # Validation logic

    pass

def transform(data):

    # Transformation logic

    pass

def save_to_database(data):

    # Database saving logic

    pass

Implementing the functions in this way makes the logic much easier to follow. Overall we can improve the cleanliness of our code by commenting, specific and accurate naming, keep functions as small as possible, organize your code with classes where applicable and keeping your test suites clean.

References:

Oz, Mert. “Guide on Writing Clean Code.” Medium, Trendyol Tech, 1 July 2022, medium.com/trendyol-tech/guide-on-writing-clean-code-496bb1100cde.

“Code Smell – a General Introduction and It’s Type.” GeeksforGeeks, GeeksforGeeks, 8 Sept. 2020, www.geeksforgeeks.org/code-smell-a-general-introduction-and-its-type/.

Categories
Uncategorized

Streamlining Pet Adoption: How Email Notifications Enhance User Experience

Streamlining Pet Adoption: How Email Notifications Enhance User Experience

In today’s digital age, user engagement is the backbone of any successful application. At Furever Matchup, our mission is to revolutionize the pet adoption process, and integrating email notifications into our platform is a step towards a seamless and personalized user experience.

The Role of Email Notifications

Imagine this: you’ve just found the perfect pet on our platform and added it to your favorites list. With our email notification system, you immediately receive a friendly message confirming your action, ensuring you’re always informed about your interactions with the platform. This simple feature not only reassures users that their actions are recorded but also opens up opportunities for personalized communication.

How It Works

The email notification system in Furever Matchup is powered by Flask-Mail, a versatile and straightforward library for sending emails within Flask applications. Here’s how it functions:

  1. User Interaction: When a user adds a pet to their favorites, a backend function is triggered to process this action.
  2. Database Update: The pet’s ID is stored in the user’s favorites collection in our MongoDB database.
  3. Email Notification: The Flask-Mail library generates and sends an email to the user, confirming their addition.

This process is efficient, ensuring users receive real-time feedback while their preferences are securely saved in the database.

Technical Implementation

Here’s a behind-the-scenes look at how the email system is integrated:

  • Configuration: Flask-Mail is configured with our email server’s credentials, ensuring secure communication.
  • Message Generation: For each user action, a message is dynamically created, tailored to the specific interaction.
  • Sending Emails: The mail.send() function ensures the email is delivered promptly to the user.

Here’s a sample of the code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@app.route('/add_favorite/<pet_id>', methods=['POST'])
def add_favorite(pet_id):
    """Add a pet to favorites and notify the user via email."""
    favorite = {"pet_id": pet_id}
    favorites_collection.insert_one(favorite)
     
    msg = Message(
        subject="New Favorite Added!",
        sender="noreply@furevermatchup.com",
        recipients=["user@example.com"]
    )
    msg.body = f"You've added a new favorite pet with ID {pet_id}!"
    msg.html = f"<p>You've added a new favorite pet with ID <strong>{pet_id}</strong>!</p>"
     
    mail.send(msg)
    return redirect("/pets")

Benefits for Users

  • Personalized Engagement: Users feel a direct connection to the platform through timely updates.
  • Enhanced Trust: Real-time notifications build confidence that the platform is functioning correctly.
  • Future Expansion: The email system can be extended to notify users of new pets matching their preferences or updates from shelters.

Looking Ahead

Email notifications are just the beginning. As Furever Matchup grows, we envision integrating advanced communication tools such as SMS alerts, push notifications, and AI-driven suggestions based on user activity. These enhancements will further streamline the pet adoption process, making it easier and more delightful for users to find their furry companions.

Stay tuned for more updates as we continue to build features that bring pets and adopters closer together!

Categories
Uncategorized

Furever Matchup

Developing Furever Matchup, a digital “dating” platform for pet adoption, has been a fantastic experience so far. I’m happy to say that the project is progressing smoothly, and that’s largely due to the amazing, responsive team I’m working with.

Great Team Chemistry

From the beginning, our team set out with a shared goal: make pet adoption as easy and meaningful as possible while working with each others schedules and strengths. This has made it easy to brainstorm ideas, split up responsibilities, and tackle any challenges. What’s been especially helpful is that every team member brings a unique perspective to the table. We’ve got people who specialize in everything from UI/UX design to database management, so there’s always someone ready to take on a task or help others out.

Responsive Communication and Real-Time Feedback

One thing I really appreciate about this team is the responsiveness. Whenever questions come up or someone hits a snag, there’s always someone around to jump in. This has kept our momentum strong, and it makes the work environment feel supportive and genuinely collaborative. We have regular check-ins to discuss our progress, and it’s impressive how quickly everyone responds to updates, reviews each other’s work, and contributes meaningful feedback.

Staying on Track and Moving Forward

With each phase of the project, from wireframing to initial testing, we’re staying on schedule and hitting our milestones, which is a huge win. Having such a collaborative, motivated team has made all the difference in the progress we’ve made so far. As we move into the final stages, we’re feeling confident and excited about bringing Furever Matchup to life and, ultimately, helping more animals find their forever homes.

Categories
Uncategorized

Maren’s Tech Life

My name is Maren and I am an ecampus student living right outside of Los Angeles in California. I keep pretty busy, as I do work (almost) full time in addition to being school. I work at a tack store (horse equipment).

Outside of school, I enjoy riding horses and have my own horse. I almost pursued riding as my professional career, but decided to return to school to finish my bachelor’s in computer science. My goal in the future is to find a way to integrate my passion for the equestrian world and computer science. I’m excited to be working on a project that incorporates animals for my capstone project!  I will be working on the “dating app” for adoption.

For the technical side of things, I am most comfortable in python and java, however I can make my way with most of the common languages. I got my start in programming in my sophomore year as an intern for small company called BIAS intelligence. They do a lot of work with business optimization and data analytics, so most of my experience in programming is working with data. I’m excited to dive into a project where I can focus more on the UI side of things!