Building EGP Cards at Merpay: Lessons from a Frontend Internship

Building EGP Cards at Merpay: Lessons from a Frontend Internship

Hello, my name is @Yusaku (Yusaku Miyata), and I’m currently interning as a Frontend Engineer on the Growth Platform team at Merpay.
This article is part of the Merpay & Mercoin Advent Calendar 2025, and I am honored to write the entry for Day 25.
I started my internship in October 2025, and I’m now in now my third month (Figure 1).
In this article, I would like to share the tasks I worked on during the internship and the key learnings I gained through hands-on development.

Figure 1: My selfies at the office
Figure 1: My selfies at the office

About the Team

I belong to the Growth Platform Frontend Team, which develops an internal marketing tool called Engagement Platform (EGP).
EGP enables marketers and project managers to perform CRM-related tasks—such as distributing points or coupons, creating and publishing landing pages, and managing campaigns—without writing any code (Figure 2).

Figure 2: EGP No-code Editor (EGP Content)
Figure 2: EGP No-code Editor (EGP Content)

During this internship, I worked on improving a feature called EGP Cards.
EGP Cards allows users to create and publish card-based UI components that can be used across multiple platforms, including Web, iOS, and Android. Unlike the page editor feature (EGP Pages), EGP Cards adopts a Server Driven UI architecture, where the server returns the structure of the user interface. The content created in the editor is stored as JSON and rendered consistently across different platforms (Figure 3).
For more details on the architecture of Server Driven UI and EGP Cards, please refer to the following article by @togami and @Stefan from the same team:

Figure 3: EGP Cards Editor Screen
Figure 3: EGP Cards Editor Screen

Task 1: Dry Run for EGP Cards

Overview: What is Dry Run?

Dry Run is a feature that allows users to simulate states by assigning mock data to variables. With this feature, users can verify content behavior before writing API calls or testing on real devices. In this task, I implemented Dry Run functionality for EGP Cards (Figure 4).

Figure 4: Implemented Dry Run Feature for EGP Cards
Figure 4: Implemented Dry Run Feature for EGP Cards

How It Works

The Dry Run feature works as follows:

  1. Users enable Dry Run and input mock data into fields
  2. The editor recursively traverses the structure tree, dynamically evaluates JavaScript code, and replaces variables with actual values
  3. The resolved values are rendered on the canvas

Implementation Process

I proceeded with the implementation in the following steps:

  1. Read and analyzed the existing Dry Run implementation in EGP Pages through code reading and logging
  2. Implemented a similar feature for EGP Cards while taking Cards-specific specifications into account

During development, I searched for reusable logic between EGP Pages and EGP Cards, and carefully extracted common code into shared files to improve readability and maintainability.

Task 2: Content Agent Improvement for EGP Cards

Background: Challenges with Content Agent

EGP Content, the no-code editor in EGP, supports multiple content types such as Cards, Pages, and E-mails. Recently, an AI agent called Content Agent was introduced, enabling users to summarize or rewrite content through conversational interactions (Figure 5).
However, at the time, Content Agent did not fully understand the editor-specific constraints of each content type. As a result, it could generate content with broken UI structures, which might fail to meet users’ expectations.

Figure 5: Conversation Processing Pipeline of Content Agent
Figure 5: Conversation Processing Pipeline of Content Agent

Implementation Approach

To address this issue, I implemented the following solution:

  1. Created prompts describing the specifications and data structures of EGP Cards
  2. Injected these prompts conditionally into the Agent Layer of Content Agent

EGP Cards has several constraints, such as not supporting media queries and requiring all elements to be structured with Flex layouts. By explicitly describing these constraints and expected outputs in the prompt, Content Agent can now generate content more suitable for EGP Cards (Figure 6).

Figure 6: Using Content Agent in EGP Cards
Figure 6: Using Content Agent in EGP Cards

What I Learned

How to Deliver Output in Team Development

Through the implementation of the Dry Run feature, I learned a great deal about how to deliver effective output in a team development environment. I realized that not only the correctness of the implementation and the completeness of features, but also how pull requests (PRs) are structured and how reviews are handled, have a significant impact on the overall development efficiency and productivity of the team.
More specifically, I learned that even for bug fixes or refactoring tasks, it is important to split changes into separate PRs when the scope becomes too large or extends beyond the original task. Doing so helps reduce the review cost and makes the intent of each change clearer. I also came to understand the importance of explicitly describing the implementation intent in code and PR comments—such as why a particular approach was chosen, what alternatives were considered, and which options were intentionally not taken. This practice helps prevent misunderstandings with reviewers and leads to more constructive discussions.
When receiving reviews, I also learned that it is important not to jump straight into making fixes. Instead, taking the time to first understand the reviewer’s intent can lead to better design decisions and higher-quality implementations. In some cases, aligning on assumptions and background through discussion proved essential. Through these experiences, I strongly recognized that delivering value as a team requires not only individual coding skills, but also clear communication and a collaborative mindset.

Understanding Mercari Culture Through Real Experience

Mercari is often described as a company where transparency and flat communication give individuals a high level of ownership. Through this internship, I strongly felt this in practice.
What stood out to me the most, however, was the global, English-first development environment.
All of my previous internships were conducted in Japanese, so working in an environment where documentation, communication, and discussions were entirely in English was a refreshing experience. While I understood that smooth communication in English is essential in a global team, being able to practice this in real development work was highly rewarding.
In my daily work, I read English README files and specifications, created Pull Requests in English, and explained design decisions and concerns through discussions.
To avoid misunderstandings, I sometimes supplemented explanations in Japanese when necessary, while proactively communicating with the team.
Through this experience, I realized that Mercari’s culture is not just a slogan, but something deeply embedded in everyday work.

Rediscovering the Depth of Technical Challenges

Until now, I had mainly worked in frontend development through internships and personal projects, and I felt that my learning in this area might be approaching a plateau.
However, working on EGP completely changed that perception. While EGP provides a highly interactive and rich UI, it is supported by complex internal logic, such as no-code content creation and delivery mechanisms, as well as safe and efficient interactions with AI agents.
During the tasks, I received requirements at a relatively abstract level and broke them down into concrete implementation steps on my own. While learning how EGP is used, I also proposed improvements—such as adding image preview functionality—that could enhance user experience.
In addition, when improving Content Agent, I designed the implementation so that it would not be limited to Cards only, but could be easily extended to other content types like Pages and E-mails in the future. By separating prompts by content type, I focused on readability and extensibility.
This experience taught me that designing with a long-term product perspective directly contributes to better user experience, improved efficiency, and ultimately business value—something I find particularly compelling about Mercari.

Closing

Through this internship, I was able to learn not only technical skills, but also how to approach engineering from the perspective of product value and team collaboration.
I hope to continue applying these learnings to my future development work and personal growth as an engineer.
Thank you very much for reading.

  • X
  • Facebook
  • linkedin
  • このエントリーをはてなブックマークに追加