## Inspiration

The idea for Properly was born from a common anxiety: the fear and uncertainty homeowners and small business owners face when dealing with large, expensive property repairs like a new roof or septic system. We saw a disconnected system where owners struggled to track maintenance, contractors spent valuable time searching for work, and city officials lacked insight into potential public safety issues. We wanted to build a central hub to bring transparency and proactivity to the entire property maintenance lifecycle.

## What it does

Properly is a multi-faceted web platform designed to connect three key groups, each with a dedicated mode:

  • For Homeowners: It provides a simple dashboard to manage their property's health. They can track critical upkeep schedules, log maintenance issues, store warranties, and create job tickets to find qualified help for repairs.
  • For Contractors: It serves as a direct pipeline to a marketplace of verified, local jobs. Contractors can view open maintenance requests from homeowners, eliminating the guesswork of lead generation and allowing them to connect with clients who need their specific skills.
  • For Cities: It offers an anonymized, real-time overview of community-wide maintenance trends. This data can help officials identify areas with at-risk infrastructure, ensure public safety by addressing overdue repairs, and preserve community property values.

## How we built it

We built Properly using a modern, decoupled, full-stack architecture:

  • Frontend: A dynamic single-page application built with React and Vite, using React Router for navigation and Axios for API communication.
  • Backend: A secure and scalable API built with Python and FastAPI, served by a Gunicorn production server.
  • Database: A flexible NoSQL MongoDB Atlas cluster, connected asynchronously using the motor library.
  • Authentication: User identity and role-based access control (RBAC) are handled by Auth0, which secures our API endpoints by validating JWTs.
  • Deployment: The entire application is deployed on Render, with the FastAPI backend running as a web service and the React frontend as a static site, all from a single monorepo.

## Challenges we ran into

Our biggest challenge was implementing a robust, end-to-end authentication system. This involved a deep dive into JWT validation, where we debugged subtle issues related to token formatting, cryptographic signatures, and multi-audience claims from Auth0. Another significant hurdle was ensuring seamless data contract synchronization between the Pydantic models on our FastAPI backend and the data objects on the React frontend, which we solved to overcome 422 Unprocessable Entity errors.

## Accomplishments that we're proud of

We are incredibly proud of building a complete, full-stack application from the ground up and successfully deploying it to a live environment. Implementing a secure, role-based access control (RBAC) system that correctly differentiates between "homeowners" and "contractors" was a major accomplishment. This ensures that the application is not only functional but also secure and scalable for future user types.

## What we learned

This project was a profound lesson in the realities of modern web development. We learned the critical importance of a methodical debugging process, using browser network tabs and server-side logs to trace issues from the frontend to the backend. Most importantly, we gained a deep understanding of the intricacies of the authentication process as well as JWTs.

## What's next for Properly

The deployed MVP is a solid foundation. Our immediate next steps are to build out the core functionality for the other user roles:

  • Flesh out the contractor mode by building a system for them to view job details and submit bids.
  • Develop the city official dashboard, focusing on data visualization and reporting on community maintenance trends.
  • Enhance the homeowner experience by adding features like image uploads for requests and a more refined UI using a component library.

Built With

Share this project:

Updates