Skip to content

Projects

Portfolio projects I’ve built over the years

These are personal projects I’ve designed and built to explore new tools, sharpen my craft, and solve problems I cared about. Each one includes a short case study. For details on professional client work, visit my company website, Terrace Platforms.

Project Management SaaS

Proma

A simple project management application that allows you to create projects and tasks for your clients.

  • Tailwind CSS
  • Alpine.js
  • Laravel
  • Livewire
  • TDD

Challenge

Design and build a simplified project management system that models real-world client relationships, project tracking, and issue prioritization while maintaining clean relational architecture, efficient querying, and a polished user experience. The application also needed to function as a public demo environment that automatically resets to seeded data daily without manual intervention.

Solution

Proma was built using Laravel and Livewire with DaisyUI for rapid UI development. The database schema was structured around relational integrity between Clients, Contacts, Projects, and Issues, allowing Issues to optionally belong to specific Projects while still maintaining client association. To support dashboard analytics, optimized queries were written to aggregate Issues by priority and calculate project/issue trends over time. System-wide search was implemented to index multiple models and return contextual results efficiently. Notifications were integrated to simulate real project workflow feedback, and a scheduled Laravel job was configured to reset the application state to seeded demo data each night at midnight, ensuring a clean and consistent demo experience without affecting production logic.

Results

  • Built cross-model search functionality for improved usability
  • Automated nightly demo reset using Laravel scheduled jobs and seeded data
  • Maintained responsive UI and reactive components using Livewire
  • Created a production-structured demo app with realistic workflow simulation

Bill Management SaaS

Billify

A bill management application that enables you to add your monthly bills and calculate your debt/income ratio.

  • Tailwind CSS
  • Alpine.js
  • Laravel
  • Livewire
  • TDD

Challenge

Design a simplified budgeting and bill reminder application that translates annual or monthly income into multiple pay-period views while dynamically calculating monthly remainder and debt-to-income ratio. The system also needed to support recurring bills with variable due dates and optional month-specific scheduling.

Solution

Billify was built using Laravel and Livewire with a reactive UI powered by DaisyUI. Income normalization logic converts user-provided salary inputs into yearly, monthly, bi-weekly, and weekly projections using consistent calculation rules to ensure predictable outputs. Bills are modeled with categorical grouping, optional month constraints, and configurable due dates. Aggregate queries compute total monthly obligations and dynamically derive monthly remainder and debt-to-income ratio without redundant data storage. Dashboard charts visualize income versus total bills and highlight top bill categories using grouped aggregations. Conditional alert logic evaluates due dates and valid months to determine when reminders should be surfaced.

Results

  • Implemented normalized income calculation logic across multiple pay frequencies
  • Designed flexible recurring bill model supporting month-specific constraints
  • Derived financial metrics (monthly remainder and DTI ratio) without duplicating stored data
  • Created visual dashboard with dynamic charts based on aggregated queries
  • Created conditional alert system based on date evaluation rules
  • Delivered a clean, intuitive budgeting workflow with minimal user friction

Recipe Sharing Platform

Recipeek

A recipe sharing platform that allows users to share their favorite recipes and discover new ones from other users.

  • Tailwind CSS
  • Alpine.js
  • Laravel
  • Livewire
  • TDD

Challenge

Design a public recipe discovery platform with filtering, sorting, and user-submitted content while maintaining fast query performance and a clean developer experience.

Solution

Architected the application using Laravel 12 and Livewire 3 with a component-driven UI. Implemented dynamic search and filtering using indexed database columns and query scoping to prevent N+1 issues. Built reusable Livewire components to keep state management predictable and minimize frontend complexity.

Results

  • Built reusable component patterns for future scalability
  • Created a clean UI with no ads or distractions
  • Google account login and saving favorite recipes features to drive user engagement
  • Social media sharing features to increase organic reach and traffic
  • Optimized database queries to maintain fast load times even with a growing recipe database

Dinner Date Idea Generator

Magic Date Ball

An interactive platform that generates unique dinner date ideas based on user preferences and location using the Yelp API.

  • Next.js
  • React
  • Tailwind CSS
  • Yelp API

Challenge

Reduce decision fatigue for couples choosing a restaurant by building a simple, interactive interface that delivers randomized but filtered dining suggestions based on real-time location, pricing, rating, keyword preferences, and current business hours.

Solution

Magic Date Ball was built with React and Next.js and integrates the Yelp Fusion API to retrieve nearby restaurant data. The application requests user geolocation, constructs dynamic API queries based on selected radius, price range, rating thresholds, and optional cuisine keywords, and filters results to include only currently open establishments. A randomized selection algorithm ensures suggestions feel spontaneous while still honoring user-defined constraints. The interface abstracts complex filtering into a playful 8-ball interaction model, prioritizing simplicity and minimal friction.

Results

  • Integrated external Yelp API with dynamic query parameter construction
  • Implemented geolocation-based search with configurable radius filtering
  • Filtered results by open status, rating, and pricing tiers
  • Developed randomized selection logic constrained by user preferences
  • Transformed multi-step search behavior into a playful decision-making experience

Blackjack Game

React Blackjack

A simple blackjack game built with React.

  • React
  • Tailwind CSS