vibetuner 2.7.0__py3-none-any.whl → 2.18.1__py3-none-any.whl
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.
Potentially problematic release.
This version of vibetuner might be problematic. Click here for more details.
- vibetuner/cli/__init__.py +13 -2
- vibetuner/cli/run.py +0 -1
- vibetuner/cli/scaffold.py +187 -0
- vibetuner/config.py +27 -11
- vibetuner/context.py +3 -0
- vibetuner/frontend/__init__.py +7 -2
- vibetuner/frontend/lifespan.py +12 -7
- vibetuner/frontend/middleware.py +3 -3
- vibetuner/frontend/routes/auth.py +19 -13
- vibetuner/frontend/routes/debug.py +1 -1
- vibetuner/frontend/routes/health.py +4 -0
- vibetuner/frontend/routes/user.py +1 -1
- vibetuner/mongo.py +1 -1
- vibetuner/paths.py +197 -80
- vibetuner/tasks/worker.py +1 -1
- vibetuner/templates/email/{default/magic_link.html.jinja → magic_link.html.jinja} +2 -1
- vibetuner/templates/frontend/base/favicons.html.jinja +1 -1
- vibetuner/templates/frontend/base/skeleton.html.jinja +5 -2
- vibetuner/templates/frontend/debug/collections.html.jinja +2 -0
- vibetuner/templates/frontend/debug/components/debug_nav.html.jinja +6 -6
- vibetuner/templates/frontend/debug/index.html.jinja +6 -4
- vibetuner/templates/frontend/debug/info.html.jinja +2 -0
- vibetuner/templates/frontend/debug/users.html.jinja +4 -2
- vibetuner/templates/frontend/debug/version.html.jinja +2 -0
- vibetuner/templates/frontend/email_sent.html.jinja +2 -1
- vibetuner/templates/frontend/index.html.jinja +1 -0
- vibetuner/templates/frontend/login.html.jinja +8 -3
- vibetuner/templates/frontend/user/edit.html.jinja +3 -2
- vibetuner/templates/frontend/user/profile.html.jinja +2 -1
- vibetuner/templates.py +9 -15
- vibetuner/versioning.py +1 -1
- vibetuner-2.18.1.dist-info/METADATA +241 -0
- vibetuner-2.18.1.dist-info/RECORD +72 -0
- {vibetuner-2.7.0.dist-info → vibetuner-2.18.1.dist-info}/WHEEL +1 -1
- vibetuner-2.18.1.dist-info/entry_points.txt +3 -0
- vibetuner/frontend/AGENTS.md +0 -113
- vibetuner/frontend/CLAUDE.md +0 -113
- vibetuner/models/AGENTS.md +0 -165
- vibetuner/models/CLAUDE.md +0 -165
- vibetuner/services/AGENTS.md +0 -104
- vibetuner/services/CLAUDE.md +0 -104
- vibetuner/tasks/AGENTS.md +0 -98
- vibetuner/tasks/CLAUDE.md +0 -98
- vibetuner/templates/email/AGENTS.md +0 -48
- vibetuner/templates/email/CLAUDE.md +0 -48
- vibetuner/templates/frontend/AGENTS.md +0 -74
- vibetuner/templates/frontend/CLAUDE.md +0 -74
- vibetuner/templates/markdown/AGENTS.md +0 -29
- vibetuner/templates/markdown/CLAUDE.md +0 -29
- vibetuner-2.7.0.dist-info/METADATA +0 -48
- vibetuner-2.7.0.dist-info/RECORD +0 -84
- /vibetuner/templates/email/{default/magic_link.txt.jinja → magic_link.txt.jinja} +0 -0
vibetuner/templates.py
CHANGED
|
@@ -3,13 +3,7 @@ from typing import Any, Dict, Optional
|
|
|
3
3
|
|
|
4
4
|
from jinja2 import Environment, FileSystemLoader, TemplateNotFound
|
|
5
5
|
|
|
6
|
-
from .
|
|
7
|
-
app_templates,
|
|
8
|
-
core_templates,
|
|
9
|
-
email_templates,
|
|
10
|
-
frontend_templates,
|
|
11
|
-
markdown_templates,
|
|
12
|
-
)
|
|
6
|
+
from . import paths
|
|
13
7
|
|
|
14
8
|
|
|
15
9
|
def _get_base_paths_for_namespace(
|
|
@@ -22,19 +16,19 @@ def _get_base_paths_for_namespace(
|
|
|
22
16
|
|
|
23
17
|
# Map known namespaces to their predefined paths
|
|
24
18
|
if namespace == "email":
|
|
25
|
-
return email_templates
|
|
19
|
+
return paths.email_templates
|
|
26
20
|
if namespace == "markdown":
|
|
27
|
-
return markdown_templates
|
|
21
|
+
return paths.markdown_templates
|
|
28
22
|
if namespace == "frontend":
|
|
29
|
-
return frontend_templates
|
|
23
|
+
return paths.frontend_templates
|
|
30
24
|
|
|
31
25
|
# Default for unknown or None namespace
|
|
32
26
|
# Only include app_templates if project root has been set
|
|
33
|
-
|
|
34
|
-
if app_templates is not None:
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
return
|
|
27
|
+
path_list = []
|
|
28
|
+
if paths.app_templates is not None:
|
|
29
|
+
path_list.append(paths.app_templates)
|
|
30
|
+
path_list.append(paths.core_templates)
|
|
31
|
+
return path_list
|
|
38
32
|
|
|
39
33
|
|
|
40
34
|
def _build_search_paths(
|
vibetuner/versioning.py
CHANGED
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: vibetuner
|
|
3
|
+
Version: 2.18.1
|
|
4
|
+
Summary: Core Python framework and blessed dependencies for production-ready FastAPI + MongoDB + HTMX projects
|
|
5
|
+
Keywords: fastapi,mongodb,htmx,web-framework,scaffolding,oauth,background-jobs
|
|
6
|
+
Author: All Tuner Labs, S.L.
|
|
7
|
+
License: MIT
|
|
8
|
+
Classifier: Development Status :: 4 - Beta
|
|
9
|
+
Classifier: Intended Audience :: Developers
|
|
10
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
11
|
+
Classifier: Programming Language :: Python :: 3
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
+
Classifier: Framework :: FastAPI
|
|
17
|
+
Classifier: Topic :: Internet :: WWW/HTTP :: WSGI :: Application
|
|
18
|
+
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
19
|
+
Requires-Dist: aioboto3>=15.5.0
|
|
20
|
+
Requires-Dist: arel>=0.4.0
|
|
21
|
+
Requires-Dist: asyncer>=0.0.10
|
|
22
|
+
Requires-Dist: authlib>=1.6.5
|
|
23
|
+
Requires-Dist: beanie[zstd]>=2.0.0
|
|
24
|
+
Requires-Dist: click>=8.3.0
|
|
25
|
+
Requires-Dist: copier>=9.10.3,<9.10.4
|
|
26
|
+
Requires-Dist: email-validator>=2.3.0
|
|
27
|
+
Requires-Dist: fastapi[standard-no-fastapi-cloud-cli]>=0.121.1
|
|
28
|
+
Requires-Dist: granian[pname]>=2.5.7
|
|
29
|
+
Requires-Dist: httpx[http2]>=0.28.1
|
|
30
|
+
Requires-Dist: itsdangerous>=2.2.0
|
|
31
|
+
Requires-Dist: loguru>=0.7.3
|
|
32
|
+
Requires-Dist: pydantic[email]>=2.12.4
|
|
33
|
+
Requires-Dist: pydantic-extra-types[pycountry]>=2.10.6
|
|
34
|
+
Requires-Dist: pydantic-settings>=2.12.0
|
|
35
|
+
Requires-Dist: pyyaml>=6.0.3
|
|
36
|
+
Requires-Dist: redis[hiredis]>=7.0.1
|
|
37
|
+
Requires-Dist: rich>=14.2.0
|
|
38
|
+
Requires-Dist: sse-starlette>=3.0.3
|
|
39
|
+
Requires-Dist: starlette-babel>=1.0.3
|
|
40
|
+
Requires-Dist: starlette-htmx>=0.1.1
|
|
41
|
+
Requires-Dist: streaq[web]<6.0.0
|
|
42
|
+
Requires-Dist: typer-slim[standard]>=0.20.0
|
|
43
|
+
Requires-Dist: babel>=2.17.0 ; extra == 'dev'
|
|
44
|
+
Requires-Dist: cloudflare>=4.3.1 ; extra == 'dev'
|
|
45
|
+
Requires-Dist: djlint>=1.36.4 ; extra == 'dev'
|
|
46
|
+
Requires-Dist: dunamai>=1.25.0 ; extra == 'dev'
|
|
47
|
+
Requires-Dist: gh-bin>=2.83.0 ; extra == 'dev'
|
|
48
|
+
Requires-Dist: granian[pname,reload]>=2.5.7 ; extra == 'dev'
|
|
49
|
+
Requires-Dist: just-bin>=1.43.0 ; extra == 'dev'
|
|
50
|
+
Requires-Dist: pre-commit>=4.4.0 ; extra == 'dev'
|
|
51
|
+
Requires-Dist: pysemver>=0.5.0 ; extra == 'dev'
|
|
52
|
+
Requires-Dist: ruff>=0.14.4 ; extra == 'dev'
|
|
53
|
+
Requires-Dist: rumdl>=0.0.174 ; extra == 'dev'
|
|
54
|
+
Requires-Dist: semver>=3.0.4 ; extra == 'dev'
|
|
55
|
+
Requires-Dist: taplo>=0.9.3 ; extra == 'dev'
|
|
56
|
+
Requires-Dist: ty>=0.0.1a26 ; extra == 'dev'
|
|
57
|
+
Requires-Dist: types-aioboto3[s3,ses]>=15.5.0 ; extra == 'dev'
|
|
58
|
+
Requires-Dist: types-authlib>=1.6.5.20251005 ; extra == 'dev'
|
|
59
|
+
Requires-Dist: types-pyyaml>=6.0.12.20250915 ; extra == 'dev'
|
|
60
|
+
Requires-Dist: uv-bump>=0.3.1 ; extra == 'dev'
|
|
61
|
+
Requires-Python: >=3.11
|
|
62
|
+
Project-URL: Changelog, https://github.com/alltuner/vibetuner/blob/main/CHANGELOG.md
|
|
63
|
+
Project-URL: Documentation, https://vibetuner.alltuner.com/
|
|
64
|
+
Project-URL: Homepage, https://vibetuner.alltuner.com/
|
|
65
|
+
Project-URL: Issues, https://github.com/alltuner/vibetuner/issues
|
|
66
|
+
Project-URL: Repository, https://github.com/alltuner/vibetuner
|
|
67
|
+
Provides-Extra: dev
|
|
68
|
+
Description-Content-Type: text/markdown
|
|
69
|
+
|
|
70
|
+
# vibetuner
|
|
71
|
+
|
|
72
|
+
Core Python framework and blessed dependencies for Vibetuner projects
|
|
73
|
+
|
|
74
|
+
This package provides the complete Python framework and curated dependency set for building modern
|
|
75
|
+
web applications with Vibetuner. It includes everything from FastAPI and MongoDB integration to
|
|
76
|
+
authentication, background jobs, and CLI tools.
|
|
77
|
+
|
|
78
|
+
## What is Vibetuner?
|
|
79
|
+
|
|
80
|
+
Vibetuner is a production-ready scaffolding tool for FastAPI + MongoDB + HTMX web applications.
|
|
81
|
+
This package (`vibetuner`) is the Python component that provides:
|
|
82
|
+
|
|
83
|
+
- Complete web application framework built on FastAPI
|
|
84
|
+
- MongoDB integration with Beanie ODM
|
|
85
|
+
- OAuth and magic link authentication out of the box
|
|
86
|
+
- Background job processing with Redis + Streaq
|
|
87
|
+
- CLI framework with Typer
|
|
88
|
+
- Email services, blob storage, and more
|
|
89
|
+
|
|
90
|
+
**This package is designed to be used within projects generated by the Vibetuner scaffolding
|
|
91
|
+
tool.** For standalone use, you'll need to set up the project structure manually.
|
|
92
|
+
|
|
93
|
+
## Installation
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
# In a Vibetuner-generated project (automatic)
|
|
97
|
+
uv sync
|
|
98
|
+
|
|
99
|
+
# Add to an existing project
|
|
100
|
+
uv add vibetuner
|
|
101
|
+
|
|
102
|
+
# With development dependencies
|
|
103
|
+
uv add vibetuner[dev]
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Quick Start
|
|
107
|
+
|
|
108
|
+
The recommended way to use Vibetuner is via the scaffolding tool:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
# Create a new project with all the framework code
|
|
112
|
+
uvx vibetuner scaffold new my-project
|
|
113
|
+
cd my-project
|
|
114
|
+
just dev
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
This will generate a complete project with:
|
|
118
|
+
|
|
119
|
+
- Pre-configured FastAPI application
|
|
120
|
+
- Authentication system (OAuth + magic links)
|
|
121
|
+
- MongoDB models and configuration
|
|
122
|
+
- Frontend templates and asset pipeline
|
|
123
|
+
- Docker setup for development and production
|
|
124
|
+
- CLI commands and background job infrastructure
|
|
125
|
+
|
|
126
|
+
## What's Included
|
|
127
|
+
|
|
128
|
+
### Core Framework (`src/vibetuner/`)
|
|
129
|
+
|
|
130
|
+
- **`frontend/`**: FastAPI app, routes, middleware, auth
|
|
131
|
+
- **`models/`**: User, OAuth, email verification, blob storage models
|
|
132
|
+
- **`services/`**: Email (SES), blob storage (S3)
|
|
133
|
+
- **`tasks/`**: Background job infrastructure
|
|
134
|
+
- **`cli/`**: CLI framework with scaffold, run commands
|
|
135
|
+
- **`config.py`**: Pydantic settings management
|
|
136
|
+
- **`mongo.py`**: MongoDB/Beanie setup
|
|
137
|
+
- **`logging.py`**: Structured logging configuration
|
|
138
|
+
|
|
139
|
+
### Blessed Dependencies
|
|
140
|
+
|
|
141
|
+
- **FastAPI** (0.121+): Modern, fast web framework
|
|
142
|
+
- **Beanie**: Async MongoDB ODM with Pydantic
|
|
143
|
+
- **Authlib**: OAuth 1.0/2.0 client
|
|
144
|
+
- **Granian**: High-performance ASGI server
|
|
145
|
+
- **Redis** + **Streaq**: Background task processing
|
|
146
|
+
- **Typer**: CLI framework
|
|
147
|
+
- **Rich**: Beautiful terminal output
|
|
148
|
+
- **Loguru**: Structured logging
|
|
149
|
+
- **Pydantic**: Data validation and settings
|
|
150
|
+
|
|
151
|
+
See [pyproject.toml](./pyproject.toml) for the complete dependency list.
|
|
152
|
+
|
|
153
|
+
## CLI Tools
|
|
154
|
+
|
|
155
|
+
When installed, provides the `vibetuner` command:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
# Create new project from template
|
|
159
|
+
vibetuner scaffold new my-project
|
|
160
|
+
vibetuner scaffold new my-project --defaults
|
|
161
|
+
|
|
162
|
+
# Update existing project
|
|
163
|
+
vibetuner scaffold update
|
|
164
|
+
|
|
165
|
+
# Run development server (in generated projects)
|
|
166
|
+
vibetuner run dev frontend
|
|
167
|
+
vibetuner run dev worker
|
|
168
|
+
|
|
169
|
+
# Run production server (in generated projects)
|
|
170
|
+
vibetuner run prod frontend
|
|
171
|
+
vibetuner run prod worker
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Development Dependencies
|
|
175
|
+
|
|
176
|
+
The `[dev]` extra includes all tools needed for development:
|
|
177
|
+
|
|
178
|
+
- **Ruff**: Fast linting and formatting
|
|
179
|
+
- **Babel**: i18n message extraction
|
|
180
|
+
- **pre-commit**: Git hooks
|
|
181
|
+
- **Type stubs**: For aioboto3, authlib, PyYAML
|
|
182
|
+
- And more...
|
|
183
|
+
|
|
184
|
+
## Usage in Generated Projects
|
|
185
|
+
|
|
186
|
+
In a Vibetuner-generated project, import from `vibetuner`:
|
|
187
|
+
|
|
188
|
+
```python
|
|
189
|
+
# Use core models
|
|
190
|
+
from vibetuner.models import UserModel, OAuthAccountModel
|
|
191
|
+
|
|
192
|
+
# Use services
|
|
193
|
+
from vibetuner.services.email import send_email
|
|
194
|
+
|
|
195
|
+
# Use configuration
|
|
196
|
+
from vibetuner.config import settings
|
|
197
|
+
|
|
198
|
+
# Extend core routes
|
|
199
|
+
from vibetuner.frontend import app
|
|
200
|
+
|
|
201
|
+
# Add your routes
|
|
202
|
+
@app.get("/api/hello")
|
|
203
|
+
async def hello():
|
|
204
|
+
return {"message": "Hello World"}
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
## Documentation
|
|
208
|
+
|
|
209
|
+
For complete documentation, guides, and examples, see the main Vibetuner repository:
|
|
210
|
+
|
|
211
|
+
**📖 [Vibetuner Documentation](https://vibetuner.alltuner.com/)**
|
|
212
|
+
|
|
213
|
+
## Package Ecosystem
|
|
214
|
+
|
|
215
|
+
Vibetuner consists of three packages that work together:
|
|
216
|
+
|
|
217
|
+
1. **vibetuner** (this package): Python framework and dependencies
|
|
218
|
+
2. **[@alltuner/vibetuner](https://www.npmjs.com/package/@alltuner/vibetuner)**: JavaScript/CSS build dependencies
|
|
219
|
+
3. **Scaffolding template**: Copier template for project generation
|
|
220
|
+
|
|
221
|
+
All three are version-locked and tested together to ensure compatibility.
|
|
222
|
+
|
|
223
|
+
## Contributing
|
|
224
|
+
|
|
225
|
+
Contributions welcome! See the main repository for contribution guidelines:
|
|
226
|
+
|
|
227
|
+
**🤝 [Contributing to Vibetuner](https://github.com/alltuner/vibetuner/blob/main/CONTRIBUTING.md)**
|
|
228
|
+
|
|
229
|
+
## License
|
|
230
|
+
|
|
231
|
+
MIT License - Copyright (c) 2025 All Tuner Labs, S.L.
|
|
232
|
+
|
|
233
|
+
See [LICENSE](https://github.com/alltuner/vibetuner/blob/main/LICENSE) for details.
|
|
234
|
+
|
|
235
|
+
## Links
|
|
236
|
+
|
|
237
|
+
- **Main Repository**: <https://github.com/alltuner/vibetuner>
|
|
238
|
+
- **Documentation**: <https://vibetuner.alltuner.com/>
|
|
239
|
+
- **Issues**: <https://github.com/alltuner/vibetuner/issues>
|
|
240
|
+
- **PyPI**: <https://pypi.org/project/vibetuner/>
|
|
241
|
+
- **npm Package**: <https://www.npmjs.com/package/@alltuner/vibetuner>
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
vibetuner/__init__.py,sha256=rFIVCmxkKTT_g477V8biCw0lgpudyuUabXhYxg189lY,90
|
|
2
|
+
vibetuner/__main__.py,sha256=Ye9oBAgXhcYQ4I4yZli3TIXF5lWQ9yY4tTPs4XnDDUY,29
|
|
3
|
+
vibetuner/cli/__init__.py,sha256=IY2wJ_ErX2PimyYSe5SL_zGrENSWLgW-cXgMRXNC7pE,1992
|
|
4
|
+
vibetuner/cli/run.py,sha256=mHvZypizNfVwdLo7k8SvBO7HPUF4Vka9hjJlECZCGfA,5009
|
|
5
|
+
vibetuner/cli/scaffold.py,sha256=qADWxx1gYECQ8N6dgvJmlucT6mZ29rxWu3VZhbWmhC0,5710
|
|
6
|
+
vibetuner/config.py,sha256=Z-o7jP1dLvPR0yVzW9wPvRgQezbl6Be40EpuG9i9Eos,4157
|
|
7
|
+
vibetuner/context.py,sha256=h4f4FfkmLlOD6WiSLhx7-IjFvIA4zcrsAp6478l6npg,743
|
|
8
|
+
vibetuner/frontend/__init__.py,sha256=QpQY9kUWvKzMtMCh9Lcoyz1dNdYfW1d_Ue4WUnzz_No,3017
|
|
9
|
+
vibetuner/frontend/context.py,sha256=yd9mJ8Cj9AUeHE533dofEoyCkw6oSPowdq397whfN_s,169
|
|
10
|
+
vibetuner/frontend/deps.py,sha256=b3ocC_ryaK2Jp51SfcFqckrXiaL7V-chkFRqLjzgA_c,1296
|
|
11
|
+
vibetuner/frontend/email.py,sha256=k0d7FCZCge5VYOKp3fLsbx7EA5_SrtBkpMs57o4W7u0,1119
|
|
12
|
+
vibetuner/frontend/hotreload.py,sha256=Gl7FIKJaiCVVoyWQqdErBUOKDP1cGBFUpGzqHMiJd10,285
|
|
13
|
+
vibetuner/frontend/lifespan.py,sha256=iKrRcEaPn5Q2B4ZZhMKzXE-hBM8OxjwMn6A5Q1FUbWY,679
|
|
14
|
+
vibetuner/frontend/middleware.py,sha256=aVsEeXGuBqcBB_IlmtBW_3icuvVix7P3A63AkyeX_38,4957
|
|
15
|
+
vibetuner/frontend/oauth.py,sha256=EzEwoOZ_8xn_CiqAWpNoEdhV2NPxZKKwF2bA6W6Bkj0,5884
|
|
16
|
+
vibetuner/frontend/routes/__init__.py,sha256=nHhiylHIUPZ2R-Bd7vXEGHLJBQ7fNuzPTJodjJR3lyc,428
|
|
17
|
+
vibetuner/frontend/routes/auth.py,sha256=vKE-Dm2yPXReaOLvcxfT4a6df1dKUoteZ4p46v8Elm4,4331
|
|
18
|
+
vibetuner/frontend/routes/debug.py,sha256=Mzbyx3gv_mCxg0sdjY4p7LXgH1wI3BoEyn1sRZuGY90,12743
|
|
19
|
+
vibetuner/frontend/routes/health.py,sha256=_XkMpdMNUemu7qzkGkqn5TBnZmGrArA3Xps5CWCcGlg,959
|
|
20
|
+
vibetuner/frontend/routes/language.py,sha256=wHNfdewqWfK-2JLXwglu0Q0b_e00HFGd0A2-PYT44LE,1240
|
|
21
|
+
vibetuner/frontend/routes/meta.py,sha256=pSyIxQsiB0QZSYwCQbS07KhkT5oHC5r9jvjUDIqZRGw,1409
|
|
22
|
+
vibetuner/frontend/routes/user.py,sha256=b8ow6IGnfsHosSwSmEIYZtuQJnW_tacnNjp_aMnqWxU,2666
|
|
23
|
+
vibetuner/frontend/templates.py,sha256=1k2jCGBdMx9U9RDcHmuO6fiNEXrRYZ0Mzk51H9XAlrM,5322
|
|
24
|
+
vibetuner/logging.py,sha256=9eNofqVtKZCBDS33NbBI7Sv2875gM8MNStTSCjX2AXQ,2409
|
|
25
|
+
vibetuner/models/__init__.py,sha256=JvmQvzDIxaI7zlk-ROCWEbuzxXSUOqCshINUjgu-AfQ,325
|
|
26
|
+
vibetuner/models/blob.py,sha256=F30HFS4Z_Bji_PGPflWIv4dOwqKLsEWQHcjW1Oz_79M,2523
|
|
27
|
+
vibetuner/models/email_verification.py,sha256=iwDnbPhceugY6vQZwyp0AKCEID61NbAxqA7tdQKHHAI,2488
|
|
28
|
+
vibetuner/models/mixins.py,sha256=934aAcdos_SlDMyiARBV8dhhClgtaVpf0O7OJf4d6YQ,3053
|
|
29
|
+
vibetuner/models/oauth.py,sha256=BdOZbW47Das9ntHTtRmVdl1lB5zLCcXW2fyVJ-tQ_F8,1509
|
|
30
|
+
vibetuner/models/registry.py,sha256=O5YG7vOrWluqpH5N7m44v72wbscMhU_Pu3TJw_u0MTk,311
|
|
31
|
+
vibetuner/models/types.py,sha256=Lj3ASEvx5eNgQMcVhNyKQHHolJqDxj2yH8S-M9oa4J8,402
|
|
32
|
+
vibetuner/models/user.py,sha256=ttcSH4mVREPhA6bCFUWXKfJ9_8_Iq3lEYXe3rDrslw4,2696
|
|
33
|
+
vibetuner/mongo.py,sha256=F8AzD33LWQ6jq7kFUqQPSPDSr7KPlbOy8THsvXHFKdg,504
|
|
34
|
+
vibetuner/paths.py,sha256=WFHuaanFOBI7v7xOHjyLvNMYKwX0KqOyi63x62wLE-M,7470
|
|
35
|
+
vibetuner/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
+
vibetuner/services/blob.py,sha256=-lEGIWe30yR2IuTfy5bB9Sg_PX0HoYC_WMTQ3VN28gU,5660
|
|
37
|
+
vibetuner/services/email.py,sha256=IavJZS5MI40LlF_cjBpPPRx_S2r1JD4GcFg3-dWkzPA,1626
|
|
38
|
+
vibetuner/tasks/__init__.py,sha256=uETtKOA5rJ48NBx-LN4niRJDzkb6--NHAPW3jReHABI,71
|
|
39
|
+
vibetuner/tasks/context.py,sha256=FOFUDWGNo1h8G8qlE-1Gbkh-Kd1z3WZTqSMHkvZ68v8,869
|
|
40
|
+
vibetuner/tasks/worker.py,sha256=-PKQ2kqvMe8X5ninULh3Vrp3M-gwh-ht2kmitvkHTVg,429
|
|
41
|
+
vibetuner/templates/email/magic_link.html.jinja,sha256=DzaCnBsYoau2JQh5enPAa2FMFFTyCwdyiM3vGhBQdtA,553
|
|
42
|
+
vibetuner/templates/email/magic_link.txt.jinja,sha256=dANak9ion1cpILt45V3GcI2qnL_gKFPj7PsZKYV0m5s,200
|
|
43
|
+
vibetuner/templates/frontend/base/favicons.html.jinja,sha256=A7s7YXuE82tRd7ZLJs1jGEGwBRiMPrqlWd507xL1iZg,70
|
|
44
|
+
vibetuner/templates/frontend/base/footer.html.jinja,sha256=P5EKssUk-HHz0yFE3auj1WtSqsJxAzi39XbRxjBtLLg,165
|
|
45
|
+
vibetuner/templates/frontend/base/header.html.jinja,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
46
|
+
vibetuner/templates/frontend/base/opengraph.html.jinja,sha256=wjmLAE3C4OZqxPhPCce1kD3XDN-BZgp3v0GwlToUoBc,419
|
|
47
|
+
vibetuner/templates/frontend/base/skeleton.html.jinja,sha256=uOEUt577Mfv83nLOKLPKvBJHh8PG6w7YwDYv1GVwnaQ,1698
|
|
48
|
+
vibetuner/templates/frontend/debug/collections.html.jinja,sha256=LogTicEMSzy-sYrHQ8Kjqf_6Il9Cv5cRElMgivcJC2U,7094
|
|
49
|
+
vibetuner/templates/frontend/debug/components/debug_nav.html.jinja,sha256=SntW7esMV6TDkIHcoevZX7j-fCv3h6pblOJ--_-5fUI,2963
|
|
50
|
+
vibetuner/templates/frontend/debug/index.html.jinja,sha256=qheuA53UYGBBeVvsNL8APJ2Y7FxjL3g8LWafY2U1MSA,4892
|
|
51
|
+
vibetuner/templates/frontend/debug/info.html.jinja,sha256=Z9yZxW-dyOZ1kWsY1_ZX7jvPQ4IaM9hJMVD6Sk8QxgA,14968
|
|
52
|
+
vibetuner/templates/frontend/debug/users.html.jinja,sha256=BjTiJbOMadZYZJYvtYW0KeFcYN7ooI7_YylhOnfbLD4,7809
|
|
53
|
+
vibetuner/templates/frontend/debug/version.html.jinja,sha256=pJ-QuDRuvB7X04nC43upZiXLaFCC6vmI5QhRS62rt6k,2901
|
|
54
|
+
vibetuner/templates/frontend/email/magic_link.txt.jinja,sha256=fTVl3Wjfvp3EJAB5DYt01EL_O7o9r8lHedDH05YP44c,192
|
|
55
|
+
vibetuner/templates/frontend/email_sent.html.jinja,sha256=Pq3J_WOwY_zFe9QJkvO29o6pw06JEnYxh068kyl_ZEg,5236
|
|
56
|
+
vibetuner/templates/frontend/index.html.jinja,sha256=m8_xNS1O7JlrfWOHy0y7prf64HyVokQEeKvFqRWjxrQ,925
|
|
57
|
+
vibetuner/templates/frontend/lang/select.html.jinja,sha256=4jHo8QWvMOIeK_KqHzSaDzgvuT3v8MlmjTrrYIl2sjk,224
|
|
58
|
+
vibetuner/templates/frontend/login.html.jinja,sha256=Y_dKk47-H6M8StepiFXntJcorBNXiOXKjORJN--SjOA,5548
|
|
59
|
+
vibetuner/templates/frontend/meta/browserconfig.xml.jinja,sha256=5DE-Dowxw3fRg4UJerW6tVrUYdHWUsUOfS_YucoRVXQ,300
|
|
60
|
+
vibetuner/templates/frontend/meta/robots.txt.jinja,sha256=SUBJqQCOW5FFdD4uIkReo04NcAYnjITLyB4Wk1wBcS4,46
|
|
61
|
+
vibetuner/templates/frontend/meta/site.webmanifest.jinja,sha256=QCg2Z2GXd2AwJ3C8CnW9Brvu3cbXcZiquLNEzA8FsOc,150
|
|
62
|
+
vibetuner/templates/frontend/meta/sitemap.xml.jinja,sha256=IhBjk7p5OdqszyK6DR3eUAdeAucKk2s_PpnOfYxgNCo,170
|
|
63
|
+
vibetuner/templates/frontend/user/edit.html.jinja,sha256=dhmLFsokTWbtnmIE10S8gC6rDHToC6vNIUB2BRximKQ,5443
|
|
64
|
+
vibetuner/templates/frontend/user/profile.html.jinja,sha256=qXFonyeCy99JE5o3rEtaOHtnxgg2-AlNykwIZyxpk_M,9964
|
|
65
|
+
vibetuner/templates/markdown/.placeholder,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
66
|
+
vibetuner/templates.py,sha256=xRoMb_oyAI5x4kxfpg56UcLKkT8e9HVn-o3KFAu9ISE,5094
|
|
67
|
+
vibetuner/time.py,sha256=3_DtveCCzI20ocTnAlTh2u7FByUXtINaUoQZO-_uZow,1188
|
|
68
|
+
vibetuner/versioning.py,sha256=UAHGoNsv3QEPAJgHyt_Q8I26SW7ng2FnZlX2-0M6r6U,156
|
|
69
|
+
vibetuner-2.18.1.dist-info/WHEEL,sha256=DpNsHFUm_gffZe1FgzmqwuqiuPC6Y-uBCzibcJcdupM,78
|
|
70
|
+
vibetuner-2.18.1.dist-info/entry_points.txt,sha256=aKIj9YCCXizjYupx9PeWkUJePg3ncHke_LTS5rmCsfs,49
|
|
71
|
+
vibetuner-2.18.1.dist-info/METADATA,sha256=c_aNrSkA_hSWfazWl6Nn-9O38DWtgnofBZanp8892fo,8061
|
|
72
|
+
vibetuner-2.18.1.dist-info/RECORD,,
|
vibetuner/frontend/AGENTS.md
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
# Core Frontend Module
|
|
2
|
-
|
|
3
|
-
**IMMUTABLE SCAFFOLDING CODE** - This is the framework's core frontend infrastructure.
|
|
4
|
-
|
|
5
|
-
## What's Here
|
|
6
|
-
|
|
7
|
-
This module contains the scaffolding's core frontend components:
|
|
8
|
-
|
|
9
|
-
- **routes/** - Essential default routes (auth, health, debug, language, user, meta)
|
|
10
|
-
- **templates.py** - Template rendering with automatic context injection
|
|
11
|
-
- **deps.py** - FastAPI dependencies (authentication, language, etc.)
|
|
12
|
-
- **middleware.py** - Request/response middleware
|
|
13
|
-
- **oauth.py** - OAuth provider integration
|
|
14
|
-
- **email.py** - Magic link email authentication
|
|
15
|
-
- **lifespan.py** - Application startup/shutdown lifecycle
|
|
16
|
-
- **context.py** - Request context management
|
|
17
|
-
- **hotreload.py** - Development hot-reload support
|
|
18
|
-
|
|
19
|
-
## Important Rules
|
|
20
|
-
|
|
21
|
-
⚠️ **DO NOT MODIFY** these core frontend components directly.
|
|
22
|
-
|
|
23
|
-
**For changes to core frontend:**
|
|
24
|
-
|
|
25
|
-
- File an issue at `https://github.com/alltuner/scaffolding`
|
|
26
|
-
- Core changes benefit all projects using the scaffolding
|
|
27
|
-
|
|
28
|
-
**For your application routes:**
|
|
29
|
-
|
|
30
|
-
- Create them in `src/app/frontend/routes/` instead
|
|
31
|
-
- Import core components when needed:
|
|
32
|
-
- `from vibetuner.frontend.deps import get_current_user`
|
|
33
|
-
- `from vibetuner.frontend.templates import render_template`
|
|
34
|
-
|
|
35
|
-
## User Route Pattern (for reference)
|
|
36
|
-
|
|
37
|
-
Your application routes in `src/app/frontend/routes/` should follow this pattern:
|
|
38
|
-
|
|
39
|
-
```python
|
|
40
|
-
# src/app/frontend/routes/dashboard.py
|
|
41
|
-
from fastapi import APIRouter, Request, Depends
|
|
42
|
-
from vibetuner.frontend.deps import get_current_user
|
|
43
|
-
from vibetuner.frontend.templates import render_template
|
|
44
|
-
|
|
45
|
-
router = APIRouter()
|
|
46
|
-
|
|
47
|
-
@router.get("/dashboard")
|
|
48
|
-
async def dashboard(request: Request, user=Depends(get_current_user)):
|
|
49
|
-
return render_template("dashboard.html.jinja", request, {"user": user})
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Template Rendering
|
|
53
|
-
|
|
54
|
-
```python
|
|
55
|
-
# Automatic context in every template:
|
|
56
|
-
{
|
|
57
|
-
"request": request,
|
|
58
|
-
"DEBUG": settings.DEBUG,
|
|
59
|
-
"hotreload": hotreload, # Dev mode
|
|
60
|
-
# ... plus your custom context
|
|
61
|
-
}
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### Template Filters
|
|
65
|
-
|
|
66
|
-
- `{{ datetime | timeago }}` - "2 hours ago"
|
|
67
|
-
- `{{ datetime | format_date }}` - "January 15, 2024"
|
|
68
|
-
- `{{ text | markdown }}` - Convert Markdown to HTML
|
|
69
|
-
|
|
70
|
-
## Core Dependencies Available
|
|
71
|
-
|
|
72
|
-
Import these from `vibetuner.frontend.deps`:
|
|
73
|
-
|
|
74
|
-
- `get_current_user` - Require authenticated user (raises 403 if not authenticated)
|
|
75
|
-
- `get_current_user_optional` - Optional auth check (returns None if not authenticated)
|
|
76
|
-
- `LangDep` - Current language from cookie/header
|
|
77
|
-
- `MagicCookieDep` - Magic link cookie for authentication
|
|
78
|
-
|
|
79
|
-
## HTMX Patterns
|
|
80
|
-
|
|
81
|
-
```html
|
|
82
|
-
<!-- Partial updates -->
|
|
83
|
-
<button hx-post="/api/action" hx-target="#result">Click</button>
|
|
84
|
-
|
|
85
|
-
<!-- Form submission -->
|
|
86
|
-
<form hx-post="/submit" hx-swap="outerHTML">...</form>
|
|
87
|
-
|
|
88
|
-
<!-- Polling -->
|
|
89
|
-
<div hx-get="/status" hx-trigger="every 2s">...</div>
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
## Default Routes Provided
|
|
93
|
-
|
|
94
|
-
The following routes are automatically available (DO NOT MODIFY):
|
|
95
|
-
|
|
96
|
-
- **/auth/*** - OAuth and magic link authentication
|
|
97
|
-
- **/health/ping** - Health check endpoint
|
|
98
|
-
- **/debug/** - Debug info (only in DEBUG mode)
|
|
99
|
-
- **/lang/** - Language selection
|
|
100
|
-
- **/user/** - User profile routes
|
|
101
|
-
- **/meta/** - Metadata endpoints
|
|
102
|
-
|
|
103
|
-
## Development
|
|
104
|
-
|
|
105
|
-
**CRITICAL**: Both processes required:
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
# Terminal 1: Frontend assets
|
|
109
|
-
bun dev
|
|
110
|
-
|
|
111
|
-
# Terminal 2: Backend server
|
|
112
|
-
just local-dev
|
|
113
|
-
```
|
vibetuner/frontend/CLAUDE.md
DELETED
|
@@ -1,113 +0,0 @@
|
|
|
1
|
-
# Core Frontend Module
|
|
2
|
-
|
|
3
|
-
**IMMUTABLE SCAFFOLDING CODE** - This is the framework's core frontend infrastructure.
|
|
4
|
-
|
|
5
|
-
## What's Here
|
|
6
|
-
|
|
7
|
-
This module contains the scaffolding's core frontend components:
|
|
8
|
-
|
|
9
|
-
- **routes/** - Essential default routes (auth, health, debug, language, user, meta)
|
|
10
|
-
- **templates.py** - Template rendering with automatic context injection
|
|
11
|
-
- **deps.py** - FastAPI dependencies (authentication, language, etc.)
|
|
12
|
-
- **middleware.py** - Request/response middleware
|
|
13
|
-
- **oauth.py** - OAuth provider integration
|
|
14
|
-
- **email.py** - Magic link email authentication
|
|
15
|
-
- **lifespan.py** - Application startup/shutdown lifecycle
|
|
16
|
-
- **context.py** - Request context management
|
|
17
|
-
- **hotreload.py** - Development hot-reload support
|
|
18
|
-
|
|
19
|
-
## Important Rules
|
|
20
|
-
|
|
21
|
-
⚠️ **DO NOT MODIFY** these core frontend components directly.
|
|
22
|
-
|
|
23
|
-
**For changes to core frontend:**
|
|
24
|
-
|
|
25
|
-
- File an issue at `https://github.com/alltuner/scaffolding`
|
|
26
|
-
- Core changes benefit all projects using the scaffolding
|
|
27
|
-
|
|
28
|
-
**For your application routes:**
|
|
29
|
-
|
|
30
|
-
- Create them in `src/app/frontend/routes/` instead
|
|
31
|
-
- Import core components when needed:
|
|
32
|
-
- `from vibetuner.frontend.deps import get_current_user`
|
|
33
|
-
- `from vibetuner.frontend.templates import render_template`
|
|
34
|
-
|
|
35
|
-
## User Route Pattern (for reference)
|
|
36
|
-
|
|
37
|
-
Your application routes in `src/app/frontend/routes/` should follow this pattern:
|
|
38
|
-
|
|
39
|
-
```python
|
|
40
|
-
# src/app/frontend/routes/dashboard.py
|
|
41
|
-
from fastapi import APIRouter, Request, Depends
|
|
42
|
-
from vibetuner.frontend.deps import get_current_user
|
|
43
|
-
from vibetuner.frontend.templates import render_template
|
|
44
|
-
|
|
45
|
-
router = APIRouter()
|
|
46
|
-
|
|
47
|
-
@router.get("/dashboard")
|
|
48
|
-
async def dashboard(request: Request, user=Depends(get_current_user)):
|
|
49
|
-
return render_template("dashboard.html.jinja", request, {"user": user})
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
## Template Rendering
|
|
53
|
-
|
|
54
|
-
```python
|
|
55
|
-
# Automatic context in every template:
|
|
56
|
-
{
|
|
57
|
-
"request": request,
|
|
58
|
-
"DEBUG": settings.DEBUG,
|
|
59
|
-
"hotreload": hotreload, # Dev mode
|
|
60
|
-
# ... plus your custom context
|
|
61
|
-
}
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
### Template Filters
|
|
65
|
-
|
|
66
|
-
- `{{ datetime | timeago }}` - "2 hours ago"
|
|
67
|
-
- `{{ datetime | format_date }}` - "January 15, 2024"
|
|
68
|
-
- `{{ text | markdown }}` - Convert Markdown to HTML
|
|
69
|
-
|
|
70
|
-
## Core Dependencies Available
|
|
71
|
-
|
|
72
|
-
Import these from `vibetuner.frontend.deps`:
|
|
73
|
-
|
|
74
|
-
- `get_current_user` - Require authenticated user (raises 403 if not authenticated)
|
|
75
|
-
- `get_current_user_optional` - Optional auth check (returns None if not authenticated)
|
|
76
|
-
- `LangDep` - Current language from cookie/header
|
|
77
|
-
- `MagicCookieDep` - Magic link cookie for authentication
|
|
78
|
-
|
|
79
|
-
## HTMX Patterns
|
|
80
|
-
|
|
81
|
-
```html
|
|
82
|
-
<!-- Partial updates -->
|
|
83
|
-
<button hx-post="/api/action" hx-target="#result">Click</button>
|
|
84
|
-
|
|
85
|
-
<!-- Form submission -->
|
|
86
|
-
<form hx-post="/submit" hx-swap="outerHTML">...</form>
|
|
87
|
-
|
|
88
|
-
<!-- Polling -->
|
|
89
|
-
<div hx-get="/status" hx-trigger="every 2s">...</div>
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
## Default Routes Provided
|
|
93
|
-
|
|
94
|
-
The following routes are automatically available (DO NOT MODIFY):
|
|
95
|
-
|
|
96
|
-
- **/auth/*** - OAuth and magic link authentication
|
|
97
|
-
- **/health/ping** - Health check endpoint
|
|
98
|
-
- **/debug/** - Debug info (only in DEBUG mode)
|
|
99
|
-
- **/lang/** - Language selection
|
|
100
|
-
- **/user/** - User profile routes
|
|
101
|
-
- **/meta/** - Metadata endpoints
|
|
102
|
-
|
|
103
|
-
## Development
|
|
104
|
-
|
|
105
|
-
**CRITICAL**: Both processes required:
|
|
106
|
-
|
|
107
|
-
```bash
|
|
108
|
-
# Terminal 1: Frontend assets
|
|
109
|
-
bun dev
|
|
110
|
-
|
|
111
|
-
# Terminal 2: Backend server
|
|
112
|
-
just local-dev
|
|
113
|
-
```
|