create-domis 1.0.46 → 1.0.48
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/index.d.ts +1 -2
- package/dist/index.js +42 -128
- package/package.json +5 -6
- package/templates/domisdocs-free/.firebaserc +0 -5
- package/templates/domisdocs-free/README.md +0 -70
- package/templates/domisdocs-free/firebase.json +0 -29
- package/templates/domisdocs-free/package.json +0 -10
- package/templates/domisdocs-lite/.firebaserc +0 -5
- package/templates/domisdocs-lite/README.md +0 -229
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/404.html +0 -155
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/NQ3kax0_fweCAqnNXt6Ej/_buildManifest.js +0 -81
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/NQ3kax0_fweCAqnNXt6Ej/_ssgManifest.js +0 -2
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/341.df3329d77a5faa19.js +0 -369
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/472.a3826d29d6854395.js +0 -37
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/4bd1b696-67ee12fb04071d3b.js +0 -11130
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/684-71b0b1461a73105d.js +0 -9987
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/874-992333f59fd2c78c.js +0 -525
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/app/_not-found/page-f08302ee705a96b1.js +0 -113
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/app/dashboard/page-bd672c78e74e0ca7.js +0 -12
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/app/layout-1415b7c12bd25ba1.js +0 -13
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/app/page-202ca2a6f090766b.js +0 -12
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/framework-859199dea06580b0.js +0 -11894
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/main-9d4372fbc380071d.js +0 -6431
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/main-app-9e36547c97a174da.js +0 -20
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/pages/_app-a66f9296699c5863.js +0 -49
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/pages/_error-7688f4c9a69e67c8.js +0 -386
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -7940
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/chunks/webpack-880aef799750a911.js +0 -209
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/_next/static/css/f913f2bf40d109a3.css +0 -1056
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/dashboard.html +0 -520
- package/templates/domisdocs-lite/domisdocs-602fc/hosting/index.html +0 -129
- package/templates/domisdocs-lite/domispacks/hosting/404.html +0 -155
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/FUOO1M6iev6fYpEjnXpyc/_buildManifest.js +0 -81
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/FUOO1M6iev6fYpEjnXpyc/_ssgManifest.js +0 -2
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/341.df3329d77a5faa19.js +0 -369
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/472.a3826d29d6854395.js +0 -37
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/4bd1b696-67ee12fb04071d3b.js +0 -11130
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/684-71b0b1461a73105d.js +0 -9987
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/874-992333f59fd2c78c.js +0 -525
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/app/_not-found/page-f08302ee705a96b1.js +0 -113
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/app/dashboard/page-bd672c78e74e0ca7.js +0 -12
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/app/layout-1415b7c12bd25ba1.js +0 -13
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/app/page-202ca2a6f090766b.js +0 -12
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/framework-859199dea06580b0.js +0 -11894
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/main-9d4372fbc380071d.js +0 -6431
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/main-app-9e36547c97a174da.js +0 -20
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/pages/_app-a66f9296699c5863.js +0 -49
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/pages/_error-7688f4c9a69e67c8.js +0 -386
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/polyfills-42372ed130431b0a.js +0 -7940
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/chunks/webpack-880aef799750a911.js +0 -209
- package/templates/domisdocs-lite/domispacks/hosting/_next/static/css/f913f2bf40d109a3.css +0 -1056
- package/templates/domisdocs-lite/domispacks/hosting/dashboard.html +0 -520
- package/templates/domisdocs-lite/domispacks/hosting/index.html +0 -129
- package/templates/domisdocs-lite/firebase.json +0 -29
- package/templates/domisdocs-lite/hosting.LmZpcmViYXNlXGRvbWlzZG9jcy02MDJmY1xob3N0aW5n.cache +0 -22
- package/templates/domisdocs-lite/hosting.LmZpcmViYXNlXGRvbWlzcGFja3NcaG9zdGluZw.cache +0 -22
- package/templates/domisdocs-lite/next-env.d.ts +0 -5
- package/templates/domisdocs-lite/next.config.ts +0 -9
- package/templates/domisdocs-lite/package-lock.json +0 -1783
- package/templates/domisdocs-lite/package.json +0 -25
- package/templates/domisdocs-lite/postcss.config.mjs +0 -3
- package/templates/domisdocs-lite/tsconfig.json +0 -22
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { }
|
|
1
|
+
#!/usr/bin/env node
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
#!/usr/bin/env node
|
|
2
3
|
|
|
3
4
|
// src/index.ts
|
|
4
5
|
import inquirer from "inquirer";
|
|
@@ -7,169 +8,82 @@ import ora from "ora";
|
|
|
7
8
|
import fs from "fs";
|
|
8
9
|
import path from "path";
|
|
9
10
|
import os from "os";
|
|
10
|
-
import { fileURLToPath } from "url";
|
|
11
11
|
import extract from "extract-zip";
|
|
12
|
-
var __filename = fileURLToPath(import.meta.url);
|
|
13
|
-
var __dirname = path.dirname(__filename);
|
|
14
12
|
var API_VERIFY = "https://verifyprokey-rk2ogbbeja-uc.a.run.app";
|
|
15
13
|
var TIMEOUT_MS = 3e4;
|
|
16
|
-
|
|
17
|
-
console.log(chalk.green.bold("\n\u{1F525} DomisPacks Technical v1.0.45\n"));
|
|
14
|
+
console.log(chalk.green.bold("\n\u{1F525} DomisPacks Technical v1.0.48\n"));
|
|
18
15
|
function copyRecursive(src, dest) {
|
|
19
16
|
const stat = fs.lstatSync(src);
|
|
20
17
|
if (stat.isDirectory()) {
|
|
21
18
|
fs.mkdirSync(dest, { recursive: true });
|
|
22
19
|
for (const file of fs.readdirSync(src)) {
|
|
23
|
-
if (["node_modules", ".next", ".git", ".firebase"
|
|
20
|
+
if (["node_modules", ".next", ".git", ".firebase"].includes(file)) continue;
|
|
24
21
|
copyRecursive(path.join(src, file), path.join(dest, file));
|
|
25
22
|
}
|
|
26
23
|
} else {
|
|
27
24
|
fs.copyFileSync(src, dest);
|
|
28
25
|
}
|
|
29
26
|
}
|
|
30
|
-
function
|
|
31
|
-
const
|
|
32
|
-
|
|
33
|
-
path.join(__dirname, "..", "..", "templates", "domisdocs-free"),
|
|
34
|
-
path.join(__dirname, "templates", "domisdocs-free"),
|
|
35
|
-
path.join(process.cwd(), "templates", "domisdocs-free")
|
|
36
|
-
];
|
|
37
|
-
for (const p of possiblePaths) {
|
|
38
|
-
if (fs.existsSync(p)) return p;
|
|
39
|
-
}
|
|
40
|
-
throw new Error(
|
|
41
|
-
`Template Free n\xE3o encontrado. Verifique se a pasta templates/domisdocs-free existe. Caminhos testados: ${possiblePaths.join(", ")}`
|
|
42
|
-
);
|
|
43
|
-
}
|
|
44
|
-
async function createFreePack(target) {
|
|
45
|
-
const spinner = ora("Criando DomisDocs Free...").start();
|
|
27
|
+
async function fetchWithTimeout(url, opts = {}) {
|
|
28
|
+
const c = new AbortController();
|
|
29
|
+
const id = setTimeout(() => c.abort(), TIMEOUT_MS);
|
|
46
30
|
try {
|
|
47
|
-
|
|
48
|
-
spinner.text = `Copiando de ${path.relative(process.cwd(), freeSrc)}...`;
|
|
49
|
-
fs.mkdirSync(target, { recursive: true });
|
|
50
|
-
copyRecursive(freeSrc, target);
|
|
51
|
-
const gravados = fs.readdirSync(target);
|
|
52
|
-
spinner.succeed(`\u2705 ${target} Free criado! (${gravados.length} arquivos: ${gravados.join(", ")})`);
|
|
53
|
-
console.log(chalk.cyan(`
|
|
54
|
-
\u{1F449} cd ${target}`));
|
|
55
|
-
console.log(chalk.cyan(`\u{1F449} firebase deploy
|
|
56
|
-
`));
|
|
57
|
-
} catch (e) {
|
|
58
|
-
spinner.fail(`\u274C ${e.message}`);
|
|
59
|
-
process.exit(1);
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
async function fetchWithTimeout(url, options, timeout = TIMEOUT_MS) {
|
|
63
|
-
const controller = new AbortController();
|
|
64
|
-
const id = setTimeout(() => controller.abort(), timeout);
|
|
65
|
-
try {
|
|
66
|
-
return await fetch(url, { ...options, signal: controller.signal });
|
|
31
|
+
return await fetch(url, { ...opts, signal: c.signal });
|
|
67
32
|
} finally {
|
|
68
33
|
clearTimeout(id);
|
|
69
34
|
}
|
|
70
35
|
}
|
|
71
|
-
async function
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
let data;
|
|
82
|
-
try {
|
|
83
|
-
data = JSON.parse(text);
|
|
84
|
-
} catch {
|
|
85
|
-
throw new Error(`Resposta inv\xE1lida da API (${res.status}): ${text.slice(0, 200)}`);
|
|
86
|
-
}
|
|
87
|
-
if (!res.ok || !data.valid) {
|
|
88
|
-
throw new Error(data.detail || data.reason || data.error || `HTTP ${res.status}`);
|
|
89
|
-
}
|
|
90
|
-
if (!data.downloadUrl) {
|
|
91
|
-
throw new Error("API n\xE3o retornou downloadUrl - verifique se o zip foi enviado para o Storage");
|
|
92
|
-
}
|
|
93
|
-
return data.downloadUrl;
|
|
94
|
-
} catch (err) {
|
|
95
|
-
lastError = err;
|
|
96
|
-
if (["not_found", "expired", "inactive", "upgrade_required", "template_not_found"].includes(err.message)) {
|
|
97
|
-
throw err;
|
|
98
|
-
}
|
|
99
|
-
if (attempt <= MAX_RETRIES) {
|
|
100
|
-
await new Promise((r) => setTimeout(r, 1500 * attempt));
|
|
101
|
-
continue;
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
throw lastError || new Error("Falha ao verificar PRO_KEY");
|
|
36
|
+
async function getDownloadUrl(pack, proKey) {
|
|
37
|
+
const res = await fetchWithTimeout(API_VERIFY, {
|
|
38
|
+
method: "POST",
|
|
39
|
+
headers: { "Content-Type": "application/json" },
|
|
40
|
+
body: JSON.stringify(proKey ? { key: proKey, pack } : { pack })
|
|
41
|
+
});
|
|
42
|
+
const data = await res.json();
|
|
43
|
+
if (!res.ok || !data.valid) throw new Error(data.detail || data.reason || data.error || `HTTP ${res.status}`);
|
|
44
|
+
if (!data.downloadUrl) throw new Error("API n\xE3o retornou downloadUrl");
|
|
45
|
+
return data.downloadUrl;
|
|
106
46
|
}
|
|
107
47
|
async function main() {
|
|
108
|
-
const
|
|
109
|
-
{
|
|
110
|
-
|
|
111
|
-
name: "
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
{ name: "\u{1F525} DomisDocs PRO \u2014 Next.Js 15 + Stripe + Rules + SSR", value: "pro" }
|
|
117
|
-
]
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
type: "password",
|
|
121
|
-
name: "proKey",
|
|
122
|
-
message: "Digite sua PRO_KEY:",
|
|
123
|
-
mask: "*",
|
|
124
|
-
when: (a) => a.pack !== "free",
|
|
125
|
-
validate: (v) => v.startsWith("DOMIS-") ? true : "Formato: DOMIS-XXXX-XXXX-XXXX"
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
type: "input",
|
|
129
|
-
name: "projectName",
|
|
130
|
-
message: "Nome do projeto:",
|
|
131
|
-
default: "meu-app",
|
|
132
|
-
validate: (v) => v.trim().length > 0 ? true : "Digite um nome"
|
|
133
|
-
}
|
|
48
|
+
const ans = await inquirer.prompt([
|
|
49
|
+
{ type: "list", name: "pack", message: "Qual pack voc\xEA quer acelerar hoje?", choices: [
|
|
50
|
+
{ name: "\u{1F525} DomisDocs Free \u2014 Firebase", value: "free" },
|
|
51
|
+
{ name: "\u{1F525} DomisDocs Lite \u2014 Next.Js 15 + SaaS", value: "lite" },
|
|
52
|
+
{ name: "\u{1F525} DomisDocs PRO \u2014 Stripe + Rules", value: "pro" }
|
|
53
|
+
] },
|
|
54
|
+
{ type: "password", name: "proKey", message: "Digite sua PRO_KEY:", mask: "*", when: (a) => a.pack !== "free", validate: (v) => v.startsWith("DOMIS-") ? true : "Formato: DOMIS-XXXX-XXXX-XXXX" },
|
|
55
|
+
{ type: "input", name: "projectName", message: "Nome do projeto:", default: "meu-app", validate: (v) => v.trim().length ? true : "Digite um nome" }
|
|
134
56
|
]);
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
console.log(chalk.red(`\u274C A pasta "${target}" j\xE1 existe!`));
|
|
57
|
+
if (fs.existsSync(ans.projectName)) {
|
|
58
|
+
console.log(chalk.red(`\u274C Pasta "${ans.projectName}" j\xE1 existe!`));
|
|
138
59
|
process.exit(1);
|
|
139
60
|
}
|
|
140
|
-
|
|
141
|
-
await createFreePack(target);
|
|
142
|
-
return;
|
|
143
|
-
}
|
|
144
|
-
const spinner = ora("Verificando PRO_KEY...").start();
|
|
61
|
+
const spinner = ora("Preparando...").start();
|
|
145
62
|
try {
|
|
146
|
-
|
|
147
|
-
|
|
63
|
+
spinner.text = ans.pack === "free" ? "Baixando FREE..." : "Verificando PRO_KEY...";
|
|
64
|
+
const url = await getDownloadUrl(ans.pack, ans.proKey);
|
|
65
|
+
spinner.text = `Baixando DomisDocs ${ans.pack.toUpperCase()}...`;
|
|
148
66
|
const zipTmp = path.join(os.tmpdir(), `domis-${Date.now()}.zip`);
|
|
149
67
|
const extractTmp = path.join(os.tmpdir(), `domis-extract-${Date.now()}`);
|
|
150
|
-
const zipRes = await fetchWithTimeout(
|
|
151
|
-
if (!zipRes.ok) {
|
|
152
|
-
|
|
153
|
-
}
|
|
154
|
-
const buffer = Buffer.from(await zipRes.arrayBuffer());
|
|
155
|
-
fs.writeFileSync(zipTmp, buffer);
|
|
68
|
+
const zipRes = await fetchWithTimeout(url);
|
|
69
|
+
if (!zipRes.ok) throw new Error(`Falha no download (${zipRes.status})`);
|
|
70
|
+
fs.writeFileSync(zipTmp, Buffer.from(await zipRes.arrayBuffer()));
|
|
156
71
|
fs.mkdirSync(extractTmp, { recursive: true });
|
|
157
72
|
await extract(zipTmp, { dir: extractTmp });
|
|
158
73
|
const files = fs.readdirSync(extractTmp);
|
|
159
|
-
const
|
|
160
|
-
fs.mkdirSync(
|
|
161
|
-
copyRecursive(
|
|
74
|
+
const srcDir = files.length === 1 && fs.lstatSync(path.join(extractTmp, files[0])).isDirectory() ? path.join(extractTmp, files[0]) : extractTmp;
|
|
75
|
+
fs.mkdirSync(ans.projectName, { recursive: true });
|
|
76
|
+
copyRecursive(srcDir, ans.projectName);
|
|
162
77
|
fs.rmSync(zipTmp, { force: true });
|
|
163
78
|
fs.rmSync(extractTmp, { recursive: true, force: true });
|
|
164
|
-
spinner.succeed(
|
|
165
|
-
\u2705 ${target} criado com sucesso!`));
|
|
79
|
+
spinner.succeed(`\u2705 ${ans.projectName} criado!`);
|
|
166
80
|
console.log(chalk.cyan(`
|
|
167
|
-
\u{1F449} cd ${
|
|
168
|
-
|
|
169
|
-
|
|
81
|
+
\u{1F449} cd ${ans.projectName}
|
|
82
|
+
\u{1F449} npm install
|
|
83
|
+
\u{1F449} npm run dev
|
|
170
84
|
`));
|
|
171
85
|
} catch (e) {
|
|
172
|
-
spinner.fail(
|
|
86
|
+
spinner.fail(`\u274C ${e.message}`);
|
|
173
87
|
process.exit(1);
|
|
174
88
|
}
|
|
175
89
|
}
|
package/package.json
CHANGED
|
@@ -1,15 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-domis",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.48",
|
|
4
4
|
"description": "CLI Oficial DomisPacks - Acelerador Next.js 15 + Tailwind v4 + SaaS Boilerplate",
|
|
5
5
|
"type": "module",
|
|
6
|
-
"bin": {
|
|
7
|
-
"create-domis": "./dist/index.js"
|
|
8
|
-
},
|
|
9
6
|
"files": [
|
|
10
|
-
"dist"
|
|
11
|
-
"templates"
|
|
7
|
+
"dist"
|
|
12
8
|
],
|
|
9
|
+
"bin": {
|
|
10
|
+
"create-domis": "dist/index.js"
|
|
11
|
+
},
|
|
13
12
|
"scripts": {
|
|
14
13
|
"build": "tsup src/index.ts --format esm --dts",
|
|
15
14
|
"dev": "tsx src/index.ts",
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-

|
|
2
|
-

|
|
3
|
-

|
|
4
|
-

|
|
5
|
-

|
|
6
|
-
[](https://github.com/Domisnnet/DomisPacks-Technical/blob/main/LICENSE)
|
|
7
|
-
|
|
8
|
-
## 1. 🚀 DomisDocs Free — Technical Preview
|
|
9
|
-
|
|
10
|
-
> Bem-vindo ao Pack: **Free Oficial Domis.** Você rodou `npm create domis@latest`.
|
|
11
|
-
|
|
12
|
-
Esta é a versão pública, gratuita e sem PRO_KEY. Contém apenas 4 arquivos de degustação.
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## 2. 📦 O que vem no Free?
|
|
17
|
-
|
|
18
|
-
```
|
|
19
|
-
domisdocs-free/
|
|
20
|
-
├── firebase.json → básico
|
|
21
|
-
├── .firebaserc → básico
|
|
22
|
-
├── package.json → básico
|
|
23
|
-
└── README.md → básico
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
É o suficiente para dar `npm run build` e `firebase deploy` sem erro.
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
## 3. Tabela Comparativa
|
|
31
|
-
|
|
32
|
-
> Este preview não contém código-fonte, Dashboard, `firestore.rules`, `storage.rules`, `functions/`, Stripe ou SSR.
|
|
33
|
-
|
|
34
|
-
| O que vem no Free | O que SÓ vem no Lite : R$49 | O que SÓ vem no Pro : R$197 |
|
|
35
|
-
| :------------------------------------- | :--------------------------------------------- | :---------------------------------------------------------- |
|
|
36
|
-
| firebase.json básico - só public: dist | Next.js 15 + Tailwind v4 + shadcn | Tudo do Lite + |
|
|
37
|
-
| .firebaserc básico | firestore.rules básica + next.config otimizado | firestore.rules avançada + storage.rules |
|
|
38
|
-
| package.json + README.md básico | Dashboard + Hosting otimizado | functions/ + Stripe + Kiwify Webhook + GitHub Actions + SSR |
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
## 3. 🔑 Como destravar
|
|
43
|
-
|
|
44
|
-
Essa é a versão gratuita instalada. Quer destravar Dashboard + Tailwind?
|
|
45
|
-
|
|
46
|
-
### Opção 1: Lite — O Fix de 5 minutos
|
|
47
|
-
|
|
48
|
-
> Resolve 90% dos erros de `create-domis` com Next.js 15.
|
|
49
|
-
|
|
50
|
-
**Inclui:** CLI completa + Repo Privado + Dashboard + `next.config` otimizado + 6 meses de updates + Uso VITALÍCIO.
|
|
51
|
-
|
|
52
|
-
[](https://pay.kiwify.com.br/heAmetM)
|
|
53
|
-
|
|
54
|
-
> Entrega automática da PRO_KEY por e-mail após pagamento.
|
|
55
|
-
|
|
56
|
-
### Opção 2: Pro — Produção Completa
|
|
57
|
-
|
|
58
|
-
Para quem quer entregar para cliente. Tudo do Lite + `functions/` + Stripe + Kiwify Webhook + CI/CD.
|
|
59
|
-
|
|
60
|
-
[](https://pay.kiwify.com.br)
|
|
61
|
-
|
|
62
|
-
> Status: Em finalização. Quem compra o Lite agora garante cupom de R$49 OFF no Pro. Paga só a diferença.
|
|
63
|
-
|
|
64
|
-
---
|
|
65
|
-
|
|
66
|
-
> Já comprou o Lite? Envie comprovante do Lite e ganhe cupom de R$49 OFF. Paga só a diferença para o Pro.
|
|
67
|
-
|
|
68
|
-
### 4. 🛡 Garantia
|
|
69
|
-
|
|
70
|
-
Todos os packs têm **7 dias de garantia incondicional** via Kiwify.
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"hosting": {
|
|
3
|
-
"public": "out",
|
|
4
|
-
"ignore": [
|
|
5
|
-
"firebase.json",
|
|
6
|
-
"**/.*",
|
|
7
|
-
"**/node_modules/**"
|
|
8
|
-
],
|
|
9
|
-
"rewrites": [
|
|
10
|
-
{ "source": "**", "destination": "/index.html" }
|
|
11
|
-
],
|
|
12
|
-
"headers": [
|
|
13
|
-
{
|
|
14
|
-
"source": "**/*.@(js|css|woff2|png|jpg|jpeg|gif|svg|webp|ico)",
|
|
15
|
-
"headers": [
|
|
16
|
-
{ "key": "Cache-Control", "value": "public, max-age=31536000, immutable" }
|
|
17
|
-
]
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
"source": "**",
|
|
21
|
-
"headers": [
|
|
22
|
-
{ "key": "X-Content-Type-Options", "value": "nosniff" },
|
|
23
|
-
{ "key": "X-Frame-Options", "value": "DENY" },
|
|
24
|
-
{ "key": "X-XSS-Protection", "value": "1; mode=block" }
|
|
25
|
-
]
|
|
26
|
-
}
|
|
27
|
-
]
|
|
28
|
-
}
|
|
29
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "domisdocs-free",
|
|
3
|
-
"version": "1.0.0",
|
|
4
|
-
"private": true,
|
|
5
|
-
"description": "DomisDocs Free",
|
|
6
|
-
"scripts": {
|
|
7
|
-
"dev": "echo \"⚠️ DomisDocs Free contém apenas arquivos de configuração. Use o pack Lite para desenvolvimento.\"",
|
|
8
|
-
"build": "echo \"⚠️ Nada para buildar neste pack. Contém apenas arquivos de configuração Firebase.\""
|
|
9
|
-
}
|
|
10
|
-
}
|
|
@@ -1,229 +0,0 @@
|
|
|
1
|
-

|
|
2
|
-

|
|
3
|
-

|
|
4
|
-

|
|
5
|
-

|
|
6
|
-
|
|
7
|
-
<h2 id="sobre-o-cli">1. 🚀 Create Domis - O Acelerador Next.js 15 + Firebase Killer 🚀</h2>
|
|
8
|
-
|
|
9
|
-

|
|
10
|
-

|
|
11
|
-

|
|
12
|
-
[](https://github.com/Domisnnet/DomisPacks-Technical/blob/main/LICENSE)
|
|
13
|
-

|
|
14
|
-
|
|
15
|
-
Bem-vindo ao **CLI Oficial Domis**. O `npm create domis@latest` é um acelerador de projetos que elimina 3 horas de configuração de `firebase.json`, `firestore.rules` e `GitHub Actions` com 1 comando. Resolvemos o bug de Hosting que quebra 90% dos deploys Next.js 15 no Firebase.
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## 📚 Tabela de Conteúdo
|
|
20
|
-
|
|
21
|
-
| 💻 O CLI | 🛠 Técnico | 🤝 Comercial |
|
|
22
|
-
| :-------------------------------------------------------------------------------------: | :-----------------------------------------------------------------------------------: | :----------------------------------------------------------------------------------------: |
|
|
23
|
-
| [](#sobre-o-cli) | [](#tecnologias) | [](#estrutura) |
|
|
24
|
-
| [](#instalacao) | [](#templates-inclusos) | [](#como-funciona-a-venda) |
|
|
25
|
-
| [](#uso-rapido) | [](#fluxo-de-uso) | [](#licenca) |
|
|
26
|
-
| [](#comandos) | [](#faq) | [](#perfil) |
|
|
27
|
-
|
|
28
|
-
---
|
|
29
|
-
|
|
30
|
-
<h2 id="instalacao">2. ⚙ Instalação</h2>
|
|
31
|
-
|
|
32
|
-
Não precisa instalar global. Rode sempre na última versão:
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
npm create domis@latest
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
---
|
|
39
|
-
|
|
40
|
-
<h2 id="uso-rapido">3. 🚀 Uso Rápido</h2>
|
|
41
|
-
|
|
42
|
-
Todo mundo roda o mesmo comando. O que muda é o que sua PRO_KEY liberou no `verificar.html`:
|
|
43
|
-
|
|
44
|
-
```bash
|
|
45
|
-
npm create domis@latest
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
O CLI vai abrir:
|
|
49
|
-
|
|
50
|
-
```
|
|
51
|
-
🔥 DomisPacks Technical v1.0.24
|
|
52
|
-
|
|
53
|
-
? Qual pack você quer acelerar hoje?
|
|
54
|
-
|
|
55
|
-
> 🔥 DomisDocs Lite — Next.js 15 + Tailwind v4 + Firebase Killer
|
|
56
|
-
🔥 DomisDocs PRO — Next.js 15 + Stripe + Rules + SSR + CI/CD
|
|
57
|
-
```
|
|
58
|
-
|
|
59
|
-
| Você comprou | O que acontece |
|
|
60
|
-
| :------------ | :-------------------------------------------------------------------------------------- |
|
|
61
|
-
| **Lite R$49** | Escolhe `DomisDocs Lite` e cria na hora |
|
|
62
|
-
| **Pro R$197** | Valida sua PRO_KEY no `verificar.html`, depois escolhe `DomisDocs PRO` no mesmo comando |
|
|
63
|
-
|
|
64
|
-
> A autenticação `--key` é feita por debaixo dos panos pelo `verificar.html`. Você não precisa digitar `--template` ou `--key` na mão.
|
|
65
|
-
|
|
66
|
-
---
|
|
67
|
-
|
|
68
|
-
<h2 id="comandos">4. 🧩 Comandos Disponíveis</h2>
|
|
69
|
-
|
|
70
|
-
| Comando | O que faz |
|
|
71
|
-
| :------------------------ | :----------------------------------------------------------------------- |
|
|
72
|
-
| `npm create domis@latest` | Modo interativo (recomendado) - lista Lite/Pro liberados pela sua key |
|
|
73
|
-
| `--template <nome>` | Uso interno - pula o menu (gerenciado pelo verificar.html) |
|
|
74
|
-
| `--key <PRO_KEY>` | Uso interno - autentica no repo privado (gerenciado pelo verificar.html) |
|
|
75
|
-
| `--help` | Lista todos os templates disponíveis |
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
<h2 id="tecnologias">5. 💻 Stack do CLI</h2>
|
|
80
|
-
|
|
81
|
-
| Camada | Tecnologia |
|
|
82
|
-
| :------------- | :------------------------------------ |
|
|
83
|
-
| **Core** | Node + TypeScript |
|
|
84
|
-
| **CLI Engine** | `create-*` + `prompts` + `degit` |
|
|
85
|
-
| **Infra** | GitHub Private Repo como CDN de Packs |
|
|
86
|
-
| **Auth** | PRO_KEY Kiwify via verificar.html |
|
|
87
|
-
| **Frontend** | Next.js 15 + Tailwind v4 |
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
<h2 id="templates-inclusos">6. 📦 Templates Inclusos no MVP</h2>
|
|
92
|
-
|
|
93
|
-
| Pack | Preço | O que entrega |
|
|
94
|
-
| :------------------------ | :-------- | :------------------------------------------------------------------------------------------------------------------------------ |
|
|
95
|
-
| `domisdocs-firebase-lite` | **R$49** | `firebase.json` killer + Hosting otimizado + `next.config` + `firestore.rules` básica + Bônus |
|
|
96
|
-
| `domisdocs-firebase-pro` | **R$197** | Lite + `firestore.rules` avançadas + `storage.rules` + `GitHub Actions` + `functions/` + Stripe Checkout + Kiwify Webhook + SSR |
|
|
97
|
-
|
|
98
|
-
---
|
|
99
|
-
|
|
100
|
-
<h2 id="fluxo-de-uso">7. 🔄 Fluxo de Uso</h2>
|
|
101
|
-
|
|
102
|
-
# Cliente roda :
|
|
103
|
-
|
|
104
|
-
```bash
|
|
105
|
-
npm create domis@latest
|
|
106
|
-
```
|
|
107
|
-
|
|
108
|
-
### CLI faz :
|
|
109
|
-
|
|
110
|
-
```
|
|
111
|
-
✔ DomisPacks Technical v1.0.24
|
|
112
|
-
✔ Qual pack você quer acelerar hoje?
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
### Seleciona Lite
|
|
116
|
-
|
|
117
|
-
```
|
|
118
|
-
✔ 🔥 DomisDocs Lite — Next.js 15 + Tailwind v4 + Firebase Killer ( Lite )
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
### Ou Pro
|
|
122
|
-
|
|
123
|
-
```
|
|
124
|
-
✔ 🔥 DomisDocs PRO — Next.js 15 + Stripe + Rules + SSR + CI/CD ( Pro )
|
|
125
|
-
```
|
|
126
|
-
|
|
127
|
-
### Depois :
|
|
128
|
-
|
|
129
|
-
```
|
|
130
|
-
✔ Baixando pack...
|
|
131
|
-
✔ Corrigindo firebase.json -> Hosting + Rewrites + Cache Next.js 15
|
|
132
|
-
✔ Instalando deps...
|
|
133
|
-
✔ Pronto!
|
|
134
|
-
cd meu-app && npm run dev
|
|
135
|
-
```
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
<h2 id="faq">8. 🧠 FAQ</h2>
|
|
140
|
-
|
|
141
|
-
<details>
|
|
142
|
-
<summary><strong>Precisa de Firebase CLI instalado ❓</strong></summary>
|
|
143
|
-
<p>⚠ <strong>Sim, para deploy.</strong> `npm i -g firebase-tools`. O `create-domis` só cria e corrige o projeto.</p>
|
|
144
|
-
</details>
|
|
145
|
-
|
|
146
|
-
<details>
|
|
147
|
-
<summary><strong>Funciona no Windows ❓</strong></summary>
|
|
148
|
-
<p>✅ <strong>Sim.</strong> Testado em PowerShell e CMD.</p>
|
|
149
|
-
</details>
|
|
150
|
-
|
|
151
|
-
<details>
|
|
152
|
-
<summary><strong>O que é a PRO_KEY ❓</strong></summary>
|
|
153
|
-
<p>🔑 É a key gerada após compra na Kiwify. Você cola no verificar.html como senha e ela libera seu pack. Não precisa digitar no terminal.</p>
|
|
154
|
-
</details>
|
|
155
|
-
|
|
156
|
-
<details>
|
|
157
|
-
<summary><strong>Funciona com SSR / Next.js App Router ❓</strong></summary>
|
|
158
|
-
<p>🌐 <strong>No Lite é Hosting estático otimizado.</strong> SSR completo + Functions está no Pack Pro com `ssr: true` já configurado.</p>
|
|
159
|
-
</details>
|
|
160
|
-
|
|
161
|
-
<details>
|
|
162
|
-
<summary><strong>Posso usar com GitHub Actions (deploy automático) ❓</strong></summary>
|
|
163
|
-
<p>🤖 <strong>Sim, mas no Lite é manual.</strong> No Lite você roda `firebase deploy`. No Pro já vem `.github/workflows/deploy.yml` que faz deploy a cada push na `main`.</p>
|
|
164
|
-
</details>
|
|
165
|
-
|
|
166
|
-
---
|
|
167
|
-
|
|
168
|
-
<h2 id="estrutura">9. 📁 Estrutura do Projeto Gerado</h2>
|
|
169
|
-
|
|
170
|
-
O que o `npm create domis@latest` cria dentro da pasta `meu-app/` - reaproveitável para Lite e futuro PRO:
|
|
171
|
-
|
|
172
|
-
```
|
|
173
|
-
meu-app/
|
|
174
|
-
├── firebase.json → Firebase Killer (Hosting + Rewrites + Cache)
|
|
175
|
-
├── firestore.rules → Lite: basica / Pro: avancada multi-tenant
|
|
176
|
-
├── storage.rules → Pro: regras avancadas (Lite: basica)
|
|
177
|
-
├── next.config.js → Otimizado para Firebase Hosting
|
|
178
|
-
├── tailwind.config.ts → Tailwind v4 ja configurado
|
|
179
|
-
├── .github/
|
|
180
|
-
│ └── workflows/
|
|
181
|
-
│ └── deploy.yml → So no PRO: deploy automatico
|
|
182
|
-
├── functions/ → So no PRO: Stripe + Kiwify Webhook + Validator
|
|
183
|
-
│ ├── src/
|
|
184
|
-
│ │ └── index.ts
|
|
185
|
-
│ └── package.json
|
|
186
|
-
└── src/
|
|
187
|
-
├── app/
|
|
188
|
-
│ ├── (saas)/
|
|
189
|
-
│ │ └── dashboard/ → So no PRO
|
|
190
|
-
│ ├── layout.tsx
|
|
191
|
-
│ └── page.tsx
|
|
192
|
-
└── lib/
|
|
193
|
-
├── firebase.ts
|
|
194
|
-
└── stripe.ts → So no PRO
|
|
195
|
-
```
|
|
196
|
-
|
|
197
|
-
> No Lite voce recebe tudo ate `src/lib/firebase.ts`. No PRO destrava `functions/`, `.github/` e `storage.rules` avancadas.
|
|
198
|
-
|
|
199
|
-
---
|
|
200
|
-
|
|
201
|
-
<h2 id="como-funciona-a-venda">10. 💳 Como Funciona a Venda</h2>
|
|
202
|
-
|
|
203
|
-
1. Cliente compra na Kiwify (Lite R$49 ou Pro R$197)
|
|
204
|
-
2. Kiwify envia PRO_KEY automatica por e-mail
|
|
205
|
-
3. Cliente acessa verificar.html e ativa a key como senha
|
|
206
|
-
4. Ele roda: `npm create domis@latest` e escolhe o pack liberado pela key
|
|
207
|
-
5. Acesso liberado por 6 meses - renova com CUPOM: L2NNYK8 5% OFF
|
|
208
|
-
|
|
209
|
-
---
|
|
210
|
-
|
|
211
|
-
<h2 id="licenca">11. 📄 Licença</h2>
|
|
212
|
-
|
|
213
|
-
Este CLI é código aberto, mas os Packs são sob: [](https://github.com/Domisnnet/DomisPacks-Technical/blob/main/LICENSE) — De uso privado do Desenvolvedor. Proibida redistribuição sem PRO_KEY ativa. Proibida a revenda desse código.
|
|
214
|
-
|
|
215
|
-
---
|
|
216
|
-
|
|
217
|
-
<h2 id="perfil">12. 👨💻 DomisDev</h2>
|
|
218
|
-
|
|
219
|
-
> Caso precise de informações adicionais, abra uma Pull Request:
|
|
220
|
-
|
|
221
|
-
<a href="https://github.com/Domisnnet">
|
|
222
|
-
<img src="./src/assets/DomisDev.png" width="90" style="border-radius: 50%" alt="DomisDev">
|
|
223
|
-
</a>
|
|
224
|
-
|
|
225
|
-
<p align="center">
|
|
226
|
-
<a href="#sobre-o-cli">
|
|
227
|
-
<img src="https://img.shields.io/badge/⬆%20VOLTAR%20AO%20TOPO-26FF00?style=flat&labelColor=111827&color=0A0F1C" alt="Voltar ao topo" style="height: 30px;">
|
|
228
|
-
</a>
|
|
229
|
-
</p>
|