As a full-stack developer at MarketPro Homes, I was responsible for the development and maintenance of the company's internal tools and external client facing applications. I worked closely with the marketing team to automate and streamline their marketing campaigns and prepare data delivery. I was also commonly tasked with automating and streamlining the company's internal processes and data integrations using AWS tools like EventBridge, SQS, Lambda, DynamoDB, S3, Athena, and others. I also setup and managed simpler Zapier integrations, as well as a variety of adhoc tasks that would arise on a daily basis and many webscraping projects for property data streams.
Since the v1 client deal site was built with a focus on speed and simplicity in order to ship as quick as possible, the second version was built with a focus on user experience and scalability. This included a complete overhaul to our backend API, frontend UI, and admin dashboard, and was meticulously planned with the improvements in mind. The API was designed in a way to allow safer access to the database, deeper variety of queries, and more efficient data retrieval.
The frontend was built with React to allow for a more dynamic and responsive user experience, and a much more feature rich user experience, providing a much more easily customizeable developer approach to the previous Jinja/Flask application. The admin dashboard was built with React as well, and included within the same application but safeguarded by user permissions and authorizations. It was designed with more robust dashboards in mind, and easier interactability by MarketPro disposition managers.
As we started to notice more user engagement associated with browsers on mobile devices, we decided to build a mobile app. This would provide much quicker access for all the users and an additional marketing stream to get notifications straight to the users almost instantaneously.
We decided to go with React Native to build it, because it very closely resembles the React infrastructure and a lot of the code could be reused. This also minimized development time and ease of building by being a cross platform framework, so we did not need to build separate native apps for iOS and Android. We paired this with the Expo platform to allow simple deployment and testing of the app, and the ability to push most of our updates through over-the-air, as most changes to the app only needed an update of the JavaScript bundle.
The app easily connected users to their respective accounts via the same Auth0 user database, and their account info using the same Flask API as the web app. New API endpoints were developed to allow scheduling of broadcasted push notifications for new property listings and other general news, as well as individual account based notifications about accepted and rejected bids.
Besides the company marketing segmenting tool, the company's internal operations were also streamlined in the Streamlit application. The total view application we built included a number of functional tools and dashboards for the company's internal operations. This included lookup tools for marketed properties and groups of properties, opt out information, property marketing history, and a variety data table views for other company personnel.
However, as the company continued to grow, the need for more robust internal operations tools became apparent. This led to the current in development version of the internal operations tool, which is being built with a focus on scalability and user experience. This tool uses React and typescript for the frontend to allow for a more customizeable and dynamic user experience, and implementing developer friendly programmer experience with typescript's static typing. The backend is built with Python Flask and DynamoDB, and is designed to allow for more robust data querying and manipulation, as well as a more secure and efficient data retrieval process. This application was an update to process and data security by implementing JWT tokens and a user permissions system to mandate who can access what data and track all changes at a user level.
The purpose of the second restructuring to our marketing campaign creation process, was to take the monthly marketing processes out of my hands and create tooling to allow the marketing team to create, run, send, and analyze all of their marketing segments without developer intervention. As the business continued growing, so did the need for more marketing segments and different marketing mediums. The need for in-house marketing campaign tools became prominent. This kickstarted a high priority project of creating an all-in-one application for curating these marketing segments, outputting the lists for easy marketing consumption, and providing interactable analytical tools to visualize results and compare historical marketing data.
This application was built with Streamlit as a way to rapidly develop and easily access in-house. The application provided interfaces to create marketing list segments via saved queries.
The original client deals app is a web application that marketed property deals to potential buyers and allowed bidding on the deals. The problem was that the site was not user friendly and had constant breakdowns while relying on an outdated framework and a single virtual part-time engineer, and during a time of substantial company growth.
As the pieces of the application were breaking almost daily, the plan was to rebuild the app with priority on rapid development, as to get the site up and running as quickly as possible and avoid cutting off revenue stream and contact with potential clients. As the most widely used programming language among our team was Python, we continued with a Flask backend using Jinja2 templating for the frontend.
My primary role at the company at this time was a Data Engineer, but acted as a full-stack developer for this project, as this was a all hands on deck to get the product shipped as quick as we could. While I was familiar with the basics of frontend development at this time, this project let me dive deeper into all the pieces of CSS, HTML, Javascript and the interaction with the backend.
SAS is a statistical analysis software that is widely used in the marketing industry. I was tasked with converting a SAS script to Python to automate the company's mail and texting marketing efforts into a much more efficient and transparent process.
The script was used to analyze the company's marketing data and generate reports for the marketing team, as well as a way to take our property database and use certain flags and contraints to filter down the results into a small subset of properties that we would then market to. The script would then output these properties into a CSV file that would be used to send out mailers and text messages to potential sellers, as well as output a specific summarized plan for marketing firms to follow in termis of schedule, marketing segments, and types.
The problem with the script was the lack of transparency of the processes to the marketing and upper management and the time consuming process of both altering the thousands of lines of SAS scripting and the time it took to run the script which was almost an hour. The solution was to convert the script to Python for efficiency and easability, as well as add output metrics through the process to show all filters, contraints, and counts through the processes. This added effective checks and balances to the process and allowed for a more efficient and transparent process. This also permitted additional automations capable in Python but not possible with SAS, including sending backups and metrics to AWS for consumption elsewhere. The boost to efficiency was significant as the Python script was able to run in under 2 minutes. Due to the time saved in analyzing the final marketing data and running the script, a process that originally took a week per marketing plan with the back and forth of testing different filters on camapign counts, was now able to be completed within a day.