All case studies
Freelance · Side ProjectsIndependent2025 - Present

CLIENT WORK / WEB

Pitched and Built a Postpartum Care Center Site Renewal

While my wife was staying at a postpartum care center (산후조리원) in Anyang, I looked through their website — the facility itself was premium, but the site wasn't matching that feel. I built a UI sample on my own, pitched it to the center, and it turned into the actual production site.

Pitch style
Unsolicited UI sample

Built and shown up front

Pages
8 pages

home · facility · program · etc.

Core technique
Scroll animation

192-frame Canvas

Outcome
Live in production

grandbaie.co.kr

Astro 6Tailwind CSS 4Canvas APIKakao MapVercelSchema.org

Background

My wife's postpartum center website felt a step behind the facility itself

When my wife checked into the postpartum care center, I took a look through their website. The facility itself was clearly a nice place, but the site wasn't capturing that atmosphere. The design felt dated, and on mobile there were spots where the layout was breaking.

I figured that just saying "a renewal would be a good idea" wouldn't really land, so I built a UI sample on my own and showed it to the center. The response to the sample was positive right away, and it moved straight into actual development.

  • Site quality lagged behind the actual facility

    The facility itself was polished, but the website wasn't living up to that impression. For expecting mothers, this website is the first thing they see when searching, and if the first impression is underwhelming it's hard to turn that into an on-site consultation.

  • Weak mobile support

    Most expecting mothers researching postpartum care centers are searching on mobile. But the existing site had places where the layout broke on mobile.

  • No foundation for search visibility (SEO)

    Basic SEO setup — Schema.org markup, OG tags — wasn't in place, so search engines had no good way to pick up proper information about the center.

Design Direction

A hotel-grade premium concept

I put myself in the shoes of an expecting mother choosing a postpartum center. When they search and land on the website, the first impression needs to say "this place looks good" for it to lead to an on-site consultation. So I set the concept as a premium feel on par with a hotel website.

For the color palette, I went with a cream/espresso/gold combination to get a warm yet upscale tone, and kept typography clean using the Pretendard font. Overall, I designed it in a direction that conveys the sense of "this is a center that takes care of the details."

Workflow

Pitch

Built UI sample myself

UI sample

Shared design mock-up

Approval

Positive response from center

Planning

8-page structure

Build

Astro + Tailwind

Deploy

Vercel · custom domain

Handover

Delivered to client

cream / espresso / gold

Warm yet upscale, hotel-grade color palette

Search → first impression → consultation

Page flow designed around the expecting mother's decision journey

Pretendard font

Clean typography to establish trust

Process

Implementation

  1. 01

    Astro 6 static site — why Astro?

    A postpartum care center website doesn't need a CMS or logins. Since it's a static site where content barely changes, Astro — which builds all the HTML at build time and serves from a CDN — was a perfect fit. The JavaScript bundle is almost non-existent so loading is fast, and being SSG-based, SEO comes along naturally. Combined with Tailwind CSS 4, I could nail down a consistent style quickly without setting up a design system.

  2. 02

    192-frame scroll animation — Canvas + lerp

    In the hero section, I wanted to give the feeling of walking through the center's interior as you scroll. I preload 192 WebP frames and draw the appropriate frame on a Canvas based on scroll progress. If you simply swap frames, it stutters — so I applied lerp interpolation to make the current frame smoothly chase the target frame. I also handled cover-fit logic so that the Canvas fills the screen at any resolution.

    hero-scroll-animation.js
    javascript
    const TOTAL_FRAMES = 192;
    const canvas = document.getElementById('hero-canvas');
    const ctx = canvas.getContext('2d', { alpha: false });
     
    // Preload 192 WebP frames in order
    function preloadFrames() {
    for (let i = 0; i < TOTAL_FRAMES; i++) {
    const img = new Image();
    img.src = '/assets/frames/frame_' + String(i + 1).padStart(4, '0') + '.webp';
    frames[i] = img;
    }
    }
     
    // Smooth interpolation (lerp) — transition frames based on scroll position
    function animate() {
    if (Math.abs(currentFrame - targetFrame) < 0.5) {
    currentFrame = targetFrame;
    drawFrame(Math.round(currentFrame));
    return;
    }
    currentFrame += (targetFrame - currentFrame) * 0.15;
    drawFrame(Math.round(currentFrame));
    requestAnimationFrame(animate);
    }
     
    // Map scroll progress to target frame
    function onScroll() {
    const progress = Math.max(0, Math.min(1, scrolled / scrollRange));
    targetFrame = Math.round(progress * (TOTAL_FRAMES - 1));
    }
  3. 03

    Kakao Map integration + fallback UI

    I added Kakao Map to the directions page, but if the map fails to load — expired API key, network error, etc. — it would be a problem, so I built a fallback UI alongside it. If the map fails to load, the address text and a Kakao Map link button appear in its place, so users can still check the location information no matter what.

  4. 04

    SEO — Schema.org, sitemap, GA4, Search Console

    Local search is critical for postpartum care centers. I added structured data with Schema.org JSON-LD using the MedicalBusiness type so search engines can properly pick up the business category, address, and phone number, and set up OG tags so previews render cleanly when shared on KakaoTalk or social media. Automatic sitemap.xml generation, GA4 integration, and Naver/Google Search Console verification — all the basic SEO infrastructure is in place.

Outcome

Results

  • grandbaie.co.kr live in production

    Deployed to Vercel with a custom domain connected, and handed over as the live production site. Handover was completed so the center could take it over and run with it directly.

  • A project that started from a proactive pitch

    This wasn't a client request — I spotted the opportunity myself, built a UI sample, and pitched it. The experience went beyond raw development skill: it included the work of first showing and convincing someone "why this needs to happen."

  • Solo end-to-end, from planning through deployment

    Design concept, page structure, scroll animation implementation, SEO setup, Vercel deployment, domain connection, handover — I did all of it on my own.

  • Foundation for later B2B outbound pitches

    This experience became the starting point for a pattern of "creating projects by pitching directly." It became the foundation that led to outbound pitches for sites in other industries as well.

MORE

Explore other cases

Badabom

AUTH / SSO

Building an SSO Provider for Partner Sites

Implemented an SSO Provider so external partner sites (e.g., OTT) could sign in with Badabom accounts. Single-use UUID tokens stored in the database support multiple WAS nodes, and CI (Connecting Information) auto-maps accounts across both sides.

View detail

Badabom

DEVOPS / OBSERVABILITY

SSE + Cross-WAS Real-Time Log Viewer

The WAS lived in the Daejeon IDC, but network-segregation policy meant only Busan-office PCs could reach it — so pulling a log effectively meant flying to Busan. I built an SSE-based viewer inside the admin web and added a cross-WAS relay so logs from both WAS nodes stream into a single screen.

View detail

Badabom

LEGACY MIGRATION

Migrating the OTT Technology-Trade System into Badabom

Moved an Oracle + MyBatis technology-trade platform (OTT) onto PostgreSQL + iBATIS. Rewrote 87 URLs, 34 JSPs, 80+ SQL queries, and 14 tables.

View detail

GAIS — Government Advertising Integrated Support System

CI/CD

Automating the Build and Deploy Pipeline

Replaced a fully manual build-and-deploy workflow with a Jenkins + GitLab Webhook pipeline, cutting deploy time from 15–20 min down to around 4 min.

View detail

GAIS — Government Advertising Integrated Support System

INFRA / SESSION

Redis-Backed Session Clustering

JEUS Standard doesn't support native session clustering, so I put Redis in front as an external session store. That unlocked rolling restarts across WAS nodes.

View detail

GAIS — Government Advertising Integrated Support System

SECURITY / NETWORK

Applying TLS 1.3 via an Nginx Reverse Proxy

Touching the shared WebtoB SSL felt risky, so I put Nginx in front and terminated TLS there instead. Existing services kept running untouched while TLS 1.3 was rolled out.

View detail

Freelance · Side Projects

SIDE PROJECT / AI

Family-Driven Baby Naming with AI + Tournament-Style Voting

Existing naming services are designed for solo use, so I built a way for the whole family to join in. GPT-4o suggests names aligned with Saju (birth-chart) and Ohaeng (Five-Element) rules, and the family votes tournament-style to pick the final name.

View detail
Grand-Baie Static Site | Case Study