quickscale-cli 0.61.0__tar.gz → 0.62.0__tar.gz
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.
- quickscale_cli-0.62.0/PKG-INFO +24 -0
- {quickscale_cli-0.61.0 → quickscale_cli-0.62.0}/pyproject.toml +6 -3
- {quickscale_cli-0.61.0 → quickscale_cli-0.62.0}/src/quickscale_cli/_version.py +1 -1
- quickscale_cli-0.62.0/src/quickscale_cli/commands/module_commands.py +307 -0
- {quickscale_cli-0.61.0 → quickscale_cli-0.62.0}/src/quickscale_cli/main.py +8 -2
- quickscale_cli-0.61.0/PKG-INFO +0 -206
- quickscale_cli-0.61.0/README.md +0 -179
- {quickscale_cli-0.61.0 → quickscale_cli-0.62.0}/src/quickscale_cli/__init__.py +0 -0
- {quickscale_cli-0.61.0 → quickscale_cli-0.62.0}/src/quickscale_cli/commands/__init__.py +0 -0
- {quickscale_cli-0.61.0 → quickscale_cli-0.62.0}/src/quickscale_cli/commands/deployment_commands.py +0 -0
- {quickscale_cli-0.61.0 → quickscale_cli-0.62.0}/src/quickscale_cli/commands/development_commands.py +0 -0
- {quickscale_cli-0.61.0 → quickscale_cli-0.62.0}/src/quickscale_cli/utils/__init__.py +0 -0
- {quickscale_cli-0.61.0 → quickscale_cli-0.62.0}/src/quickscale_cli/utils/docker_utils.py +0 -0
- {quickscale_cli-0.61.0 → quickscale_cli-0.62.0}/src/quickscale_cli/utils/project_manager.py +0 -0
- {quickscale_cli-0.61.0 → quickscale_cli-0.62.0}/src/quickscale_cli/utils/railway_utils.py +0 -0
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: quickscale-cli
|
|
3
|
+
Version: 0.62.0
|
|
4
|
+
Summary: Command-line interface for QuickScale Django project generator
|
|
5
|
+
Home-page: https://github.com/Experto-AI/quickscale
|
|
6
|
+
License: Apache-2.0
|
|
7
|
+
Keywords: django,cli,project-generator,saas
|
|
8
|
+
Author: Experto AI
|
|
9
|
+
Author-email: victor@experto.ai
|
|
10
|
+
Requires-Python: >=3.10,<4.0
|
|
11
|
+
Classifier: Development Status :: 3 - Alpha
|
|
12
|
+
Classifier: Framework :: Django
|
|
13
|
+
Classifier: Framework :: Django :: 4.2
|
|
14
|
+
Classifier: Framework :: Django :: 5.0
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: License :: OSI Approved :: Apache Software License
|
|
17
|
+
Classifier: Programming Language :: Python :: 3
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
+
Requires-Dist: click (>=8.1.0,<9.0.0)
|
|
22
|
+
Requires-Dist: quickscale-core (>=0.62.0,<0.63.0)
|
|
23
|
+
Project-URL: Documentation, https://github.com/Experto-AI/quickscale/tree/main/docs
|
|
24
|
+
Project-URL: Repository, https://github.com/Experto-AI/quickscale
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
[tool.poetry]
|
|
2
2
|
name = "quickscale-cli"
|
|
3
|
-
version = "0.
|
|
3
|
+
version = "0.62.0"
|
|
4
4
|
description = "Command-line interface for QuickScale Django project generator"
|
|
5
5
|
authors = ["Experto AI <victor@experto.ai>"]
|
|
6
6
|
license = "Apache-2.0"
|
|
7
|
-
readme = "README.md"
|
|
8
7
|
keywords = ["django", "cli", "project-generator", "saas"]
|
|
9
8
|
homepage = "https://github.com/Experto-AI/quickscale"
|
|
10
9
|
repository = "https://github.com/Experto-AI/quickscale"
|
|
@@ -26,7 +25,7 @@ packages = [{include = "quickscale_cli", from = "src"}]
|
|
|
26
25
|
[tool.poetry.dependencies]
|
|
27
26
|
python = "^3.10"
|
|
28
27
|
click = "^8.1.0"
|
|
29
|
-
quickscale-core = "^0.
|
|
28
|
+
quickscale-core = "^0.62.0"
|
|
30
29
|
|
|
31
30
|
[tool.poetry.group.dev.dependencies]
|
|
32
31
|
pytest = "^7.4.0"
|
|
@@ -106,4 +105,8 @@ module = "tests.*"
|
|
|
106
105
|
disallow_untyped_defs = false
|
|
107
106
|
check_untyped_defs = false
|
|
108
107
|
|
|
108
|
+
[[tool.mypy.overrides]]
|
|
109
|
+
module = "quickscale_core.*"
|
|
110
|
+
ignore_missing_imports = true
|
|
111
|
+
|
|
109
112
|
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
# Auto-generated by scripts/version_tool.sh
|
|
2
|
-
__version__ = "0.
|
|
2
|
+
__version__ = "0.62.0"
|
|
@@ -0,0 +1,307 @@
|
|
|
1
|
+
"""Module management commands for QuickScale CLI."""
|
|
2
|
+
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
import click
|
|
6
|
+
|
|
7
|
+
from quickscale_core.config import add_module, load_config, update_module_version
|
|
8
|
+
from quickscale_core.utils.git_utils import (
|
|
9
|
+
GitError,
|
|
10
|
+
check_remote_branch_exists,
|
|
11
|
+
is_git_repo,
|
|
12
|
+
is_working_directory_clean,
|
|
13
|
+
run_git_subtree_add,
|
|
14
|
+
run_git_subtree_pull,
|
|
15
|
+
run_git_subtree_push,
|
|
16
|
+
)
|
|
17
|
+
|
|
18
|
+
# Available modules (placeholders in v0.62.0)
|
|
19
|
+
AVAILABLE_MODULES = ["auth", "billing", "teams"]
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@click.command()
|
|
23
|
+
@click.option(
|
|
24
|
+
"--module",
|
|
25
|
+
required=True,
|
|
26
|
+
type=click.Choice(AVAILABLE_MODULES, case_sensitive=False),
|
|
27
|
+
help="Module name to embed",
|
|
28
|
+
)
|
|
29
|
+
@click.option(
|
|
30
|
+
"--remote",
|
|
31
|
+
default="https://github.com/Experto-AI/quickscale.git",
|
|
32
|
+
help="Git remote URL (default: QuickScale repository)",
|
|
33
|
+
)
|
|
34
|
+
def embed(module: str, remote: str) -> None:
|
|
35
|
+
r"""
|
|
36
|
+
Embed a QuickScale module into your project via git subtree.
|
|
37
|
+
|
|
38
|
+
\b
|
|
39
|
+
Examples:
|
|
40
|
+
quickscale embed --module auth
|
|
41
|
+
quickscale embed --module billing
|
|
42
|
+
|
|
43
|
+
\b
|
|
44
|
+
Available modules (v0.62.0 placeholders):
|
|
45
|
+
- auth: Authentication with django-allauth (placeholder)
|
|
46
|
+
- billing: Stripe integration with dj-stripe (placeholder)
|
|
47
|
+
- teams: Multi-tenancy and team management (placeholder)
|
|
48
|
+
|
|
49
|
+
\b
|
|
50
|
+
Note: In v0.62.0, modules contain only placeholder READMEs explaining
|
|
51
|
+
they're not yet implemented. Full implementations coming in v0.63.0+.
|
|
52
|
+
"""
|
|
53
|
+
try:
|
|
54
|
+
# Validate git repository
|
|
55
|
+
if not is_git_repo():
|
|
56
|
+
click.secho("❌ Error: Not a git repository", fg="red", err=True)
|
|
57
|
+
click.echo("\n💡 Tip: Run 'git init' to initialize a git repository", err=True)
|
|
58
|
+
raise click.Abort()
|
|
59
|
+
|
|
60
|
+
# Check working directory is clean
|
|
61
|
+
if not is_working_directory_clean():
|
|
62
|
+
click.secho("❌ Error: Working directory has uncommitted changes", fg="red", err=True)
|
|
63
|
+
click.echo("\n💡 Tip: Commit or stash your changes before embedding modules", err=True)
|
|
64
|
+
raise click.Abort()
|
|
65
|
+
|
|
66
|
+
# Check if module already exists
|
|
67
|
+
module_path = Path.cwd() / "modules" / module
|
|
68
|
+
if module_path.exists():
|
|
69
|
+
click.secho(
|
|
70
|
+
f"❌ Error: Module '{module}' already exists at {module_path}", fg="red", err=True
|
|
71
|
+
)
|
|
72
|
+
click.echo("\n💡 Tip: Remove the existing module directory first", err=True)
|
|
73
|
+
raise click.Abort()
|
|
74
|
+
|
|
75
|
+
# Check if branch exists on remote
|
|
76
|
+
branch = f"splits/{module}-module"
|
|
77
|
+
click.echo(f"🔍 Checking if {branch} exists on remote...")
|
|
78
|
+
|
|
79
|
+
if not check_remote_branch_exists(remote, branch):
|
|
80
|
+
click.secho(
|
|
81
|
+
f"❌ Error: Module '{module}' is not yet implemented",
|
|
82
|
+
fg="red",
|
|
83
|
+
err=True,
|
|
84
|
+
)
|
|
85
|
+
click.echo(
|
|
86
|
+
f"\n💡 The '{module}' module infrastructure is ready but contains "
|
|
87
|
+
"only placeholder files.",
|
|
88
|
+
err=True,
|
|
89
|
+
)
|
|
90
|
+
click.echo(" Full implementation coming in v0.63.0+", err=True)
|
|
91
|
+
click.echo(f"\n📖 Branch '{branch}' does not exist on remote: {remote}", err=True)
|
|
92
|
+
raise click.Abort()
|
|
93
|
+
|
|
94
|
+
# Embed module via git subtree
|
|
95
|
+
prefix = f"modules/{module}"
|
|
96
|
+
click.echo(f"\n📦 Embedding {module} module from {branch}...")
|
|
97
|
+
|
|
98
|
+
run_git_subtree_add(prefix=prefix, remote=remote, branch=branch, squash=True)
|
|
99
|
+
|
|
100
|
+
# Update configuration
|
|
101
|
+
add_module(
|
|
102
|
+
module_name=module,
|
|
103
|
+
prefix=prefix,
|
|
104
|
+
branch=branch,
|
|
105
|
+
version="v0.62.0", # Placeholder version
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
# Success message
|
|
109
|
+
click.secho(f"\n✅ Module '{module}' embedded successfully!", fg="green", bold=True)
|
|
110
|
+
click.echo(f" Location: {module_path}")
|
|
111
|
+
click.echo(f" Branch: {branch}")
|
|
112
|
+
|
|
113
|
+
# Next steps
|
|
114
|
+
click.echo("\n📋 Next steps:")
|
|
115
|
+
click.echo(f" 1. Review the module code in modules/{module}/")
|
|
116
|
+
click.echo(f" 2. Add to INSTALLED_APPS in settings: 'modules.{module}'")
|
|
117
|
+
click.echo(" 3. Run migrations: python manage.py migrate")
|
|
118
|
+
click.echo("\n💡 Note: This is a v0.62.0 placeholder. Full implementation coming soon!")
|
|
119
|
+
|
|
120
|
+
except GitError as e:
|
|
121
|
+
click.secho(f"❌ Git error: {e}", fg="red", err=True)
|
|
122
|
+
raise click.Abort()
|
|
123
|
+
except Exception as e:
|
|
124
|
+
click.secho(f"❌ Unexpected error: {e}", fg="red", err=True)
|
|
125
|
+
raise click.Abort()
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
@click.command()
|
|
129
|
+
@click.option(
|
|
130
|
+
"--no-preview",
|
|
131
|
+
is_flag=True,
|
|
132
|
+
help="Skip diff preview before updating",
|
|
133
|
+
)
|
|
134
|
+
def update(no_preview: bool) -> None:
|
|
135
|
+
r"""
|
|
136
|
+
Update all installed QuickScale modules to their latest versions.
|
|
137
|
+
|
|
138
|
+
\b
|
|
139
|
+
Examples:
|
|
140
|
+
quickscale update # Update with diff preview
|
|
141
|
+
quickscale update --no-preview # Update without preview
|
|
142
|
+
|
|
143
|
+
\b
|
|
144
|
+
This command:
|
|
145
|
+
- Reads installed modules from .quickscale/config.yml
|
|
146
|
+
- Updates ONLY modules you've explicitly installed
|
|
147
|
+
- Shows a diff preview before updating (unless --no-preview)
|
|
148
|
+
- Updates the installed version in config after successful update
|
|
149
|
+
"""
|
|
150
|
+
try:
|
|
151
|
+
# Validate git repository
|
|
152
|
+
if not is_git_repo():
|
|
153
|
+
click.secho("❌ Error: Not a git repository", fg="red", err=True)
|
|
154
|
+
click.echo("\n💡 Tip: This command must be run from a git repository", err=True)
|
|
155
|
+
raise click.Abort()
|
|
156
|
+
|
|
157
|
+
# Check working directory is clean
|
|
158
|
+
if not is_working_directory_clean():
|
|
159
|
+
click.secho("❌ Error: Working directory has uncommitted changes", fg="red", err=True)
|
|
160
|
+
click.echo("\n💡 Tip: Commit or stash your changes before updating modules", err=True)
|
|
161
|
+
raise click.Abort()
|
|
162
|
+
|
|
163
|
+
# Load configuration
|
|
164
|
+
config = load_config()
|
|
165
|
+
|
|
166
|
+
if not config.modules:
|
|
167
|
+
click.secho("✅ No modules installed. Nothing to update.", fg="green")
|
|
168
|
+
click.echo("\n💡 Tip: Install modules with 'quickscale embed --module <name>'")
|
|
169
|
+
return
|
|
170
|
+
|
|
171
|
+
# Show installed modules
|
|
172
|
+
click.echo(f"📦 Found {len(config.modules)} installed module(s):")
|
|
173
|
+
for name, info in config.modules.items():
|
|
174
|
+
click.echo(f" - {name} ({info.installed_version})")
|
|
175
|
+
|
|
176
|
+
if not no_preview:
|
|
177
|
+
click.echo("\n🔍 Preview mode: Changes will be shown before updating")
|
|
178
|
+
|
|
179
|
+
# Confirm update
|
|
180
|
+
if not click.confirm("\n❓ Continue with update?"):
|
|
181
|
+
click.echo("❌ Update cancelled")
|
|
182
|
+
return
|
|
183
|
+
|
|
184
|
+
# Update each module
|
|
185
|
+
for name, info in config.modules.items():
|
|
186
|
+
click.echo(f"\n📥 Updating {name} module...")
|
|
187
|
+
|
|
188
|
+
try:
|
|
189
|
+
output = run_git_subtree_pull(
|
|
190
|
+
prefix=info.prefix,
|
|
191
|
+
remote=config.default_remote,
|
|
192
|
+
branch=info.branch,
|
|
193
|
+
squash=True,
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
# Update version in config
|
|
197
|
+
update_module_version(name, "v0.62.0") # Placeholder version
|
|
198
|
+
|
|
199
|
+
click.secho(f"✅ Updated {name} successfully", fg="green")
|
|
200
|
+
|
|
201
|
+
if output and not no_preview:
|
|
202
|
+
click.echo("\n📋 Changes summary:")
|
|
203
|
+
click.echo(output[:500]) # Show first 500 chars
|
|
204
|
+
|
|
205
|
+
except GitError as e:
|
|
206
|
+
click.secho(f"❌ Failed to update {name}: {e}", fg="red", err=True)
|
|
207
|
+
click.echo(f"💡 Tip: Check for conflicts in modules/{name}/", err=True)
|
|
208
|
+
continue
|
|
209
|
+
|
|
210
|
+
click.secho("\n🎉 Module update complete!", fg="green", bold=True)
|
|
211
|
+
|
|
212
|
+
except GitError as e:
|
|
213
|
+
click.secho(f"❌ Git error: {e}", fg="red", err=True)
|
|
214
|
+
raise click.Abort()
|
|
215
|
+
except Exception as e:
|
|
216
|
+
click.secho(f"❌ Unexpected error: {e}", fg="red", err=True)
|
|
217
|
+
raise click.Abort()
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
@click.command()
|
|
221
|
+
@click.option(
|
|
222
|
+
"--module",
|
|
223
|
+
required=True,
|
|
224
|
+
type=click.Choice(AVAILABLE_MODULES, case_sensitive=False),
|
|
225
|
+
help="Module name to push changes for",
|
|
226
|
+
)
|
|
227
|
+
@click.option(
|
|
228
|
+
"--branch",
|
|
229
|
+
help="Feature branch name (default: feature/<module>-improvements)",
|
|
230
|
+
)
|
|
231
|
+
@click.option(
|
|
232
|
+
"--remote",
|
|
233
|
+
default="https://github.com/Experto-AI/quickscale.git",
|
|
234
|
+
help="Git remote URL (default: QuickScale repository)",
|
|
235
|
+
)
|
|
236
|
+
def push(module: str, branch: str, remote: str) -> None:
|
|
237
|
+
r"""
|
|
238
|
+
Push your local module changes to a feature branch for contribution.
|
|
239
|
+
|
|
240
|
+
\b
|
|
241
|
+
Examples:
|
|
242
|
+
quickscale push --module auth
|
|
243
|
+
quickscale push --module auth --branch feature/fix-email-validation
|
|
244
|
+
|
|
245
|
+
\b
|
|
246
|
+
Workflow:
|
|
247
|
+
1. This command pushes your changes to a feature branch
|
|
248
|
+
2. You'll need to create a pull request manually on GitHub
|
|
249
|
+
3. Maintainers review and merge to main branch
|
|
250
|
+
4. Auto-split updates the module's split branch
|
|
251
|
+
|
|
252
|
+
\b
|
|
253
|
+
Note: You must have write access to the repository to push.
|
|
254
|
+
For external contributions, fork the repository first.
|
|
255
|
+
"""
|
|
256
|
+
try:
|
|
257
|
+
# Validate git repository
|
|
258
|
+
if not is_git_repo():
|
|
259
|
+
click.secho("❌ Error: Not a git repository", fg="red", err=True)
|
|
260
|
+
raise click.Abort()
|
|
261
|
+
|
|
262
|
+
# Check if module is installed
|
|
263
|
+
config = load_config()
|
|
264
|
+
if module not in config.modules:
|
|
265
|
+
click.secho(f"❌ Error: Module '{module}' is not installed", fg="red", err=True)
|
|
266
|
+
click.echo(
|
|
267
|
+
f"\n💡 Tip: Install the module first with 'quickscale embed --module {module}'",
|
|
268
|
+
err=True,
|
|
269
|
+
)
|
|
270
|
+
raise click.Abort()
|
|
271
|
+
|
|
272
|
+
module_info = config.modules[module]
|
|
273
|
+
|
|
274
|
+
# Default branch name
|
|
275
|
+
if not branch:
|
|
276
|
+
branch = f"feature/{module}-improvements"
|
|
277
|
+
|
|
278
|
+
# Show what will be pushed
|
|
279
|
+
click.echo(f"📤 Preparing to push changes for module: {module}")
|
|
280
|
+
click.echo(f" Local prefix: {module_info.prefix}")
|
|
281
|
+
click.echo(f" Target branch: {branch}")
|
|
282
|
+
click.echo(f" Remote: {remote}")
|
|
283
|
+
|
|
284
|
+
# Confirm push
|
|
285
|
+
if not click.confirm("\n❓ Continue with push?"):
|
|
286
|
+
click.echo("❌ Push cancelled")
|
|
287
|
+
return
|
|
288
|
+
|
|
289
|
+
# Push subtree
|
|
290
|
+
click.echo(f"\n🚀 Pushing to {branch}...")
|
|
291
|
+
run_git_subtree_push(prefix=module_info.prefix, remote=remote, branch=branch)
|
|
292
|
+
|
|
293
|
+
# Success message
|
|
294
|
+
click.secho("\n✅ Changes pushed successfully!", fg="green", bold=True)
|
|
295
|
+
click.echo("\n📋 Next steps:")
|
|
296
|
+
click.echo(" 1. Create a pull request on GitHub:")
|
|
297
|
+
click.echo(f" https://github.com/Experto-AI/quickscale/pull/new/{branch}")
|
|
298
|
+
click.echo(" 2. Describe your changes and submit for review")
|
|
299
|
+
click.echo(" 3. After merge, the split branch will auto-update")
|
|
300
|
+
|
|
301
|
+
except GitError as e:
|
|
302
|
+
click.secho(f"❌ Git error: {e}", fg="red", err=True)
|
|
303
|
+
click.echo("\n💡 Tip: Make sure you have write access to the repository", err=True)
|
|
304
|
+
raise click.Abort()
|
|
305
|
+
except Exception as e:
|
|
306
|
+
click.secho(f"❌ Unexpected error: {e}", fg="red", err=True)
|
|
307
|
+
raise click.Abort()
|
|
@@ -8,13 +8,14 @@ import quickscale_cli
|
|
|
8
8
|
import quickscale_core
|
|
9
9
|
from quickscale_cli.commands.deployment_commands import deploy
|
|
10
10
|
from quickscale_cli.commands.development_commands import down, logs, manage, ps, shell, up
|
|
11
|
+
from quickscale_cli.commands.module_commands import embed, push, update
|
|
11
12
|
from quickscale_core.generator import ProjectGenerator
|
|
12
13
|
|
|
13
14
|
|
|
14
15
|
class InitCommand(click.Command):
|
|
15
16
|
"""Custom init command with enhanced error messages."""
|
|
16
17
|
|
|
17
|
-
def parse_args(self, ctx, args):
|
|
18
|
+
def parse_args(self, ctx: click.Context, args: list[str]) -> list[str]:
|
|
18
19
|
"""Override parse_args to provide better error messages."""
|
|
19
20
|
try:
|
|
20
21
|
return super().parse_args(ctx, args)
|
|
@@ -54,6 +55,11 @@ cli.add_command(ps)
|
|
|
54
55
|
# Register deployment commands
|
|
55
56
|
cli.add_command(deploy)
|
|
56
57
|
|
|
58
|
+
# Register module management commands
|
|
59
|
+
cli.add_command(embed)
|
|
60
|
+
cli.add_command(update)
|
|
61
|
+
cli.add_command(push)
|
|
62
|
+
|
|
57
63
|
|
|
58
64
|
@cli.command(cls=InitCommand)
|
|
59
65
|
@click.argument("project_name", required=True, metavar="PROJECT_NAME")
|
|
@@ -64,7 +70,7 @@ cli.add_command(deploy)
|
|
|
64
70
|
help="Theme to use for the project (default: starter_html)",
|
|
65
71
|
)
|
|
66
72
|
def init(project_name: str, theme: str) -> None:
|
|
67
|
-
"""
|
|
73
|
+
r"""
|
|
68
74
|
Generate a new Django project with production-ready configurations.
|
|
69
75
|
|
|
70
76
|
\b
|
quickscale_cli-0.61.0/PKG-INFO
DELETED
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.1
|
|
2
|
-
Name: quickscale-cli
|
|
3
|
-
Version: 0.61.0
|
|
4
|
-
Summary: Command-line interface for QuickScale Django project generator
|
|
5
|
-
Home-page: https://github.com/Experto-AI/quickscale
|
|
6
|
-
License: Apache-2.0
|
|
7
|
-
Keywords: django,cli,project-generator,saas
|
|
8
|
-
Author: Experto AI
|
|
9
|
-
Author-email: victor@experto.ai
|
|
10
|
-
Requires-Python: >=3.10,<4.0
|
|
11
|
-
Classifier: Development Status :: 3 - Alpha
|
|
12
|
-
Classifier: Framework :: Django
|
|
13
|
-
Classifier: Framework :: Django :: 4.2
|
|
14
|
-
Classifier: Framework :: Django :: 5.0
|
|
15
|
-
Classifier: Intended Audience :: Developers
|
|
16
|
-
Classifier: License :: OSI Approved :: Apache Software License
|
|
17
|
-
Classifier: Programming Language :: Python :: 3
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
19
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
20
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
21
|
-
Requires-Dist: click (>=8.1.0,<9.0.0)
|
|
22
|
-
Requires-Dist: quickscale-core (>=0.61.0,<0.62.0)
|
|
23
|
-
Project-URL: Documentation, https://github.com/Experto-AI/quickscale/tree/main/docs
|
|
24
|
-
Project-URL: Repository, https://github.com/Experto-AI/quickscale
|
|
25
|
-
Description-Content-Type: text/markdown
|
|
26
|
-
|
|
27
|
-
# 🚀 QuickScale
|
|
28
|
-
|
|
29
|
-
<!--
|
|
30
|
-
README.md - User-Focused Introduction
|
|
31
|
-
|
|
32
|
-
PURPOSE: This file serves as the first contact point for users, developers, and evaluators visiting the QuickScale project.
|
|
33
|
-
|
|
34
|
-
CONTENT GUIDELINES:
|
|
35
|
-
- Keep content user-facing and accessible to newcomers
|
|
36
|
-
- Focus on "what" and "how to get started" rather than "why" or technical details
|
|
37
|
-
- Include quick examples and development workflows
|
|
38
|
-
- Avoid deep architectural explanations (those belong in DECISIONS.md)
|
|
39
|
-
- Avoid competitive analysis or strategic context (those belong in QUICKSCALE.md)
|
|
40
|
-
- Maximum length: ~200 lines to ensure quick readability
|
|
41
|
-
- Link to other documents for detailed information
|
|
42
|
-
|
|
43
|
-
TARGET AUDIENCE: New users, potential adopters, GitHub visitors, developers evaluating QuickScale
|
|
44
|
-
-->
|
|
45
|
-
|
|
46
|
-
---
|
|
47
|
-
|
|
48
|
-
## QuickScale: Compose your Django SaaS.
|
|
49
|
-
|
|
50
|
-
QuickScale is a **composable Django framework** for building client SaaS applications. Start with a stable core, add reusable modules, customize themes, and deploy faster—while maintaining the flexibility to create commercial extensions and build a community ecosystem.
|
|
51
|
-
|
|
52
|
-
---
|
|
53
|
-
|
|
54
|
-
## What is QuickScale?
|
|
55
|
-
|
|
56
|
-
QuickScale is a **Django project generator** that creates production-ready SaaS applications with one command. Designed for **solo developers and development agencies**, it gives you:
|
|
57
|
-
|
|
58
|
-
- **Production-ready foundations**: Docker, PostgreSQL, testing, CI/CD, and security out-of-the-box
|
|
59
|
-
- **One-command deployment**: Deploy to Railway with `quickscale deploy railway`
|
|
60
|
-
- **Full ownership**: Generated projects are 100% yours to customize—no vendor lock-in
|
|
61
|
-
- **Standardized stack**: Build multiple client projects faster with consistent best practices
|
|
62
|
-
|
|
63
|
-
🧭 **Future Vision**: QuickScale will evolve to support reusable modules and themes. Today it's a personal toolkit; tomorrow it becomes a community platform when demand emerges. [Read the full evolution strategy](./docs/overview/quickscale.md#evolution-strategy-personal-toolkit-first).
|
|
64
|
-
|
|
65
|
-
## Documentation Guide
|
|
66
|
-
|
|
67
|
-
**Start here for your needs:**
|
|
68
|
-
- 📖 **New user?** You're in the right place. This README shows you what QuickScale is and how to get started.
|
|
69
|
-
- 🔧 **Need commands?** See [user_manual.md](./docs/technical/user_manual.md) for all commands and workflows
|
|
70
|
-
- 🚀 **Deploying to Railway?** See [railway.md](./docs/deployment/railway.md) for Railway deployment guide
|
|
71
|
-
- 📋 **Planning a feature?** Check [decisions.md](./docs/technical/decisions.md) for the authoritative MVP scope and technical rules
|
|
72
|
-
- 🗓️ **Timeline & tasks?** See [roadmap.md](./docs/technical/roadmap.md)
|
|
73
|
-
- 🏗️ **Project structure?** See [scaffolding.md](./docs/technical/scaffolding.md) for complete directory layouts
|
|
74
|
-
- 🎯 **Why QuickScale?** See [quickscale.md](./docs/overview/quickscale.md) for competitive positioning
|
|
75
|
-
|
|
76
|
-
**Quick Reference:**
|
|
77
|
-
- **MVP** = Phase 1 (Personal Toolkit)
|
|
78
|
-
- **Post-MVP** = Phase 2+ (Modules & Themes)
|
|
79
|
-
- **Generated Project** = Output of `quickscale init`
|
|
80
|
-
|
|
81
|
-
See [decisions.md - Glossary section](./docs/technical/decisions.md#document-responsibilities-short) for complete terminology and Single Source of Truth reference
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
### Primary Use Cases (MVP):
|
|
85
|
-
- **Solo Developer**: Build client projects faster with production-ready foundations
|
|
86
|
-
- **Development Agency**: Standardize your tech stack across client engagements
|
|
87
|
-
|
|
88
|
-
### Future Use Cases (Post-MVP):
|
|
89
|
-
- **Commercial Extension Developer**: Create and sell premium modules/themes
|
|
90
|
-
- **Open Source Contributor**: Extend the ecosystem with modules and themes
|
|
91
|
-
|
|
92
|
-
### Development Flow (MVP)
|
|
93
|
-
1. `quickscale init myapp`
|
|
94
|
-
- Generates the minimal Django starter described in the MVP Feature Matrix
|
|
95
|
-
- Ships with standalone `settings.py` by default; there is NO automatic settings inheritance. Advanced users who manually embed `quickscale_core` via git subtree may opt-in to inherit from `quickscale_core.settings` (see [decisions.md](./docs/technical/decisions.md#mvp-feature-matrix-authoritative)).
|
|
96
|
-
- **Optional**: Embed `quickscale_core` via git subtree after generation; follow the [Personal Toolkit workflow](./docs/technical/decisions.md#integration-note-personal-toolkit-git-subtree) for canonical commands and helper roadmap
|
|
97
|
-
2. Add your custom Django apps and features
|
|
98
|
-
3. Adopt optional inheritance or module extraction patterns only when you embed the core; the rules and best practices stay centralized in `DECISIONS.md`
|
|
99
|
-
4. Build your unique client application
|
|
100
|
-
5. Deploy to Railway with `quickscale deploy railway` (or use standard Django deployment)
|
|
101
|
-
|
|
102
|
-
ℹ️ QuickScale's MVP centers on the personal toolkit workflow. Extraction patterns, module packaging, and subtree helper command plans stay documented in `docs/technical/decisions.md` so this README can stay concise.
|
|
103
|
-
|
|
104
|
-
🔎 **Scope note**: The [MVP Feature Matrix](./docs/technical/decisions.md#mvp-feature-matrix-authoritative) is the single source of truth for what's in or out.
|
|
105
|
-
|
|
106
|
-
### What You Get
|
|
107
|
-
|
|
108
|
-
Running `quickscale init myapp` generates a **production-ready Django project** with:
|
|
109
|
-
|
|
110
|
-
- ✅ **Docker** setup (development + production)
|
|
111
|
-
- ✅ **PostgreSQL** configuration
|
|
112
|
-
- ✅ **Environment-based** settings (dev/prod split)
|
|
113
|
-
- ✅ **Security** best practices (SECRET_KEY, ALLOWED_HOSTS, etc.)
|
|
114
|
-
- ✅ **Testing** infrastructure (pytest + factory_boy)
|
|
115
|
-
- ✅ **CI/CD** pipeline (GitHub Actions)
|
|
116
|
-
- ✅ **Code quality** hooks (ruff format + ruff check)
|
|
117
|
-
- ✅ **Poetry** for dependency management
|
|
118
|
-
- ✅ **One-Command Deployment**: Deploy to Railway with `quickscale deploy railway` - fully automated setup
|
|
119
|
-
|
|
120
|
-
**See the complete project structure:** [scaffolding.md - Generated Project Output](./docs/technical/scaffolding.md#5-generated-project-output)
|
|
121
|
-
|
|
122
|
-
The generated project is **yours to own and modify** - no vendor lock-in, just Django best practices.
|
|
123
|
-
|
|
124
|
-
## Why QuickScale vs. Alternatives?
|
|
125
|
-
|
|
126
|
-
✅ **Faster than Cookiecutter** - One command vs. 30+ interactive prompts
|
|
127
|
-
✅ **More flexible than SaaS Pegasus** - Open source with full code ownership ($0 vs. $349+)
|
|
128
|
-
✅ **Simpler than building from scratch** - Production-ready in 5 minutes vs. days of setup
|
|
129
|
-
✅ **Railway deployment automation** - Competitors require manual platform configuration
|
|
130
|
-
|
|
131
|
-
**QuickScale is a development accelerator**, not a complete solution. You start with production-ready foundations and build your unique client application on top.
|
|
132
|
-
|
|
133
|
-
See [competitive_analysis.md](./docs/overview/competitive_analysis.md) for detailed comparison with SaaS Pegasus and Cookiecutter.
|
|
134
|
-
|
|
135
|
-
---
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
## Quick Start
|
|
139
|
-
|
|
140
|
-
```bash
|
|
141
|
-
# Install QuickScale globally
|
|
142
|
-
./scripts/install_global.sh
|
|
143
|
-
|
|
144
|
-
# Create your first project
|
|
145
|
-
quickscale init myapp
|
|
146
|
-
cd myapp
|
|
147
|
-
|
|
148
|
-
# Or choose a specific theme (v0.61.0+)
|
|
149
|
-
# quickscale init myapp --theme starter_html # Default HTML theme
|
|
150
|
-
# quickscale init myapp --theme starter_htmx # HTMX theme (coming in v0.67.0)
|
|
151
|
-
# quickscale init myapp --theme starter_react # React theme (coming in v0.68.0)
|
|
152
|
-
```
|
|
153
|
-
|
|
154
|
-
**Choose your development workflow:**
|
|
155
|
-
|
|
156
|
-
### Option 1: Docker (Recommended for production parity)
|
|
157
|
-
|
|
158
|
-
```bash
|
|
159
|
-
# Start all services (web + database)
|
|
160
|
-
quickscale up
|
|
161
|
-
|
|
162
|
-
# Run migrations
|
|
163
|
-
quickscale manage migrate
|
|
164
|
-
|
|
165
|
-
# Create superuser
|
|
166
|
-
quickscale manage createsuperuser
|
|
167
|
-
|
|
168
|
-
# View logs
|
|
169
|
-
quickscale logs -f web
|
|
170
|
-
|
|
171
|
-
# Open a shell in the container
|
|
172
|
-
quickscale shell
|
|
173
|
-
|
|
174
|
-
# Stop services
|
|
175
|
-
quickscale down
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
**Visit http://localhost:8000** - Your app is running in Docker with PostgreSQL!
|
|
179
|
-
|
|
180
|
-
### Option 2: Native Poetry (Simpler for quick testing)
|
|
181
|
-
|
|
182
|
-
```bash
|
|
183
|
-
# Install dependencies
|
|
184
|
-
poetry install
|
|
185
|
-
|
|
186
|
-
# Run migrations
|
|
187
|
-
poetry run python manage.py migrate
|
|
188
|
-
|
|
189
|
-
# Start development server
|
|
190
|
-
poetry run python manage.py runserver
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
**Visit http://localhost:8000** - Your app is running natively!
|
|
194
|
-
|
|
195
|
-
**For complete command reference and workflows**, see the [user_manual.md](./docs/technical/user_manual.md).
|
|
196
|
-
|
|
197
|
-
## Learn More
|
|
198
|
-
|
|
199
|
-
- **[decisions.md](./docs/technical/decisions.md)** - Technical specifications and implementation rules
|
|
200
|
-
- **[quickscale.md](./docs/overview/quickscale.md)** - Strategic vision and competitive positioning
|
|
201
|
-
- **[competitive_analysis.md](./docs/overview/competitive_analysis.md)** - Comparison vs SaaS Pegasus and alternatives
|
|
202
|
-
- **[roadmap.md](./docs/technical/roadmap.md)** - Development roadmap and implementation plan
|
|
203
|
-
- **[user_manual.md](./docs/technical/user_manual.md)** - Commands and workflows
|
|
204
|
-
- **[contributing.md](./docs/contrib/contributing.md)** - Development workflow and coding standards
|
|
205
|
-
|
|
206
|
-
|
quickscale_cli-0.61.0/README.md
DELETED
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
# 🚀 QuickScale
|
|
2
|
-
|
|
3
|
-
<!--
|
|
4
|
-
README.md - User-Focused Introduction
|
|
5
|
-
|
|
6
|
-
PURPOSE: This file serves as the first contact point for users, developers, and evaluators visiting the QuickScale project.
|
|
7
|
-
|
|
8
|
-
CONTENT GUIDELINES:
|
|
9
|
-
- Keep content user-facing and accessible to newcomers
|
|
10
|
-
- Focus on "what" and "how to get started" rather than "why" or technical details
|
|
11
|
-
- Include quick examples and development workflows
|
|
12
|
-
- Avoid deep architectural explanations (those belong in DECISIONS.md)
|
|
13
|
-
- Avoid competitive analysis or strategic context (those belong in QUICKSCALE.md)
|
|
14
|
-
- Maximum length: ~200 lines to ensure quick readability
|
|
15
|
-
- Link to other documents for detailed information
|
|
16
|
-
|
|
17
|
-
TARGET AUDIENCE: New users, potential adopters, GitHub visitors, developers evaluating QuickScale
|
|
18
|
-
-->
|
|
19
|
-
|
|
20
|
-
---
|
|
21
|
-
|
|
22
|
-
## QuickScale: Compose your Django SaaS.
|
|
23
|
-
|
|
24
|
-
QuickScale is a **composable Django framework** for building client SaaS applications. Start with a stable core, add reusable modules, customize themes, and deploy faster—while maintaining the flexibility to create commercial extensions and build a community ecosystem.
|
|
25
|
-
|
|
26
|
-
---
|
|
27
|
-
|
|
28
|
-
## What is QuickScale?
|
|
29
|
-
|
|
30
|
-
QuickScale is a **Django project generator** that creates production-ready SaaS applications with one command. Designed for **solo developers and development agencies**, it gives you:
|
|
31
|
-
|
|
32
|
-
- **Production-ready foundations**: Docker, PostgreSQL, testing, CI/CD, and security out-of-the-box
|
|
33
|
-
- **One-command deployment**: Deploy to Railway with `quickscale deploy railway`
|
|
34
|
-
- **Full ownership**: Generated projects are 100% yours to customize—no vendor lock-in
|
|
35
|
-
- **Standardized stack**: Build multiple client projects faster with consistent best practices
|
|
36
|
-
|
|
37
|
-
🧭 **Future Vision**: QuickScale will evolve to support reusable modules and themes. Today it's a personal toolkit; tomorrow it becomes a community platform when demand emerges. [Read the full evolution strategy](./docs/overview/quickscale.md#evolution-strategy-personal-toolkit-first).
|
|
38
|
-
|
|
39
|
-
## Documentation Guide
|
|
40
|
-
|
|
41
|
-
**Start here for your needs:**
|
|
42
|
-
- 📖 **New user?** You're in the right place. This README shows you what QuickScale is and how to get started.
|
|
43
|
-
- 🔧 **Need commands?** See [user_manual.md](./docs/technical/user_manual.md) for all commands and workflows
|
|
44
|
-
- 🚀 **Deploying to Railway?** See [railway.md](./docs/deployment/railway.md) for Railway deployment guide
|
|
45
|
-
- 📋 **Planning a feature?** Check [decisions.md](./docs/technical/decisions.md) for the authoritative MVP scope and technical rules
|
|
46
|
-
- 🗓️ **Timeline & tasks?** See [roadmap.md](./docs/technical/roadmap.md)
|
|
47
|
-
- 🏗️ **Project structure?** See [scaffolding.md](./docs/technical/scaffolding.md) for complete directory layouts
|
|
48
|
-
- 🎯 **Why QuickScale?** See [quickscale.md](./docs/overview/quickscale.md) for competitive positioning
|
|
49
|
-
|
|
50
|
-
**Quick Reference:**
|
|
51
|
-
- **MVP** = Phase 1 (Personal Toolkit)
|
|
52
|
-
- **Post-MVP** = Phase 2+ (Modules & Themes)
|
|
53
|
-
- **Generated Project** = Output of `quickscale init`
|
|
54
|
-
|
|
55
|
-
See [decisions.md - Glossary section](./docs/technical/decisions.md#document-responsibilities-short) for complete terminology and Single Source of Truth reference
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
### Primary Use Cases (MVP):
|
|
59
|
-
- **Solo Developer**: Build client projects faster with production-ready foundations
|
|
60
|
-
- **Development Agency**: Standardize your tech stack across client engagements
|
|
61
|
-
|
|
62
|
-
### Future Use Cases (Post-MVP):
|
|
63
|
-
- **Commercial Extension Developer**: Create and sell premium modules/themes
|
|
64
|
-
- **Open Source Contributor**: Extend the ecosystem with modules and themes
|
|
65
|
-
|
|
66
|
-
### Development Flow (MVP)
|
|
67
|
-
1. `quickscale init myapp`
|
|
68
|
-
- Generates the minimal Django starter described in the MVP Feature Matrix
|
|
69
|
-
- Ships with standalone `settings.py` by default; there is NO automatic settings inheritance. Advanced users who manually embed `quickscale_core` via git subtree may opt-in to inherit from `quickscale_core.settings` (see [decisions.md](./docs/technical/decisions.md#mvp-feature-matrix-authoritative)).
|
|
70
|
-
- **Optional**: Embed `quickscale_core` via git subtree after generation; follow the [Personal Toolkit workflow](./docs/technical/decisions.md#integration-note-personal-toolkit-git-subtree) for canonical commands and helper roadmap
|
|
71
|
-
2. Add your custom Django apps and features
|
|
72
|
-
3. Adopt optional inheritance or module extraction patterns only when you embed the core; the rules and best practices stay centralized in `DECISIONS.md`
|
|
73
|
-
4. Build your unique client application
|
|
74
|
-
5. Deploy to Railway with `quickscale deploy railway` (or use standard Django deployment)
|
|
75
|
-
|
|
76
|
-
ℹ️ QuickScale's MVP centers on the personal toolkit workflow. Extraction patterns, module packaging, and subtree helper command plans stay documented in `docs/technical/decisions.md` so this README can stay concise.
|
|
77
|
-
|
|
78
|
-
🔎 **Scope note**: The [MVP Feature Matrix](./docs/technical/decisions.md#mvp-feature-matrix-authoritative) is the single source of truth for what's in or out.
|
|
79
|
-
|
|
80
|
-
### What You Get
|
|
81
|
-
|
|
82
|
-
Running `quickscale init myapp` generates a **production-ready Django project** with:
|
|
83
|
-
|
|
84
|
-
- ✅ **Docker** setup (development + production)
|
|
85
|
-
- ✅ **PostgreSQL** configuration
|
|
86
|
-
- ✅ **Environment-based** settings (dev/prod split)
|
|
87
|
-
- ✅ **Security** best practices (SECRET_KEY, ALLOWED_HOSTS, etc.)
|
|
88
|
-
- ✅ **Testing** infrastructure (pytest + factory_boy)
|
|
89
|
-
- ✅ **CI/CD** pipeline (GitHub Actions)
|
|
90
|
-
- ✅ **Code quality** hooks (ruff format + ruff check)
|
|
91
|
-
- ✅ **Poetry** for dependency management
|
|
92
|
-
- ✅ **One-Command Deployment**: Deploy to Railway with `quickscale deploy railway` - fully automated setup
|
|
93
|
-
|
|
94
|
-
**See the complete project structure:** [scaffolding.md - Generated Project Output](./docs/technical/scaffolding.md#5-generated-project-output)
|
|
95
|
-
|
|
96
|
-
The generated project is **yours to own and modify** - no vendor lock-in, just Django best practices.
|
|
97
|
-
|
|
98
|
-
## Why QuickScale vs. Alternatives?
|
|
99
|
-
|
|
100
|
-
✅ **Faster than Cookiecutter** - One command vs. 30+ interactive prompts
|
|
101
|
-
✅ **More flexible than SaaS Pegasus** - Open source with full code ownership ($0 vs. $349+)
|
|
102
|
-
✅ **Simpler than building from scratch** - Production-ready in 5 minutes vs. days of setup
|
|
103
|
-
✅ **Railway deployment automation** - Competitors require manual platform configuration
|
|
104
|
-
|
|
105
|
-
**QuickScale is a development accelerator**, not a complete solution. You start with production-ready foundations and build your unique client application on top.
|
|
106
|
-
|
|
107
|
-
See [competitive_analysis.md](./docs/overview/competitive_analysis.md) for detailed comparison with SaaS Pegasus and Cookiecutter.
|
|
108
|
-
|
|
109
|
-
---
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
## Quick Start
|
|
113
|
-
|
|
114
|
-
```bash
|
|
115
|
-
# Install QuickScale globally
|
|
116
|
-
./scripts/install_global.sh
|
|
117
|
-
|
|
118
|
-
# Create your first project
|
|
119
|
-
quickscale init myapp
|
|
120
|
-
cd myapp
|
|
121
|
-
|
|
122
|
-
# Or choose a specific theme (v0.61.0+)
|
|
123
|
-
# quickscale init myapp --theme starter_html # Default HTML theme
|
|
124
|
-
# quickscale init myapp --theme starter_htmx # HTMX theme (coming in v0.67.0)
|
|
125
|
-
# quickscale init myapp --theme starter_react # React theme (coming in v0.68.0)
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
**Choose your development workflow:**
|
|
129
|
-
|
|
130
|
-
### Option 1: Docker (Recommended for production parity)
|
|
131
|
-
|
|
132
|
-
```bash
|
|
133
|
-
# Start all services (web + database)
|
|
134
|
-
quickscale up
|
|
135
|
-
|
|
136
|
-
# Run migrations
|
|
137
|
-
quickscale manage migrate
|
|
138
|
-
|
|
139
|
-
# Create superuser
|
|
140
|
-
quickscale manage createsuperuser
|
|
141
|
-
|
|
142
|
-
# View logs
|
|
143
|
-
quickscale logs -f web
|
|
144
|
-
|
|
145
|
-
# Open a shell in the container
|
|
146
|
-
quickscale shell
|
|
147
|
-
|
|
148
|
-
# Stop services
|
|
149
|
-
quickscale down
|
|
150
|
-
```
|
|
151
|
-
|
|
152
|
-
**Visit http://localhost:8000** - Your app is running in Docker with PostgreSQL!
|
|
153
|
-
|
|
154
|
-
### Option 2: Native Poetry (Simpler for quick testing)
|
|
155
|
-
|
|
156
|
-
```bash
|
|
157
|
-
# Install dependencies
|
|
158
|
-
poetry install
|
|
159
|
-
|
|
160
|
-
# Run migrations
|
|
161
|
-
poetry run python manage.py migrate
|
|
162
|
-
|
|
163
|
-
# Start development server
|
|
164
|
-
poetry run python manage.py runserver
|
|
165
|
-
```
|
|
166
|
-
|
|
167
|
-
**Visit http://localhost:8000** - Your app is running natively!
|
|
168
|
-
|
|
169
|
-
**For complete command reference and workflows**, see the [user_manual.md](./docs/technical/user_manual.md).
|
|
170
|
-
|
|
171
|
-
## Learn More
|
|
172
|
-
|
|
173
|
-
- **[decisions.md](./docs/technical/decisions.md)** - Technical specifications and implementation rules
|
|
174
|
-
- **[quickscale.md](./docs/overview/quickscale.md)** - Strategic vision and competitive positioning
|
|
175
|
-
- **[competitive_analysis.md](./docs/overview/competitive_analysis.md)** - Comparison vs SaaS Pegasus and alternatives
|
|
176
|
-
- **[roadmap.md](./docs/technical/roadmap.md)** - Development roadmap and implementation plan
|
|
177
|
-
- **[user_manual.md](./docs/technical/user_manual.md)** - Commands and workflows
|
|
178
|
-
- **[contributing.md](./docs/contrib/contributing.md)** - Development workflow and coding standards
|
|
179
|
-
|
|
File without changes
|
|
File without changes
|
{quickscale_cli-0.61.0 → quickscale_cli-0.62.0}/src/quickscale_cli/commands/deployment_commands.py
RENAMED
|
File without changes
|
{quickscale_cli-0.61.0 → quickscale_cli-0.62.0}/src/quickscale_cli/commands/development_commands.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|