{"id":14124,"date":"2026-09-14T17:45:11","date_gmt":"2026-09-14T09:45:11","guid":{"rendered":"https:\/\/eber.co\/?p=14124"},"modified":"2026-09-15T10:12:00","modified_gmt":"2026-09-15T02:12:00","slug":"loyalty-program-page-editor","status":"publish","type":"post","link":"https:\/\/eber.co\/blogs\/loyalty-program-page-editor\/","title":{"rendered":"Why Your Loyalty Portal Pages Take So Long to Update"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"14124\" class=\"elementor elementor-14124\" data-elementor-post-type=\"post\">\n\t\t\t\t<div class=\"elementor-element elementor-element-968c14a e-con-full e-flex e-con e-parent\" data-id=\"968c14a\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b4bfce5 elementor-widget elementor-widget-html\" data-id=\"b4bfce5\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"UTF-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n<title>Why Your Loyalty Portal Pages Take So Long to Update (And How to Fix It)<\/title>\n<meta name=\"description\" content=\"Loyalty strategy is rarely the bottleneck. Shipping is. Here's how marketers can build, assign and localise loyalty portal pages in Eber without a dev handoff.\">\n<meta name=\"keywords\" content=\"loyalty portal pages, loyalty program page editor, loyalty platform for marketers, multi-market loyalty localisation, member portal customisation, loyalty program execution\">\n<meta property=\"og:title\" content=\"Why Your Loyalty Portal Pages Take So Long to Update (And How to Fix It)\">\n<meta property=\"og:description\" content=\"Loyalty strategy is rarely the bottleneck. Shipping is. Here's how marketers can build, assign and localise loyalty portal pages in Eber without a dev handoff.\">\n<meta property=\"og:type\" content=\"article\">\n<link rel=\"canonical\" href=\"https:\/\/eber.co\/blog\/loyalty-portal-page-editor\">\n<link href=\"https:\/\/fonts.googleapis.com\/css2?family=Montserrat:wght@400;500;600;700;800;900&display=swap\" rel=\"stylesheet\">\n<style>\n*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }\n:root {\n  --deep-teal:   #2B7A7A;\n  --accent-teal: #3DBCBC;\n  --light-teal:  #EBF8F8;\n  --border:      #C5E8E8;\n  --white:       #ffffff;\n  --ink:         #1a3a3a;\n  --ink-mid:     #2e5555;\n  --ink-light:   #5a8080;\n  --content-max: 860px;\n}\nhtml { scroll-behavior: smooth; }\nbody { font-family: 'Montserrat', sans-serif; background: var(--light-teal); color: var(--ink); line-height: 1.7; -webkit-font-smoothing: antialiased; }\n\n.hero { position: relative; width: 100%; min-height: 72vh; display: flex; align-items: center; justify-content: center; padding: 100px 80px 88px; overflow: hidden; background: linear-gradient(150deg, #c8ecec 0%, #EBF8F8 55%, #ddf0ff 100%); }\n.hero::before { content: ''; position: absolute; inset: 0; background-image: linear-gradient(rgba(61,188,188,0.07) 1px, transparent 1px), linear-gradient(90deg, rgba(61,188,188,0.07) 1px, transparent 1px); background-size: 60px 60px; pointer-events: none; }\n.hero-inner { position: relative; z-index: 2; max-width: 900px; width: 100%; margin: 0 auto; }\n.hero-eyebrow { display: inline-flex; align-items: center; gap: 12px; font-size: 11px; font-weight: 700; letter-spacing: 3px; text-transform: uppercase; color: var(--accent-teal); margin-bottom: 28px; }\n.hero-eyebrow::before { content: ''; display: inline-block; width: 32px; height: 2px; background: var(--accent-teal); }\n.hero h1 { font-size: clamp(32px, 4vw, 54px); font-weight: 900; line-height: 1.12; color: var(--deep-teal); letter-spacing: -1.5px; margin-bottom: 28px; }\n.hero h1 em { font-style: normal; color: var(--accent-teal); white-space: nowrap; }\n.hero-sub { font-size: 19px; font-weight: 400; color: var(--ink-mid); max-width: 640px; line-height: 1.65; margin-bottom: 36px; }\n.hero-meta { display: flex; align-items: center; gap: 24px; font-size: 12px; font-weight: 600; letter-spacing: 0.5px; color: var(--ink-light); text-transform: uppercase; margin-bottom: 36px; }\n.hero-meta .dot { color: var(--border); }\n.hero-actions { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }\n.btn-watch { display: inline-flex; align-items: center; gap: 10px; background: var(--deep-teal); color: #fff; font-size: 14px; font-weight: 700; letter-spacing: 0.3px; padding: 16px 32px; border-radius: 8px; text-decoration: none; transition: opacity 0.2s; }\n.btn-watch:hover { opacity: 0.85; }\n.btn-watch svg { width: 18px; height: 18px; flex-shrink: 0; }\n.btn-secondary { display: inline-flex; align-items: center; gap: 8px; color: var(--deep-teal); font-size: 13px; font-weight: 700; text-decoration: none; border-bottom: 2px solid var(--border); padding-bottom: 2px; transition: border-color 0.2s; }\n.btn-secondary:hover { border-color: var(--accent-teal); }\n\n.stat-bar { width: 100%; background: var(--white); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); }\n.stat-bar-inner { display: flex; width: 100%; }\n.stat-item { flex: 1; padding: 32px 20px; text-align: center; border-right: 1px solid var(--border); }\n.stat-item:last-child { border-right: none; }\n.stat-num { display: block; font-size: 40px; font-weight: 900; color: var(--deep-teal); letter-spacing: -1.5px; line-height: 1; margin-bottom: 8px; }\n.stat-label { display: block; font-size: 11px; font-weight: 700; letter-spacing: 1.5px; text-transform: uppercase; color: var(--ink-light); margin-bottom: 6px; }\n.stat-source { display: block; font-size: 10px; color: var(--accent-teal); opacity: 0.7; }\n\n.article-wrap { width: 100%; background: var(--light-teal); }\n.block-inset { max-width: var(--content-max); margin: 0 auto; padding: 0 40px; }\n.prose { max-width: var(--content-max); margin: 0 auto; padding: 80px 40px 0; }\n.prose p { font-size: 17px; line-height: 1.85; color: var(--ink-mid); margin-bottom: 26px; font-weight: 400; }\n.prose p strong { color: var(--ink); font-weight: 700; }\n.prose p.lead { font-size: 21px; font-weight: 500; color: var(--ink); line-height: 1.7; margin-bottom: 36px; }\n.prose h3 { font-size: 20px; font-weight: 800; color: var(--deep-teal); margin: 44px 0 14px; letter-spacing: -0.2px; }\n\n.content-img-wrap { max-width: var(--content-max); margin: 40px auto; padding: 0 40px; }\n.content-img-wrap img { width: 100%; display: block; max-height: 480px; object-fit: cover; object-position: center; border-radius: 12px; border: 1px solid var(--border); }\n.content-img-caption { font-size: 12px; font-weight: 600; letter-spacing: 0.4px; color: var(--ink-light); margin-top: 10px; text-align: center; }\n\n.sh-wrap { width: 100%; border-top: 1px solid var(--border); margin-top: 72px; }\n.sh { max-width: var(--content-max); margin: 0 auto; padding: 56px 40px 0; }\n.sh-tag { font-size: 11px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: var(--accent-teal); display: flex; align-items: center; gap: 8px; margin-bottom: 12px; }\n.sh-tag::before { content: ''; display: inline-block; width: 18px; height: 2px; background: var(--accent-teal); }\n.sh h2 { font-size: clamp(24px, 3vw, 36px); font-weight: 800; color: var(--deep-teal); letter-spacing: -0.5px; line-height: 1.15; }\n\n.pullquote-wrap { width: 100%; background: var(--white); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); margin: 56px 0; }\n.pullquote { max-width: var(--content-max); margin: 0 auto; padding: 48px 40px; border-left: 4px solid var(--accent-teal); }\n.pullquote p { font-size: 22px !important; font-style: italic; font-weight: 500 !important; color: var(--deep-teal) !important; line-height: 1.55 !important; margin-bottom: 14px !important; }\n.pullquote cite { font-size: 12px; font-weight: 700; letter-spacing: 1px; text-transform: uppercase; color: var(--ink-light); font-style: normal; }\n\n.callout { background: var(--white); border: 1px solid var(--border); border-top: 3px solid var(--accent-teal); border-radius: 12px; padding: 40px 44px; margin: 32px 0; }\n.callout-label { font-size: 11px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: var(--accent-teal); margin-bottom: 16px; display: flex; align-items: center; gap: 8px; }\n.callout-label::before { content: ''; width: 14px; height: 2px; background: var(--accent-teal); }\n.callout h3 { font-size: 21px; font-weight: 800; color: var(--deep-teal) !important; margin: 0 0 16px !important; }\n.callout p { color: var(--ink-mid) !important; font-size: 15px !important; margin-bottom: 10px !important; line-height: 1.75 !important; }\n.callout p:last-child { margin-bottom: 0 !important; }\n.callout p strong { color: var(--ink) !important; }\n\n.tier-wrap { width: 100%; background: var(--white); border-top: 1px solid var(--border); border-bottom: 1px solid var(--border); margin: 56px 0; padding: 56px 0; }\n.tier-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 24px; max-width: var(--content-max); margin: 0 auto; padding: 0 40px; }\n.tier-card { padding: 36px; border-radius: 12px; border: 1px solid var(--border); background: var(--light-teal); }\n.tier-card.featured { background: var(--deep-teal); border-color: var(--deep-teal); }\n.tier-label { font-size: 11px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: var(--accent-teal); margin-bottom: 10px; }\n.tier-name { font-size: 26px; font-weight: 900; color: var(--deep-teal); margin-bottom: 14px; }\n.tier-card.featured .tier-name { color: #fff; }\n.tier-desc { font-size: 15px; color: var(--ink-light); line-height: 1.7; }\n.tier-card.featured .tier-desc { color: rgba(255,255,255,0.65); }\n.tier-stat { margin-top: 24px; padding-top: 24px; border-top: 1px solid var(--border); }\n.tier-card.featured .tier-stat { border-color: rgba(255,255,255,0.15); }\n.tier-stat-num { font-size: 32px; font-weight: 900; color: var(--deep-teal); display: block; line-height: 1; margin-bottom: 6px; }\n.tier-card.featured .tier-stat-num { color: var(--accent-teal); }\n.tier-stat-text { font-size: 11px; font-weight: 600; letter-spacing: 0.5px; text-transform: uppercase; color: var(--ink-light); }\n.tier-card.featured .tier-stat-text { color: rgba(255,255,255,0.45); }\n\n.loop-wrap { max-width: var(--content-max); margin: 40px auto; padding: 0 40px; }\n.loop-diagram { display: flex; align-items: center; overflow-x: auto; }\n.loop-step { flex: 1; min-width: 120px; text-align: center; padding: 22px 16px; background: var(--white); border: 1px solid var(--border); border-radius: 10px; font-size: 14px; font-weight: 700; color: var(--deep-teal); line-height: 1.4; }\n.loop-arrow { width: 40px; flex-shrink: 0; text-align: center; font-size: 22px; color: var(--accent-teal); font-weight: 900; }\n\n.table-wrap { max-width: var(--content-max); margin: 32px auto; padding: 0 40px; }\n.metrics-table { width: 100%; border-collapse: collapse; font-size: 15px; border: 1px solid var(--border); border-radius: 10px; overflow: hidden; display: table; }\n.metrics-table th { text-align: left; padding: 16px 24px; font-size: 11px; font-weight: 700; letter-spacing: 1.5px; text-transform: uppercase; color: #fff; background: var(--deep-teal); }\n.metrics-table td { padding: 14px 24px; border-bottom: 1px solid var(--border); color: var(--ink-mid); font-weight: 500; vertical-align: top; }\n.metrics-table tr:last-child td { border-bottom: none; }\n.metrics-table tr:nth-child(even) td { background: var(--light-teal); }\n.metrics-table .bad { color: #9ab8b8; text-decoration: line-through; }\n.metrics-table .good { color: var(--deep-teal); font-weight: 700; }\n\n.checklist { list-style: none; margin: 24px 0; }\n.checklist li { display: flex; gap: 16px; align-items: flex-start; padding: 14px 0; border-bottom: 1px solid var(--border); font-size: 16px; color: var(--ink-mid); font-weight: 500; line-height: 1.55; }\n.checklist li:last-child { border-bottom: none; }\n.checklist li::before { content: '\u2713'; color: var(--accent-teal); font-weight: 900; font-size: 15px; flex-shrink: 0; margin-top: 2px; }\n\n.source-note { max-width: var(--content-max); margin: 0 auto; padding: 40px 40px 56px; font-size: 14px; color: var(--ink-light); border-top: 1px solid var(--border); }\n.source-note a { color: var(--deep-teal); font-weight: 600; text-decoration: none; }\n.source-note a:hover { color: var(--accent-teal); }\n\n.footer-cta { width: 100%; background: var(--deep-teal); padding: 64px 40px 80px; text-align: center; }\n.footer-cta-inner { max-width: 640px; margin: 0 auto; }\n.footer-cta .fc-tag { font-size: 11px; font-weight: 700; letter-spacing: 2px; text-transform: uppercase; color: rgba(255,255,255,0.7); margin-bottom: 14px; }\n.footer-cta h2 { font-size: clamp(22px, 3vw, 30px); font-weight: 800; color: #fff; margin-bottom: 16px; line-height: 1.35; }\n.footer-cta p { font-size: 15px; color: rgba(255,255,255,0.8); line-height: 1.8; margin-bottom: 32px; }\n.footer-cta .btn-watch { background: #fff; color: var(--deep-teal); }\n\n.reveal { opacity: 0; transform: translateY(24px); transition: opacity 0.65s ease, transform 0.65s ease; }\n.reveal.visible { opacity: 1; transform: none; }\n\n@media (max-width: 900px) {\n  .hero { padding: 80px 40px 64px; }\n}\n@media (max-width: 680px) {\n  .hero { padding: 64px 24px 52px; }\n  .hero h1 { letter-spacing: -1px; }\n  .hero h1 em { white-space: normal; }\n  .hero h1 .brk { display: none; }\n  .hero-meta { flex-wrap: wrap; gap: 10px; }\n  .hero-actions { flex-direction: column; align-items: flex-start; }\n  .stat-bar-inner { flex-wrap: wrap; }\n  .stat-item { flex: 0 0 50%; border-right: none; border-bottom: 1px solid var(--border); }\n  .block-inset { padding: 0 24px; }\n  .prose { padding: 48px 24px 0; }\n  .content-img-wrap { padding: 0 24px; }\n  .sh { padding: 40px 24px 0; }\n  .tier-grid { grid-template-columns: 1fr; padding: 0 24px; }\n  .loop-wrap { padding: 0 24px; }\n  .loop-diagram { flex-direction: column; align-items: stretch; }\n  .loop-arrow { transform: rotate(90deg); align-self: center; }\n  .table-wrap { padding: 0 24px; }\n  .callout { padding: 28px 24px; }\n  .pullquote { padding: 36px 24px; }\n  .source-note { padding: 32px 24px 48px; }\n  .footer-cta { padding: 56px 24px 64px; }\n}\n@media (prefers-reduced-motion: reduce) { .reveal { opacity: 1; transform: none; transition: none; } }\n<\/style>\n<\/head>\n<body>\n\n<section class=\"hero\">\n  <div class=\"hero-inner\">\n    <div class=\"hero-eyebrow\">Product Update &nbsp;\u00b7&nbsp; Portal Pages<\/div>\n    <h1>Why Your Loyalty Portal<br class=\"brk\">Pages Take So Long<br class=\"brk\">to Update <em>(And How to Fix It)<\/em><\/h1>\n    <p class=\"hero-sub\">If you've ever waited on a developer to change a single line of copy on your loyalty program page, you already know the real problem with most retention platforms. It isn't the strategy. It's the execution gap between deciding something and shipping it.<\/p>\n    <div class=\"hero-meta\">\n      <span>The Eber Team<\/span><span class=\"dot\">\u00b7<\/span>\n      <span>September 2026<\/span><span class=\"dot\">\u00b7<\/span>\n      <span>6 min read<\/span>\n    <\/div>\n    <div class=\"hero-actions\">\n      <a href=\"https:\/\/eber.co\/enquiry\/?utm_source=blog&amp;utm_medium=blog&amp;utm_campaign=ai_page_editor_launch&amp;utm_content=blog_enquiry_cta\" class=\"btn-watch\">\n        <svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M8 5v14l11-7z\"\/><\/svg>\n        Book a Demo\n      <\/a>\n      <a href=\"#article-start\" class=\"btn-secondary\">Read the breakdown \u2193<\/a>\n    <\/div>\n  <\/div>\n<\/section>\n\n<div class=\"content-img-wrap reveal\">\n  <img decoding=\"async\" src=\"https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/From-Dev-Queue-to-Live-Page_hero-image.png\" alt=\"From dev queue to live page: updating a loyalty portal page without a developer handoff\">\n  <div class=\"content-img-caption\">From dev queue to live page: the gap between deciding a change and shipping it<\/div>\n<\/div>\n\n<div class=\"stat-bar\">\n  <div class=\"stat-bar-inner\">\n    <div class=\"stat-item\"><span class=\"stat-num\">60%<\/span><span class=\"stat-label\">Marketers who struggle to scale personalisation<\/span><span class=\"stat-source\">Deloitte \u00b7 APAC Digital Consumer research<\/span><\/div>\n    <div class=\"stat-item\"><span class=\"stat-num\">1<\/span><span class=\"stat-label\">Sitting to build a portal page<\/span><span class=\"stat-source\">Previously a two-week dev queue<\/span><\/div>\n    <div class=\"stat-item\"><span class=\"stat-num\">4<\/span><span class=\"stat-label\">Markets localised from one panel<\/span><span class=\"stat-source\">MY \u00b7 SG \u00b7 HK \u00b7 VN<\/span><\/div>\n    <div class=\"stat-item\"><span class=\"stat-num\">0<\/span><span class=\"stat-label\">Dev tickets to publish a change<\/span><span class=\"stat-source\">Marketer-controlled page editing<\/span><\/div>\n  <\/div>\n<\/div>\n\n<div class=\"article-wrap\" id=\"article-start\">\n\n  <div class=\"prose\">\n    <p class=\"lead\">If you've ever waited on a developer to change a single line of copy on your loyalty program page, you already know the real problem with most retention platforms.<\/p>\n    <p>It's not the strategy. It's the execution gap between deciding something and shipping it.<\/p>\n    <p>Marketers running loyalty programs across Malaysia, Singapore, Hong Kong, and Vietnam deal with this constantly. A new tier launches. A benefit changes. A market needs its own language strings. And every one of those updates queues up behind a dev ticket, because the platform was never built for marketers to touch directly.<\/p>\n  <\/div>\n\n  <div class=\"sh-wrap reveal\">\n    <div class=\"sh\"><div class=\"sh-tag\">The real problem<\/div><h2>The Cost of a Slow Page Editor<\/h2><\/div>\n  <\/div>\n  <div class=\"prose\">\n    <p>Deloitte's APAC Digital Consumer research found <strong>60% of marketers struggle to operationalise personalisation and loyalty journeys at scale<\/strong>. Strategy isn't usually the bottleneck. Shipping is.<\/p>\n    <p>That gap is easy to miss in a quarterly review, because the plan looks fine on paper. The tier restructure was approved. The benefit copy was signed off. The localised version was drafted. What doesn't show up on the slide is the three weeks those decisions spent sitting in a queue, waiting for someone else's sprint to have room.<\/p>\n    <p>And timing is most of the value. A tiering change that sits in a dev queue for two weeks is a tiering change your members never see in time.<\/p>\n  <\/div>\n\n  <div class=\"pullquote-wrap reveal\">\n    <div class=\"pullquote\">\n      <p>\"A tiering change that sits in a dev queue for two weeks is a tiering change your members never see in time.\"<\/p>\n      <cite>The execution gap<\/cite>\n    <\/div>\n  <\/div>\n\n  <div class=\"sh-wrap reveal\">\n    <div class=\"sh\"><div class=\"sh-tag\">What's new<\/div><h2>What Changed Inside Eber<\/h2><\/div>\n  <\/div>\n  <div class=\"prose\">\n    <p>We rebuilt how pages get built and edited inside the platform. Three things marketers can now do without a dev handoff.<\/p>\n  <\/div>\n\n  <div class=\"content-img-wrap reveal\">\n    <img decoding=\"async\" src=\"https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/What-changed-inside-Eber_content-1-image.png\" alt=\"What changed inside Eber: building and editing portal pages in the platform\">\n    <div class=\"content-img-caption\">Building and editing portal pages directly in the platform<\/div>\n  <\/div>\n\n  <div class=\"block-inset\">\n    <div class=\"callout reveal\">\n      <div class=\"callout-label\">Update 01<\/div>\n      <h3>Build and edit multiple pages in one session<\/h3>\n      <p>If you're building a new member-benefit page, you can reference your homepage at the same time, so layout, theme, and tone stay consistent instead of drifting page by page.<\/p>\n      <p>That drift is the quiet cost of building pages one at a time, months apart. Nobody decides to let the benefits page look nothing like the homepage. It just happens, one small deviation at a time.<\/p>\n    <\/div>\n\n    <div class=\"callout reveal\">\n      <div class=\"callout-label\">Update 02<\/div>\n      <h3>Assign pages directly to portal sections<\/h3>\n      <p>A page you build can be set as, say, the default Account section page for a specific consumer segment, without a separate deployment step.<\/p>\n      <p><strong>The build and the placement happen in the same sitting.<\/strong> No handover, no ticket to point the portal at the thing you just made.<\/p>\n    <\/div>\n\n    <div class=\"callout reveal\">\n      <div class=\"callout-label\">Update 03<\/div>\n      <h3>Update your own language strings<\/h3>\n      <p>If you're running the same program across four markets, portal language panels let you search and override webapp text directly, market by market.<\/p>\n      <p>So a wording fix in one market stops being a release-cycle problem. You find the string, you change it, and the other three markets stay exactly as they were.<\/p>\n    <\/div>\n  <\/div>\n\n  <div class=\"content-img-wrap reveal\">\n    <img decoding=\"async\" src=\"https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/Update-your-own-language-strings-multi-market-programs.png\" alt=\"Portal language panels: searching and overriding webapp text market by market\">\n    <div class=\"content-img-caption\">Portal language panels: overriding webapp text market by market<\/div>\n  <\/div>\n\n  <div class=\"prose\">\n    <p>Notably, this runs on intelligence under the hood, but that's a detail, not the point. The point is that a page that used to take two weeks now takes one sitting.<\/p>\n  <\/div>\n\n  <div class=\"loop-wrap reveal\">\n    <div class=\"loop-diagram\">\n      <div class=\"loop-step\">Decide the<br>change<\/div>\n      <div class=\"loop-arrow\">\u2192<\/div>\n      <div class=\"loop-step\">Build the<br>page<\/div>\n      <div class=\"loop-arrow\">\u2192<\/div>\n      <div class=\"loop-step\">Assign to a<br>portal section<\/div>\n      <div class=\"loop-arrow\">\u2192<\/div>\n      <div class=\"loop-step\">Live for<br>members<\/div>\n    <\/div>\n  <\/div>\n\n  <div class=\"prose\">\n    <p>Same four steps as before. The difference is that one person can now walk the whole way across without stopping to ask anyone.<\/p>\n  <\/div>\n\n  <div class=\"table-wrap reveal\">\n    <table class=\"metrics-table\">\n      <thead><tr><th>The old loop<\/th><th>The new loop<\/th><\/tr><\/thead>\n      <tbody>\n        <tr><td class=\"bad\">Copy change raised as a dev ticket<\/td><td class=\"good\">Copy change edited and published in-platform<\/td><\/tr>\n        <tr><td class=\"bad\">Each page built in isolation<\/td><td class=\"good\">Build one page while referencing another<\/td><\/tr>\n        <tr><td class=\"bad\">New portal section needs a deployment<\/td><td class=\"good\">Assign a page to a portal section directly<\/td><\/tr>\n        <tr><td class=\"bad\">Language strings changed by release<\/td><td class=\"good\">Search and override webapp text per market<\/td><\/tr>\n        <tr><td class=\"bad\">Decided this quarter, live the next<\/td><td class=\"good\">Decided Monday, live the same week<\/td><\/tr>\n      <\/tbody>\n    <\/table>\n  <\/div>\n\n  <div class=\"sh-wrap reveal\">\n    <div class=\"sh\"><div class=\"sh-tag\">The bigger picture<\/div><h2>What This Means for Your Loyalty Roadmap<\/h2><\/div>\n  <\/div>\n  <div class=\"prose\">\n    <p>The core principle behind comeback rate (frequency uplift) still holds: a customer who visits twice as often outperforms one who spends 20% more per visit. But you can't drive that frequency if the pages nudging your members toward that behaviour are stuck in a dev backlog.<\/p>\n    <p>Faster page execution means:<\/p>\n  <\/div>\n\n  <div class=\"block-inset\">\n    <ul class=\"checklist reveal\">\n      <li>Tier and benefit changes go live the same week they're decided, not the quarter after<\/li>\n      <li>Portal pages stay visually consistent across your whole program, because whoever builds them can check the homepage while building<\/li>\n      <li>Multi-market programs can localise language without waiting on a separate release<\/li>\n    <\/ul>\n  <\/div>\n\n  <div class=\"prose\">\n    <p>None of this replaces a good loyalty strategy. It just removes the reason good strategy keeps arriving late.<\/p>\n  <\/div>\n\n  <p class=\"source-note\">Research reference: Deloitte APAC Digital Consumer research on personalisation and loyalty journey execution. <a href=\"https:\/\/eber.co\/enquiry\/?utm_source=blog&amp;utm_medium=blog&amp;utm_campaign=ai_page_editor_launch&amp;utm_content=blog_enquiry_cta\">Book a demo \u2192<\/a><\/p>\n\n<\/div>\n\n<div class=\"footer-cta\">\n  <div class=\"footer-cta-inner\">\n    <div class=\"fc-tag\">About Eber<\/div>\n    <h2>See what it looks like to update a loyalty page yourself<\/h2>\n    <p>Eber is a loyalty and marketing platform that helps F&amp;B, retail, and consumer brands run membership programs, CRM, marketing automation, paid tiers, points, e-gift cards, and referrals across multiple markets.<\/p>\n    <a href=\"https:\/\/eber.co\/enquiry\/?utm_source=blog&amp;utm_medium=blog&amp;utm_campaign=ai_page_editor_launch&amp;utm_content=blog_enquiry_cta\" class=\"btn-watch\">Book a Demo<\/a>\n  <\/div>\n<\/div>\n\n<script>\n  const obs = new IntersectionObserver(entries => {\n    entries.forEach(e => { if (e.isIntersecting) e.target.classList.add('visible'); });\n  }, { threshold: 0.08 });\n  document.querySelectorAll('.reveal').forEach(el => obs.observe(el));\n<\/script>\n<\/body>\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-bc5ea4b elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"bc5ea4b\" data-element_type=\"section\" data-e-type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-d42408a\" data-id=\"d42408a\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-b42c9bd elementor-widget elementor-widget-heading\" data-id=\"b42c9bd\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Related Posts<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-98fa854 premium-blog-align-left elementor-widget elementor-widget-premium-addon-blog\" data-id=\"98fa854\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;premium_blog_columns_number&quot;:&quot;33.33%&quot;,&quot;premium_blog_grid&quot;:&quot;yes&quot;,&quot;premium_blog_layout&quot;:&quot;even&quot;,&quot;premium_blog_columns_number_tablet&quot;:&quot;50%&quot;,&quot;premium_blog_columns_number_mobile&quot;:&quot;100%&quot;}\" data-widget_type=\"premium-addon-blog.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\n\t\t\n\n\t\t\t\t<div class=\"premium-blog-wrap  premium-blog-even\" data-page=\"14124\">\n\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-post-outer-container\" data-total=\"51\">\n\t\t\t<div class=\"premium-blog-post-container premium-blog-skin-classic\">\n\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumb-effect-wrapper\">\n\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-container premium-blog-zoomin-effect\">\n\t\t\t\t\t\t\t<img fetchpriority=\"high\" decoding=\"async\" width=\"600\" height=\"400\" src=\"https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/Why-Your-Loyalty-Portal-Pages-Take-So-Long-to-Update-600x400.png\" class=\"attachment-gb-block-post-grid-landscape size-gb-block-post-grid-landscape wp-image-14126\" alt=\"\" srcset=\"https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/Why-Your-Loyalty-Portal-Pages-Take-So-Long-to-Update-600x400.png 600w, https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/Why-Your-Loyalty-Portal-Pages-Take-So-Long-to-Update-300x200.png 300w, https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/Why-Your-Loyalty-Portal-Pages-Take-So-Long-to-Update-1024x683.png 1024w, https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/Why-Your-Loyalty-Portal-Pages-Take-So-Long-to-Update-768x512.png 768w, https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/Why-Your-Loyalty-Portal-Pages-Take-So-Long-to-Update.png 1536w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-overlay\">\n\t\t\t\t\t\t\t\t<a class=\"elementor-icon\" href=\"https:\/\/eber.co\/blogs\/loyalty-program-page-editor\/\" target=\"_self\"><\/a>\n\t\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-content-wrapper \">\n\n\t\t\t\t\t<div class=\"premium-blog-inner-container\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"premium-blog-entry-title\">\n\t\t\t<a href=\"https:\/\/eber.co\/blogs\/loyalty-program-page-editor\/\" target=\"_self\">\n\t\t\t\tWhy Your Loyalty Portal Pages Take So Long to Update\t\t\t<\/a>\n\t\t<\/h2>\n\t\t\t\t<div class=\"premium-blog-entry-meta\">\n\t\t\t\t\t\t\t<div class=\"premium-blog-post-author premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-user fa-fw\" aria-hidden=\"true\"><\/i>\n\t\t\t\t\t<a href=\"https:\/\/eber.co\/author\/jenny\/\" rel=\"author\">Jenny Choy<\/a>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t<div class=\"premium-blog-content-inner-wrapper\">\n\t\t<p class=\"premium-blog-post-content\">Why Your Loyalty Portal Pages Take So Long to Update (And How to Fix It) Product Update &nbsp;\u00b7&nbsp; Portal Pages Why Your \u2026<\/p>\t\t<\/div>\n\t\t\t\t\t\t\t\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t\t\t<div class=\"premium-blog-post-outer-container\" data-total=\"51\">\n\t\t\t<div class=\"premium-blog-post-container premium-blog-skin-classic\">\n\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumb-effect-wrapper\">\n\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-container premium-blog-zoomin-effect\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"400\" src=\"https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/What-Bimbo-Concept-Artpiece-Taught-Us-About-Identity-Retention-blog-image-600x400.png\" class=\"attachment-gb-block-post-grid-landscape size-gb-block-post-grid-landscape wp-image-13993\" alt=\"\" srcset=\"https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/What-Bimbo-Concept-Artpiece-Taught-Us-About-Identity-Retention-blog-image-600x400.png 600w, https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/What-Bimbo-Concept-Artpiece-Taught-Us-About-Identity-Retention-blog-image-300x200.png 300w, https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/What-Bimbo-Concept-Artpiece-Taught-Us-About-Identity-Retention-blog-image-1024x683.png 1024w, https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/What-Bimbo-Concept-Artpiece-Taught-Us-About-Identity-Retention-blog-image-768x512.png 768w, https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/What-Bimbo-Concept-Artpiece-Taught-Us-About-Identity-Retention-blog-image.png 1536w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-overlay\">\n\t\t\t\t\t\t\t\t<a class=\"elementor-icon\" href=\"https:\/\/eber.co\/blogs\/what-bimbo-concept-artpiece-taught-us-about-identity-retention\/\" target=\"_self\"><\/a>\n\t\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-content-wrapper \">\n\n\t\t\t\t\t<div class=\"premium-blog-inner-container\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"premium-blog-entry-title\">\n\t\t\t<a href=\"https:\/\/eber.co\/blogs\/what-bimbo-concept-artpiece-taught-us-about-identity-retention\/\" target=\"_self\">\n\t\t\t\tWhat Bimbo Concept &#038; Artpiece Taught Us About Identity Retention\t\t\t<\/a>\n\t\t<\/h2>\n\t\t\t\t<div class=\"premium-blog-entry-meta\">\n\t\t\t\t\t\t\t<div class=\"premium-blog-post-author premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-user fa-fw\" aria-hidden=\"true\"><\/i>\n\t\t\t\t\t<a href=\"https:\/\/eber.co\/author\/jenny\/\" rel=\"author\">Jenny Choy<\/a>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t<div class=\"premium-blog-content-inner-wrapper\">\n\t\t<p class=\"premium-blog-post-content\">Identity Retention: Why Your Best Customers Stop Comparing The Eber Show &nbsp;\u00b7&nbsp; Identity Retention Identity Retention: Why Your Best Customers Stop Comparing \u2026<\/p>\t\t<\/div>\n\t\t\t\t\t\t\t\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t\t\t<div class=\"premium-blog-post-outer-container\" data-total=\"51\">\n\t\t\t<div class=\"premium-blog-post-container premium-blog-skin-classic\">\n\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumb-effect-wrapper\">\n\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-container premium-blog-zoomin-effect\">\n\t\t\t\t\t\t\t<img decoding=\"async\" width=\"600\" height=\"400\" src=\"https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/What-3-Operators-Taught-Us-About-Loyalty-in-2026_2-600x400.png\" class=\"attachment-gb-block-post-grid-landscape size-gb-block-post-grid-landscape wp-image-13991\" alt=\"\" srcset=\"https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/What-3-Operators-Taught-Us-About-Loyalty-in-2026_2-600x400.png 600w, https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/What-3-Operators-Taught-Us-About-Loyalty-in-2026_2-300x200.png 300w, https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/What-3-Operators-Taught-Us-About-Loyalty-in-2026_2-1024x683.png 1024w, https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/What-3-Operators-Taught-Us-About-Loyalty-in-2026_2-768x512.png 768w, https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/What-3-Operators-Taught-Us-About-Loyalty-in-2026_2.png 1536w\" sizes=\"(max-width: 600px) 100vw, 600px\" \/>\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-thumbnail-overlay\">\n\t\t\t\t\t\t\t\t<a class=\"elementor-icon\" href=\"https:\/\/eber.co\/blogs\/what-3-operators-taught-us-about-loyalty-in-2026\/\" target=\"_self\"><\/a>\n\t\t\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"premium-blog-content-wrapper \">\n\n\t\t\t\t\t<div class=\"premium-blog-inner-container\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<h2 class=\"premium-blog-entry-title\">\n\t\t\t<a href=\"https:\/\/eber.co\/blogs\/what-3-operators-taught-us-about-loyalty-in-2026\/\" target=\"_self\">\n\t\t\t\tWhat 3 Operators Taught Us About Loyalty in 2026\t\t\t<\/a>\n\t\t<\/h2>\n\t\t\t\t<div class=\"premium-blog-entry-meta\">\n\t\t\t\t\t\t\t<div class=\"premium-blog-post-author premium-blog-meta-data\">\n\t\t\t\t\t<i class=\"fa fa-user fa-fw\" aria-hidden=\"true\"><\/i>\n\t\t\t\t\t<a href=\"https:\/\/eber.co\/author\/jenny\/\" rel=\"author\">Jenny Choy<\/a>\t\t\t\t<\/div>\n\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\t<\/div>\n\t\t\n\t\t\t\t\t<\/div>\n\n\t\t\t\t\t\t\t<div class=\"premium-blog-content-inner-wrapper\">\n\t\t<p class=\"premium-blog-post-content\">&nbsp; &nbsp; The Eber Show \u00a0\u00b7\u00a0 Retention Playbook Three Categories, Three Conversations, One Retention Principle Between July and August we recorded three \u2026<\/p>\t\t<\/div>\n\t\t\t\t\t\t\t\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div>\n\n\t\t\t\t\t\t\t<\/div>\n\n\t\t\n\t\t\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Why Your Loyalty Portal Pages Take So Long to Update (And How to Fix It) Product Update &nbsp;\u00b7&nbsp; Portal Pages Why Your Loyalty PortalPages Take So Longto Update (And How to Fix It) If you&#8217;ve ever waited on a developer to change a single line of copy on your loyalty program page, you already know [&hellip;]<\/p>\n","protected":false},"author":9,"featured_media":14126,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[50,49],"tags":[68],"class_list":["post-14124","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-product-highlights","category-the-evolving-marketer","tag-content-marketing"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":6}},"featured_image_src":"https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/Why-Your-Loyalty-Portal-Pages-Take-So-Long-to-Update-600x400.png","featured_image_src_square":"https:\/\/eber.co\/wp-content\/uploads\/2026\/09\/Why-Your-Loyalty-Portal-Pages-Take-So-Long-to-Update-600x600.png","author_info":{"display_name":"Jenny Choy","author_link":"https:\/\/eber.co\/author\/jenny\/"},"_links":{"self":[{"href":"https:\/\/eber.co\/wp-json\/wp\/v2\/posts\/14124","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/eber.co\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/eber.co\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/eber.co\/wp-json\/wp\/v2\/users\/9"}],"replies":[{"embeddable":true,"href":"https:\/\/eber.co\/wp-json\/wp\/v2\/comments?post=14124"}],"version-history":[{"count":10,"href":"https:\/\/eber.co\/wp-json\/wp\/v2\/posts\/14124\/revisions"}],"predecessor-version":[{"id":14135,"href":"https:\/\/eber.co\/wp-json\/wp\/v2\/posts\/14124\/revisions\/14135"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/eber.co\/wp-json\/wp\/v2\/media\/14126"}],"wp:attachment":[{"href":"https:\/\/eber.co\/wp-json\/wp\/v2\/media?parent=14124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/eber.co\/wp-json\/wp\/v2\/categories?post=14124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/eber.co\/wp-json\/wp\/v2\/tags?post=14124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}