create-revo 2.0.1 → 2.0.3
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 +5 -5
- package/cli.js +15 -40
- package/package.json +1 -1
- package/template-nextjs/next.config.ts +1 -0
- package/template-nextjs/package-lock.json +12 -1
- package/template-nextjs/package.json +2 -1
- package/template-nextjs/public/revo.svg +4 -0
- package/template-nextjs/src/app/favicon.ico +0 -0
- package/template-nextjs/src/app/layout.tsx +2 -2
- package/template-nextjs/src/app/page.tsx +25 -17
- package/template-reactjs/index.html +1 -1
- package/template-reactjs/package-lock.json +17 -6
- package/template-reactjs/package.json +2 -1
- package/template-reactjs/public/favicon.ico +0 -0
- package/template-reactjs/src/App.tsx +25 -14
- package/template-reactjs/src/assets/revo.svg +4 -0
- package/template-nextjs/public/revo.png +0 -0
- package/template-reactjs/src/assets/revo.png +0 -0
- package/test/README.md +0 -36
- package/test/eslint.config.mjs +0 -25
- package/test/next.config.ts +0 -7
- package/test/package-lock.json +0 -6182
- package/test/package.json +0 -28
- package/test/postcss.config.mjs +0 -5
- package/test/public/revo.png +0 -0
- package/test/src/app/components/dltme +0 -0
- package/test/src/app/favicon.ico +0 -0
- package/test/src/app/globals.css +0 -21
- package/test/src/app/layout.tsx +0 -34
- package/test/src/app/page.tsx +0 -24
- package/test/tsconfig.json +0 -27
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# revo
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**revo** is a modern project setup tool that supports both **React** and **Next.js** projects. It's designed to streamline your workflow by providing clean project structures, pre-configured with **TypeScript** and **Tailwind CSS**, so you can focus on building amazing applications.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
@@ -92,16 +92,16 @@ npm run preview
|
|
|
92
92
|
|
|
93
93
|
## 🌟 Feedback & Support
|
|
94
94
|
|
|
95
|
-
If you like
|
|
95
|
+
If you like revo or have suggestions for improvement, let me know!
|
|
96
96
|
You can reach out to me on [Twitter](https://twitter.com/MaybeTarun).
|
|
97
97
|
|
|
98
|
-
Happy coding with
|
|
98
|
+
Happy coding with revo! 🎉
|
|
99
99
|
|
|
100
100
|
---
|
|
101
101
|
|
|
102
102
|
## 🙏 Credits
|
|
103
103
|
|
|
104
|
-
|
|
104
|
+
revo is built on top of amazing open-source tools. A big shoutout to:
|
|
105
105
|
|
|
106
106
|
- [React](https://react.dev/) - The library for building user interfaces
|
|
107
107
|
- [Next.js](https://nextjs.org/) - The React framework for production
|
package/cli.js
CHANGED
|
@@ -64,24 +64,9 @@ function replacePlaceholders(content, placeholderValues) {
|
|
|
64
64
|
return content;
|
|
65
65
|
}
|
|
66
66
|
|
|
67
|
-
function updateProgress(percentage, message) {
|
|
68
|
-
const barLength = 20;
|
|
69
|
-
const filledLength = Math.round((percentage / 100) * barLength);
|
|
70
|
-
const bar = '█'.repeat(filledLength) + '░'.repeat(barLength - filledLength);
|
|
71
|
-
|
|
72
|
-
// Clear the current line and move cursor to beginning
|
|
73
|
-
process.stdout.write('\r\x1b[K');
|
|
74
|
-
process.stdout.write(`[${bar}] ${percentage}% - ${message}`);
|
|
75
|
-
|
|
76
|
-
if (percentage === 100) {
|
|
77
|
-
process.stdout.write('\n');
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
67
|
function copyTemplateFiles(templateType, projectName, targetDir) {
|
|
82
68
|
const templateDir = path.join(__dirname, `template-${templateType}`);
|
|
83
69
|
|
|
84
|
-
// Check if template directory exists
|
|
85
70
|
if (!fs.existsSync(templateDir)) {
|
|
86
71
|
console.error(`Template directory 'template-${templateType}' not found!`);
|
|
87
72
|
process.exit(1);
|
|
@@ -89,25 +74,17 @@ function copyTemplateFiles(templateType, projectName, targetDir) {
|
|
|
89
74
|
|
|
90
75
|
console.log("\nSetting up project...");
|
|
91
76
|
|
|
92
|
-
// Step 1: Create directory
|
|
93
|
-
updateProgress(10, "Creating project directory...");
|
|
94
77
|
fs.mkdirSync(targetDir, { recursive: true });
|
|
95
78
|
|
|
96
|
-
// Step 2: Copy template files
|
|
97
|
-
updateProgress(30, "Copying template files...");
|
|
98
79
|
copyRecursive(templateDir, targetDir);
|
|
99
80
|
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
81
|
+
replacePlaceholdersInDirectory(targetDir, {
|
|
82
|
+
projectName
|
|
83
|
+
});
|
|
103
84
|
|
|
104
|
-
// Step 4: Create .gitignore file
|
|
105
|
-
updateProgress(80, "Creating .gitignore file...");
|
|
106
85
|
createGitignoreFile(targetDir);
|
|
107
86
|
|
|
108
|
-
|
|
109
|
-
updateProgress(100, "Project setup complete!");
|
|
110
|
-
console.log(""); // New line after progress
|
|
87
|
+
console.log(`Project setup complete.`);
|
|
111
88
|
}
|
|
112
89
|
|
|
113
90
|
function createGitignoreFile(projectDir) {
|
|
@@ -167,7 +144,6 @@ function copyRecursive(source, target) {
|
|
|
167
144
|
const files = fs.readdirSync(source);
|
|
168
145
|
|
|
169
146
|
for (const file of files) {
|
|
170
|
-
// Skip node_modules and other system directories
|
|
171
147
|
if (file === 'node_modules' || file === '.git' || file === 'dist' || file === 'build' || file === '.next') {
|
|
172
148
|
continue;
|
|
173
149
|
}
|
|
@@ -200,7 +176,6 @@ function replacePlaceholdersInDirectory(directory, placeholderValues) {
|
|
|
200
176
|
for (const file of files) {
|
|
201
177
|
const filePath = path.join(directory, file);
|
|
202
178
|
|
|
203
|
-
// Skip node_modules and other system directories
|
|
204
179
|
if (file === 'node_modules' || file === '.git' || file === 'dist' || file === 'build' || file === '.next') {
|
|
205
180
|
continue;
|
|
206
181
|
}
|
|
@@ -215,7 +190,6 @@ function replacePlaceholdersInDirectory(directory, placeholderValues) {
|
|
|
215
190
|
const jsonContent = JSON.parse(content);
|
|
216
191
|
jsonContent.name = sanitizedProjectName;
|
|
217
192
|
|
|
218
|
-
// Update all dependencies to latest versions
|
|
219
193
|
if (jsonContent.dependencies) {
|
|
220
194
|
Object.keys(jsonContent.dependencies).forEach(dep => {
|
|
221
195
|
jsonContent.dependencies[dep] = "latest";
|
|
@@ -227,25 +201,27 @@ function replacePlaceholdersInDirectory(directory, placeholderValues) {
|
|
|
227
201
|
});
|
|
228
202
|
}
|
|
229
203
|
|
|
204
|
+
if (placeholderValues.scaffoldDurationMs) {
|
|
205
|
+
jsonContent.revoMetrics = {
|
|
206
|
+
scaffoldDurationMs: Number(placeholderValues.scaffoldDurationMs)
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
|
|
230
210
|
content = JSON.stringify(jsonContent, null, 2);
|
|
231
211
|
} catch (jsonError) {
|
|
232
212
|
console.warn(`Warning: Could not parse JSON in ${filePath}:`, jsonError.message);
|
|
233
|
-
// Fallback to string replacement
|
|
234
213
|
content = content.replace(/\{\{projectName\}\}/g, sanitizedProjectName);
|
|
235
214
|
}
|
|
236
215
|
} else if (file === "index.html" || file.endsWith(".html")) {
|
|
237
|
-
// Replace project name in HTML title and meta tags
|
|
238
216
|
content = content.replace(/\{\{projectName\}\}/g, placeholderValues.projectName);
|
|
239
|
-
// Also replace common placeholders like "Revo" with project name
|
|
240
217
|
content = content.replace(/Revo/g, placeholderValues.projectName);
|
|
218
|
+
// removed scaffoldDurationMs placeholder handling
|
|
241
219
|
} else if (file.endsWith(".tsx") || file.endsWith(".ts") || file.endsWith(".jsx") || file.endsWith(".js")) {
|
|
242
|
-
// Replace project name in React/Next.js files
|
|
243
220
|
content = content.replace(/\{\{projectName\}\}/g, placeholderValues.projectName);
|
|
244
|
-
// Replace common placeholders
|
|
245
221
|
content = content.replace(/Create Next App/g, placeholderValues.projectName);
|
|
246
222
|
content = content.replace(/Generated by create next app/g, `Generated by ${placeholderValues.projectName}`);
|
|
223
|
+
// removed scaffoldDurationMs placeholder handling
|
|
247
224
|
} else {
|
|
248
|
-
// Use the optimized replacePlaceholders function for other files
|
|
249
225
|
content = replacePlaceholders(content, placeholderValues);
|
|
250
226
|
}
|
|
251
227
|
|
|
@@ -262,12 +238,10 @@ async function main() {
|
|
|
262
238
|
try {
|
|
263
239
|
let finalProjectName = projectName;
|
|
264
240
|
|
|
265
|
-
// If no project name provided, ask for it
|
|
266
241
|
if (!finalProjectName) {
|
|
267
242
|
finalProjectName = await askProjectName();
|
|
268
243
|
}
|
|
269
244
|
|
|
270
|
-
// Validate project name
|
|
271
245
|
if (!/^[a-zA-Z0-9-_~]+$/.test(finalProjectName)) {
|
|
272
246
|
console.error("Project name can only contain letters, numbers, hyphens, underscores, and tildes");
|
|
273
247
|
process.exit(1);
|
|
@@ -275,17 +249,18 @@ async function main() {
|
|
|
275
249
|
|
|
276
250
|
const finalTargetDir = path.join(process.cwd(), finalProjectName);
|
|
277
251
|
|
|
278
|
-
// Check if target directory already exists
|
|
279
252
|
if (fs.existsSync(finalTargetDir)) {
|
|
280
253
|
console.error(`Directory '${finalProjectName}' already exists! Please choose a different name.`);
|
|
281
254
|
process.exit(1);
|
|
282
255
|
}
|
|
283
256
|
|
|
284
|
-
// Ask user to choose template
|
|
285
257
|
const templateType = await askTemplateChoice();
|
|
286
258
|
|
|
259
|
+
const copyStartMs = Date.now();
|
|
287
260
|
copyTemplateFiles(templateType, finalProjectName, finalTargetDir);
|
|
261
|
+
const copyDurationMs = Date.now() - copyStartMs;
|
|
288
262
|
|
|
263
|
+
console.log(`Time Taken - ${copyDurationMs}ms.`);
|
|
289
264
|
console.log(`Project created successfully at ${finalTargetDir}`);
|
|
290
265
|
process.chdir(finalTargetDir);
|
|
291
266
|
|
package/package.json
CHANGED
|
@@ -11,7 +11,8 @@
|
|
|
11
11
|
"framer-motion": "^12.23.12",
|
|
12
12
|
"next": "15.5.2",
|
|
13
13
|
"react": "19.1.0",
|
|
14
|
-
"react-dom": "19.1.0"
|
|
14
|
+
"react-dom": "19.1.0",
|
|
15
|
+
"revoicons": "^1.2.4"
|
|
15
16
|
},
|
|
16
17
|
"devDependencies": {
|
|
17
18
|
"@eslint/eslintrc": "^3",
|
|
@@ -5218,6 +5219,16 @@
|
|
|
5218
5219
|
"node": ">=0.10.0"
|
|
5219
5220
|
}
|
|
5220
5221
|
},
|
|
5222
|
+
"node_modules/revoicons": {
|
|
5223
|
+
"version": "1.2.4",
|
|
5224
|
+
"resolved": "https://registry.npmjs.org/revoicons/-/revoicons-1.2.4.tgz",
|
|
5225
|
+
"integrity": "sha512-a4918brM2qbMvs4B2hTaZ98nUI5Zc+xWazecsQLv46isEBbNLVl1eiuh9XerR3Wt2dzerTn+fTN5y4efISN8fQ==",
|
|
5226
|
+
"license": "MIT",
|
|
5227
|
+
"peerDependencies": {
|
|
5228
|
+
"react": ">=17 || >=18",
|
|
5229
|
+
"react-dom": ">=17 || >=18"
|
|
5230
|
+
}
|
|
5231
|
+
},
|
|
5221
5232
|
"node_modules/run-parallel": {
|
|
5222
5233
|
"version": "1.2.0",
|
|
5223
5234
|
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<circle cx="250" cy="250" r="225" fill="#EFF0EF" stroke="#2D2A32" stroke-width="50"/>
|
|
3
|
+
<path d="M247 347L362.5 222.5M362.5 222.5H265M362.5 222.5V317.5" stroke="#2D2A32" stroke-width="50" stroke-linecap="round" stroke-linejoin="round"/>
|
|
4
|
+
</svg>
|
|
Binary file
|
|
@@ -1,23 +1,31 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Revo } from 'revoicons';
|
|
2
2
|
|
|
3
3
|
export default function Home() {
|
|
4
4
|
return (
|
|
5
|
-
<div className="bg-
|
|
6
|
-
<div className="
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
className="
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
5
|
+
<div className="bg-white w-full h-screen flex flex-col">
|
|
6
|
+
<div className="h-[10vh] w-full border-b border-gray-400">
|
|
7
|
+
<div className="h-full w-full md:w-[70vw] mx-auto border-x border-gray-400" />
|
|
8
|
+
</div>
|
|
9
|
+
<div className="h-full w-full md:w-[70vw] mx-auto border-x border-gray-400 flex flex-col justify-center items-center relative overflow-hidden">
|
|
10
|
+
<div className="absolute inset-0 -z-0 bg-[linear-gradient(to_right,theme(colors.gray.100)_1px,transparent_1px),linear-gradient(to_bottom,theme(colors.gray.100)_1px,transparent_1px)] bg-[length:16px_16px]" />
|
|
11
|
+
<div className="flex flex-col items-center space-y-2 relative z-10">
|
|
12
|
+
<div className="flex justify-center items-center space-x-2 md:space-x-4">
|
|
13
|
+
<Revo size={128} className='hidden md:block'/>
|
|
14
|
+
<Revo size={64} className='block md:hidden'/>
|
|
15
|
+
<h1 className="text-black text-[5rem] md:text-[10rem] font-semibold leading-none -mt-6 md:-mt-12">
|
|
16
|
+
revo
|
|
17
|
+
</h1>
|
|
18
|
+
</div>
|
|
19
|
+
<p className="text-black text-sm md:text-lg uppercase text-center max-w-md">
|
|
20
|
+
your project is ready to go
|
|
21
|
+
</p>
|
|
22
|
+
<p className="text-black/80 text-xs tracking-wide">
|
|
23
|
+
setup in under 500ms
|
|
24
|
+
</p>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
<div className="h-[10vh] w-full border-t border-gray-400">
|
|
28
|
+
<div className="h-full w-full md:w-[70vw] mx-auto border-x border-gray-400" />
|
|
21
29
|
</div>
|
|
22
30
|
</div>
|
|
23
31
|
);
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<link rel="icon" type="image/x-icon" href="/favicon.ico" />
|
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
-
<title>
|
|
7
|
+
<title>revo</title>
|
|
8
8
|
<meta name="author" content="Tarun Gupta" />
|
|
9
9
|
<!-- <meta name="keywords" content="" /> -->
|
|
10
10
|
<!-- <meta name="description" content=""/> -->
|
|
@@ -1,17 +1,18 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "{{projectName}}",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "0.0.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
|
-
"name": "
|
|
8
|
+
"name": "{{projectName}}",
|
|
9
9
|
"version": "0.0.0",
|
|
10
10
|
"dependencies": {
|
|
11
11
|
"motion": "^11.11.15",
|
|
12
12
|
"react": "^18.3.1",
|
|
13
13
|
"react-dom": "^18.3.1",
|
|
14
|
-
"react-router-dom": "^6.28.0"
|
|
14
|
+
"react-router-dom": "^6.28.0",
|
|
15
|
+
"revoicons": "^1.2.4"
|
|
15
16
|
},
|
|
16
17
|
"devDependencies": {
|
|
17
18
|
"@eslint/js": "^9.13.0",
|
|
@@ -1768,9 +1769,9 @@
|
|
|
1768
1769
|
}
|
|
1769
1770
|
},
|
|
1770
1771
|
"node_modules/caniuse-lite": {
|
|
1771
|
-
"version": "1.0.
|
|
1772
|
-
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.
|
|
1773
|
-
"integrity": "sha512-
|
|
1772
|
+
"version": "1.0.30001741",
|
|
1773
|
+
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001741.tgz",
|
|
1774
|
+
"integrity": "sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==",
|
|
1774
1775
|
"dev": true,
|
|
1775
1776
|
"funding": [
|
|
1776
1777
|
{
|
|
@@ -3431,6 +3432,16 @@
|
|
|
3431
3432
|
"node": ">=0.10.0"
|
|
3432
3433
|
}
|
|
3433
3434
|
},
|
|
3435
|
+
"node_modules/revoicons": {
|
|
3436
|
+
"version": "1.2.4",
|
|
3437
|
+
"resolved": "https://registry.npmjs.org/revoicons/-/revoicons-1.2.4.tgz",
|
|
3438
|
+
"integrity": "sha512-a4918brM2qbMvs4B2hTaZ98nUI5Zc+xWazecsQLv46isEBbNLVl1eiuh9XerR3Wt2dzerTn+fTN5y4efISN8fQ==",
|
|
3439
|
+
"license": "MIT",
|
|
3440
|
+
"peerDependencies": {
|
|
3441
|
+
"react": ">=17 || >=18",
|
|
3442
|
+
"react-dom": ">=17 || >=18"
|
|
3443
|
+
}
|
|
3444
|
+
},
|
|
3434
3445
|
"node_modules/rollup": {
|
|
3435
3446
|
"version": "4.26.0",
|
|
3436
3447
|
"resolved": "https://registry.npmjs.org/rollup/-/rollup-4.26.0.tgz",
|
|
Binary file
|
|
@@ -1,20 +1,31 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Revo } from 'revoicons';
|
|
2
2
|
|
|
3
3
|
function App() {
|
|
4
4
|
return (
|
|
5
|
-
<div className="bg-
|
|
6
|
-
<div className="
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
5
|
+
<div className="bg-white w-full h-screen flex flex-col">
|
|
6
|
+
<div className="h-[10vh] w-full border-b border-gray-400">
|
|
7
|
+
<div className="h-full w-full md:w-[70vw] mx-auto border-x border-gray-400" />
|
|
8
|
+
</div>
|
|
9
|
+
<div className="h-full w-full md:w-[70vw] mx-auto border-x border-gray-400 flex flex-col justify-center items-center relative overflow-hidden">
|
|
10
|
+
<div className="absolute inset-0 -z-0 bg-[linear-gradient(to_right,theme(colors.gray.100)_1px,transparent_1px),linear-gradient(to_bottom,theme(colors.gray.100)_1px,transparent_1px)] bg-[length:16px_16px]" />
|
|
11
|
+
<div className="flex flex-col items-center space-y-2 relative z-10">
|
|
12
|
+
<div className="flex justify-center items-center space-x-2 md:space-x-4">
|
|
13
|
+
<Revo size={128} className='hidden md:block'/>
|
|
14
|
+
<Revo size={64} className='block md:hidden'/>
|
|
15
|
+
<h1 className="text-black text-[5rem] md:text-[10rem] font-semibold leading-none -mt-6 md:-mt-12">
|
|
16
|
+
revo
|
|
17
|
+
</h1>
|
|
18
|
+
</div>
|
|
19
|
+
<p className="text-black text-sm md:text-lg uppercase text-center max-w-md">
|
|
20
|
+
your project is ready to go
|
|
21
|
+
</p>
|
|
22
|
+
<p className="text-black/80 text-xs tracking-wide">
|
|
23
|
+
setup in under 500ms
|
|
24
|
+
</p>
|
|
25
|
+
</div>
|
|
26
|
+
</div>
|
|
27
|
+
<div className="h-[10vh] w-full border-t border-gray-400">
|
|
28
|
+
<div className="h-full w-full md:w-[70vw] mx-auto border-x border-gray-400" />
|
|
18
29
|
</div>
|
|
19
30
|
</div>
|
|
20
31
|
)
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
<svg width="500" height="500" viewBox="0 0 500 500" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<circle cx="250" cy="250" r="225" fill="#EFF0EF" stroke="#2D2A32" stroke-width="50"/>
|
|
3
|
+
<path d="M247 347L362.5 222.5M362.5 222.5H265M362.5 222.5V317.5" stroke="#2D2A32" stroke-width="50" stroke-linecap="round" stroke-linejoin="round"/>
|
|
4
|
+
</svg>
|
|
Binary file
|
|
Binary file
|
package/test/README.md
DELETED
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-revo`](https://www.npmjs.com/package/create-revo) for {{projectName}}.
|
|
2
|
-
|
|
3
|
-
## Getting Started
|
|
4
|
-
|
|
5
|
-
First, run the development server:
|
|
6
|
-
|
|
7
|
-
```bash
|
|
8
|
-
npm run dev
|
|
9
|
-
# or
|
|
10
|
-
yarn dev
|
|
11
|
-
# or
|
|
12
|
-
pnpm dev
|
|
13
|
-
# or
|
|
14
|
-
bun dev
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
Open [http://localhost:3000](http://localhost:3000) with your browser to see the result.
|
|
18
|
-
|
|
19
|
-
You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.
|
|
20
|
-
|
|
21
|
-
This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel.
|
|
22
|
-
|
|
23
|
-
## Learn More
|
|
24
|
-
|
|
25
|
-
To learn more about Next.js, take a look at the following resources:
|
|
26
|
-
|
|
27
|
-
- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.
|
|
28
|
-
- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
|
|
29
|
-
|
|
30
|
-
You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome!
|
|
31
|
-
|
|
32
|
-
## Deploy on Vercel
|
|
33
|
-
|
|
34
|
-
The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.
|
|
35
|
-
|
|
36
|
-
Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details.
|
package/test/eslint.config.mjs
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
import { dirname } from "path";
|
|
2
|
-
import { fileURLToPath } from "url";
|
|
3
|
-
import { FlatCompat } from "@eslint/eslintrc";
|
|
4
|
-
|
|
5
|
-
const __filename = fileURLToPath(import.meta.url);
|
|
6
|
-
const __dirname = dirname(__filename);
|
|
7
|
-
|
|
8
|
-
const compat = new FlatCompat({
|
|
9
|
-
baseDirectory: __dirname,
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
const eslintConfig = [
|
|
13
|
-
...compat.extends("next/core-web-vitals", "next/typescript"),
|
|
14
|
-
{
|
|
15
|
-
ignores: [
|
|
16
|
-
"node_modules/**",
|
|
17
|
-
".next/**",
|
|
18
|
-
"out/**",
|
|
19
|
-
"build/**",
|
|
20
|
-
"next-env.d.ts",
|
|
21
|
-
],
|
|
22
|
-
},
|
|
23
|
-
];
|
|
24
|
-
|
|
25
|
-
export default eslintConfig;
|