create-neon-flux 1.0.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/.env.example +5 -0
- package/.eslintrc.json +3 -0
- package/LICENSE +21 -0
- package/README.md +398 -0
- package/app/globals.css +170 -0
- package/app/layout.tsx +29 -0
- package/app/page.tsx +289 -0
- package/assets/banner.svg +76 -0
- package/bin/create-app.js +99 -0
- package/components/3d/CyberCity.tsx +260 -0
- package/components/animations/CyberGrid.tsx +13 -0
- package/components/animations/GlitchText.tsx +17 -0
- package/components/animations/Hero.tsx +88 -0
- package/components/effects/Particles.tsx +180 -0
- package/components/effects/ScanLines.tsx +5 -0
- package/components/hooks/useAudioReactive.ts +68 -0
- package/components/hooks/useGlitch.ts +26 -0
- package/components/hooks/useNeonGlow.ts +31 -0
- package/components/hooks/useParallax.ts +23 -0
- package/components/ui/CyberNav.tsx +129 -0
- package/components/ui/HologramCard.tsx +107 -0
- package/components/ui/NeonButton.tsx +27 -0
- package/components/ui/Terminal.tsx +56 -0
- package/next-env.d.ts +6 -0
- package/next.config.ts +16 -0
- package/package.json +61 -0
- package/postcss.config.mjs +9 -0
- package/styles/animations.css +204 -0
- package/styles/glitch.css +273 -0
- package/styles/neon.css +130 -0
- package/tailwind.config.ts +112 -0
- package/tsconfig.json +31 -0
package/app/page.tsx
ADDED
|
@@ -0,0 +1,289 @@
|
|
|
1
|
+
'use client';
|
|
2
|
+
|
|
3
|
+
import dynamic from 'next/dynamic';
|
|
4
|
+
import Hero from '@/components/animations/Hero';
|
|
5
|
+
import CyberNav from '@/components/ui/CyberNav';
|
|
6
|
+
import ScanLines from '@/components/effects/ScanLines';
|
|
7
|
+
import CyberGrid from '@/components/animations/CyberGrid';
|
|
8
|
+
import HologramCard from '@/components/ui/HologramCard';
|
|
9
|
+
import Terminal from '@/components/ui/Terminal';
|
|
10
|
+
import { Github, Twitter, Linkedin, Mail } from 'lucide-react';
|
|
11
|
+
|
|
12
|
+
// Dynamic imports for 3D components (client-side only)
|
|
13
|
+
const CyberCity = dynamic(() => import('@/components/3d/CyberCity'), {
|
|
14
|
+
ssr: false,
|
|
15
|
+
loading: () => <div className="canvas-container bg-cyber-black" />,
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// Sample portfolio projects
|
|
19
|
+
const projects = [
|
|
20
|
+
{
|
|
21
|
+
title: 'Neural Network Dashboard',
|
|
22
|
+
description: 'Real-time AI monitoring system with cyberpunk aesthetics. Features live data visualization and neural network status tracking.',
|
|
23
|
+
image: 'https://images.unsplash.com/photo-1639322537228-f710d846310a?w=800&h=600&fit=crop',
|
|
24
|
+
tags: ['Next.js', 'TypeScript', 'Three.js', 'WebGL'],
|
|
25
|
+
link: '#',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
title: 'Crypto Trading Platform',
|
|
29
|
+
description: 'Futuristic cryptocurrency trading interface with real-time market data and advanced charting capabilities.',
|
|
30
|
+
image: 'https://images.unsplash.com/photo-1639762681485-074b7f938ba0?w=800&h=600&fit=crop',
|
|
31
|
+
tags: ['React', 'D3.js', 'WebSocket', 'TailwindCSS'],
|
|
32
|
+
link: '#',
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
title: 'Holographic Portfolio',
|
|
36
|
+
description: '3D interactive portfolio showcasing projects in a holographic interface with gesture controls.',
|
|
37
|
+
image: 'https://images.unsplash.com/photo-1633356122544-f134324a6cee?w=800&h=600&fit=crop',
|
|
38
|
+
tags: ['Three.js', 'GSAP', 'React', 'Framer Motion'],
|
|
39
|
+
link: '#',
|
|
40
|
+
},
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
// Sample blog posts
|
|
44
|
+
const blogPosts = [
|
|
45
|
+
{
|
|
46
|
+
title: 'Building Cyberpunk UIs with Next.js',
|
|
47
|
+
description: 'A comprehensive guide to creating stunning neon-themed interfaces using modern web technologies.',
|
|
48
|
+
tags: ['Tutorial', 'Next.js', 'CSS'],
|
|
49
|
+
link: '#',
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
title: 'The Future of Web Animations',
|
|
53
|
+
description: 'Exploring cutting-edge animation techniques using GSAP, Framer Motion, and Three.js.',
|
|
54
|
+
tags: ['Animation', 'WebGL', 'Performance'],
|
|
55
|
+
link: '#',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
title: 'Optimizing 3D Graphics for the Web',
|
|
59
|
+
description: 'Best practices for implementing performant 3D graphics in React applications.',
|
|
60
|
+
tags: ['Three.js', 'Optimization', 'React'],
|
|
61
|
+
link: '#',
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
// Tech stack / Skills
|
|
66
|
+
const skills = [
|
|
67
|
+
{ name: 'Next.js', level: 95 },
|
|
68
|
+
{ name: 'TypeScript', level: 90 },
|
|
69
|
+
{ name: 'React', level: 95 },
|
|
70
|
+
{ name: 'Three.js', level: 85 },
|
|
71
|
+
{ name: 'GSAP', level: 80 },
|
|
72
|
+
{ name: 'TailwindCSS', level: 90 },
|
|
73
|
+
{ name: 'Node.js', level: 85 },
|
|
74
|
+
{ name: 'WebGL', level: 75 },
|
|
75
|
+
];
|
|
76
|
+
|
|
77
|
+
export default function Home() {
|
|
78
|
+
const scrollToSection = (id: string) => {
|
|
79
|
+
const element = document.getElementById(id);
|
|
80
|
+
element?.scrollIntoView({ behavior: 'smooth' });
|
|
81
|
+
};
|
|
82
|
+
|
|
83
|
+
return (
|
|
84
|
+
<main className="relative min-h-screen bg-cyber-black overflow-hidden">
|
|
85
|
+
{/* Background Effects */}
|
|
86
|
+
<CyberGrid />
|
|
87
|
+
<ScanLines />
|
|
88
|
+
<CyberCity />
|
|
89
|
+
|
|
90
|
+
{/* Navigation */}
|
|
91
|
+
<CyberNav />
|
|
92
|
+
|
|
93
|
+
{/* Hero Section */}
|
|
94
|
+
<Hero />
|
|
95
|
+
|
|
96
|
+
{/* Portfolio/Projects Section */}
|
|
97
|
+
<section id="portfolio" className="relative z-10 py-20">
|
|
98
|
+
<div className="container mx-auto px-4">
|
|
99
|
+
<h2 className="text-4xl md:text-6xl font-orbitron text-center neon-text-cyan mb-4">
|
|
100
|
+
Featured Projects
|
|
101
|
+
</h2>
|
|
102
|
+
<p className="text-center text-neon-cyan/70 mb-12 max-w-2xl mx-auto">
|
|
103
|
+
Cutting-edge digital experiences powered by modern web technologies
|
|
104
|
+
</p>
|
|
105
|
+
|
|
106
|
+
<div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-8">
|
|
107
|
+
{projects.map((project, index) => (
|
|
108
|
+
<HologramCard
|
|
109
|
+
key={index}
|
|
110
|
+
title={project.title}
|
|
111
|
+
description={project.description}
|
|
112
|
+
image={project.image}
|
|
113
|
+
tags={project.tags}
|
|
114
|
+
link={project.link}
|
|
115
|
+
delay={index * 0.2}
|
|
116
|
+
/>
|
|
117
|
+
))}
|
|
118
|
+
</div>
|
|
119
|
+
</div>
|
|
120
|
+
</section>
|
|
121
|
+
|
|
122
|
+
{/* Skills Section */}
|
|
123
|
+
<section id="skills" className="relative z-10 py-20">
|
|
124
|
+
<div className="container mx-auto px-4">
|
|
125
|
+
<h2 className="text-4xl md:text-6xl font-orbitron text-center neon-text-pink mb-12">
|
|
126
|
+
Tech Stack
|
|
127
|
+
</h2>
|
|
128
|
+
|
|
129
|
+
<div className="grid grid-cols-1 lg:grid-cols-2 gap-8 max-w-5xl mx-auto">
|
|
130
|
+
{/* Skills bars */}
|
|
131
|
+
<div className="space-y-6">
|
|
132
|
+
{skills.map((skill, index) => (
|
|
133
|
+
<div key={index} className="space-y-2">
|
|
134
|
+
<div className="flex justify-between text-neon-cyan font-space-mono">
|
|
135
|
+
<span>{skill.name}</span>
|
|
136
|
+
<span>{skill.level}%</span>
|
|
137
|
+
</div>
|
|
138
|
+
<div className="h-2 bg-cyber-dark rounded-full overflow-hidden">
|
|
139
|
+
<div
|
|
140
|
+
className="h-full bg-gradient-to-r from-neon-pink to-neon-cyan transition-all duration-1000 ease-out"
|
|
141
|
+
style={{
|
|
142
|
+
width: `${skill.level}%`,
|
|
143
|
+
boxShadow: '0 0 10px currentColor',
|
|
144
|
+
}}
|
|
145
|
+
/>
|
|
146
|
+
</div>
|
|
147
|
+
</div>
|
|
148
|
+
))}
|
|
149
|
+
</div>
|
|
150
|
+
|
|
151
|
+
{/* Terminal */}
|
|
152
|
+
<Terminal />
|
|
153
|
+
</div>
|
|
154
|
+
</div>
|
|
155
|
+
</section>
|
|
156
|
+
|
|
157
|
+
{/* Blog Section */}
|
|
158
|
+
<section id="blog" className="relative z-10 py-20">
|
|
159
|
+
<div className="container mx-auto px-4">
|
|
160
|
+
<h2 className="text-4xl md:text-6xl font-orbitron text-center neon-text-yellow mb-4">
|
|
161
|
+
Latest Articles
|
|
162
|
+
</h2>
|
|
163
|
+
<p className="text-center text-neon-cyan/70 mb-12 max-w-2xl mx-auto">
|
|
164
|
+
Insights, tutorials, and thoughts on web development
|
|
165
|
+
</p>
|
|
166
|
+
|
|
167
|
+
<div className="grid grid-cols-1 md:grid-cols-3 gap-8">
|
|
168
|
+
{blogPosts.map((post, index) => (
|
|
169
|
+
<HologramCard
|
|
170
|
+
key={index}
|
|
171
|
+
title={post.title}
|
|
172
|
+
description={post.description}
|
|
173
|
+
tags={post.tags}
|
|
174
|
+
link={post.link}
|
|
175
|
+
delay={index * 0.15}
|
|
176
|
+
/>
|
|
177
|
+
))}
|
|
178
|
+
</div>
|
|
179
|
+
|
|
180
|
+
<div className="text-center mt-12">
|
|
181
|
+
<button
|
|
182
|
+
onClick={() => scrollToSection('blog')}
|
|
183
|
+
className="neon-button"
|
|
184
|
+
>
|
|
185
|
+
View All Articles
|
|
186
|
+
</button>
|
|
187
|
+
</div>
|
|
188
|
+
</div>
|
|
189
|
+
</section>
|
|
190
|
+
|
|
191
|
+
{/* About Section */}
|
|
192
|
+
<section id="about" className="relative z-10 py-20">
|
|
193
|
+
<div className="container mx-auto px-4">
|
|
194
|
+
<div className="max-w-4xl mx-auto glass rounded-lg p-8 md:p-12">
|
|
195
|
+
<h2 className="text-4xl md:text-6xl font-orbitron glitch neon-text-cyan mb-8" data-text="About">
|
|
196
|
+
About
|
|
197
|
+
</h2>
|
|
198
|
+
<div className="space-y-4 text-lg text-neon-cyan/80 leading-relaxed">
|
|
199
|
+
<p>
|
|
200
|
+
Welcome to the future of web development. This cyberpunk-themed portfolio template
|
|
201
|
+
combines cutting-edge design with powerful modern technologies.
|
|
202
|
+
</p>
|
|
203
|
+
<p>
|
|
204
|
+
Built with <span className="text-neon-pink font-semibold">Next.js 15</span>, featuring
|
|
205
|
+
stunning <span className="text-neon-yellow font-semibold">canvas-based graphics</span>, smooth
|
|
206
|
+
animations, and a complete design system that's ready to showcase your projects.
|
|
207
|
+
</p>
|
|
208
|
+
<p>
|
|
209
|
+
Whether you're a developer, designer, or creative professional, this template provides
|
|
210
|
+
everything you need to create an unforgettable digital presence.
|
|
211
|
+
</p>
|
|
212
|
+
</div>
|
|
213
|
+
|
|
214
|
+
<div className="grid grid-cols-2 md:grid-cols-4 gap-6 mt-12">
|
|
215
|
+
{[
|
|
216
|
+
{ label: 'Projects', value: '50+' },
|
|
217
|
+
{ label: 'Technologies', value: '20+' },
|
|
218
|
+
{ label: 'Experience', value: '5 Years' },
|
|
219
|
+
{ label: 'Coffee', value: '∞' },
|
|
220
|
+
].map((stat, index) => (
|
|
221
|
+
<div key={index} className="text-center">
|
|
222
|
+
<div className="text-3xl md:text-4xl font-orbitron text-neon-pink mb-2">
|
|
223
|
+
{stat.value}
|
|
224
|
+
</div>
|
|
225
|
+
<div className="text-sm text-neon-cyan/60">{stat.label}</div>
|
|
226
|
+
</div>
|
|
227
|
+
))}
|
|
228
|
+
</div>
|
|
229
|
+
</div>
|
|
230
|
+
</div>
|
|
231
|
+
</section>
|
|
232
|
+
|
|
233
|
+
{/* Footer */}
|
|
234
|
+
<footer className="relative z-10 py-12 border-t border-neon-cyan/20">
|
|
235
|
+
<div className="container mx-auto px-4">
|
|
236
|
+
<div className="max-w-4xl mx-auto">
|
|
237
|
+
{/* Social Links */}
|
|
238
|
+
<div className="flex justify-center gap-6 mb-8">
|
|
239
|
+
{[
|
|
240
|
+
{ name: 'GitHub', icon: Github, link: 'https://github.com' },
|
|
241
|
+
{ name: 'Twitter', icon: Twitter, link: 'https://twitter.com' },
|
|
242
|
+
{ name: 'LinkedIn', icon: Linkedin, link: 'https://linkedin.com' },
|
|
243
|
+
{ name: 'Email', icon: Mail, link: 'mailto:hello@example.com' },
|
|
244
|
+
].map((social, index) => {
|
|
245
|
+
const Icon = social.icon;
|
|
246
|
+
return (
|
|
247
|
+
<a
|
|
248
|
+
key={index}
|
|
249
|
+
href={social.link}
|
|
250
|
+
target="_blank"
|
|
251
|
+
rel="noopener noreferrer"
|
|
252
|
+
className="w-12 h-12 flex items-center justify-center glass rounded-full cursor-pointer text-neon-cyan hover:text-neon-pink hover:shadow-neon-pink hover:border-neon-pink/50 transition-all duration-300 focus:outline-none focus:ring-2 focus:ring-neon-cyan focus:ring-offset-2 focus:ring-offset-cyber-black"
|
|
253
|
+
title={social.name}
|
|
254
|
+
aria-label={social.name}
|
|
255
|
+
>
|
|
256
|
+
<Icon className="w-5 h-5" />
|
|
257
|
+
</a>
|
|
258
|
+
);
|
|
259
|
+
})}
|
|
260
|
+
</div>
|
|
261
|
+
|
|
262
|
+
{/* Footer Info */}
|
|
263
|
+
<div className="flex flex-col md:flex-row justify-between items-center gap-4">
|
|
264
|
+
<p className="text-neon-cyan font-space-mono text-sm">
|
|
265
|
+
© {new Date().getFullYear()} Neon Flux Template. Built with Next.js 15
|
|
266
|
+
</p>
|
|
267
|
+
<div className="flex gap-6 text-sm text-neon-cyan/60">
|
|
268
|
+
<a href="#" className="hover:text-neon-pink transition-colors cursor-pointer focus:outline-none focus:text-neon-pink">
|
|
269
|
+
Privacy
|
|
270
|
+
</a>
|
|
271
|
+
<a href="#" className="hover:text-neon-pink transition-colors cursor-pointer focus:outline-none focus:text-neon-pink">
|
|
272
|
+
Terms
|
|
273
|
+
</a>
|
|
274
|
+
<a
|
|
275
|
+
href="https://github.com/yourusername/neon-flux-template"
|
|
276
|
+
target="_blank"
|
|
277
|
+
rel="noopener noreferrer"
|
|
278
|
+
className="hover:text-neon-pink transition-colors cursor-pointer focus:outline-none focus:text-neon-pink"
|
|
279
|
+
>
|
|
280
|
+
Source Code
|
|
281
|
+
</a>
|
|
282
|
+
</div>
|
|
283
|
+
</div>
|
|
284
|
+
</div>
|
|
285
|
+
</div>
|
|
286
|
+
</footer>
|
|
287
|
+
</main>
|
|
288
|
+
);
|
|
289
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<svg width="1200" height="300" viewBox="0 0 1200 300" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="bgGrad" x1="0%" y1="0%" x2="0%" y2="100%">
|
|
4
|
+
<stop offset="0%" style="stop-color:#0D0221"/>
|
|
5
|
+
<stop offset="100%" style="stop-color:#0A0A0A"/>
|
|
6
|
+
</linearGradient>
|
|
7
|
+
<linearGradient id="neonGrad" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
8
|
+
<stop offset="0%" style="stop-color:#FF10F0"/>
|
|
9
|
+
<stop offset="50%" style="stop-color:#00FFF0"/>
|
|
10
|
+
<stop offset="100%" style="stop-color:#FF10F0"/>
|
|
11
|
+
</linearGradient>
|
|
12
|
+
<filter id="glow" x="-50%" y="-50%" width="200%" height="200%">
|
|
13
|
+
<feGaussianBlur stdDeviation="4" result="coloredBlur"/>
|
|
14
|
+
<feMerge>
|
|
15
|
+
<feMergeNode in="coloredBlur"/>
|
|
16
|
+
<feMergeNode in="SourceGraphic"/>
|
|
17
|
+
</feMerge>
|
|
18
|
+
</filter>
|
|
19
|
+
<filter id="glowStrong" x="-50%" y="-50%" width="200%" height="200%">
|
|
20
|
+
<feGaussianBlur stdDeviation="8" result="coloredBlur"/>
|
|
21
|
+
<feMerge>
|
|
22
|
+
<feMergeNode in="coloredBlur"/>
|
|
23
|
+
<feMergeNode in="coloredBlur"/>
|
|
24
|
+
<feMergeNode in="SourceGraphic"/>
|
|
25
|
+
</feMerge>
|
|
26
|
+
</filter>
|
|
27
|
+
</defs>
|
|
28
|
+
|
|
29
|
+
<!-- Background -->
|
|
30
|
+
<rect width="1200" height="300" fill="url(#bgGrad)"/>
|
|
31
|
+
|
|
32
|
+
<!-- Grid lines -->
|
|
33
|
+
<g stroke="#00FFF0" stroke-opacity="0.1" stroke-width="1">
|
|
34
|
+
<line x1="0" y1="50" x2="1200" y2="50"/>
|
|
35
|
+
<line x1="0" y1="100" x2="1200" y2="100"/>
|
|
36
|
+
<line x1="0" y1="150" x2="1200" y2="150"/>
|
|
37
|
+
<line x1="0" y1="200" x2="1200" y2="200"/>
|
|
38
|
+
<line x1="0" y1="250" x2="1200" y2="250"/>
|
|
39
|
+
<line x1="100" y1="0" x2="100" y2="300"/>
|
|
40
|
+
<line x1="200" y1="0" x2="200" y2="300"/>
|
|
41
|
+
<line x1="300" y1="0" x2="300" y2="300"/>
|
|
42
|
+
<line x1="400" y1="0" x2="400" y2="300"/>
|
|
43
|
+
<line x1="500" y1="0" x2="500" y2="300"/>
|
|
44
|
+
<line x1="600" y1="0" x2="600" y2="300"/>
|
|
45
|
+
<line x1="700" y1="0" x2="700" y2="300"/>
|
|
46
|
+
<line x1="800" y1="0" x2="800" y2="300"/>
|
|
47
|
+
<line x1="900" y1="0" x2="900" y2="300"/>
|
|
48
|
+
<line x1="1000" y1="0" x2="1000" y2="300"/>
|
|
49
|
+
<line x1="1100" y1="0" x2="1100" y2="300"/>
|
|
50
|
+
</g>
|
|
51
|
+
|
|
52
|
+
<!-- Decorative elements -->
|
|
53
|
+
<rect x="50" y="70" width="150" height="2" fill="#FF10F0" filter="url(#glow)" opacity="0.8"/>
|
|
54
|
+
<rect x="1000" y="70" width="150" height="2" fill="#00FFF0" filter="url(#glow)" opacity="0.8"/>
|
|
55
|
+
<rect x="50" y="228" width="150" height="2" fill="#00FFF0" filter="url(#glow)" opacity="0.8"/>
|
|
56
|
+
<rect x="1000" y="228" width="150" height="2" fill="#FF10F0" filter="url(#glow)" opacity="0.8"/>
|
|
57
|
+
|
|
58
|
+
<!-- Corner accents -->
|
|
59
|
+
<path d="M30 30 L30 60 M30 30 L60 30" stroke="#00FFF0" stroke-width="3" fill="none" filter="url(#glow)"/>
|
|
60
|
+
<path d="M1170 30 L1170 60 M1170 30 L1140 30" stroke="#00FFF0" stroke-width="3" fill="none" filter="url(#glow)"/>
|
|
61
|
+
<path d="M30 270 L30 240 M30 270 L60 270" stroke="#FF10F0" stroke-width="3" fill="none" filter="url(#glow)"/>
|
|
62
|
+
<path d="M1170 270 L1170 240 M1170 270 L1140 270" stroke="#FF10F0" stroke-width="3" fill="none" filter="url(#glow)"/>
|
|
63
|
+
|
|
64
|
+
<!-- Main title -->
|
|
65
|
+
<text x="600" y="145" text-anchor="middle" font-family="'Orbitron', 'Arial Black', sans-serif" font-size="72" font-weight="900" fill="#FF10F0" filter="url(#glowStrong)">NEON</text>
|
|
66
|
+
<text x="600" y="145" text-anchor="middle" font-family="'Orbitron', 'Arial Black', sans-serif" font-size="72" font-weight="900" fill="#FF10F0">NEON</text>
|
|
67
|
+
|
|
68
|
+
<text x="600" y="205" text-anchor="middle" font-family="'Orbitron', 'Arial Black', sans-serif" font-size="72" font-weight="900" fill="#00FFF0" filter="url(#glowStrong)">FLUX</text>
|
|
69
|
+
<text x="600" y="205" text-anchor="middle" font-family="'Orbitron', 'Arial Black', sans-serif" font-size="72" font-weight="900" fill="#00FFF0">FLUX</text>
|
|
70
|
+
|
|
71
|
+
<!-- Subtitle -->
|
|
72
|
+
<text x="600" y="255" text-anchor="middle" font-family="'Space Mono', 'Courier New', monospace" font-size="16" fill="#00FFF0" opacity="0.8">CYBERPUNK NEXT.JS TEMPLATE</text>
|
|
73
|
+
|
|
74
|
+
<!-- Scan line effect -->
|
|
75
|
+
<rect x="0" y="0" width="1200" height="300" fill="url(#neonGrad)" opacity="0.03"/>
|
|
76
|
+
</svg>
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { execSync } = require('child_process');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const fs = require('fs');
|
|
6
|
+
|
|
7
|
+
// Get project name from command line arguments
|
|
8
|
+
const projectName = process.argv[2] || 'neon-flux-app';
|
|
9
|
+
|
|
10
|
+
// ASCII Art Banner
|
|
11
|
+
console.log(`
|
|
12
|
+
╔═══════════════════════════════════════════════════════════╗
|
|
13
|
+
║ ║
|
|
14
|
+
║ ███╗ ██╗███████╗ ██████╗ ███╗ ██╗ ║
|
|
15
|
+
║ ████╗ ██║██╔════╝██╔═══██╗████╗ ██║ ║
|
|
16
|
+
║ ██╔██╗ ██║█████╗ ██║ ██║██╔██╗ ██║ ║
|
|
17
|
+
║ ██║╚██╗██║██╔══╝ ██║ ██║██║╚██╗██║ ║
|
|
18
|
+
║ ██║ ╚████║███████╗╚██████╔╝██║ ╚████║ ║
|
|
19
|
+
║ ╚═╝ ╚═══╝╚══════╝ ╚═════╝ ╚═╝ ╚═══╝ ║
|
|
20
|
+
║ ║
|
|
21
|
+
║ ███████╗██╗ ██╗ ██╗██╗ ██╗ ║
|
|
22
|
+
║ ██╔════╝██║ ██║ ██║╚██╗██╔╝ ║
|
|
23
|
+
║ █████╗ ██║ ██║ ██║ ╚███╔╝ ║
|
|
24
|
+
║ ██╔══╝ ██║ ██║ ██║ ██╔██╗ ║
|
|
25
|
+
║ ██║ ███████╗╚██████╔╝██╔╝ ██╗ ║
|
|
26
|
+
║ ╚═╝ ╚══════╝ ╚═════╝ ╚═╝ ╚═╝ ║
|
|
27
|
+
║ ║
|
|
28
|
+
║ Cyberpunk Next.js Template ║
|
|
29
|
+
║ v1.0.0 ║
|
|
30
|
+
║ ║
|
|
31
|
+
╚═══════════════════════════════════════════════════════════╝
|
|
32
|
+
|
|
33
|
+
🚀 Creating ${projectName}...
|
|
34
|
+
`);
|
|
35
|
+
|
|
36
|
+
try {
|
|
37
|
+
// Check if directory already exists
|
|
38
|
+
if (fs.existsSync(projectName)) {
|
|
39
|
+
console.error(`❌ Error: Directory "${projectName}" already exists.`);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
console.log('📦 Cloning Neon Flux template...');
|
|
44
|
+
|
|
45
|
+
// Clone the repository
|
|
46
|
+
execSync(
|
|
47
|
+
`git clone https://github.com/kpab/neon-flux-template.git ${projectName}`,
|
|
48
|
+
{ stdio: 'inherit' }
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
// Change to project directory
|
|
52
|
+
process.chdir(projectName);
|
|
53
|
+
|
|
54
|
+
console.log('🗑️ Removing git history...');
|
|
55
|
+
|
|
56
|
+
// Remove .git directory
|
|
57
|
+
if (process.platform === 'win32') {
|
|
58
|
+
execSync('rmdir /s /q .git', { stdio: 'inherit' });
|
|
59
|
+
} else {
|
|
60
|
+
execSync('rm -rf .git', { stdio: 'inherit' });
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
console.log('📝 Installing dependencies...');
|
|
64
|
+
|
|
65
|
+
// Install dependencies
|
|
66
|
+
execSync('npm install', { stdio: 'inherit' });
|
|
67
|
+
|
|
68
|
+
console.log('✅ Setup complete!');
|
|
69
|
+
console.log(`
|
|
70
|
+
╔═══════════════════════════════════════════════════════════╗
|
|
71
|
+
║ ║
|
|
72
|
+
║ ✨ Success! Your Neon Flux project is ready! ║
|
|
73
|
+
║ ║
|
|
74
|
+
║ 📁 Project: ${projectName.padEnd(44)} ║
|
|
75
|
+
║ ║
|
|
76
|
+
║ Get started with: ║
|
|
77
|
+
║ ║
|
|
78
|
+
║ cd ${projectName.padEnd(48)} ║
|
|
79
|
+
║ npm run dev ║
|
|
80
|
+
║ ║
|
|
81
|
+
║ 🌐 Open http://localhost:3000 ║
|
|
82
|
+
║ ║
|
|
83
|
+
║ 📚 Documentation: README.md ║
|
|
84
|
+
║ 🐛 Issues: github.com/kpab/neon-flux-template ║
|
|
85
|
+
║ ║
|
|
86
|
+
╚═══════════════════════════════════════════════════════════╝
|
|
87
|
+
|
|
88
|
+
💡 Tips:
|
|
89
|
+
- Customize colors in tailwind.config.ts
|
|
90
|
+
- Configure features in .env.example (copy to .env)
|
|
91
|
+
- Check out components/ for pre-built cyberpunk components
|
|
92
|
+
- Visit the documentation for more advanced features
|
|
93
|
+
|
|
94
|
+
Happy coding! 🎮✨
|
|
95
|
+
`);
|
|
96
|
+
} catch (error) {
|
|
97
|
+
console.error('❌ Error creating project:', error.message);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|