ワンクリックで
website-building-react-native
React Native & Expo styling guidance — NativeWind, design tokens, navigation, platform-specific UI. Use alongside the parent website-building skill's design foundations.
メニュー
React Native & Expo styling guidance — NativeWind, design tokens, navigation, platform-specific UI. Use alongside the parent website-building skill's design foundations.
Build distinctive, production-grade websites and web apps. Routes to the right guidance based on framework (Next.js, React Native, vanilla HTML). Covers design tokens, typography, motion, layout, accessibility, and deployment.
Fullstack web app skill — Express + Vite + React + Tailwind + shadcn/ui + Drizzle ORM template. Use for SaaS, dashboards, admin panels, e-commerce.
Artifact-agnostic design guidance — color palettes, typography, data visualization principles. Works for CSS, React, PowerPoint, matplotlib, PDF, or any visual output.
Next.js 16+ specific guidance — app router, Tailwind v4, shadcn/ui, deployment to Vercel. Use alongside the parent website-building skill.
Ultra-dense, full-spectrum codebase reconnaissance skill exclusively by VRIL LABS. Chains every major and obscure code repository platform and cross-repository search engine—leveraging free APIs wherever available—to systematically discover, evaluate, and document high-signal reference codebases in a dedicated REFERENCE_REPOS.md file, saving development time and elevating output quality on any current task. Invoke when asked to find reference implementations, build a reference corpus, scout existing solutions, discover similar projects, or research how a technology is used across the open-source ecosystem.
Deep-research-backed SKILL.md authoring guide exclusively by VRIL LABS. Instructs agents on how to design, structure, write, and validate flawlessly optimal SKILL.md files that conform to the Agent Skills open format and perform at the highest level across Claude Code, GitHub Copilot, Cursor, Codex CLI, Windsurf, and any Skills CLI-compatible agent runtime. Invoke when asked to create a new skill, write a SKILL.md file, audit an existing skill for quality, or understand best practices for skill specification authoring.
| name | website-building-react-native |
| description | React Native & Expo styling guidance — NativeWind, design tokens, navigation, platform-specific UI. Use alongside the parent website-building skill's design foundations. |
| user-invocable | false |
Framework-specific guidance for React Native 0.81+ / Expo SDK 54+ projects. Read alongside the parent website-building skill's shared/01-design-tokens.md and shared/02-typography.md for color palette and typography principles.
# Expo (recommended — managed workflow, easier setup)
npx create-expo-app@latest my-app
cd my-app
npx expo start
# With Expo Router template (file-based routing):
npx create-expo-app@latest my-app --template tabs
NativeWind brings Tailwind utility classes to React Native. It compiles Tailwind classes to StyleSheet at build time.
npm install nativewind
npm install --save-dev tailwindcss@^3 postcss
npx tailwindcss init
Note: NativeWind v4 uses Tailwind CSS v3 under the hood (not v4). Do not use Tailwind v4 with NativeWind yet.
tailwind.config.js:
module.exports = {
content: [
"./app/**/*.{js,jsx,ts,tsx}",
"./components/**/*.{js,jsx,ts,tsx}",
],
theme: {
extend: {
colors: {
// Nexus palette for React Native
background: "#F7F6F2",
surface: "#F9F8F5",
border: "#D4D1CA",
"text-primary": "#28251D",
"text-muted": "#7A7974",
primary: "#01696F",
"primary-dark": "#4F98A3", // dark mode variant
},
},
},
plugins: [],
}
babel.config.js:
module.exports = {
presets: [
["babel-preset-expo", { jsxImportSource: "nativewind" }],
"nativewind/babel",
],
}
app/_layout.tsx:
import { cssInterop } from "nativewind"
// Register components you want to accept className prop
cssInterop(Image, { className: "style" })
import { View, Text, TouchableOpacity } from "react-native"
export function Card({ title, onPress }) {
return (
<View className="bg-surface rounded-lg p-4 border border-border shadow-sm">
<Text className="text-text-primary text-base font-semibold mb-2">
{title}
</Text>
<TouchableOpacity
className="bg-primary rounded-md py-2 px-4 active:opacity-80"
onPress={onPress}
>
<Text className="text-white text-sm font-medium text-center">
Tap me
</Text>
</TouchableOpacity>
</View>
)
}
Expo Router uses file-based routing (like Next.js App Router, but for React Native).
app/
├── _layout.tsx # Root layout
├── index.tsx # / (Home screen)
├── (tabs)/
│ ├── _layout.tsx # Tab bar layout
│ ├── home.tsx # /home tab
│ └── profile.tsx # /profile tab
└── [id].tsx # Dynamic route
// app/_layout.tsx
import { Stack } from "expo-router"
export default function RootLayout() {
return (
<Stack>
<Stack.Screen name="index" options={{ title: "Home" }} />
<Stack.Screen name="detail/[id]" options={{ title: "Detail" }} />
</Stack>
)
}
// app/(tabs)/_layout.tsx
import { Tabs } from "expo-router"
import { House, User, Settings } from "lucide-react-native"
export default function TabLayout() {
return (
<Tabs screenOptions={{ tabBarActiveTintColor: "#01696F" }}>
<Tabs.Screen
name="home"
options={{
title: "Home",
tabBarIcon: ({ color }) => <House size={24} color={color} />,
}}
/>
</Tabs>
)
}
| Web | React Native |
|---|---|
div | View |
p, span | Text (ALL text must be in <Text>) |
img | Image |
button | TouchableOpacity or Pressable |
| CSS Flexbox (row default) | Flexbox (column default) |
px, em, rem | Unitless numbers (device-independent pixels) |
position: fixed | N/A — use absolute + SafeAreaView |
overflow: scroll | ScrollView or FlatList |
import { Text, StyleSheet } from "react-native"
// Scale equivalent to design tokens (use sp units via StyleSheet)
const styles = StyleSheet.create({
heroText: { fontSize: 48, fontWeight: "900", lineHeight: 56 },
h1: { fontSize: 32, fontWeight: "700", lineHeight: 40 },
h2: { fontSize: 24, fontWeight: "700", lineHeight: 32 },
body: { fontSize: 16, fontWeight: "400", lineHeight: 24 },
small: { fontSize: 14, fontWeight: "400", lineHeight: 20 },
caption: { fontSize: 12, fontWeight: "400", lineHeight: 16 },
})
NativeWind equivalent:
<Text className="text-4xl font-black leading-tight">Hero</Text> {/* 36px */}
<Text className="text-2xl font-bold">Heading</Text> {/* 24px */}
<Text className="text-base">Body text</Text> {/* 16px */}
<Text className="text-sm text-text-muted">Caption</Text> {/* 14px */}
hitSlop for small icons:<TouchableOpacity
hitSlop={{ top: 12, right: 12, bottom: 12, left: 12 }}
onPress={onPress}
>
<ChevronRight size={20} />
</TouchableOpacity>
Always account for notches, home indicators, and status bars:
npx expo install react-native-safe-area-context
import { SafeAreaView } from "react-native-safe-area-context"
export default function Screen() {
return (
<SafeAreaView className="flex-1 bg-background">
{/* content */}
</SafeAreaView>
)
}
import { Platform, StyleSheet } from "react-native"
// Method 1: Platform.select
const styles = StyleSheet.create({
shadow: Platform.select({
ios: {
shadowColor: "#000",
shadowOffset: { width: 0, height: 2 },
shadowOpacity: 0.12,
shadowRadius: 6,
},
android: {
elevation: 4,
},
}),
})
// Method 2: Platform-specific files
// Button.ios.tsx → used on iOS
// Button.android.tsx → used on Android
// Button.tsx → fallback
import { useColorScheme } from "react-native"
// Or with NativeWind (automatically respects system dark mode):
// className="bg-background dark:bg-background-dark"
// Programmatic:
const colorScheme = useColorScheme() // 'light' | 'dark'
const isDark = colorScheme === "dark"
npx expo install lucide-react-native react-native-svg
import { Home, User, Settings } from "lucide-react-native"
// <Home size={24} color="#01696F" />
// <User size={20} color={colors.textMuted} strokeWidth={1.5} />
React.memo for components that re-render oftenuseCallback/useMemo for stable references passed to list itemsimport { Link } from "expo-router"
// <Link href="/profile">
// <Text>Go to Profile</Text>
// </Link>
// <Link href="/user/123" asChild>
// <TouchableOpacity>
// <Text>View User</Text>
// </TouchableOpacity>
// </Link>
npx expo install expo-image
import { Image } from "expo-image"
// <Image
// source="https://example.com/photo.jpg"
// style={{ width: 200, height: 200 }}
// contentFit="cover"
// transition={300}
// placeholder={blurhash}
// />
<Text> components (React Native requirement)useColorScheme or NativeWind dark: variantexpo-image for optimized image loadinglucide-react-native for icons