- Platform
- Web App
- Duration
- 12 weeks
- Industry
- Utilities / Energy Services
- Read time
- 8 min
The short answer
RaftLabs rebuilt Energia's loyalty rewards platform in 12 weeks, migrating 300,000+ customer records from WordPress to Next.js, Hasura, and AWS Cognito. The platform recorded 1,100 logins and 87 new registrations in the first 24 hours, 358 rewards redeemed and 3,000+ competition entries in the first seven days, and has maintained 99.9% uptime since launch. It runs 60% faster than the WordPress build. RaftLabs used Cognito's user migration Lambda trigger to validate existing WordPress password hashes on first login, so all 300,000 users could log in without a forced password reset. The platform automates daily SFTP processing for customer joiners and leavers, with admin alerts when expected files fail to arrive. Built for Brandfire, the agency managing the Energia Rewards program in Ireland, the rebuild won Customer Experience of the Year at the 2023 Irish Loyalty Awards.
The platform they had was working. It ran on WordPress, managed 300,000 customer accounts, and had won Customer Experience of the Year at the 2023 Irish Loyalty Awards. The problem was not whether it worked. The problem was whether it could keep up.
Every small update required a developer. The admin team managed new and departing customers through spreadsheets. Login errors were routine. Admins had no way to know whether the daily customer files had arrived. They found out when customers complained.
Brandfire, the agency managing the rewards program, came to us for a full rebuild. Not a reskin. A complete platform replacement.
The rebuild was harder than it looked. Three hundred thousand users had hashed WordPress passwords, and we migrated them to Cognito silently so no customer faced a forced reset.
We also ran 11 data remediation scripts before migrating a single record. The old database had duplicate emails, mismatched accounts, and signups stuck partway through. None of that could go live.
We rebuilt the platform in 12 weeks. In the first 24 hours: 1,100 logins, 87 new registrations. By the end of the first week: 2,200 logins total, 358 rewards redeemed, 3,000+ competition entries. The platform runs 60% faster than the WordPress build and has held 99.9% uptime since launch.

before & after
What changed
- Rewards platform built on WordPress made every change slow and required developer involvement
- Admin team managed new and departing customers through spreadsheets and manual email processes
- Login errors and account issues affected customers regularly across 300,000 records
- Admins had no visibility into whether daily SFTP files had arrived or failed. Problems reached them through customer complaints, not system alerts
- No analytics on how customers were using the platform: registrations, logins, redemptions were all guesswork
- The user experience no longer reflected Energia's brand or the quality of the program
- Complete rebuild into a fast Next.js platform with a clean, mobile-friendly interface
- Daily SFTP automation processes new joiners and departing customers every morning without manual steps
- 300,000 WordPress password hashes silently migrated to Cognito: no forced reset, no support load on day one
- 11 data remediation scripts cleaned duplicate emails, mismatched records, and stuck signups before migration
- Admin panel shows file upload status in real time; missing file alerts fire before customers notice an access issue
- Live Metabase dashboards show registrations, logins, redemptions, and competition entries in real time
What we had to solve
- 01
Moving 300,000 live customer records with no room for error
The old platform held over 300,000 customer accounts, each with rewards history, login credentials, and account status. Moving that data cleanly while the program was still live required careful planning.
The database was messier than expected. We found duplicate email addresses, case mismatches that created phantom duplicates, users in the rewards system with no matching energy account, and signups that had stalled partway through. We ran 11 remediation scripts to fix these before migrating a single record to production.
The migration used idempotent, re-runnable scripts organized by domain: users, rewards, competitions, activity logs. If something failed mid-run, we could restart without creating duplicate records. Every account was verified before launch. A single mismatch between domestic and commercial records would have surfaced immediately on a platform that handled 1,100 logins in the first day.
- 02
Migrating 300,000 WordPress passwords to Cognito without a forced reset
A forced password reset for 300,000 users would have created a support backlog before the platform had processed a single login. We needed a different path.
The old system used WordPress-hashed passwords. The new platform moved identity to AWS Cognito. We used Cognito's user migration Lambda trigger to bridge the two.
When a customer logs in for the first time on the new platform, the migration trigger fires. It validates their credentials against the old WordPress hash. If they match, Cognito creates the account and takes over authentication. The customer never sees a reset prompt. They log in exactly as before.
We also rebuilt the external PHP-based SSO flow to work with Cognito. User creation and authentication now happen in a single request cycle, so customers coming through that path see no change either.
- 03
Replacing manual SFTP workflows with automated daily processing and missing file alerts
Every day, Energia generates four data files: new domestic customers, departing domestic customers, new commercial customers, departing commercial customers. On the old system, managing these meant manual work, delays, and occasional errors.
The new platform picks up these files automatically via SFTP each morning and processes them without intervention. New customers gain access by day three. Departing customers are deactivated cleanly. Customers who re-enrol get their history back.
The harder part was monitoring. On the old platform, no one knew when a file had failed to arrive. Problems surfaced through customer complaints. The new platform tracks which files were expected and which came through. If a file is missing, the admin team gets an alert before anyone loses account access. That change alone reduced the most common category of support tickets.
- 04
Load testing the platform for a 120,000-user newsletter campaign
A promotional email was going to around 120,000 users. Campaigns like this concentrate traffic: a large share of recipients click through within minutes of the email landing.
We extended load testing to cover both pre-login and post-login flows. Earlier testing had missed some pre-login edge cases that only appear under campaign conditions. We focused pressure on Hasura and the database, which had been previous bottleneck points.
The platform reached 10,000 requests per second without backend failure. The target of 29,000 requests in five minutes was met. During the actual promotional period, the platform handled around 2,000 logins and 200 new registrations with CPU load staying under 5%.
outcomes
What we achieved
Frequent login errors on the old WordPress platform had eroded customer confidence. The migration had to preserve every account without any reset or disruption on launch day.
Running competitions on the old system was slow and manual. Admins had to manage entries by hand, with no automated draw or real-time visibility into participation.
Coupon distribution and tracking on the old platform was fully manual. Admins had no way to see what was being claimed or whether the rewards catalog was working.
The WordPress backend had no monitoring, no load balancing, and no automated alerts. Failures went undetected until customers reported them.
What clients say
What our client says
Three-year average engagement. Founders and operators describing the work in their own words. No marketing varnish.

The RaftLabs team demonstrated exceptional collaboration and attention to detail throughout the development of the new Energia Rewards platform. The platform has now successfully launched, delivering a smooth, rewarding experience for our customers.
Your loyalty platform is holding back customer engagement instead of driving it?
the build
What we built
The platform handles three things the old system could not: automatic customer data management every day, live visibility into what the admin team needs to see, and alerts when something is about to go wrong.
Customers register with their account number: correct rewards appear from the start
Customers register using their Energia account number and verify through email before accessing rewards. The flow distinguishes between domestic and commercial customers from the start, so the right rewards and competitions appear for each account type. Returning customers who re-enrolled get their existing history back automatically.

New customers access the platform by day three: the admin team never touches the files
Every morning, a scheduler processes four SFTP files from Energia: new and departing customers for both domestic and commercial accounts. New customers gain platform access by day three. Departing customers are deactivated cleanly. If a customer re-enrolls later, their account and history are restored without manual intervention. The admin team sees the results in the dashboard; they no longer manage the files themselves.

Customers redeem from 20+ brands; admins see what's working without pulling reports
Customers browse and redeem rewards from 20+ brands directly from their dashboard. Admins create competitions (instant-win and multiple-choice formats) and group them into campaigns targeting specific customer segments. Automated coupon distribution and performance tracking show the team what is working without needing to pull reports manually.

The team knows about system issues and missing files before customers do
Metabase dashboards give the Brandfire and Energia teams a live view of registrations, logins, redemptions, and competition entries. Admins filter by date range or account type and export CSV reports for any time period. The platform also tracks which SFTP files were expected each day and which arrived. If a file is missing, an alert fires before any customer loses account access, so the team acts on the problem, not on the complaint.

Engagement
How we worked together
- 01Weeks 1–2
Discovery and scoping
We map the problem before writing code. Two weeks of technical audit, stakeholder interviews, and prototype, so both teams align on scope and risk before sprint one. - 02Ongoing
Two-week Agile sprints
Each sprint ends with working software, not a status update. You review a real build, request changes, and approve before we move forward. No surprises at handover. - 03Ongoing
Daily async updates
Slack for daily progress, Asana for task visibility, weekly video calls for decisions. You have full visibility without needing to attend every meeting. - 04Final
Handover and warranty
Full code handover with deployment runbooks and documentation. Thirty-day warranty period for production issues at no extra cost.
stack
Why we chose this stack
- 01Next.jsThe customer-facing rewards platform needed fast page loads and a clean mobile experience. Next.js handles both through server-side rendering, which also gave the admin team the structured API layer the WordPress backend never had.
- 02Hasura GraphQLThe admin dashboard needed live updates as competition entries and redemptions came in. Hasura's GraphQL subscriptions push changes to the dashboard in real time without polling the database.
- 03AWS Cognito300,000 users had existing WordPress-hashed passwords. We used Cognito's user migration Lambda trigger to validate those hashes silently on first login. Cognito then takes over authentication. No forced password reset, no support load on day one.
- 04MetabaseBrandfire and the Energia team needed to see registrations, logins, and redemptions without building a custom reporting layer. Metabase connects directly to the database and lets non-technical admins filter by date range, account type, and campaign.
FAQs
Yes. The migration for Energia Rewards moved 300,000+ active customer records to the new platform while the program kept running. The approach involved staged data verification and a hard cutover that went live cleanly. Every customer could log in from day one. The key is planning the migration before building the new system, not after.
You use Cognito's user migration Lambda trigger. When a customer logs in for the first time on the new platform, the trigger fires and validates their credentials against the old WordPress hash. If they match, Cognito creates the account and takes over authentication from that point. The customer never sees a reset prompt.
We used this approach for Energia's 300,000 existing users. No one had to reset their password. The platform handled 1,100 logins in the first 24 hours without a single forced reset or password-related support ticket.
Energia generates four SFTP files each night: new domestic customers, departing domestic customers, new commercial customers, departing commercial customers. A scheduler picks up these files each morning and processes them automatically. New accounts gain access within three days. Departing accounts are deactivated. Re-enrollees get their history restored. The admin team reviews a daily activity report but does not touch the files directly.
Yes. The Energia Rewards platform handles both customer types from a single system. Each account type has its own registration path, its own reward catalog, and its own competition eligibility. The admin panel shows data for each segment separately and lets the team run targeted campaigns per segment. From the customer's perspective, the experience is clean and relevant to their account type.
A platform of this scope (migrating 300,000+ records, building automated workflows, and adding real-time analytics) typically falls between $30,000 and $60,000 depending on the number of integrations, campaign features, and reporting requirements. Simpler programs with a smaller user base and fewer automated workflows can be built for less. See our loyalty program cost guide for a detailed breakdown.
Yes. We have built loyalty programs for Aldi Ireland, SuperValu and Centra, and Sanbra Fyffe across retail, grocery, and manufacturing. The Energia project adds utilities to that list. See our loyalty program development page for the full scope of what we build.











