Case Study · Powerkick

Powerkick — An Installable QR-Code Web App for 800+ EV Stations

Migrated a React Native codebase to the Web, shipped OAuth2, and built a Node.js/GraphQL backend with Redis caching to power an installable QR-code app used across 800+ EV charging stations in South Korea.

Vue 3TypeScriptNode.jsGraphQLRedisMongoDBAWS CloudFrontGitLab CI
800+
EV stations served
South Korea
Coverage
High — subsecond queries
Redis cache hit-rate

Context

Powerkick operates a network of EV charging stations across South Korea. Drivers needed a frictionless way to authenticate, start a charge, and see session state — ideally without having to install a native app. The team had an existing React Native codebase and wanted to extend reach to the web as an installable PWA.

Problem

  • Mobile-first, web-second — the original app was React Native and did not deliver a first-class web experience.
  • Auth friction — each station interaction needed a secure, low-latency login.
  • Query hot paths were slow — repeat GraphQL queries hit the DB every time.
  • Deployments were manual — new builds required hands-on work.

Approach

1. React Native → React Web

I migrated the React Native screens to the web, keeping the shared domain logic where feasible and rewriting platform-specific layers. The web app was built as an installable PWA so drivers could add it to the home screen and launch it like a native app.

2. OAuth2 authentication

Shipped OAuth2 with secure token handling and refresh flows. Integrated it into the charging-session initiation path so users could tap-to-scan, authenticate, and start charging in a few seconds.

3. Node.js GraphQL backend + Redis cache

Built a Node.js GraphQL layer in front of the core services. Cached hot GraphQL queries in Redis — station lookups, pricing, and station availability — which dropped p95 latency and took load off downstream systems.

4. MongoDB + AWS + CI/CD

Integrated MongoDB for scalable document storage, deployed static assets behind AWS CloudFront, and wired up GitLab CI/CD for automated builds, test runs, and deployments. Also shipped the build to the Google Play Store for devices that preferred a packaged install.

Impact

  • 800+ charging stations served by a single responsive web app.
  • Sub-second UX on hot paths thanks to aggressive Redis caching.
  • Tap-to-charge in a few seconds via OAuth2 + QR initiation.
  • Shipped to the Play Store and the public web from one pipeline.

Takeaways

  • A well-scoped PWA removes the app-store tax without sacrificing UX for most mobile flows.
  • Caching is the cheapest performance improvement you can buy — pick the right keys and the rest falls into place.
  • Owning the whole pipeline (frontend + backend + cache + CI) made each optimization visible end-to-end.