---
slug: powerkick
title: "Powerkick — An Installable QR-Code Web App for 800+ EV Stations"
company: "Powerkick"
role: "Frontend Developer"
period: "Nov 2020 — Jan 2023"
location: "Remote · South Korea"
summary: "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."
tags: ["Vue 3", "TypeScript", "Node.js", "GraphQL", "Redis", "MongoDB", "AWS CloudFront", "GitLab CI"]
---

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

## 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.
