Use when adding, toggling, or removing feature flags in meloming projects, or when the user says: 피쳐플래그 추가, feature flag, 기능 토글, 킬 스위치, 새 기능 플래그
From feature-flagnpx claudepluginhub dokdo2013/claude-code-skills --plugin feature-flagThis skill uses the workspace's default tool permissions.
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Details PluginEval's skill quality evaluation: 3 layers (static, LLM judge), 10 dimensions, rubrics, formulas, anti-patterns, badges. Use to interpret scores, improve triggering, calibrate thresholds.
PostHog Feature Flags로 meloming 클라이언트(Front/iOS/Android)의 기능을 독립적으로 켜고 끈다. 백엔드 변경 없이 클라이언트 UI만 제어.
Security boundary: Flag는 UX 게이팅일 뿐, 보안/인가가 아니다. API는 항상 열려있음.
| Platform | File | Format |
|---|---|---|
| Front | src/shared/lib/feature-flags.ts | { key: string, default: boolean } |
| iOS | Meloming/Core/FeatureFlags/FeatureFlags.swift | enum FeatureFlag: String with defaultValue |
| Android | core/analytics/.../FeatureFlag.kt | enum class FeatureFlag(key, default) |
smart-song-addition)default = falsedefault = trueFront (meloming-front/src/shared/lib/feature-flags.ts):
export const FeatureFlags = {
// ... existing flags
myNewFeature: { key: 'my-new-feature', default: false },
} as const
iOS (meloming-ios/Meloming/Core/FeatureFlags/FeatureFlags.swift):
enum FeatureFlag: String, CaseIterable {
// ... existing cases
case myNewFeature = "my-new-feature"
var defaultValue: Bool {
switch self {
// ... existing cases
case .myNewFeature: return false
}
}
}
Android (meloming-android/core/analytics/.../FeatureFlag.kt):
enum class FeatureFlag(val key: String, val default: Boolean) {
// ... existing entries
MY_NEW_FEATURE("my-new-feature", false),
}
Front:
const enabled = useFeatureFlag('myNewFeature')
if (enabled) { /* show feature */ }
iOS:
@ObservedObject private var flags = FeatureFlagManager.shared
if flags.isEnabled(.myNewFeature) { /* show feature */ }
Android:
val revision by featureFlagManager.flagsRevision.collectAsStateWithLifecycle()
if (featureFlagManager.isEnabled(FeatureFlag.MY_NEW_FEATURE)) { /* show feature */ }
my-new-featureenvironment = qa → 100% rolloutenvironment = production condition 추가 (줄임말 prod 사용 금지)순서가 중요하다. PostHog 먼저 삭제하면 기존 릴리즈된 앱에서 동작이 변경될 수 있음.
| Platform | Wrapper | Reactivity |
|---|---|---|
| Front | useFeatureFlag(name) hook | useFeatureFlagEnabled — 자동 리렌더링 |
| iOS | FeatureFlagManager.shared.isEnabled(flag) | ObservableObject + NotificationCenter |
| Android | featureFlagManager.isEnabled(flag) | StateFlow + PostHogOnFeatureFlags |
flagsRevision.collectAsStateWithLifecycle() 없으면 flag 변경 시 UI 안 바뀜FeatureFlagManager.shared.isEnabled() 직접 호출만으로는 SwiftUI 리렌더링 안 됨