DEV Community

Jay Artiaga
Jay Artiaga

Posted on

Building a Wedding Planning Tool for the Philippine Market: What I Learned About Localizing SaaS

When I first sat down to build WedPlanner, I thought I was building a wedding planning tool. Checklist, budget tracker, guest list — standard stuff. How hard could it be?

Six months later, I was knee-deep in PHP currency formatting edge cases, trying to figure out why my GCash webhook was returning PAYMENT_EXPIRED for a transaction that literally just happened, and learning that "ninong" and "ninang" aren't just titles — they're a whole social contract that determines seating arrangements, budget contributions, and whether your wedding will have enough lechon.

Here's what I learned about localizing a SaaS product for the Philippine market — the stuff no one tells you when you read "just use i18n" on Stack Overflow.

The Currency Trap: It's Not Just About the Peso Sign

My first instinct was simple: swap the dollar sign for ₱ and call it a day. That lasted about 15 minutes.

Here's the thing about Philippine pesos: the numbers are big. A mid-range wedding in Manila runs around ₱500,000 to ₱1,200,000. That's six zeros. When you're displaying budget breakdowns, vendor costs, and running totals, you need to format these numbers in a way that's actually readable — and that doesn't break when someone's budget crosses the million-peso mark.

I started with Intl.NumberFormat — the obvious choice:

const formatter = new Intl.NumberFormat('en-PH', {
  style: 'currency',
  currency: 'PHP',
  minimumFractionDigits: 0,
  maximumFractionDigits: 0
});

console.log(formatter.format(850000)); // "₱850,000"

Enter fullscreen mode Exit fullscreen mode

Great, right? Then I discovered that en-PH isn't universally supported across all browsers. Some older Android devices — still very common in the Philippines, where the average smartphone is 2-3 years old — would fall back to en-US and suddenly my peso amounts were showing dollar signs. Not ideal when someone's planning their wedding budget and suddenly thinks their venue costs $850,000.

I ended up writing a custom formatter that handles the PHP-specific quirks:

function formatPHP(amount) {
  const formatted = amount.toLocaleString('en-PH', {
    minimumFractionDigits: 0,
    maximumFractionDigits: 0
  });
  return `₱${formatted}`;
}

Enter fullscreen mode Exit fullscreen mode

But the real localization challenge wasn't the formatting — it was the context. Filipino couples don't think about wedding costs the same way Western couples do. The budget isn't just "what we can afford." It's a negotiation between two families, often with parents and godparents contributing significant portions. The budget tracker needed to support multiple contributors, not just a single couple. I added a "contributions" tab where couples can track who's paying for what — the bride's family covering the reception, the groom's family handling the church, the ninong pitching in for the honeymoon.

I also learned that Filipino wedding budgets are almost always discussed in round numbers: "Our budget is 500k" or "We're spending 1 million." Nobody says "₱847,350." The UI needed to reflect that — showing estimates and ranges, not precise-to-the-peso calculations that would feel weirdly specific and, honestly, a little stressful to look at.

Programming and coding

GCash Integration: The Payment Layer Nobody Talks About

If you're building anything consumer-facing in the Philippines, you need GCash. Period. Over 90 million Filipinos use it — that's nearly the entire adult population. Credit card penetration is around 3%. If you only accept cards, you're building for 3% of your market. That's not a niche — that's a rounding error.

Integrating GCash into WedPlanner was one of the most humbling technical experiences I've had. Here's what I wish someone had told me before I started:

1. The Webhook Reliability Problem

GCash Pay (via their API partners like PayMongo) uses webhooks to notify you of payment status. In theory, this is fine. In practice, webhooks can arrive late — sometimes 30-60 seconds after the user sees "Payment Successful" on their GCash app. If your UI doesn't handle this gracefully, you'll have confused users refreshing the page wondering why their payment "didn't go through."

I built a polling fallback: if the webhook doesn't arrive within 10 seconds, the frontend polls the payment status endpoint every 3 seconds for up to 2 minutes. It's not elegant, but it works. More importantly, it prevents the support tickets that start with "I paid but your app says I didn't."

2. The ₱1 Test Transaction Trap

GCash's sandbox environment lets you test with ₱1 transactions. Everything works perfectly. Then you go live and discover that real transactions behave differently — different timeout windows, different error codes, different everything. The sandbox is great for integration testing, but you need to test with real amounts (even if it's just ₱50) before you can trust your payment flow. I learned this the hard way at 11 PM on a Friday.

3. QR Ph vs. GCash App Deep Links

GCash supports both QR Ph (the national QR standard) and GCash-specific deep links. I initially went with QR Ph because it's "the standard" and theoretically works across multiple e-wallets. But GCash's QR Ph implementation has quirks — some users' apps wouldn't recognize the QR code format, especially on older app versions. Switching to GCash-specific deep links solved the problem but meant I was now locked into a single payment provider. Trade-offs everywhere.

For the GCash wedding registry feature, I built a flow where couples can create a cash gift registry and guests can contribute directly via GCash. The key insight: Filipino wedding guests want to give cash. It's culturally expected — the "money dance" where guests pin bills on the couple is a staple of Filipino receptions. The product just needed to make it frictionless. Scan a QR code, enter an amount, done. No account creation, no app download (they already have GCash), no friction.

Wedding planning celebration

Filipino Wedding Customs: The Feature List You Can't Skip

This is where localization stops being about code and starts being about culture. A generic wedding planning tool has "guest list" and "seating chart." A Filipino wedding planning tool needs a lot more than that.

  • Principal Sponsors (Ninong and Ninang): These aren't just guests. They're godparents who often contribute financially and have ceremonial roles during the wedding. They need their own section in the guest management system, with tracking for whether they've confirmed, what their role is, and — critically — whether they're bringing their entire extended family (they usually are). I also added a field for "relationship to couple" because you can't just list "Ninong Boy" — you need to know he's the bride's uncle from her mother's side, and that affects where he sits.

  • Entourage Management: Filipino weddings have large entourages. Secondary sponsors for the cord, veil, and coins. Bridesmaids and groomsmen. Flower girls, ring bearers, Bible bearer, coin bearer. A typical Filipino wedding entourage can be 15-25 people. The tool needs to handle this without the UI becoming a scrolling nightmare. I built a collapsible entourage section with drag-and-drop ordering — because the order people walk down the aisle matters.

  • Pamamanhikan: The formal meeting where the groom's family visits the bride's family to ask for her hand. It's not technically part of the wedding, but every Filipino couple planning a wedding needs to account for it. I added it as a pre-wedding milestone in the timeline, complete with a checklist: prepare food, bring gifts, dress respectfully, bring your parents.

  • The Money Dance: Guests pin cash on the couple during the reception. It's a major part of Filipino weddings, and couples often want to plan for it — which song to play, who announces it, how long it should last. I added a "Money Dance" section to the reception timeline with customizable duration and music selection.

  • Church Requirements: Catholic church weddings in the Philippines require specific documents: baptismal certificates, confirmation certificates, marriage license, canonical interview, pre-cana seminar certificate. I built a document checklist specifically for church weddings because missing one document can delay the entire wedding.

The hardest part wasn't coding these features — it was understanding them well enough to build them correctly. I'm Filipino, but I still had to interview couples, wedding coordinators, and parents to understand the nuances. If you're building for a market you don't personally know, multiply your research time by 3x. Minimum.

Philippines Filipino Pride

The Metro Manila vs. Province Divide

Another localization lesson I didn't expect: the Philippines isn't one market. It's at least two — and probably more like five.

Couples in Metro Manila have different needs than couples in the provinces. Manila couples are more likely to use digital tools, expect mobile-first design, and want features like online RSVP with automated follow-ups. Province couples often have larger guest lists (200-500 guests is normal), more traditional ceremonies with extended family involvement, and may have limited or intermittent internet connectivity.

This created real product tension:

  • Offline support: I initially built everything as a real-time web app with server-side rendering. Then I heard from a coordinator in Iloilo: "What if the venue has no signal?" Many Filipino wedding venues — especially garden and beach venues — have spotty coverage. I added offline-capable PWA features with service workers and IndexedDB sync. Couples can now plan offline and sync when they're back on Wi-Fi.

  • Guest list size: My initial guest list UI was designed for 100-150 guests (Western norms). Filipino weddings routinely have 300+. I had to redesign the entire list view for performance at scale — virtual scrolling, paginated loading, batch operations for RSVP status updates. Loading 500 guests in a single render was crushing mobile browsers.

  • Language: The app is primarily in English (which most Filipino couples are comfortable with), but I added Tagalog support for key UI elements. "RSVP" becomes "Sasama ka ba?" — small change, big difference in feeling native. I'm also working on Cebuano and Ilocano support, because not everyone in the Philippines speaks Tagalog as their first language.

  • Data sensitivity: Mobile data in the Philippines isn't cheap for everyone. I optimized asset sizes, lazy-loaded images, and made sure the core planning features work on 3G connections. The initial bundle was 2.4MB — I got it down to 380KB gzipped.

What I'd Do Differently

If I were starting over, here's what I'd change:

  1. Start with the payment layer. I built the planning features first and bolted on GCash later. Wrong order. Payment integration shapes your entire data model — user accounts, subscriptions, transaction history, refund logic. Build it first, even if it feels premature. You'll save yourself months of refactoring.
  2. Interview 20 couples before writing a single line of code. I talked to 5. That wasn't enough. The edge cases in Filipino weddings are endless: What if the couple is Catholic but one family is Muslim? What if they're having a civil wedding but still want the traditional elements? What if the ninong lives abroad and can only attend via video call? What if the wedding is in Tagaytay but half the guests are from Davao? Every answer shapes a feature.
  3. Don't assume "Filipino" means one thing. A wedding in Batanes looks nothing like a wedding in Davao. A Tagalog wedding has different customs than an Ilocano or Cebuano wedding. A Muslim wedding in Mindanao is completely different from a Catholic wedding in Manila. Building a "Filipino" wedding tool means building a flexible one that can adapt to regional and cultural variations.
  4. Mobile-first isn't optional — it's the only option. The Philippines is a mobile-first country. Over 70% of our users access WedPlanner on their phones. Desktop is an afterthought. If your responsive design is "desktop-first with mobile breakpoints," you're doing it wrong for this market. I rebuilt the entire UI mobile-first after the first round of user testing showed that desktop-optimized layouts were unusable on 5.5-inch screens.
  5. Build for group planning, not individual planning. Western wedding tools assume one person (usually the bride) is doing all the planning. Filipino weddings are planned by committee — the couple, both sets of parents, the ninong and ninang, sometimes the entire entourage. The collaboration features (shared checklists, comment threads, permission levels) aren't nice-to-haves. They're the core product.

The Bottom Line

Localizing SaaS isn't translating strings. It's understanding how people live, what they value, and how they make decisions. The peso sign is the easy part. The hard part is knowing that a Filipino wedding isn't just a ceremony — it's a family reunion, a financial negotiation, a religious sacrament, and a community celebration all rolled into one.

If you're building for a market you don't intimately know: spend time there. Talk to people. Watch how they use (or don't use) existing tools. The best localization features come from watching someone struggle with your product and thinking, "Oh. I built this wrong."

Building WedPlanner has been the most humbling and rewarding project of my career. Every time a couple tells me the tool saved them from a wedding planning meltdown — or that their ninong actually RSVP'd on time — I know the localization work was worth it.

What's the biggest localization challenge you've faced building for a specific market? I'd love to hear your war stories in the comments.

Top comments (0)