@digilogiclabs/create-saas-app 1.6.8 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -1
- package/dist/templates/mobile/base/template/package.json +1 -1
- package/dist/templates/web/base/template/package.json +1 -1
- package/dist/templates/web/ui-auth/template/package.json +2 -2
- package/dist/templates/web/ui-auth/template/src/app/page.tsx +5 -5
- package/dist/templates/web/ui-auth-payments/template/package.json +2 -2
- package/dist/templates/web/ui-auth-payments/template/src/app/page.tsx +5 -5
- package/dist/templates/web/ui-auth-payments-audio/template/package.json +2 -2
- package/dist/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +193 -178
- package/dist/templates/web/ui-auth-payments-video/template/package.json +2 -2
- package/dist/templates/web/ui-auth-payments-video/template/src/app/page.tsx +16 -16
- package/dist/templates/web/ui-only/template/package.json +2 -2
- package/dist/templates/web/ui-package-test/template/package.json +2 -2
- package/package.json +1 -1
- package/src/templates/mobile/base/template/package.json +1 -1
- package/src/templates/web/base/template/package.json +1 -1
- package/src/templates/web/ui-auth/template/package.json +2 -2
- package/src/templates/web/ui-auth/template/src/app/page.tsx +5 -5
- package/src/templates/web/ui-auth-payments/template/package.json +2 -2
- package/src/templates/web/ui-auth-payments/template/src/app/page.tsx +5 -5
- package/src/templates/web/ui-auth-payments-audio/template/package.json +2 -2
- package/src/templates/web/ui-auth-payments-audio/template/src/app/page.tsx +193 -178
- package/src/templates/web/ui-auth-payments-video/template/package.json +2 -2
- package/src/templates/web/ui-auth-payments-video/template/src/app/page.tsx +16 -16
- package/src/templates/web/ui-only/template/package.json +2 -2
- package/src/templates/web/ui-package-test/template/package.json +2 -2
|
@@ -39,7 +39,7 @@ export default function Home() {
|
|
|
39
39
|
|
|
40
40
|
const heroConfig = {
|
|
41
41
|
badge: {
|
|
42
|
-
text: "
|
|
42
|
+
text: "🔒 Secure & Modern",
|
|
43
43
|
variant: "secondary" as const,
|
|
44
44
|
icon: CheckCircle
|
|
45
45
|
},
|
|
@@ -48,7 +48,7 @@ export default function Home() {
|
|
|
48
48
|
highlight: projectName,
|
|
49
49
|
size: "xl" as const
|
|
50
50
|
},
|
|
51
|
-
description: `${projectDescription}.
|
|
51
|
+
description: `${projectDescription}. Built with modern authentication, responsive design, and seamless user experience across all devices.`
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
const handleSignOut = async () => {
|
|
@@ -158,7 +158,7 @@ export default function Home() {
|
|
|
158
158
|
</div>
|
|
159
159
|
<h3 className="text-lg font-semibold mb-2">Mobile-First UI</h3>
|
|
160
160
|
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
161
|
-
Touch-optimized components from @digilogiclabs/saas-factory-ui v0.13.
|
|
161
|
+
Touch-optimized components from @digilogiclabs/saas-factory-ui v0.13.3
|
|
162
162
|
</p>
|
|
163
163
|
</Card>
|
|
164
164
|
</SwipeableCard>
|
|
@@ -209,7 +209,7 @@ export default function Home() {
|
|
|
209
209
|
</div>
|
|
210
210
|
<h3 className="text-lg font-semibold mb-2">Touch UI Components</h3>
|
|
211
211
|
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
212
|
-
Mobile-first buttons, cards, and gestures from @digilogiclabs/saas-factory-ui v0.13.
|
|
212
|
+
Mobile-first buttons, cards, and gestures from @digilogiclabs/saas-factory-ui v0.13.3
|
|
213
213
|
</p>
|
|
214
214
|
</Card>
|
|
215
215
|
</SwipeableCard>
|
|
@@ -280,7 +280,7 @@ export default function Home() {
|
|
|
280
280
|
</div>
|
|
281
281
|
<div className="text-center">
|
|
282
282
|
<p className="text-sm text-gray-500">
|
|
283
|
-
All mobile-optimized components from @digilogiclabs/saas-factory-ui v0.13.
|
|
283
|
+
All mobile-optimized components from @digilogiclabs/saas-factory-ui v0.13.3 + auth v1.0.0
|
|
284
284
|
</p>
|
|
285
285
|
</div>
|
|
286
286
|
</Card>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "{{packageName}}",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
-
"description": "{{description}} (with UI Package v0.
|
|
4
|
+
"description": "{{description}} (with UI Package v0.15.0 + Auth v1.0.0 + Payments)",
|
|
5
5
|
"private": true,
|
|
6
6
|
"scripts": {
|
|
7
7
|
"dev": "next dev",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"next": "^15.0.0",
|
|
18
18
|
"react": "^19.0.0",
|
|
19
19
|
"react-dom": "^19.0.0",
|
|
20
|
-
"@digilogiclabs/saas-factory-ui": "^0.
|
|
20
|
+
"@digilogiclabs/saas-factory-ui": "^0.15.0",
|
|
21
21
|
"@digilogiclabs/saas-factory-auth": "^1.0.0",
|
|
22
22
|
"@digilogiclabs/saas-factory-payments": "^1.0.0",
|
|
23
23
|
"stripe": "^14.0.0",
|
|
@@ -43,7 +43,7 @@ export default function Home() {
|
|
|
43
43
|
|
|
44
44
|
const heroConfig = {
|
|
45
45
|
badge: {
|
|
46
|
-
text: "
|
|
46
|
+
text: "🚀 Complete SaaS Solution",
|
|
47
47
|
variant: "secondary" as const,
|
|
48
48
|
icon: CheckCircle
|
|
49
49
|
},
|
|
@@ -52,7 +52,7 @@ export default function Home() {
|
|
|
52
52
|
highlight: projectName,
|
|
53
53
|
size: "xl" as const
|
|
54
54
|
},
|
|
55
|
-
description: `${projectDescription}.
|
|
55
|
+
description: `${projectDescription}. Everything you need to launch your SaaS business with secure authentication, seamless payments, and beautiful mobile-first design.`
|
|
56
56
|
}
|
|
57
57
|
|
|
58
58
|
const handleSignOut = async () => {
|
|
@@ -177,7 +177,7 @@ export default function Home() {
|
|
|
177
177
|
</div>
|
|
178
178
|
<h3 className="text-lg font-semibold mb-2">Mobile-First UI</h3>
|
|
179
179
|
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
180
|
-
Touch-optimized components from @digilogiclabs/saas-factory-ui v0.13.
|
|
180
|
+
Touch-optimized components from @digilogiclabs/saas-factory-ui v0.13.3
|
|
181
181
|
</p>
|
|
182
182
|
</Card>
|
|
183
183
|
</SwipeableCard>
|
|
@@ -228,7 +228,7 @@ export default function Home() {
|
|
|
228
228
|
</div>
|
|
229
229
|
<h3 className="text-lg font-semibold mb-2">Mobile UI Components</h3>
|
|
230
230
|
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
231
|
-
Touch-optimized buttons, cards, and gestures from @digilogiclabs/saas-factory-ui v0.13.
|
|
231
|
+
Touch-optimized buttons, cards, and gestures from @digilogiclabs/saas-factory-ui v0.13.3
|
|
232
232
|
</p>
|
|
233
233
|
</Card>
|
|
234
234
|
</SwipeableCard>
|
|
@@ -323,7 +323,7 @@ export default function Home() {
|
|
|
323
323
|
</div>
|
|
324
324
|
<div className="text-center">
|
|
325
325
|
<p className="text-sm text-gray-500">
|
|
326
|
-
All mobile-optimized components from @digilogiclabs/saas-factory-ui v0.13.
|
|
326
|
+
All mobile-optimized components from @digilogiclabs/saas-factory-ui v0.13.3 + auth v1.0.0 + payments v1.0.0
|
|
327
327
|
</p>
|
|
328
328
|
</div>
|
|
329
329
|
</Card>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "{{packageName}}",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
-
"description": "{{description}} - Audio
|
|
4
|
+
"description": "{{description}} - Professional Audio Platform (with UI Package v0.15.0 + Auth v1.0.0 + Payments)",
|
|
5
5
|
"private": true,
|
|
6
6
|
"scripts": {
|
|
7
7
|
"dev": "next dev",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"next": "^15.0.0",
|
|
18
18
|
"react": "^19.0.0",
|
|
19
19
|
"react-dom": "^19.0.0",
|
|
20
|
-
"@digilogiclabs/saas-factory-ui": "^0.
|
|
20
|
+
"@digilogiclabs/saas-factory-ui": "^0.15.0",
|
|
21
21
|
"@digilogiclabs/saas-factory-auth": "^1.0.0",
|
|
22
22
|
"@digilogiclabs/saas-factory-payments": "^1.0.0",
|
|
23
23
|
"stripe": "^14.0.0",
|
|
@@ -13,7 +13,21 @@ import {
|
|
|
13
13
|
SwipeableCard,
|
|
14
14
|
PullToRefresh,
|
|
15
15
|
useNetworkInfo,
|
|
16
|
-
useOfflineState
|
|
16
|
+
useOfflineState,
|
|
17
|
+
FixedAudioBar,
|
|
18
|
+
PlaylistCard,
|
|
19
|
+
TrackList,
|
|
20
|
+
WaveformVisualizer,
|
|
21
|
+
AudioControls,
|
|
22
|
+
VolumeSlider,
|
|
23
|
+
ProgressBar,
|
|
24
|
+
ShuffleButton,
|
|
25
|
+
RepeatButton,
|
|
26
|
+
LikeButton,
|
|
27
|
+
ShareButton,
|
|
28
|
+
PlaylistSidebar,
|
|
29
|
+
AudioSearch,
|
|
30
|
+
NowPlayingCard
|
|
17
31
|
} from '@digilogiclabs/saas-factory-ui'
|
|
18
32
|
import { ArrowRight, Zap, Shield, Rocket, CheckCircle, LogOut, User, Music, Wifi, WifiOff } from 'lucide-react'
|
|
19
33
|
import { useAuth } from '@digilogiclabs/saas-factory-auth'
|
|
@@ -25,6 +39,9 @@ export default function Home() {
|
|
|
25
39
|
const networkInfo = useNetworkInfo()
|
|
26
40
|
const isOnline = useOfflineState()
|
|
27
41
|
const [isRefreshing, setIsRefreshing] = useState(false)
|
|
42
|
+
const [currentTrack, setCurrentTrack] = useState(null)
|
|
43
|
+
const [isPlaying, setIsPlaying] = useState(false)
|
|
44
|
+
const [showPlaylistSidebar, setShowPlaylistSidebar] = useState(false)
|
|
28
45
|
|
|
29
46
|
const projectName = "{{titleCaseName}}"
|
|
30
47
|
const projectDescription = "{{description}}"
|
|
@@ -41,9 +58,53 @@ export default function Home() {
|
|
|
41
58
|
columns_2_md4: { base: 2, md: 4 }
|
|
42
59
|
}
|
|
43
60
|
|
|
61
|
+
// Demo playlist data
|
|
62
|
+
const demoPlaylist = [
|
|
63
|
+
{
|
|
64
|
+
id: '1',
|
|
65
|
+
title: 'Midnight Echoes',
|
|
66
|
+
artist: 'Luna Rivers',
|
|
67
|
+
album: 'Digital Dreams',
|
|
68
|
+
duration: 180,
|
|
69
|
+
url: 'https://www.soundjay.com/misc/sounds/bell-ringing-05.mp3',
|
|
70
|
+
coverArt: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCIgdmlld0JveD0iMCAwIDMwMCAzMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjMwMCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiM4QjVDRjYiLz48Y2lyY2xlIGN4PSIxNTAiIGN5PSIxNTAiIHI9IjYwIiBmaWxsPSJ3aGl0ZSIgZmlsbC1vcGFjaXR5PSIwLjIiLz48cGF0aCBkPSJNMTMwIDEyMFYxODBMMTcwIDE1MEwxMzAgMTIwWiIgZmlsbD0id2hpdGUiLz48L3N2Zz4=',
|
|
71
|
+
liked: false
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
id: '2',
|
|
75
|
+
title: 'Neon Nights',
|
|
76
|
+
artist: 'The Frequency',
|
|
77
|
+
album: 'Electric Pulse',
|
|
78
|
+
duration: 210,
|
|
79
|
+
url: 'https://www.soundjay.com/misc/sounds/bell-ringing-05.mp3',
|
|
80
|
+
coverArt: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCIgdmlld0JveD0iMCAwIDMwMCAzMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjMwMCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNFRjQ0NDQiLz48Y2lyY2xlIGN4PSIxNTAiIGN5PSIxNTAiIHI9IjYwIiBmaWxsPSJ3aGl0ZSIgZmlsbC1vcGFjaXR5PSIwLjIiLz48cGF0aCBkPSJNMTMwIDEyMFYxODBMMTcwIDE1MEwxMzAgMTIwWiIgZmlsbD0id2hpdGUiLz48L3N2Zz4=',
|
|
81
|
+
liked: true
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
id: '3',
|
|
85
|
+
title: 'Ocean Waves',
|
|
86
|
+
artist: 'Ambient Flow',
|
|
87
|
+
album: 'Nature Sounds',
|
|
88
|
+
duration: 195,
|
|
89
|
+
url: 'https://www.soundjay.com/misc/sounds/bell-ringing-05.mp3',
|
|
90
|
+
coverArt: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCIgdmlld0JveD0iMCAwIDMwMCAzMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjMwMCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiMwNjkyQzUiLz48Y2lyY2xlIGN4PSIxNTAiIGN5PSIxNTAiIHI9IjYwIiBmaWxsPSJ3aGl0ZSIgZmlsbC1vcGFjaXR5PSIwLjIiLz48cGF0aCBkPSJNMTMwIDEyMFYxODBMMTcwIDE1MEwxMzAgMTIwWiIgZmlsbD0id2hpdGUiLz48L3N2Zz4=',
|
|
91
|
+
liked: false
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: '4',
|
|
95
|
+
title: 'City Lights',
|
|
96
|
+
artist: 'Urban Echo',
|
|
97
|
+
album: 'Metropolitan',
|
|
98
|
+
duration: 225,
|
|
99
|
+
url: 'https://www.soundjay.com/misc/sounds/bell-ringing-05.mp3',
|
|
100
|
+
coverArt: 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCIgdmlld0JveD0iMCAwIDMwMCAzMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjMwMCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNGNTk3MDAiLz48Y2lyY2xlIGN4PSIxNTAiIGN5PSIxNTAiIHI9IjYwIiBmaWxsPSJ3aGl0ZSIgZmlsbC1vcGFjaXR5PSIwLjIiLz48cGF0aCBkPSJNMTMwIDEyMFYxODBMMTcwIDE1MEwxMzAgMTIwWiIgZmlsbD0id2hpdGUiLz48L3N2Zz4=',
|
|
101
|
+
liked: true
|
|
102
|
+
}
|
|
103
|
+
]
|
|
104
|
+
|
|
44
105
|
const heroConfig = {
|
|
45
106
|
badge: {
|
|
46
|
-
text: "
|
|
107
|
+
text: "🎵 Premium Audio Experience",
|
|
47
108
|
variant: "secondary" as const,
|
|
48
109
|
icon: CheckCircle
|
|
49
110
|
},
|
|
@@ -52,7 +113,7 @@ export default function Home() {
|
|
|
52
113
|
highlight: projectName,
|
|
53
114
|
size: "xl" as const
|
|
54
115
|
},
|
|
55
|
-
description: `${projectDescription}.
|
|
116
|
+
description: `${projectDescription}. Stream your favorite music with crystal-clear quality, offline downloads, and seamless playback across all your devices.`
|
|
56
117
|
}
|
|
57
118
|
|
|
58
119
|
const handleSignOut = async () => {
|
|
@@ -85,42 +146,24 @@ export default function Home() {
|
|
|
85
146
|
networkAware={true}
|
|
86
147
|
>
|
|
87
148
|
<main className="min-h-screen bg-gradient-to-br from-blue-50 to-indigo-100 dark:from-gray-900 dark:to-gray-800">
|
|
88
|
-
<MobileContainer className="py-
|
|
89
|
-
{/* Auth Status
|
|
90
|
-
|
|
91
|
-
<div className="flex
|
|
92
|
-
{isOnline ? (
|
|
93
|
-
<div className="flex items-center gap-2 text-green-600">
|
|
94
|
-
<Wifi className="w-4 h-4" />
|
|
95
|
-
<span>Online</span>
|
|
96
|
-
{networkInfo?.effectiveType && (
|
|
97
|
-
<span className="bg-green-100 text-green-800 px-2 py-1 rounded text-xs">
|
|
98
|
-
{networkInfo.effectiveType.toUpperCase()}
|
|
99
|
-
</span>
|
|
100
|
-
)}
|
|
101
|
-
</div>
|
|
102
|
-
) : (
|
|
103
|
-
<div className="flex items-center gap-2 text-red-600">
|
|
104
|
-
<WifiOff className="w-4 h-4" />
|
|
105
|
-
<span>Offline</span>
|
|
106
|
-
</div>
|
|
107
|
-
)}
|
|
108
|
-
</div>
|
|
109
|
-
|
|
110
|
-
{loading ? (
|
|
111
|
-
<div className="text-sm text-gray-600">Loading...</div>
|
|
112
|
-
) : user ? (
|
|
149
|
+
<MobileContainer className="py-8">
|
|
150
|
+
{/* Simple Auth Status */}
|
|
151
|
+
{user && (
|
|
152
|
+
<div className="flex justify-end mb-8">
|
|
113
153
|
<div className="flex items-center gap-4">
|
|
114
|
-
<
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
</div>
|
|
154
|
+
<span className="text-sm text-gray-600 dark:text-gray-300">
|
|
155
|
+
Welcome, {user.email?.split('@')[0]}
|
|
156
|
+
</span>
|
|
118
157
|
<Button variant="outline" size="sm" onClick={handleSignOut}>
|
|
119
158
|
<LogOut className="w-4 h-4 mr-2" />
|
|
120
159
|
Sign Out
|
|
121
160
|
</Button>
|
|
122
161
|
</div>
|
|
123
|
-
|
|
162
|
+
</div>
|
|
163
|
+
)}
|
|
164
|
+
|
|
165
|
+
{!user && !loading && (
|
|
166
|
+
<div className="flex justify-end mb-8">
|
|
124
167
|
<div className="flex gap-2">
|
|
125
168
|
<Link href="/login">
|
|
126
169
|
<Button variant="outline" size="sm">Sign In</Button>
|
|
@@ -129,10 +172,10 @@ export default function Home() {
|
|
|
129
172
|
<Button size="sm">Sign Up</Button>
|
|
130
173
|
</Link>
|
|
131
174
|
</div>
|
|
132
|
-
|
|
133
|
-
|
|
175
|
+
</div>
|
|
176
|
+
)}
|
|
134
177
|
|
|
135
|
-
{/* Hero Section */}
|
|
178
|
+
{/* Hero Section with Search */}
|
|
136
179
|
<MobileHero
|
|
137
180
|
badge={heroConfig.badge}
|
|
138
181
|
title={heroConfig.title}
|
|
@@ -151,131 +194,99 @@ export default function Home() {
|
|
|
151
194
|
size: "lg"
|
|
152
195
|
}
|
|
153
196
|
]}
|
|
154
|
-
className="text-center mb-
|
|
197
|
+
className="text-center mb-8"
|
|
155
198
|
/>
|
|
156
199
|
|
|
157
|
-
{/*
|
|
158
|
-
<
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
label: 'Previous',
|
|
197
|
-
onAction: () => console.log('Previous track'),
|
|
198
|
-
color: 'blue',
|
|
199
|
-
icon: Music
|
|
200
|
-
}
|
|
201
|
-
]}
|
|
202
|
-
rightActions={[
|
|
203
|
-
{
|
|
204
|
-
id: 'next',
|
|
205
|
-
label: 'Next',
|
|
206
|
-
onAction: () => console.log('Next track'),
|
|
207
|
-
color: 'green',
|
|
208
|
-
icon: Music
|
|
209
|
-
}
|
|
210
|
-
]}
|
|
211
|
-
threshold={60}
|
|
212
|
-
hapticFeedback={true}
|
|
213
|
-
showActionLabels={true}
|
|
214
|
-
className="max-w-4xl mx-auto mb-16"
|
|
215
|
-
>
|
|
216
|
-
<Card className="p-8">
|
|
217
|
-
<div className="text-center mb-8">
|
|
218
|
-
<div className="mx-auto w-16 h-16 bg-purple-100 dark:bg-purple-900 rounded-full flex items-center justify-center mb-4">
|
|
219
|
-
<Music className="h-8 w-8 text-purple-600 dark:text-purple-400" />
|
|
220
|
-
</div>
|
|
221
|
-
<h2 className="text-3xl font-bold mb-4">Touch-Optimized Audio Player</h2>
|
|
222
|
-
<p className="text-gray-600 dark:text-gray-300 mb-2">
|
|
223
|
-
Experience our feature-rich audio player with playlist support, touch gestures, and mobile-first design
|
|
224
|
-
</p>
|
|
225
|
-
<p className="text-sm text-gray-500">
|
|
226
|
-
Swipe left/right to change tracks • Pull down to refresh
|
|
227
|
-
</p>
|
|
228
|
-
</div>
|
|
229
|
-
<AudioPlayer
|
|
230
|
-
playlist={[
|
|
231
|
-
{
|
|
232
|
-
id: '1',
|
|
233
|
-
title: 'Sample Audio Track',
|
|
234
|
-
artist: 'Demo Artist',
|
|
235
|
-
album: 'Demo Album',
|
|
236
|
-
duration: 180,
|
|
237
|
-
url: 'https://www.soundjay.com/misc/sounds/bell-ringing-05.mp3',
|
|
238
|
-
coverArt: 'https://via.placeholder.com/300x300?text=Demo+Track'
|
|
239
|
-
},
|
|
240
|
-
{
|
|
241
|
-
id: '2',
|
|
242
|
-
title: 'Another Great Song',
|
|
243
|
-
artist: 'Sample Band',
|
|
244
|
-
album: 'Greatest Hits',
|
|
245
|
-
duration: 210,
|
|
246
|
-
url: 'https://www.soundjay.com/misc/sounds/bell-ringing-05.mp3',
|
|
247
|
-
coverArt: 'https://via.placeholder.com/300x300?text=Track+2'
|
|
248
|
-
},
|
|
249
|
-
{
|
|
250
|
-
id: '3',
|
|
251
|
-
title: 'Mobile Optimized Track',
|
|
252
|
-
artist: 'Touch Artist',
|
|
253
|
-
album: 'Mobile Collection',
|
|
254
|
-
duration: 195,
|
|
255
|
-
url: 'https://www.soundjay.com/misc/sounds/bell-ringing-05.mp3',
|
|
256
|
-
coverArt: 'https://via.placeholder.com/300x300?text=Track+3'
|
|
257
|
-
}
|
|
258
|
-
]}
|
|
259
|
-
mobileOptimized={true}
|
|
260
|
-
touchFriendly={true}
|
|
261
|
-
hapticFeedback={true}
|
|
262
|
-
offlineSupport={true}
|
|
263
|
-
networkAware={true}
|
|
264
|
-
className="max-w-2xl mx-auto"
|
|
200
|
+
{/* Search Bar */}
|
|
201
|
+
<div className="max-w-2xl mx-auto mb-12">
|
|
202
|
+
<AudioSearch
|
|
203
|
+
placeholder="Search for tracks, artists, or albums..."
|
|
204
|
+
onSearch={(query) => console.log('Searching:', query)}
|
|
205
|
+
showTrending={true}
|
|
206
|
+
recentSearches={['Luna Rivers', 'Ambient Flow', 'Electronic']}
|
|
207
|
+
className="w-full"
|
|
208
|
+
/>
|
|
209
|
+
</div>
|
|
210
|
+
|
|
211
|
+
{/* Main Content Area */}
|
|
212
|
+
<div className="grid grid-cols-1 lg:grid-cols-4 gap-8 mb-20">
|
|
213
|
+
{/* Main Content */}
|
|
214
|
+
<div className="lg:col-span-3 space-y-8">
|
|
215
|
+
{/* Now Playing Card */}
|
|
216
|
+
<NowPlayingCard
|
|
217
|
+
track={currentTrack || demoPlaylist[0]}
|
|
218
|
+
isPlaying={isPlaying}
|
|
219
|
+
onPlayPause={() => setIsPlaying(!isPlaying)}
|
|
220
|
+
showWaveform={true}
|
|
221
|
+
className="mb-8"
|
|
222
|
+
/>
|
|
223
|
+
|
|
224
|
+
{/* Featured Playlists */}
|
|
225
|
+
<div className="grid grid-cols-1 sm:grid-cols-2 lg:grid-cols-3 gap-6 mb-8">
|
|
226
|
+
<PlaylistCard
|
|
227
|
+
title="Today's Top Hits"
|
|
228
|
+
description="The most played songs today"
|
|
229
|
+
trackCount={50}
|
|
230
|
+
coverImage="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCIgdmlld0JveD0iMCAwIDMwMCAzMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjMwMCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNGRjc4NzgiLz48Y2lyY2xlIGN4PSIxNTAiIGN5PSIxNTAiIHI9IjYwIiBmaWxsPSJ3aGl0ZSIgZmlsbC1vcGFjaXR5PSIwLjMiLz48cGF0aCBkPSJNMTMwIDEyMFYxODBMMTcwIDE1MEwxMzAgMTIwWiIgZmlsbD0id2hpdGUiLz48L3N2Zz4="
|
|
231
|
+
onClick={() => console.log('Opening Top Hits playlist')}
|
|
232
|
+
/>
|
|
233
|
+
<PlaylistCard
|
|
234
|
+
title="Chill Vibes"
|
|
235
|
+
description="Relaxing music for focus and creativity"
|
|
236
|
+
trackCount={32}
|
|
237
|
+
coverImage="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCIgdmlld0JveD0iMCAwIDMwMCAzMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjMwMCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiM2MEE1RkEiLz48Y2lyY2xlIGN4PSIxNTAiIGN5PSIxNTAiIHI9IjYwIiBmaWxsPSJ3aGl0ZSIgZmlsbC1vcGFjaXR5PSIwLjMiLz48cGF0aCBkPSJNMTMwIDEyMFYxODBMMTcwIDE1MEwxMzAgMTIwWiIgZmlsbD0id2hpdGUiLz48L3N2Zz4="
|
|
238
|
+
onClick={() => console.log('Opening Chill Vibes playlist')}
|
|
265
239
|
/>
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
240
|
+
<PlaylistCard
|
|
241
|
+
title="Electronic Pulse"
|
|
242
|
+
description="High-energy electronic and dance music"
|
|
243
|
+
trackCount={28}
|
|
244
|
+
coverImage="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzAwIiBoZWlnaHQ9IjMwMCIgdmlld0JveD0iMCAwIDMwMCAzMDAiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHJlY3Qgd2lkdGg9IjMwMCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiM5QzI3QjAiLz48Y2lyY2xlIGN4PSIxNTAiIGN5PSIxNTAiIHI9IjYwIiBmaWxsPSJ3aGl0ZSIgZmlsbC1vcGFjaXR5PSIwLjMiLz48cGF0aCBkPSJNMTMwIDEyMFYxODBMMTcwIDE1MEwxMzAgMTIwWiIgZmlsbD0id2hpdGUiLz48L3N2Zz4="
|
|
245
|
+
onClick={() => console.log('Opening Electronic Pulse playlist')}
|
|
246
|
+
/>
|
|
247
|
+
</div>
|
|
248
|
+
|
|
249
|
+
{/* Track List */}
|
|
250
|
+
<TrackList
|
|
251
|
+
tracks={demoPlaylist}
|
|
252
|
+
currentTrackId={currentTrack?.id}
|
|
253
|
+
onTrackSelect={(track) => setCurrentTrack(track)}
|
|
254
|
+
onTrackPlay={(track) => {
|
|
255
|
+
setCurrentTrack(track)
|
|
256
|
+
setIsPlaying(true)
|
|
257
|
+
}}
|
|
258
|
+
showArtwork={true}
|
|
259
|
+
showDuration={true}
|
|
260
|
+
showLikeButton={true}
|
|
261
|
+
className="mb-8"
|
|
262
|
+
/>
|
|
263
|
+
</div>
|
|
264
|
+
|
|
265
|
+
{/* Sidebar */}
|
|
266
|
+
<div className="lg:col-span-1">
|
|
267
|
+
<PlaylistSidebar
|
|
268
|
+
playlists={[
|
|
269
|
+
{ id: '1', name: 'Liked Songs', trackCount: 47 },
|
|
270
|
+
{ id: '2', name: 'Recently Played', trackCount: 23 },
|
|
271
|
+
{ id: '3', name: 'My Playlist #1', trackCount: 15 },
|
|
272
|
+
{ id: '4', name: 'Favorites', trackCount: 32 }
|
|
273
|
+
]}
|
|
274
|
+
onPlaylistSelect={(playlist) => console.log('Selected playlist:', playlist)}
|
|
275
|
+
currentPlaylistId="1"
|
|
276
|
+
className="sticky top-4"
|
|
277
|
+
/>
|
|
278
|
+
</div>
|
|
279
|
+
</div>
|
|
269
280
|
|
|
270
|
-
{/*
|
|
281
|
+
{/* Features Overview */}
|
|
271
282
|
<ResponsiveGrid columns={gridConfig.columns_1_sm2_md4} gap="lg" className="mb-16">
|
|
272
283
|
<Card className="text-center p-6">
|
|
273
284
|
<div className="mx-auto w-12 h-12 bg-blue-100 dark:bg-blue-900 rounded-lg flex items-center justify-center mb-4">
|
|
274
285
|
<Zap className="h-6 w-6 text-blue-600 dark:text-blue-400" />
|
|
275
286
|
</div>
|
|
276
|
-
<h3 className="text-lg font-semibold mb-2">
|
|
287
|
+
<h3 className="text-lg font-semibold mb-2">High-Quality Streaming</h3>
|
|
277
288
|
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
278
|
-
|
|
289
|
+
Lossless audio with adaptive bitrate for the best experience
|
|
279
290
|
</p>
|
|
280
291
|
</Card>
|
|
281
292
|
|
|
@@ -283,9 +294,9 @@ export default function Home() {
|
|
|
283
294
|
<div className="mx-auto w-12 h-12 bg-green-100 dark:bg-green-900 rounded-lg flex items-center justify-center mb-4">
|
|
284
295
|
<Shield className="h-6 w-6 text-green-600 dark:text-green-400" />
|
|
285
296
|
</div>
|
|
286
|
-
<h3 className="text-lg font-semibold mb-2">
|
|
297
|
+
<h3 className="text-lg font-semibold mb-2">Secure & Private</h3>
|
|
287
298
|
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
288
|
-
|
|
299
|
+
Your listening habits and data are always protected
|
|
289
300
|
</p>
|
|
290
301
|
</Card>
|
|
291
302
|
|
|
@@ -293,9 +304,9 @@ export default function Home() {
|
|
|
293
304
|
<div className="mx-auto w-12 h-12 bg-purple-100 dark:bg-purple-900 rounded-lg flex items-center justify-center mb-4">
|
|
294
305
|
<Rocket className="h-6 w-6 text-purple-600 dark:text-purple-400" />
|
|
295
306
|
</div>
|
|
296
|
-
<h3 className="text-lg font-semibold mb-2">
|
|
307
|
+
<h3 className="text-lg font-semibold mb-2">Offline Support</h3>
|
|
297
308
|
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
298
|
-
|
|
309
|
+
Download your favorites for offline listening anywhere
|
|
299
310
|
</p>
|
|
300
311
|
</Card>
|
|
301
312
|
|
|
@@ -305,37 +316,41 @@ export default function Home() {
|
|
|
305
316
|
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M3 10h18M7 15h1m4 0h1m-7 4h12a3 3 0 003-3V8a3 3 0 00-3-3H6a3 3 0 00-3 3v8a3 3 0 003 3z" />
|
|
306
317
|
</svg>
|
|
307
318
|
</div>
|
|
308
|
-
<h3 className="text-lg font-semibold mb-2">
|
|
319
|
+
<h3 className="text-lg font-semibold mb-2">Premium Plans</h3>
|
|
309
320
|
<p className="text-sm text-gray-600 dark:text-gray-300">
|
|
310
|
-
|
|
321
|
+
Flexible subscription options for every music lover
|
|
311
322
|
</p>
|
|
312
323
|
</Card>
|
|
313
324
|
</ResponsiveGrid>
|
|
314
|
-
|
|
315
|
-
{/* Button Variants Showcase */}
|
|
316
|
-
<Card className="max-w-4xl mx-auto p-8">
|
|
317
|
-
<div className="text-center mb-6">
|
|
318
|
-
<h2 className="text-2xl font-bold mb-2">Full SaaS Package Integration</h2>
|
|
319
|
-
<p className="text-gray-600 dark:text-gray-300">
|
|
320
|
-
Complete integration of UI, Auth, and Payments packages
|
|
321
|
-
</p>
|
|
322
|
-
</div>
|
|
323
|
-
<div className="flex flex-wrap justify-center gap-4 mb-6">
|
|
324
|
-
<Button>Default Button</Button>
|
|
325
|
-
<Button variant="secondary">Secondary Button</Button>
|
|
326
|
-
<Button variant="outline">Outline Button</Button>
|
|
327
|
-
<Button disabled>Disabled Button</Button>
|
|
328
|
-
</div>
|
|
329
|
-
<div className="text-center">
|
|
330
|
-
<p className="text-sm text-gray-500">
|
|
331
|
-
All mobile-optimized components from @digilogiclabs/saas-factory-ui v0.13.2 + auth v1.0.0 + payments
|
|
332
|
-
</p>
|
|
333
|
-
</div>
|
|
334
|
-
</Card>
|
|
335
325
|
</MobileContainer>
|
|
336
326
|
</main>
|
|
337
327
|
</PullToRefresh>
|
|
338
328
|
</OfflineWrapper>
|
|
329
|
+
|
|
330
|
+
{/* Fixed Audio Player Bar - The SoundCloud Experience */}
|
|
331
|
+
<FixedAudioBar
|
|
332
|
+
track={currentTrack || demoPlaylist[0]}
|
|
333
|
+
isPlaying={isPlaying}
|
|
334
|
+
onPlayPause={() => setIsPlaying(!isPlaying)}
|
|
335
|
+
onNext={() => {
|
|
336
|
+
const currentIndex = demoPlaylist.findIndex(track => track.id === (currentTrack?.id || demoPlaylist[0].id))
|
|
337
|
+
const nextIndex = (currentIndex + 1) % demoPlaylist.length
|
|
338
|
+
setCurrentTrack(demoPlaylist[nextIndex])
|
|
339
|
+
}}
|
|
340
|
+
onPrevious={() => {
|
|
341
|
+
const currentIndex = demoPlaylist.findIndex(track => track.id === (currentTrack?.id || demoPlaylist[0].id))
|
|
342
|
+
const prevIndex = (currentIndex - 1 + demoPlaylist.length) % demoPlaylist.length
|
|
343
|
+
setCurrentTrack(demoPlaylist[prevIndex])
|
|
344
|
+
}}
|
|
345
|
+
showWaveform={true}
|
|
346
|
+
showVolumeControl={true}
|
|
347
|
+
showTimeProgress={true}
|
|
348
|
+
showLikeButton={true}
|
|
349
|
+
showShareButton={true}
|
|
350
|
+
showShuffleRepeat={true}
|
|
351
|
+
allowMinimize={true}
|
|
352
|
+
className="z-50"
|
|
353
|
+
/>
|
|
339
354
|
</PageTransition>
|
|
340
355
|
)
|
|
341
356
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "{{packageName}}",
|
|
3
3
|
"version": "0.1.0",
|
|
4
|
-
"description": "{{description}} - Video
|
|
4
|
+
"description": "{{description}} - Professional Video Platform (with UI Package v0.15.0 + Auth v1.0.0 + Payments)",
|
|
5
5
|
"private": true,
|
|
6
6
|
"scripts": {
|
|
7
7
|
"dev": "next dev",
|
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"next": "^15.0.0",
|
|
18
18
|
"react": "^19.0.0",
|
|
19
19
|
"react-dom": "^19.0.0",
|
|
20
|
-
"@digilogiclabs/saas-factory-ui": "^0.
|
|
20
|
+
"@digilogiclabs/saas-factory-ui": "^0.15.0",
|
|
21
21
|
"@digilogiclabs/saas-factory-auth": "^1.0.0",
|
|
22
22
|
"@digilogiclabs/saas-factory-payments": "^1.0.0",
|
|
23
23
|
"stripe": "^14.0.0",
|