All Prompts
All Prompts

carddashboarddatabasestatsanimatedtailwindwidgetstatus
Animated Database Schema Status Card
Анимированная карточка статуса схемы базы данных. Визуализация данных, SVG-анимация, статистика в реальном времени. Идеально для дашбордов.
Prompt
<div
class="max-w-sm overflow-hidden sm:p-4 bg-black/30 max-h-none border-white/10 border rounded-xl pt-3 pr-3 pb-3 pl-3 relative">
<div class="pointer-events-none absolute inset-px rounded-xl ring-1 ring-inset ring-white/10"></div>
<!-- Header -->
<div class="flex items-center justify-between mb-3">
<span class="text-xs text-zinc-400 font-medium">Database Schema</span>
<span class="text-[10px] text-emerald-400">● Live</span>
</div>
<!-- Schema Animation Container -->
<div class="relative h-48 sm:h-56 rounded-lg bg-gradient-to-b from-slate-900 to-black overflow-hidden">
<div class="flex max-h-full absolute top-0 right-0 bottom-0 left-0 items-center justify-center">
<!-- Central Database Hub -->
<div class="relative z-20">
<div
class="h-20 w-20 rounded-2xl bg-gradient-to-br from-violet-600/30 to-fuchsia-600/30 border-2 border-violet-400/50 flex items-center justify-center shadow-[0_0_40px_rgba(139,92,246,0.5)] backdrop-blur-sm">
<svg xmlns="http://www.w3.org/2000/svg" width="32" height="32" viewBox="0 0 24 24" fill="none"
stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"
class="h-9 w-9 text-violet-200">
<ellipse cx="12" cy="5" rx="9" ry="3" class=""></ellipse>
<path d="M3 5V19A9 3 0 0 0 21 19V5" class=""></path>
<path d="M3 12A9 3 0 0 0 21 12" class=""></path>
</svg>
<div
class="absolute inset-0 rounded-2xl bg-gradient-to-br from-violet-500/20 to-fuchsia-500/20 animate-pulse">
</div>
</div>
<!-- Integrations Schema -->
<div class="glass overflow-hidden max-h-fit rounded-2xl mb-0 pt-16 pr-5 pb-0 pl-5 space-y-0">
<div class="text-center mb-4">
<span class="text-[10px] uppercase tracking-[0.2em] text-lime-300/90">
Integrations
</span>
<h4 class="text-2xl font-semibold tracking-tight mt-1">
Seamlessly integrate
</h4>
<p class="text-xs text-neutral-400">
with your favourite tools
</p>
</div>
<!-- Icons Row -->
<!-- New Wave Animation Schema -->
<div class="w-64 h-44 max-w-fit relative">
<svg viewBox="0 0 320 176" class="absolute top-0 right-0 bottom-0 left-0 w-[230px] h-[176px]"
stroke-width="2" data-icon-replaced="true"
style="width: 230px; height: 176px; color: rgb(255, 255, 255);">
<!-- Outer waves -->
<path d="M0 88 Q 53 40, 106 88 T 212 88 T 320 88" stroke="rgba(163,230,53,0.2)" stroke-width="2"
fill="none" class="wave-path" style="animation: wave 4s ease-in-out infinite;"></path>
<path d="M0 88 Q 53 60, 106 88 T 212 88 T 320 88" stroke="rgba(163,230,53,0.3)" stroke-width="2"
fill="none" class="wave-path" style="animation: wave 3.5s ease-in-out infinite 0.2s;"></path>
<!-- Middle waves -->
<path d="M0 88 Q 53 70, 106 88 T 212 88 T 320 88" stroke="rgba(163,230,53,0.5)" stroke-width="2.5"
fill="none" class="wave-path" style="animation: wave 3s ease-in-out infinite 0.4s;"></path>
<path d="M0 88 Q 53 75, 106 88 T 212 88 T 320 88" stroke="#a3e635" stroke-width="3" fill="none"
class="wave-path" style="animation: wave 2.8s ease-in-out infinite 0.6s;"></path>
<!-- Inner glow waves -->
<path d="M0 88 Q 53 75, 106 88 T 212 88 T 320 88" stroke="rgba(163,230,53,0.4)" stroke-width="8"
fill="none" opacity="0.3" class="wave-path"
style="animation: wave 2.8s ease-in-out infinite 0.6s; filter: blur(4px);">
</path>
<!-- Flowing particles -->
<circle cx="80" cy="88" r="3" fill="#a3e635" opacity="0.8" class="flowing-particle"
style="animation: flowParticle 5s ease-in-out infinite;"></circle>
<circle cx="160" cy="88" r="2.5" fill="#a3e635" opacity="0.6" class="flowing-particle"
style="animation: flowParticle 4.5s ease-in-out infinite 1s;"></circle>
<circle cx="240" cy="88" r="3" fill="#a3e635" opacity="0.7" class="flowing-particle"
style="animation: flowParticle 5.5s ease-in-out infinite 2s;"></circle>
</svg>
<!-- Destination cube with pulse -->
</div>
<style>
@keyframes wave {
0%,
100% {
d: path("M0 88 Q 53 70, 106 88 T 212 88 T 320 88");
}
25% {
d: path("M0 88 Q 53 100, 106 88 T 212 88 T 320 88");
}
50% {
d: path("M0 88 Q 53 76, 106 88 T 212 88 T 320 88");
}
75% {
d: path("M0 88 Q 53 94, 106 88 T 212 88 T 320 88");
}
}
@keyframes flowParticle {
0% {
cx: 0;
cy: 88;
opacity: 0;
}
10% {
opacity: 0.8;
}
50% {
cy: 70;
}
90% {
opacity: 0.8;
}
100% {
cx: 320;
cy: 88;
opacity: 0;
}
}
@keyframes destinationPulse {
0%,
100% {
transform: translate(-50%, 0) scale(1);
box-shadow: 0 0 30px rgba(163, 230, 53, 0.45);
}
50% {
transform: translate(-50%, 0) scale(1.1);
box-shadow: 0 0 45px rgba(163, 230, 53, 0.7);
}
}
.wave-path {
transform-origin: center;
}
</style>
</div>
<!-- Stats Row -->
<div class="mt-4 grid grid-cols-3 gap-2 text-center">
<div class="rounded-lg border border-white/10 bg-white/[0.02] p-2">
<div class="text-xs text-zinc-500 mb-0.5">Tables</div>
<div class="text-sm font-semibold text-zinc-200">47</div>
</div>
<div class="rounded-lg border border-white/10 bg-white/[0.02] p-2">
<div class="text-xs text-zinc-500 mb-0.5">Relations</div>
<div class="text-sm font-semibold text-sky-300">124</div>
</div>
<div class="rounded-lg border border-white/10 bg-white/[0.02] p-2">
<div class="text-xs text-zinc-500 mb-0.5">Queries/s</div>
<div class="text-sm font-semibold text-emerald-400">2.4k</div>
</div>
</div>
</div>
<!-- Description -->
<style>
.orbit-container {
position: absolute;
width: 180px;
height: 180px;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
.orbit-node {
position: absolute;
left: 50%;
top: 50%;
margin-left: -20px;
margin-top: -20px;
}
.orbit-1 {
animation: orbit1 10s linear infinite;
}
.orbit-2 {
animation: orbit2 10s linear infinite;
}
.orbit-3 {
animation: orbit3 10s linear infinite;
}
.orbit-4 {
animation: orbit4 10s linear infinite;
}
@keyframes orbit1 {
from {
transform: rotate(0deg) translateX(90px) rotate(0deg);
}
to {
transform: rotate(360deg) translateX(90px) rotate(-360deg);
}
}
@keyframes orbit2 {
from {
transform: rotate(90deg) translateX(90px) rotate(-90deg);
}
to {
transform: rotate(450deg) translateX(90px) rotate(-450deg);
}
}
@keyframes orbit3 {
from {
transform: rotate(180deg) translateX(90px) rotate(-180deg);
}
to {
transform: rotate(540deg) translateX(90px) rotate(-540deg);
}
}
@keyframes orbit4 {
from {
transform: rotate(270deg) translateX(90px) rotate(-270deg);
}
to {
transform: rotate(630deg) translateX(90px) rotate(-630deg);
}
}
@keyframes pulse-glow {
0%,
100% {
box-shadow: 0 0 20px rgba(139, 92, 246, 0.3);
}
50% {
box-shadow: 0 0 35px rgba(139, 92, 246, 0.6);
}
}
.animate-pulse-glow {
animation: pulse-glow 3s ease-in-out infinite;
}
.particle {
position: absolute;
width: 4px;
height: 4px;
border-radius: 50%;
opacity: 0;
}
.particle-1 {
background: rgba(139, 92, 246, 0.9);
animation: flow-particle-1 5s ease-in-out infinite;
}
.particle-2 {
background: rgba(56, 189, 248, 0.9);
animation: flow-particle-2 5s ease-in-out infinite 1s;
}
.particle-3 {
background: rgba(16, 185, 129, 0.9);
animation: flow-particle-3 5s ease-in-out infinite 2s;
}
.particle-4 {
background: rgba(217, 70, 239, 0.9);
animation: flow-particle-4 5s ease-in-out infinite 3s;
}
.particle-5 {
background: rgba(6, 182, 212, 0.9);
animation: flow-particle-1 5s ease-in-out infinite 2.5s;
}
.particle-6 {
background: rgba(139, 92, 246, 0.9);
animation: flow-particle-3 5s ease-in-out infinite 4s;
}
@keyframes flow-particle-1 {
0% {
top: 15%;
left: 50%;
opacity: 0;
}
20% {
opacity: 1;
}
50% {
top: 50%;
left: 50%;
opacity: 1;
}
80% {
opacity: 0.6;
}
100% {
top: 50%;
left: 85%;
opacity: 0;
}
}
@keyframes flow-particle-2 {
0% {
top: 50%;
left: 85%;
opacity: 0;
}
20% {
opacity: 1;
}
50% {
top: 50%;
left: 50%;
opacity: 1;
}
80% {
opacity: 0.6;
}
100% {
top: 85%;
left: 50%;
opacity: 0;
}
}
@keyframes flow-particle-3 {
0% {
top: 85%;
left: 50%;
opacity: 0;
}
20% {
opacity: 1;
}
50% {
top: 50%;
left: 50%;
opacity: 1;
}
80% {
opacity: 0.6;
}
100% {
top: 50%;
left: 15%;
opacity: 0;
}
}
@keyframes flow-particle-4 {
0% {
top: 50%;
left: 15%;
opacity: 0;
}
20% {
opacity: 1;
}
50% {
top: 50%;
left: 50%;
opacity: 1;
}
80% {
opacity: 0.6;
}
100% {
top: 15%;
left: 50%;
opacity: 0;
}
}
</style>
</div>
<script>
(function() {
// Chat functionality
const chatInput = document.getElementById('chatInput');
const sendButton = document.getElementById('sendButton');
const chatMessages = document.getElementById('chatMessages');
const userMessage = document.getElementById('userMessage');
const aiMessage = document.getElementById('aiMessage');
const userTime = document.getElementById('userTime');
const aiTime = document.getElementById('aiTime');
const meetingCard = document.getElementById('meetingCard');
const meetingDetails = document.getElementById('meetingDetails');
function getCurrentTime() {
const now = new Date();
return now.toLocaleTimeString('en-US', { hour: 'numeric', minute: '2-digit', hour12: true });
}
function simulateAIResponse(message) {
const responses = {
'meeting': 'Done. I\'ve scheduled a Zoom meeting with the design team for Thursday at 11:00 AM.',
'report': 'I\'ve generated the quarterly performance report. It shows a 42% increase in productivity.',
'task': 'Task created and assigned to the team. I\'ve set the deadline for next Friday.',
'default': 'I understand. Let me help you with that right away.'
};
const lowerMsg = message.toLowerCase();
if (lowerMsg.includes('meeting') || lowerMsg.includes('call') || lowerMsg.includes('zoom')) {
return responses.meeting;
} else if (lowerMsg.includes('report') || lowerMsg.includes('analytics')) {
return responses.report;
} else if (lowerMsg.includes('task') || lowerMsg.includes('create')) {
return responses.task;
}
return responses.default;
}
function sendMessage() {
const message = chatInput.value.trim();
if (!message) return;
const time = getCurrentTime();
userMessage.textContent = message;
userTime.textContent = time;
chatInput.value = '';
setTimeout(() => {
const response = simulateAIResponse(message);
aiMessage.textContent = response;
aiTime.textContent = time;
if (message.toLowerCase().includes('meeting') || message.toLowerCase().includes('call')) {
meetingCard.style.display = 'block';
meetingDetails.textContent = 'Design Sync • Thursday 11:00 AM';
} else {
meetingCard.style.display = 'none';
}
}, 800);
}
sendButton.addEventListener('click', sendMessage);
chatInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter') sendMessage();
});
// Generative AI functionality
const promptInput = document.getElementById('promptInput');
const createButton = document.getElementById('createButton');
const renderStatus = document.getElementById('renderStatus');
const starfield = document.getElementById('starfield');
function simulateRendering() {
const prompt = promptInput.value.trim();
if (!prompt) return;
renderStatus.textContent = 'Rendering...';
renderStatus.parentElement.classList.add('animate-pulse');
promptInput.value = '';
// Simulate rendering time
setTimeout(() => {
renderStatus.textContent = 'Complete';
renderStatus.parentElement.classList.remove('animate-pulse');
// Reset after 2 seconds
setTimeout(() => {
renderStatus.textContent = 'Ready';
}, 2000);
}, 3000);
}
createButton.addEventListener('click', simulateRendering);
promptInput.addEventListener('keypress', (e) => {
if (e.key === 'Enter') simulateRendering();
});
})();
</script>
</div>
</div>