Jeffrey Bernadas

Software Engineer

I build enterprise-grade, responsive digital solutions for the web and mobile โ€” systems that hold up when they're carrying real weight.

Statusโ— Open to interesting work
Local--:--:--
Zone...
Hostself ยท netcup ยท ubuntu 22.04
Back to Projects

Balloon Artist PH

Description

A production e-commerce platform I built for a Philippine balloon-decoration and event-styling business. It handles three purchase flows: direct product sales, customizable design packages, and a custom-quote pipeline where customers request a setup, admins price it, and the accepted quote becomes a payable order. The frontend is a React and TypeScript SPA with Redux Toolkit Query; the backend is a dual-process NestJS app pairing an API server with a worker that runs background jobs and scheduled tasks. It integrates Stripe payments, Lalamove delivery, Keycloak OIDC auth, real-time chat, and a full admin dashboard.

Features

Product Catalogue

  • -Product CRUD with variants (size/color) carrying independent price and stock
  • -Product images stored in MinIO with a primary thumbnail
  • -Filter by category, price range, availability, and popularity
  • -Sort by newest, price, name, or popularity
  • -Stock decremented on payment confirmation and restored on cancellation
  • -Featured products widget

Design Catalogue

  • -Ready-made balloon arrangements with unlimited made-to-order availability
  • -Occasion-based filtering (birthday, wedding, corporate, and more) plus tags
  • -Three flows: add as-is, personalize, or use as quote inspiration
  • -Per-character surcharge pricing with a live price breakdown
  • -Configurable dimensions, lead time, and delivery service type

Categories

  • -Flat category structure with auto-generated slugs
  • -Soft delete so existing products stay visible
  • -Redis-cached with configurable TTL and display ordering

Cart

  • -Guest cart in localStorage and authenticated cart in PostgreSQL
  • -Guest cart merges into the account on login at latest prices
  • -De-duplication of identical product and design items
  • -Stock re-validation at checkout with inactive-item warnings
  • -Daily guest-cart cleanup job

Wishlist

  • -Save favorite products and designs
  • -Out-of-stock items retained with add-to-cart disabled

Custom Quote Workflow

  • -Customer requests with event details, budget, and optional design inspiration
  • -Admin replies with pricing, design mockups, and production notes
  • -Status pipeline: pending, quoted, accepted, declined, expired
  • -Accepted quotes convert into payable orders
  • -30-day expiry with 3-day warning emails and re-quote support
  • -On-site installation option that skips delivery booking

Checkout

  • -Stripe hosted checkout in PHP
  • -Address selection with Google geocoding to lat/lng
  • -Delivery date and time-slot scheduling (morning, afternoon, evening, PH time)
  • -Lead-time enforcement and a daily design-capacity check
  • -Frozen price and item snapshots at purchase

Payments & Refunds

  • -Stripe payments with signature-verified webhooks
  • -Manual-payment fallback for direct social-media transactions
  • -Admin-approved refund workflow (pending, approved, processed)
  • -Configurable refund percentages by order status
  • -Stock restored on paid cancellation

Delivery & Shipping

  • -Full Lalamove integration (PH v3 API) across 10 vehicle types
  • -Vehicle-type routing based on order contents
  • -Live shipping quotes with configurable per-vehicle surcharges
  • -API or manual delivery booking
  • -Webhook-driven delivery status tracking
  • -PSGC region, province, city, and barangay address cascade

Orders & Fulfillment

  • -Order numbers in BA-YYYYMMDD-XXXXXX format
  • -Full lifecycle: pending, confirmed, preparing, out for delivery, delivered
  • -Customer order tracking with driver info and status badges
  • -Auto-cancellation of abandoned unpaid orders (7 to 14 days)

Reviews & Ratings

  • -Star ratings with up to 2 photos per review
  • -30-day review window after delivery, one review per product per order
  • -Denormalized average rating and review count on designs

Real-time Chat

  • -Customer and admin messaging over Socket.IO with a Redis adapter
  • -Presence tracking, read receipts, and message editing
  • -System messages for quote and order updates
  • -Emoji support and a floating chat widget

Authentication & Accounts

  • -Keycloak OIDC with DPoP tokens
  • -Sync-on-demand profiles with 24-hour staleness refresh
  • -Role-based admin access
  • -User blocking via a global guard with a suspended-account page
  • -Profile, addresses, and email-notification settings

Admin Dashboard

  • -Metrics and analytics with Recharts (revenue, orders, customers, quote conversion)
  • -Product, inventory, category, order, and quote management
  • -Refund approvals and failed-email retry
  • -Runtime system configuration (40+ keys)
  • -Audit logging of admin actions with before/after diffs

Background Jobs & Scheduling

  • -Dual-process worker running RabbitMQ consumers and cron jobs (Asia/Manila)
  • -Abandoned-cart reminders and low-stock alerts
  • -Quote expiry warnings and updates
  • -Abandoned-order cleanup

Notifications & Email

  • -Transactional emails via React Email and Resend
  • -Templates for orders, quotes, reminders, and alerts
  • -Failed-email admin dashboard with retry and discard

Platform & Security

  • -Optional runtime-toggleable hybrid encryption (AES-256-GCM + RSA-2048)
  • -Replay protection with timestamp and Redis nonce dedup
  • -Redis caching and Redis-backed rate limiting
  • -Elasticsearch full-text search and structured logging
  • -Sentry and Elastic APM monitoring with Swagger/OpenAPI docs

Tech Stack

Frontend

  • React 19
  • TypeScript
  • Vite
  • Tailwind CSS v4
  • Shadcn/ui
  • Redux Toolkit Query
  • React Hook Form
  • Zod
  • Socket.IO Client
  • Recharts
  • Motion

Backend

  • NestJS
  • TypeScript
  • Prisma
  • PostgreSQL
  • Redis
  • RabbitMQ
  • Socket.IO

Infrastructure

  • Keycloak
  • MinIO
  • Elasticsearch
  • Kibana

External Services

  • Stripe
  • Lalamove
  • Google Maps
  • Resend
  • React Email

Monitoring & Logging

  • Sentry
  • Elastic APM
  • Winston
Jeffrey Bernadas