.claude/skills/rn-supabase-dev/SKILL.md
React Native(Expo) + Supabase로 MVP 앱을 구현하는 개발 스킬. 프로젝트 초기화, 컴포넌트 구현, Supabase 연동, 네비게이션, 상태 관리를 포함한다. React Native 개발, Supabase 연동, 모바일 앱 구현 시 반드시 이 스킬을 사용.
npx skillsauth add fosejary/simple-todo rn-supabase-devInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
디자인 스펙을 기반으로 React Native (Expo) + Supabase MVP를 구현한다.
| 영역 | 기술 | 이유 | |------|------|------| | 프레임워크 | Expo (managed) | 빠른 개발, OTA 업데이트, EAS Build | | 언어 | TypeScript | 타입 안전성, 1인 개발 버그 최소화 | | 백엔드 | Supabase | Auth + DB + Storage + Realtime 올인원 | | 라우팅 | Expo Router | 파일 기반 라우팅, 딥링크 자동 지원 | | 상태관리 | Zustand | 가볍고 간단, 보일러플레이트 최소 | | UI 라이브러리 | React Native Paper | Material Design 3 기반 | | 폼 | React Hook Form + Zod | 타입 안전 폼 검증 |
{app-name}/
├── app/ # Expo Router 파일 기반 라우팅
│ ├── (auth)/ # 인증 전 화면
│ │ ├── login.tsx
│ │ └── register.tsx
│ ├── (tabs)/ # 탭 네비게이션
│ │ ├── _layout.tsx
│ │ ├── index.tsx
│ │ └── profile.tsx
│ ├── _layout.tsx # 루트 레이아웃
│ └── index.tsx # 엔트리 (리다이렉트)
├── components/
│ ├── ui/ # 기본 UI 컴포넌트
│ └── features/ # 기능별 컴포넌트
├── lib/
│ ├── supabase.ts # Supabase 클라이언트
│ └── types.ts # DB 타입 (Supabase 생성)
├── hooks/ # 커스텀 훅
├── stores/ # Zustand 스토어
├── constants/ # 상수 (colors, config)
├── supabase/
│ └── migrations/ # SQL 마이그레이션
├── app.json
├── package.json
├── tsconfig.json
└── .env.example # 환경변수 템플릿
npx create-expo-app {app-name} -t expo-template-blank-typescript
cd {app-name}
npx expo install expo-router expo-linking expo-constants
npx expo install @supabase/supabase-js @react-native-async-storage/async-storage
npx expo install react-native-paper react-native-safe-area-context
npx expo install zustand react-hook-form @hookform/resolvers zod
lib/supabase.ts에 클라이언트 초기화 (AsyncStorage 기반 세션)EXPO_PUBLIC_SUPABASE_URL, EXPO_PUBLIC_SUPABASE_ANON_KEY.env.example 생성 (실제 키 없이 플레이스홀더)_layout.tsx에서 인증 상태 기반 리다이렉트supabase/migrations/ SQL 작성hooks/use{Entity}.ts)constants/theme.ts로 중앙화eas.json: preview + production 프로필app.json: Android 패키지명, 버전, 아이콘, 스플래시import { createClient } from '@supabase/supabase-js';
import AsyncStorage from '@react-native-async-storage/async-storage';
export const supabase = createClient(
process.env.EXPO_PUBLIC_SUPABASE_URL!,
process.env.EXPO_PUBLIC_SUPABASE_ANON_KEY!,
{
auth: {
storage: AsyncStorage,
autoRefreshToken: true,
persistSession: true,
detectSessionInUrl: false,
},
}
);
import { create } from 'zustand';
import { supabase } from '@/lib/supabase';
import type { Session } from '@supabase/supabase-js';
interface AuthStore {
session: Session | null;
loading: boolean;
initialize: () => Promise<void>;
signIn: (email: string, password: string) => Promise<void>;
signOut: () => Promise<void>;
}
export const useAuthStore = create<AuthStore>((set) => ({
session: null,
loading: true,
initialize: async () => {
const { data } = await supabase.auth.getSession();
set({ session: data.session, loading: false });
supabase.auth.onAuthStateChange((_event, session) => {
set({ session });
});
},
signIn: async (email, password) => {
const { error } = await supabase.auth.signInWithPassword({ email, password });
if (error) throw error;
},
signOut: async () => {
await supabase.auth.signOut();
},
}));
export function useItems() {
const [items, setItems] = useState<Item[]>([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
const fetch = async () => {
const { data } = await supabase
.from('items')
.select('*')
.order('created_at', { ascending: false });
if (data) setItems(data);
setLoading(false);
};
fetch();
}, []);
return { items, loading };
}
_workspace/04_dev_summary.md:
npx expo start)eas build)development
React Native + Supabase 앱의 통합 정합성을 검증하고 테스트 코드를 작성하는 스킬. 경계면 교차 비교, Supabase RLS 검증, 라우팅 정합성, 데이터 흐름 추적, 단위/통합 테스트를 수행한다. QA, 테스트, 코드 검증, 버그 탐지, 품질 보증 시 반드시 이 스킬을 사용.
development
React Native + Supabase 앱을 프로덕션 수준으로 강화하는 스킬. 에러 핸들링, 보안, 크래시 리포팅, 결제, 푸시 알림, 딥링크, 오프라인 지원을 구현한다. 프로덕션 강화, 보안 강화, 결제 연동, 푸시 알림 구현 시 반드시 이 스킬을 사용.
testing
MVP를 완성된 프로덕트로 전환하는 오케스트레이터. MVP 감사 → 기능 추가 + 프로덕션 강화 + 성능 최적화 + 그로스 (병렬) → QA 검증 → 릴리스 준비 전 과정을 수행한다. MVP를 프로덕트로 강화하고 싶을 때, 프로덕션 준비, 기능 확장, 앱 완성, 출시 준비, '프로덕트로 만들어줘', '앱 완성해줘', '프로덕션 강화해줘' 등의 요청에 반드시 이 스킬을 사용.
development
React Native(Expo) 앱의 성능을 최적화하는 스킬. 번들 크기, 렌더링, 리스트 가상화, 이미지, 네트워크, 앱 시작 시간을 최적화한다. 앱 성능 최적화, 속도 개선, 메모리 최적화 시 반드시 이 스킬을 사용.