![]()
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.
We used many varieties of data storage solutions, including DynamoDB, PostgreSQL in RDS, S3, and others, and I was responsible for managing the data pipelines and integrations between these systems. This included building and maintaining ETL processes to ensure data integrity and consistency across the company's various systems.
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 second restructuring transformed our marketing campaign creation from a manual, developer-dependent process into an autonomous, end-to-end marketing automation platform. As the business scaled, marketing campaigns expanded across multiple channels—direct mail, SMS, and email—requiring faster turnaround times and reduced overhead. This project aimed to empower the marketing team to independently create, execute, and analyze campaigns without technical intervention.
The Streamlit application served as a centralized hub for the entire marketing workflow, pulling from a PostgreSQL database containing property and contact data. The platform enabled the marketing team to build custom list segments using saved queries with flexible filtering criteria. Before finalizing campaigns, users could apply suppression lists to ensure compliance and prevent over-marketing to contacts.
A key automation feature integrated with CallTrackingMetrics to automatically assign unique tracking phone numbers to each list segment, enabling granular campaign performance tracking. Once campaigns were finalized, the application automatically delivered formatted lists directly to our mailhouse partner via SFTP, eliminating manual file transfers and reducing campaign launch time from days to hours.
The platform also included interactive analytical dashboards for visualizing campaign performance metrics, comparing historical data, and calculating ROI across different marketing channels and segments. This transformation dramatically reduced marketing costs, accelerated campaign deployment, and provided visibility into marketing effectiveness.

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.