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.

Files changed (52) hide show
  1. vibetuner/cli/__init__.py +13 -2
  2. vibetuner/cli/run.py +0 -1
  3. vibetuner/cli/scaffold.py +187 -0
  4. vibetuner/config.py +27 -11
  5. vibetuner/context.py +3 -0
  6. vibetuner/frontend/__init__.py +7 -2
  7. vibetuner/frontend/lifespan.py +12 -7
  8. vibetuner/frontend/middleware.py +3 -3
  9. vibetuner/frontend/routes/auth.py +19 -13
  10. vibetuner/frontend/routes/debug.py +1 -1
  11. vibetuner/frontend/routes/health.py +4 -0
  12. vibetuner/frontend/routes/user.py +1 -1
  13. vibetuner/mongo.py +1 -1
  14. vibetuner/paths.py +197 -80
  15. vibetuner/tasks/worker.py +1 -1
  16. vibetuner/templates/email/{default/magic_link.html.jinja → magic_link.html.jinja} +2 -1
  17. vibetuner/templates/frontend/base/favicons.html.jinja +1 -1
  18. vibetuner/templates/frontend/base/skeleton.html.jinja +5 -2
  19. vibetuner/templates/frontend/debug/collections.html.jinja +2 -0
  20. vibetuner/templates/frontend/debug/components/debug_nav.html.jinja +6 -6
  21. vibetuner/templates/frontend/debug/index.html.jinja +6 -4
  22. vibetuner/templates/frontend/debug/info.html.jinja +2 -0
  23. vibetuner/templates/frontend/debug/users.html.jinja +4 -2
  24. vibetuner/templates/frontend/debug/version.html.jinja +2 -0
  25. vibetuner/templates/frontend/email_sent.html.jinja +2 -1
  26. vibetuner/templates/frontend/index.html.jinja +1 -0
  27. vibetuner/templates/frontend/login.html.jinja +8 -3
  28. vibetuner/templates/frontend/user/edit.html.jinja +3 -2
  29. vibetuner/templates/frontend/user/profile.html.jinja +2 -1
  30. vibetuner/templates.py +9 -15
  31. vibetuner/versioning.py +1 -1
  32. vibetuner-2.18.1.dist-info/METADATA +241 -0
  33. vibetuner-2.18.1.dist-info/RECORD +72 -0
  34. {vibetuner-2.7.0.dist-info → vibetuner-2.18.1.dist-info}/WHEEL +1 -1
  35. vibetuner-2.18.1.dist-info/entry_points.txt +3 -0
  36. vibetuner/frontend/AGENTS.md +0 -113
  37. vibetuner/frontend/CLAUDE.md +0 -113
  38. vibetuner/models/AGENTS.md +0 -165
  39. vibetuner/models/CLAUDE.md +0 -165
  40. vibetuner/services/AGENTS.md +0 -104
  41. vibetuner/services/CLAUDE.md +0 -104
  42. vibetuner/tasks/AGENTS.md +0 -98
  43. vibetuner/tasks/CLAUDE.md +0 -98
  44. vibetuner/templates/email/AGENTS.md +0 -48
  45. vibetuner/templates/email/CLAUDE.md +0 -48
  46. vibetuner/templates/frontend/AGENTS.md +0 -74
  47. vibetuner/templates/frontend/CLAUDE.md +0 -74
  48. vibetuner/templates/markdown/AGENTS.md +0 -29
  49. vibetuner/templates/markdown/CLAUDE.md +0 -29
  50. vibetuner-2.7.0.dist-info/METADATA +0 -48
  51. vibetuner-2.7.0.dist-info/RECORD +0 -84
  52. /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 .paths import (
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
- paths = []
34
- if app_templates is not None:
35
- paths.append(app_templates)
36
- paths.append(core_templates)
37
- return paths
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
@@ -1,7 +1,7 @@
1
1
  __version__ = "0.0.0-default"
2
2
 
3
3
  try:
4
- from .._version import version as __version__ # type: ignore
4
+ from app._version import version as __version__ # type: ignore
5
5
  except ImportError:
6
6
  pass
7
7
 
@@ -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,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: uv 0.9.7
2
+ Generator: uv 0.9.8
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ vibetuner = vibetuner.cli:app
3
+
@@ -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
- ```
@@ -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
- ```