diff --git a/package.json b/package.json
index b93fd03b7..ef833e899 100644
--- a/package.json
+++ b/package.json
@@ -26,6 +26,7 @@
"downloadjs": "^1.4.7",
"file-saver": "^2.0.5",
"firebase": "9.9.0",
+ "framer-motion": "^11.18.2",
"git-repo-api": "^0.0.17",
"graphql": "^16.8.1",
"highlight.js": "^11.9.0",
diff --git a/src/plays/dj-motion-cards/README.md b/src/plays/dj-motion-cards/README.md
new file mode 100644
index 000000000..56f9784b5
--- /dev/null
+++ b/src/plays/dj-motion-cards/README.md
@@ -0,0 +1,76 @@
+# ๐ง DJ Motion Cards
+
+An animated DJ profile cards component built with **React**, **Tailwind CSS**, and **Framer Motion** โ inspired by modern Electronic Press Kits (EPKs) for DJs and music creators.
+It demonstrates smooth motion effects, clean visual hierarchy, and interactive elements that respond elegantly to user hover actions.
+
+---
+
+## ๐งฉ Play Information
+
+- **Language:** TypeScript
+- **Style:** CSS (Tailwind utility classes)
+- **Difficulty:** Beginner
+- **Play Type:** Animation / UI Design
+
+---
+
+## ๐จโ๐ค Creator Information
+
+- **User:** ivandiaz333
+- **GitHub:** [@ivandiaz333](https://github.com/ivandiaz333)
+- **Video Demo:** _(optional)_
+- **Blog/Portfolio:** _(optional)_
+
+---
+
+## โ๏ธ Implementation Details
+
+This Play presents a **modern DJ profile card** featuring hover animations and glowing transitions using Framer Motion.
+It illustrates how motion and layout can combine to create visually engaging UI components.
+
+### โจ Key Features
+
+- Animated image rotation and scale on hover.
+- Pulsating soundwave bars for rhythmic motion.
+- Smooth easing and transition timing.
+- Fully responsive layout built with Tailwind CSS.
+
+### ๐ ๏ธ Technologies Used
+
+- **React 18**
+- **TypeScript**
+- **Tailwind CSS**
+- **Framer Motion**
+
+---
+
+## ๐ก Notes & Considerations
+
+- Focused on **UI aesthetics and motion principles**, not backend logic.
+- All images are local assets for demo purposes (not fetched externally).
+- You can replace the images or modify Tailwind classes to adapt the look.
+
+---
+
+## ๐ง Learn More
+
+- [Framer Motion Documentation](https://www.framer.com/motion/)
+- [Tailwind CSS Documentation](https://tailwindcss.com/docs)
+- [React Play Contributor Guide](https://docs.reactplay.io/)
+
+---
+
+## ๐ท Preview
+
+_Include a screenshot or GIF here (optional but recommended)._
+
+---
+
+## ๐ How to Run Locally
+
+1. Clone the React Play repository and install dependencies:
+ ```bash
+ git clone https://github.com/reactplay/react-play.git
+ cd react-play
+ npm install
+ ```
diff --git a/src/plays/dj-motion-cards/axwell.jpg b/src/plays/dj-motion-cards/axwell.jpg
new file mode 100644
index 000000000..f4b6fd8b8
Binary files /dev/null and b/src/plays/dj-motion-cards/axwell.jpg differ
diff --git a/src/plays/dj-motion-cards/deadmau5.jpg b/src/plays/dj-motion-cards/deadmau5.jpg
new file mode 100644
index 000000000..6a412a8a0
Binary files /dev/null and b/src/plays/dj-motion-cards/deadmau5.jpg differ
diff --git a/src/plays/dj-motion-cards/dj.jpg b/src/plays/dj-motion-cards/dj.jpg
new file mode 100644
index 000000000..86d715e8b
Binary files /dev/null and b/src/plays/dj-motion-cards/dj.jpg differ
diff --git a/src/plays/dj-motion-cards/index.tsx b/src/plays/dj-motion-cards/index.tsx
new file mode 100644
index 000000000..37fc660f3
--- /dev/null
+++ b/src/plays/dj-motion-cards/index.tsx
@@ -0,0 +1,288 @@
+import React, { useState } from 'react';
+import PlayHeader from 'common/playlists/PlayHeader';
+import { motion } from 'framer-motion';
+import djImage from './james-hype.jpg';
+import djImage2 from './axwell.jpg';
+import djImage3 from './swedish-house-mafia.jpg';
+import djImage4 from './deadmau5.jpg';
+import './styles.css';
+
+// Interfaz para tipar los datos de cada DJ
+interface SpotifyTrack {
+ id: string;
+ url: string;
+ title: string;
+}
+
+interface DJData {
+ id: number;
+ name: string;
+ country: string;
+ image: string;
+ tracks: SpotifyTrack[];
+ colorTheme: {
+ button: string;
+ buttonHover: string;
+ soundWaves: string;
+ };
+}
+
+// Componente DJCard reutilizable
+interface DJCardProps {
+ dj: DJData;
+}
+
+function DJCard({ dj }: DJCardProps) {
+ const [flipped, setFlipped] = useState(false);
+
+ return (
+
+ {/* FRONT SIDE */}
+
+
+
+ {dj.name}
+ {dj.country}
+
+
+ {[...Array(5)].map((_, i) => (
+
+ ))}
+
+
+ setFlipped(true)}
+ >
+ My Favourite Tracks โ
+
+
+
+ {/* BACK SIDE */}
+
+ Top Tracks ๐ง
+
+
+ {dj.tracks.map((track) => (
+
+ ))}
+
+
+ setFlipped(false)}
+ >
+ Back
+
+
+
+ );
+}
+
+// Array de datos de DJs
+const djsData: DJData[] = [
+ {
+ id: 1,
+ name: 'James Hype',
+ country: 'UK',
+ image: djImage,
+ tracks: [
+ {
+ id: 'track1-1',
+ url: 'https://open.spotify.com/embed/track/1OcV53oesLQw3VTW9I3uD3?utm_source=generator',
+ title: 'James Hype Track 1'
+ },
+ {
+ id: 'track1-2',
+ url: 'https://open.spotify.com/embed/track/4zN21mbAuaD0WqtmaTZZeP?utm_source=generator',
+ title: 'James Hype Track 2'
+ },
+ {
+ id: 'track1-3',
+ url: 'https://open.spotify.com/embed/track/3sU1L9okYWbN61oHZNQTfh?utm_source=generator',
+ title: 'James Hype Track 3'
+ }
+ ],
+ colorTheme: {
+ button: 'linear-gradient(to right, #14b8a6, #10b981)',
+ buttonHover: 'linear-gradient(to right, #0d9488, #059669)',
+ soundWaves: '#10b981'
+ }
+ },
+ {
+ id: 2,
+ name: 'Axwell',
+ country: 'Sweden',
+ image: djImage2,
+ tracks: [
+ {
+ id: 'track2-1',
+ url: 'https://open.spotify.com/embed/track/0PL26MnAqZtO9kEFyyvPvO?utm_source=generator',
+ title: 'Axwell Track 1'
+ },
+ {
+ id: 'track2-2',
+ url: 'https://open.spotify.com/embed/track/29Rdysued3nwLlQwmg9R46?utm_source=generator',
+ title: 'Axwell Track 2'
+ },
+ {
+ id: 'track2-3',
+ url: 'https://open.spotify.com/embed/track/6lL4XsdRrQ8XafBJbWDPV3?utm_source=generator',
+ title: 'Axwell Track 3'
+ }
+ ],
+ colorTheme: {
+ button: 'linear-gradient(to right, #3b82f6, #8b5cf6)',
+ buttonHover: 'linear-gradient(to right, #2563eb, #7c3aed)',
+ soundWaves: '#8b5cf6'
+ }
+ },
+ {
+ id: 3,
+ name: 'Swedish House Mafia',
+ country: 'Sweden',
+ image: djImage3,
+ tracks: [
+ {
+ id: 'track3-1',
+ url: 'https://open.spotify.com/embed/track/4xr1Azj8mCbz6u8CITf8ef?utm_source=generator',
+ title: 'Swedish House Mafia Track 1'
+ },
+ {
+ id: 'track3-2',
+ url: 'https://open.spotify.com/embed/track/2V65y3PX4DkRhy1djlxd9p?utm_source=generator',
+ title: 'Swedish House Mafia Track 2'
+ },
+ {
+ id: 'track3-3',
+ url: 'https://open.spotify.com/embed/track/6gdDu39yYqPcaTgCwYEW8i?utm_source=generator',
+ title: 'Swedish House Mafia Track 3'
+ }
+ ],
+ colorTheme: {
+ button: 'linear-gradient(to right, #f59e0b, #ef4444)',
+ buttonHover: 'linear-gradient(to right, #d97706, #dc2626)',
+ soundWaves: '#f59e0b'
+ }
+ },
+ {
+ id: 4,
+ name: 'Deadmau5',
+ country: 'Canada',
+ image: djImage4,
+ tracks: [
+ {
+ id: 'track4-1',
+ url: 'https://open.spotify.com/embed/track/4kJWtxDDNb9oAk3h7sX3N4?utm_source=generator',
+ title: 'Deadmau5 Track 1'
+ },
+ {
+ id: 'track4-2',
+ url: 'https://open.spotify.com/embed/track/5YaqbhEmoxSpIbdBTPG6KQ?utm_source=generator',
+ title: 'Deadmau5 Track 2'
+ },
+ {
+ id: 'track4-3',
+ url: 'https://open.spotify.com/embed/track/0F539Pcn7LDa2MbBhDe3Tw?utm_source=generator',
+ title: 'Deadmau5 Track 3'
+ }
+ ],
+ colorTheme: {
+ button: 'linear-gradient(to right, #ec4899, #a855f7)',
+ buttonHover: 'linear-gradient(to right, #db2777, #9333ea)',
+ soundWaves: '#ec4899'
+ }
+ }
+];
+
+// Componente principal
+function DjMotionCards(props: any) {
+ return (
+ <>
+
+
+
+
+ {/* Your Code Starts Here */}
+
+ {djsData.map((dj) => (
+
+ ))}
+
+ {/* Your Code Ends Here */}
+
+
+ >
+ );
+}
+
+export default DjMotionCards;
diff --git a/src/plays/dj-motion-cards/james-hype.jpg b/src/plays/dj-motion-cards/james-hype.jpg
new file mode 100644
index 000000000..121c43991
Binary files /dev/null and b/src/plays/dj-motion-cards/james-hype.jpg differ
diff --git a/src/plays/dj-motion-cards/play.json b/src/plays/dj-motion-cards/play.json
new file mode 100644
index 000000000..a1ffbeae5
--- /dev/null
+++ b/src/plays/dj-motion-cards/play.json
@@ -0,0 +1,7 @@
+{
+ "name": "DJ Motion Cards",
+ "description": "Animated DJ profile cards using React and Framer Motion.",
+ "author": "Ivรกn",
+ "github": "https://github.com/ivandiaz333",
+ "tags": ["react", "motion", "animation", "cards", "music"]
+}
diff --git a/src/plays/dj-motion-cards/styles.css b/src/plays/dj-motion-cards/styles.css
new file mode 100644
index 000000000..48ca804a9
--- /dev/null
+++ b/src/plays/dj-motion-cards/styles.css
@@ -0,0 +1,8 @@
+/* DJ Motion Card styles */
+
+/* Tailwind classes handle most of the styling. */
+
+.backface-hidden {
+ backface-visibility: hidden !important;
+ transform-style: preserve-3d;
+}
diff --git a/src/plays/dj-motion-cards/swedish-house-mafia.jpg b/src/plays/dj-motion-cards/swedish-house-mafia.jpg
new file mode 100644
index 000000000..d161fb4be
Binary files /dev/null and b/src/plays/dj-motion-cards/swedish-house-mafia.jpg differ