Skip to main content

3. Hackathon Journey

We leveraged the event’s theme of Vibe Coding and sprinted from design to functional implementation in seven days. Practicing AI‑driven development, we placed AI tools at the core of the process rather than using them as mere assistants.

3.1 Practicing AI‑driven development

Within just seven days, we focused on turning ideas into as many working features as possible. The key to success: we delegated specification drafting and error investigation to ChatGPT, while Claude Code and GitHub Copilot handled substantial portions of coding. We prototyped quickly in Replit’s cloud environment and refined code efficiently with Cursor’s AI assistance. This approach enabled us to reach a runnable state in just a few days.

3.2 Roadblocks and breakthroughs

In the first three days we made steady progress on the desktop browser implementation. Wallet connect worked as expected, and USDC transfers succeeded. Convinced we were “on track,” we then hit a major wall: mobile.

Navigation glitches. Unstable connections. Features that worked flawlessly on desktop didn’t behave as expected on mobile. Building a solid UI/UX for EVM dApps with wallet connections on mobile proved challenging.

We decided to take on another theme of the event: turning the app into a Farcaster Mini App. That decision introduced new hurdles — Farcaster account creation, environment variable setup, and the registration process for Mini Apps. We battled a string of unclear errors right up to the submission deadline.

3.3 Technical findings

The most valuable insights were technical.

We deepened our understanding of the two address models in Coinbase Wallet — EOA (Externally Owned Account) and SCA (Smart Contract Account) — a significant asset for future development. We also experienced first‑hand that Base Network imposes constraints on which wallet types can be used.

In validating the x402 protocol, we made an interesting discovery: by implementing HTTP 402 (Payment Required) as middleware, “authentication” and “payment” can be handled in a unified way. Requests without completed payment are automatically blocked and only proceed afterward — an elegant mechanism that could become a standard pattern for future Web3 applications.

In hindsight, we should have defined the implementation scope more clearly from the outset. We also should have leveraged the daily office hours during the event to explore technical solutions for our design earlier.