A Project That Was Renamed Three Times
A branding change in a software project is never just a simple find-and-replace. XGen went through three name changes from kickoff to launch: PlateeRAG → Prague → PolarOps → XGen. This post documents the real frontend work that went into each of those transitions.
Branding Timeline
| Period | Name | Reason for Change |
|---|---|---|
| 2025-01 ~ 2025-04 | PlateeRAG | Initial project name, focused on RAG features |
| 2025-04 ~ 2025-06 | Prague | Internal codename, start of productization |
| 2025-06 ~ 2025-07 | PolarOps | Candidate name for external release |
| 2025-07 ~ | XGen | Final brand — short for "neXt GENeration" |
Everything That Needed to Change on the Frontend
There were far more places using the brand name than expected.
- Page titles and metadata —
<title>, OG tags, etc. - Logo and favicon — SVG files, animated logo
- Navigation bar — brand text, logo image
- Login page — brand identity
- API endpoints — required coordination with the backend
- Error messages — text like "Contact PlateeRAG support"
- Docs and help content — brand name throughout user guides
- Embed widgets — brand exposed to external users
Introducing a Systematic Branding System
To avoid repeating the same mistakes, the codebase was refactored so all brand-related constants live in one place.
// constants/branding.ts
export const BRAND = {
name: 'XGen',
fullName: 'XGen Platform',
tagline: 'AI Workflow Platform',
description: 'AI 워크플로우를 시각적으로 설계하고 실행하세요',
url: 'https://xgen.plateer.com',
support: '[email protected]',
logo: {
light: '/images/xgen-logo-light.svg',
dark: '/images/xgen-logo-dark.svg',
icon: '/images/xgen-icon.svg',
},
colors: {
primary: '#6366f1',
secondary: '#8b5cf6',
accent: '#06b6d4',
},
} as const;
Hunting Down Hardcoded Leftovers with grep
After each rename, running grep to find any remaining references to the old name is non-negotiable.
# 잔여 이전 브랜드명 검색
grep -rn "PlateeRAG\|Prague\|PolarOps" src/ --include="*.tsx" --include="*.ts"
Every single rename turned up dozens of files. The stragglers were almost always hardcoded strings buried in comments or console.log calls.
Lessons Learned
Manage brand names as constants from day one. Hardcoded brand text will always come back to bite you. After going through this enough times, the habit of putting every user-visible string into either an i18n file or a constants file became second nature.