aurora-ui – skill Thiết kế & UI cho agent AI
Hướng dẫn triển khai web và app cho Aurora UI. Kích hoạt khi người dùng muốn hiệu ứng gradient glow, khối màu và ánh sáng không khí.
Cài skill aurora-ui bằng một lệnh
Chọn công cụ bạn đang dùng, copy lệnh và dán vào terminal. Skill sẽ nằm trong thư mục skills của công cụ đó và sẵn sàng dùng ở phiên làm việc tiếp theo.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/aurora-ui-d2f1a.tgz | tar xz -C ~/.claude/skills
Gọi trong Claude Code: /aurora-ui – rồi mô tả công việc bạn muốn làm.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/aurora-ui-d2f1a.tgz | tar xz -C ~/.codex/skills
Gọi trong Codex: $aurora-ui – rồi mô tả công việc bạn muốn làm.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/aurora-ui-d2f1a.tgz | tar xz -C ~/.hermes/skills
Gọi trong Hermes Agent: /aurora-ui – rồi mô tả công việc bạn muốn làm.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/aurora-ui-d2f1a.tgz | tar xz -C ~/.deepcode/skills
Gọi trong DeepSeek: /aurora-ui – rồi mô tả công việc bạn muốn làm.
Nội dung SKILL.md
Nội dung SKILL.md gốc bằng tiếng Anh.
Aurora UI
> "Ethereal, shifting lights. Like the Northern Lights trapped beneath a pane of frosted glass."
When to Use
Use this sub-style when the user's request matches the aesthetic described above. This is a child reference of the design-it skill and is not meant to be triggered directly.
Core Principles
1. Blurred Color Orbs: Large, out-of-focus, highly saturated color blobs floating in the background.
2. Glassy Overlays: Foreground elements are often semi-transparent (glassmorphism) to let the aurora effect shine through.
3. Fluid Motion: The background color orbs should slowly drift, expand, and contract.
Visual DNA
- Colors: Requires dark, deep backgrounds with vibrant, luminous accents. Midnight Luxury or Yacht Club (modified to dark mode) work well, injecting bright cyan, magenta, or lime green as the glowing orbs.
- Typography: Thin, elegant sans-serifs or sophisticated serif fonts. High contrast white text.
- Layout: Keep foreground UI elements minimal to let the background remain the star.
Web Implementation
- Best achieved with absolute-positioned, heavily blurred
divs behind the main content. - CSS Example:
body {
background-color: #0A0A0A;
overflow-x: hidden;
position: relative;
}
/* The Glowing Orb */
.aurora-blob {
position: absolute;
width: 400px;
height: 400px;
background: radial-gradient(circle, rgba(181,154,95,0.8) 0%, rgba(181,154,95,0) 70%);
border-radius: 50%;
filter: blur(80px);
z-index: -1;
animation: float 20s infinite ease-in-out alternate;
}
.aurora-blob.blue {
background: radial-gradient(circle, rgba(92,107,115,0.8) 0%, rgba(0,0,0,0) 70%);
top: 20%;
left: 60%;
animation-delay: -5s;
}
@keyframes float {
0% { transform: translate(0, 0) scale(1); }
50% { transform: translate(-50px, 100px) scale(1.2); }
100% { transform: translate(100px, -50px) scale(0.9); }
}
/* Foreground content should be glassmorphic */
.aurora-card {
background: rgba(255,255,255,0.03);
backdrop-filter: blur(20px);
border: 1px solid rgba(255,255,255,0.05);
border-radius: 24px;
}App Implementation
SwiftUI
struct AuroraView: View {
@State private var animate = false
var body: some View {
ZStack {
// Dark background
Color.black.ignoresSafeArea()
// Animated Orbs
Circle()
.fill(Color(red: 0.71, green: 0.60, blue: 0.37)) // #B59A5F
.blur(radius: 80)
.frame(width: 300, height: 300)
.offset(x: animate ? -50 : 50, y: animate ? -100 : 0)
Circle()
.fill(Color(red: 0.36, green: 0.42, blue: 0.45)) // #5C6B73
.blur(radius: 80)
.frame(width: 300, height: 300)
.offset(x: animate ? 100 : -50, y: animate ? 100 : -50)
// Glassy Foreground content
VStack {
Text("Aurora Interface")
.font(.largeTitle.bold())
.foregroundColor(.white)
}
.frame(maxWidth: .infinity, maxHeight: .infinity)
.background(.ultraThinMaterial)
}
.onAppear {
withAnimation(.easeInOut(duration: 10).repeatForever(autoreverses: true)) {
animate = true
}
}
}
}- Use
Circle().blur(radius: 80...120)in aZStackunderneath the main content. - Animate the
.offset()with a very longduration (10-20 seconds). - Use
.background(.ultraThinMaterial)on foreground containers to let the colored light bleed through nicely.
Flutter
import 'dart:ui';
class AuroraView extends StatefulWidget {
@override
State<AuroraView> createState() => _AuroraViewState();
}
class _AuroraViewState extends State<AuroraView> with SingleTickerProviderStateMixin {
late AnimationController _controller;
@override
void initState() {
super.initState();
_controller = AnimationController(vsync: this, duration: const Duration(seconds: 10))..repeat(reverse: true);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
return Scaffold(
backgroundColor: Colors.black,
body: Stack(
children: [
// Animated orb
AnimatedBuilder(
animation: _controller,
builder: (context, child) {
return Positioned(
top: 100 + (_controller.value * 100),
left: -50 + (_controller.value * 100),
child: Container(
width: 300,
height: 300,
decoration: const BoxDecoration(
shape: BoxShape.circle,
color: Color(0xFFB59A5F),
),
),
);
},
),
// Massive blur layer over the orbs
Positioned.fill(
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 80, sigmaY: 80),
child: Container(color: Colors.transparent),
),
),
// Glassy Foreground
Center(
child: ClipRRect(
borderRadius: BorderRadius.circular(24),
child: BackdropFilter(
filter: ImageFilter.blur(sigmaX: 16, sigmaY: 16),
child: Container(
padding: const EdgeInsets.all(32),
color: Colors.white.withOpacity(0.05),
child: const Text('Aurora Interface',
style: TextStyle(color: Colors.white, fontSize: 24, fontWeight: FontWeight.bold)),
),
),
),
),
],
),
);
}
}- A massive full-screen
BackdropFilterover moving solid circles is often more performant than blurring each circle individually. - Layer a second, weaker
BackdropFilterfor the actual foreground glassmorphism panels.
React Native
// Requires @react-native-community/blur
import { BlurView } from '@react-native-community/blur';
const AuroraView = () => {
const anim = useRef(new Animated.Value(0)).current;
useEffect(() => {
const loop = Animated.loop(
Animated.sequence([
Animated.timing(anim, { toValue: 1, duration: 10000, useNativeDriver: true }),
Animated.timing(anim, { toValue: 0, duration: 10000, useNativeDriver: true }),
])
);
loop.start();
return () => loop.stop();
}, [anim]);
const translateY = anim.interpolate({ inputRange: [0, 1], outputRange: [0, 100] });
return (
<View style={{ flex: 1, backgroundColor: '#000' }}>
{/* Orb — note: React Native struggles with massive live blurs,
so pre-rendered blurred PNGs are highly recommended for production */}
<Animated.Image
source={require('./blurred_orb_cyan.png')}
style={{
position: 'absolute',
top: -50, left: -50,
width: 400, height: 400,
opacity: 0.8,
transform: [{ translateY }]
}}
/>
{/* Glass Foreground */}
<View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}>
<BlurView blurType="dark" blurAmount={20} style={{ padding: 32, borderRadius: 24 }}>
<Text style={{ color: '#FFF', fontSize: 24, fontWeight: '700' }}>
Aurora Interface
</Text>
</BlurView>
</View>
</View>
);
};- Performance Warning: Do NOT use
BlurViewwith huge amounts for moving background orbs on React Native — it will lag terribly, especially on Android. - Best Practice: Create large, already-blurred PNG images in Figma/Photoshop and animate those using
Animated.Image.
Jetpack Compose
@Composable
fun AuroraView() {
val infiniteTransition = rememberInfiniteTransition()
val offsetY by infiniteTransition.animateFloat(
initialValue = -50f,
targetValue = 100f,
animationSpec = infiniteRepeatable(
animation = tween(10000, easing = LinearEasing),
repeatMode = RepeatMode.Reverse
)
)
Box(modifier = Modifier
.fillMaxSize()
.background(Color.Black)) {
// Blurred Orb
Box(
modifier = Modifier
.offset(x = (-50).dp, y = offsetY.dp)
.size(300.dp)
.blur(80.dp) // API 31+ only!
.background(Color(0xFFB59A5F), CircleShape)
)
// Pre-API 31 fallback: use a radial gradient instead of blur
Box(
modifier = Modifier
.offset(x = 150.dp, y = (offsetY * -1).dp)
.size(300.dp)
.background(
Brush.radialGradient(
colors = listOf(Color(0xFF5C6B73).copy(alpha = 0.8f), C… (nội dung đầy đủ có trong gói tải về)
Skill liên quan
- avalonia-layout-zafiro – Hướng dẫn bố cục Avalonia UI hiện đại với Zafiro.Avalonia, nhấn mạnh style dùng chung…
- avalonia-zafiro-development – Kỹ năng bắt buộc, quy ước và quy tắc hành vi khi phát triển Avalonia UI với bộ công cụ…
- offers – Khi người dùng muốn thiết kế, xây dựng hoặc cải thiện một offer — thứ họ thực sự bán —…
- interaction-design – Thiết kế và triển khai microinteraction, motion design, hiệu ứng chuyển cảnh và các mẫu…
- commercial-policy – Dùng khi thiết kế hoặc chỉnh sửa chính sách thương mại của công ty — các quy tắc tham…
- hunt-nextjs – Săn lỗ hổng đặc thù Next.js: thực thi hàm tùy ý qua Server Actions, vượt qua xác thực…
- gitnexus-explorer – Chạy giao diện web tương tác để khám phá đồ thị tri thức của codebase.
- kpi-dashboard-design – Thiết kế dashboard KPI hiệu quả với lựa chọn chỉ số, thực hành trực quan hóa tốt nhất và…