@salmansaeed/nexa 1.0.0 → 1.0.2

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/README.md CHANGED
@@ -1,17 +1,3 @@
1
- Here is your **full Nexa README**, upgraded from SG, aligned with your actual CLI behavior, and including:
2
-
3
- - correct commands (`nexa`, not `sg`)
4
- - global install instructions (very important)
5
- - npx usage
6
- - your new UI philosophy (Cleaner UI, prebuilt structure)
7
- - new component system
8
- - your branding
9
-
10
- ---
11
-
12
- # 📦 `README.md`
13
-
14
- ````md
15
1
  # Nexa CLI
16
2
 
17
3
  **React Power. Angular Simplicity. Vite Speed. Cleaner UI. Prebuilt structure.**
@@ -51,7 +37,6 @@ it gives you a **fully structured application shell** with:
51
37
  ```bash
52
38
  npx --verbose @salmansaeed/nexa@latest new app <app-name>
53
39
  ```
54
- ````
55
40
 
56
41
  ---
57
42
 
@@ -108,6 +93,12 @@ This will:
108
93
 
109
94
  Inside your project:
110
95
 
96
+ ```bash
97
+ npm run nexa
98
+ ```
99
+
100
+ or:
101
+
111
102
  ```bash
112
103
  npm run dev
113
104
  ```
@@ -279,15 +270,4 @@ Built and maintained by **Salman Saeed**
279
270
  ---
280
271
 
281
272
  # 🚀 Next step (highly recommended)
282
-
283
- Now that your README is strong:
284
-
285
- 👉 Next best move:
286
- - add screenshots (massive impact on adoption)
287
- - or I can help you write:
288
- - **npm page description**
289
- - **GitHub landing page hero**
290
- - **CLI demo GIF script**
291
-
292
- Just tell me 👍
293
273
  ```
package/bin/nexa.js CHANGED
@@ -262,12 +262,51 @@ function createService(serviceName) {
262
262
 
263
263
  const content = `/**
264
264
  * File: src/services/${finalName}.js
265
- * Purpose: Service module stub for ${finalName}.
265
+ * Purpose: Service module for ${finalName}.
266
+ * Handles API calls and external integrations.
266
267
  */
267
268
 
268
- export default function ${finalName}() {
269
- return null;
269
+ const BASE_URL = "Add your url here for further use";
270
+
271
+ /**
272
+ * Example GET request
273
+ */
274
+ export async function get${finalName}() {
275
+ try {
276
+ const res = await fetch(\`\${BASE_URL}\`);
277
+ if (!res.ok) throw new Error("Failed to fetch ${finalName}");
278
+ return await res.json();
279
+ } catch (err) {
280
+ console.error("${finalName} GET error:", err);
281
+ throw err;
282
+ }
270
283
  }
284
+
285
+ /**
286
+ * Example POST request
287
+ */
288
+ export async function create${finalName}(payload) {
289
+ try {
290
+ const res = await fetch(\`\${BASE_URL}\`, {
291
+ method: "POST",
292
+ headers: {
293
+ "Content-Type": "application/json",
294
+ },
295
+ body: JSON.stringify(payload),
296
+ });
297
+
298
+ if (!res.ok) throw new Error("Failed to create ${finalName}");
299
+ return await res.json();
300
+ } catch (err) {
301
+ console.error("${finalName} POST error:", err);
302
+ throw err;
303
+ }
304
+ }
305
+
306
+ export default {
307
+ get${finalName},
308
+ create${finalName},
309
+ };
271
310
  `;
272
311
 
273
312
  writeFileSafe(servicePath, content);
@@ -327,6 +366,7 @@ function createComponent(componentName) {
327
366
  );
328
367
 
329
368
  const jsxContent = `import React from "react";
369
+ import logo from "../../assets/nexa.svg";
330
370
  import "./${finalName}.css";
331
371
  import ${childName} from "./${childName}";
332
372
 
@@ -337,7 +377,7 @@ const ${finalName} = () => {
337
377
  <div className="nexa-logo-wrap">
338
378
  <div className="nexa-logo-convex" />
339
379
  <div className="nexa-logo-shine" />
340
- <h1 className="nexa-logo">N</h1>
380
+ <img src={logo} alt="Nexa Logo" className="nexa-logo-img" />
341
381
  </div>
342
382
 
343
383
  <h2 className="nexa-wordmark">${finalName}</h2>
@@ -426,16 +466,12 @@ export default ${childName};
426
466
  pointer-events: none;
427
467
  }
428
468
 
429
- .nexa-logo {
430
- margin: 0;
431
- font-size: 7rem;
432
- line-height: 1;
433
- font-weight: 800;
434
- letter-spacing: -0.08em;
435
- color: var(--nexa-primary);
436
- text-shadow:
437
- 0 0 10px rgba(62, 231, 255, 0.28),
438
- 0 0 24px rgba(62, 231, 255, 0.14);
469
+ .nexa-logo-img {
470
+ width: 112px;
471
+ height: 112px;
472
+ object-fit: contain;
473
+ position: relative;
474
+ z-index: 1;
439
475
  transform: scale(0.2);
440
476
  opacity: 0;
441
477
  filter: blur(14px);
@@ -577,8 +613,9 @@ export default ${childName};
577
613
  border-radius: 22px;
578
614
  }
579
615
 
580
- .nexa-logo {
581
- font-size: 5.8rem;
616
+ .nexa-logo-img {
617
+ width: 92px;
618
+ height: 92px;
582
619
  }
583
620
 
584
621
  .nexa-wordmark {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salmansaeed/nexa",
3
- "version": "1.0.0",
3
+ "version": "1.0.2",
4
4
  "description": "Nexa CLI for scaffolding React/Vite apps, components, services, and contexts with a cleaner UI and prebuilt structure",
5
5
  "bin": {
6
6
  "nexa": "bin/nexa.js"
@@ -1,9 +1,9 @@
1
- <!DOCTYPE html>
1
+ <!doctype html>
2
2
  <html lang="en">
3
3
  <head>
4
4
  <meta charset="UTF-8" />
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <link rel="icon" type="image/png" href="/favicon.png" />
6
+ <link rel="icon" type="image/svg+xml" href="/nexa.svg" />
7
7
  <link rel="manifest" href="/manifest.json" />
8
8
  <title>AG App</title>
9
9
  </head>
@@ -1,20 +1,15 @@
1
1
  {
2
- "name": "AG App",
3
- "short_name": "AG",
2
+ "name": "Nexa",
3
+ "short_name": "Nexa",
4
4
  "start_url": ".",
5
5
  "display": "standalone",
6
- "background_color": "#0a0f24",
7
- "theme_color": "#ffd700",
6
+ "background_color": "#07111f",
7
+ "theme_color": "#3ee7ff",
8
8
  "icons": [
9
9
  {
10
- "src": "/logo.png",
11
- "sizes": "192x192",
12
- "type": "image/png"
13
- },
14
- {
15
- "src": "/logo.png",
16
- "sizes": "512x512",
17
- "type": "image/png"
10
+ "src": "/nexa.svg",
11
+ "sizes": "any",
12
+ "type": "image/svg+xml"
18
13
  }
19
14
  ]
20
15
  }
@@ -0,0 +1,55 @@
1
+ <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <defs>
3
+ <linearGradient id="bg" x1="0" y1="0" x2="512" y2="512" gradientUnits="userSpaceOnUse">
4
+ <stop offset="0%" stop-color="#040B16"></stop>
5
+ <stop offset="100%" stop-color="#07111F"></stop>
6
+ </linearGradient>
7
+
8
+ <linearGradient id="leftStroke" x1="110" y1="120" x2="220" y2="390" gradientUnits="userSpaceOnUse">
9
+ <stop offset="0%" stop-color="#F4F8FF"></stop>
10
+ <stop offset="55%" stop-color="#C9D7E8"></stop>
11
+ <stop offset="100%" stop-color="#7E8FA8"></stop>
12
+ </linearGradient>
13
+
14
+ <linearGradient id="rightStroke" x1="260" y1="120" x2="415" y2="390" gradientUnits="userSpaceOnUse">
15
+ <stop offset="0%" stop-color="#4EEBFF"></stop>
16
+ <stop offset="55%" stop-color="#1788FF"></stop>
17
+ <stop offset="100%" stop-color="#0A2A8B"></stop>
18
+ </linearGradient>
19
+
20
+ <filter id="blueGlow" x="120" y="80" width="320" height="340" filterUnits="userSpaceOnUse">
21
+ <feGaussianBlur stdDeviation="18" result="blur"></feGaussianBlur>
22
+ <feColorMatrix in="blur" type="matrix" values="0 0 0 0 0.18
23
+ 0 0 0 0 0.74
24
+ 0 0 0 0 1
25
+ 0 0 0 0.45 0"></feColorMatrix>
26
+ </filter>
27
+
28
+ <filter id="whiteGlow" x="70" y="80" width="230" height="340" filterUnits="userSpaceOnUse">
29
+ <feGaussianBlur stdDeviation="16" result="blur"></feGaussianBlur>
30
+ <feColorMatrix in="blur" type="matrix" values="0 0 0 0 0.85
31
+ 0 0 0 0 0.9
32
+ 0 0 0 0 1
33
+ 0 0 0 0.22 0"></feColorMatrix>
34
+ </filter>
35
+ </defs>
36
+
37
+ <rect width="512" height="512" rx="96" fill="url(#bg)"></rect>
38
+
39
+ <g filter="url(#whiteGlow)">
40
+ <path d="M126 370L178 145C182 129 196 118 213 118H225C242 118 258 127 267 141L332 249L305 292L213 154L165 364L126 370Z" fill="url(#leftStroke)" opacity="0.9"></path>
41
+ </g>
42
+
43
+ <g filter="url(#blueGlow)">
44
+ <path d="M233 140C242 127 258 118 275 118H387L316 393H280C262 393 245 384 236 369L170 262L198 219L289 356L345 154H275C258 154 246 148 233 140Z" fill="url(#rightStroke)"></path>
45
+ </g>
46
+
47
+ <path d="M126 370L178 145C182 129 196 118 213 118H225C242 118 258 127 267 141L332 249L305 292L213 154L165 364L126 370Z" fill="url(#leftStroke)"></path>
48
+
49
+ <path d="M233 140C242 127 258 118 275 118H387L316 393H280C262 393 245 384 236 369L170 262L198 219L289 356L345 154H275C258 154 246 148 233 140Z" fill="url(#rightStroke)"></path>
50
+
51
+ <path d="M322 156L358 156L300 380L279 380L322 156Z" fill="white" opacity="0.12"></path>
52
+
53
+ <circle cx="355" cy="143" r="10" fill="white" opacity="0.95"></circle>
54
+ <circle cx="355" cy="143" r="22" fill="#5BEFFF" opacity="0.18"></circle>
55
+ </svg>
@@ -0,0 +1,55 @@
1
+ <svg width="512" height="512" viewBox="0 0 512 512" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <defs>
3
+ <linearGradient id="bg" x1="0" y1="0" x2="512" y2="512" gradientUnits="userSpaceOnUse">
4
+ <stop offset="0%" stop-color="#040B16"></stop>
5
+ <stop offset="100%" stop-color="#07111F"></stop>
6
+ </linearGradient>
7
+
8
+ <linearGradient id="leftStroke" x1="110" y1="120" x2="220" y2="390" gradientUnits="userSpaceOnUse">
9
+ <stop offset="0%" stop-color="#F4F8FF"></stop>
10
+ <stop offset="55%" stop-color="#C9D7E8"></stop>
11
+ <stop offset="100%" stop-color="#7E8FA8"></stop>
12
+ </linearGradient>
13
+
14
+ <linearGradient id="rightStroke" x1="260" y1="120" x2="415" y2="390" gradientUnits="userSpaceOnUse">
15
+ <stop offset="0%" stop-color="#4EEBFF"></stop>
16
+ <stop offset="55%" stop-color="#1788FF"></stop>
17
+ <stop offset="100%" stop-color="#0A2A8B"></stop>
18
+ </linearGradient>
19
+
20
+ <filter id="blueGlow" x="120" y="80" width="320" height="340" filterUnits="userSpaceOnUse">
21
+ <feGaussianBlur stdDeviation="18" result="blur"></feGaussianBlur>
22
+ <feColorMatrix in="blur" type="matrix" values="0 0 0 0 0.18
23
+ 0 0 0 0 0.74
24
+ 0 0 0 0 1
25
+ 0 0 0 0.45 0"></feColorMatrix>
26
+ </filter>
27
+
28
+ <filter id="whiteGlow" x="70" y="80" width="230" height="340" filterUnits="userSpaceOnUse">
29
+ <feGaussianBlur stdDeviation="16" result="blur"></feGaussianBlur>
30
+ <feColorMatrix in="blur" type="matrix" values="0 0 0 0 0.85
31
+ 0 0 0 0 0.9
32
+ 0 0 0 0 1
33
+ 0 0 0 0.22 0"></feColorMatrix>
34
+ </filter>
35
+ </defs>
36
+
37
+ <rect width="512" height="512" rx="96" fill="url(#bg)"></rect>
38
+
39
+ <g filter="url(#whiteGlow)">
40
+ <path d="M126 370L178 145C182 129 196 118 213 118H225C242 118 258 127 267 141L332 249L305 292L213 154L165 364L126 370Z" fill="url(#leftStroke)" opacity="0.9"></path>
41
+ </g>
42
+
43
+ <g filter="url(#blueGlow)">
44
+ <path d="M233 140C242 127 258 118 275 118H387L316 393H280C262 393 245 384 236 369L170 262L198 219L289 356L345 154H275C258 154 246 148 233 140Z" fill="url(#rightStroke)"></path>
45
+ </g>
46
+
47
+ <path d="M126 370L178 145C182 129 196 118 213 118H225C242 118 258 127 267 141L332 249L305 292L213 154L165 364L126 370Z" fill="url(#leftStroke)"></path>
48
+
49
+ <path d="M233 140C242 127 258 118 275 118H387L316 393H280C262 393 245 384 236 369L170 262L198 219L289 356L345 154H275C258 154 246 148 233 140Z" fill="url(#rightStroke)"></path>
50
+
51
+ <path d="M322 156L358 156L300 380L279 380L322 156Z" fill="white" opacity="0.12"></path>
52
+
53
+ <circle cx="355" cy="143" r="10" fill="white" opacity="0.95"></circle>
54
+ <circle cx="355" cy="143" r="22" fill="#5BEFFF" opacity="0.18"></circle>
55
+ </svg>
@@ -51,17 +51,12 @@
51
51
  pointer-events: none;
52
52
  }
53
53
 
54
- .nexa-logo {
55
- margin: 0;
56
- font-size: 7rem;
57
- line-height: 1;
58
- font-weight: 800;
59
- letter-spacing: -0.08em;
60
- color: var(--nexa-primary);
61
- text-shadow:
62
- 0 0 10px rgba(62, 231, 255, 0.28),
63
- 0 0 24px rgba(62, 231, 255, 0.14);
64
-
54
+ .nexa-logo-img {
55
+ width: 112px;
56
+ height: 112px;
57
+ object-fit: contain;
58
+ position: relative;
59
+ z-index: 1;
65
60
  transform: scale(0.2);
66
61
  opacity: 0;
67
62
  filter: blur(14px);
@@ -175,8 +170,9 @@
175
170
  border-radius: 22px;
176
171
  }
177
172
 
178
- .nexa-logo {
179
- font-size: 5.8rem;
173
+ .nexa-logo-img {
174
+ width: 92px;
175
+ height: 92px;
180
176
  }
181
177
 
182
178
  .nexa-wordmark {
@@ -1,4 +1,5 @@
1
1
  import React from "react";
2
+ import logo from "../../assets/nexa.svg";
2
3
  import "./Home.css";
3
4
 
4
5
  const Home = () => {
@@ -8,7 +9,7 @@ const Home = () => {
8
9
  <div className="nexa-logo-wrap">
9
10
  <div className="nexa-logo-convex" />
10
11
  <div className="nexa-logo-shine" />
11
- <h1 className="nexa-logo">N</h1>
12
+ <img src={logo} alt="Nexa Logo" className="nexa-logo-img" />
12
13
  </div>
13
14
 
14
15
  <h2 className="nexa-wordmark">Nexa</h2>
Binary file
Binary file