vibetuner 2.14.1__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/config.py +20 -9
- vibetuner/context.py +3 -0
- vibetuner/frontend/lifespan.py +12 -7
- vibetuner/frontend/middleware.py +2 -2
- vibetuner/frontend/routes/debug.py +1 -1
- vibetuner/frontend/routes/user.py +1 -1
- vibetuner/mongo.py +3 -3
- 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-2.14.1.dist-info → vibetuner-2.18.1.dist-info}/METADATA +20 -17
- {vibetuner-2.14.1.dist-info → vibetuner-2.18.1.dist-info}/RECORD +27 -41
- {vibetuner-2.14.1.dist-info → vibetuner-2.18.1.dist-info}/WHEEL +1 -1
- 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/templates/email/{default/magic_link.txt.jinja → magic_link.txt.jinja} +0 -0
- {vibetuner-2.14.1.dist-info → vibetuner-2.18.1.dist-info}/entry_points.txt +0 -0
vibetuner/services/AGENTS.md
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
# Core Services Module
|
|
2
|
-
|
|
3
|
-
**IMMUTABLE SCAFFOLDING CODE** - These are the framework's core services that provide essential functionality.
|
|
4
|
-
|
|
5
|
-
## What's Here
|
|
6
|
-
|
|
7
|
-
This module contains the scaffolding's core services:
|
|
8
|
-
|
|
9
|
-
- **email.py** - Email sending via AWS SES
|
|
10
|
-
- **blob.py** - File storage and blob management
|
|
11
|
-
|
|
12
|
-
## Important Rules
|
|
13
|
-
|
|
14
|
-
⚠️ **DO NOT MODIFY** these core services directly.
|
|
15
|
-
|
|
16
|
-
**For changes to core services:**
|
|
17
|
-
|
|
18
|
-
- File an issue at `https://github.com/alltuner/scaffolding`
|
|
19
|
-
- Core changes benefit all projects using the scaffolding
|
|
20
|
-
|
|
21
|
-
**For your application services:**
|
|
22
|
-
|
|
23
|
-
- Create them in `src/app/services/` instead
|
|
24
|
-
- Import core services when needed: `from vibetuner.services.email import send_email`
|
|
25
|
-
|
|
26
|
-
## User Service Pattern (for reference)
|
|
27
|
-
|
|
28
|
-
Your application services in `src/app/services/` should follow this pattern:
|
|
29
|
-
|
|
30
|
-
```python
|
|
31
|
-
from vibetuner.models import UserModel
|
|
32
|
-
|
|
33
|
-
class NotificationService:
|
|
34
|
-
async def send_notification(
|
|
35
|
-
self,
|
|
36
|
-
user: UserModel,
|
|
37
|
-
message: str,
|
|
38
|
-
priority: str = "normal"
|
|
39
|
-
) -> bool:
|
|
40
|
-
# Implementation
|
|
41
|
-
return True
|
|
42
|
-
|
|
43
|
-
# Singleton
|
|
44
|
-
notification_service = NotificationService()
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Using Core Services
|
|
48
|
-
|
|
49
|
-
### Email Service
|
|
50
|
-
|
|
51
|
-
```python
|
|
52
|
-
from vibetuner.services.email import send_email
|
|
53
|
-
|
|
54
|
-
await send_email(
|
|
55
|
-
to_email="user@example.com",
|
|
56
|
-
subject="Welcome",
|
|
57
|
-
html_content="<h1>Welcome!</h1>",
|
|
58
|
-
text_content="Welcome!"
|
|
59
|
-
)
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### Blob Service
|
|
63
|
-
|
|
64
|
-
```python
|
|
65
|
-
from vibetuner.services.blob import blob_service
|
|
66
|
-
|
|
67
|
-
# Upload file
|
|
68
|
-
blob = await blob_service.upload(file_data, "image.png")
|
|
69
|
-
|
|
70
|
-
# Get file URL
|
|
71
|
-
url = await blob_service.get_url(blob.id)
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## Creating Your Own Services
|
|
75
|
-
|
|
76
|
-
Place your application services in `src/app/services/`:
|
|
77
|
-
|
|
78
|
-
```python
|
|
79
|
-
# src/app/services/external_api.py
|
|
80
|
-
import httpx
|
|
81
|
-
|
|
82
|
-
async def call_api(api_url: str, api_key: str, data: dict) -> dict:
|
|
83
|
-
async with httpx.AsyncClient() as client:
|
|
84
|
-
response = await client.post(
|
|
85
|
-
api_url,
|
|
86
|
-
json=data,
|
|
87
|
-
headers={"Authorization": f"Bearer {api_key}"}
|
|
88
|
-
)
|
|
89
|
-
response.raise_for_status()
|
|
90
|
-
return response.json()
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## Dependency Injection
|
|
94
|
-
|
|
95
|
-
```python
|
|
96
|
-
from fastapi import Depends
|
|
97
|
-
|
|
98
|
-
@router.post("/notify")
|
|
99
|
-
async def notify(
|
|
100
|
-
message: str,
|
|
101
|
-
service=Depends(lambda: notification_service)
|
|
102
|
-
):
|
|
103
|
-
await service.send_notification(user, message)
|
|
104
|
-
```
|
vibetuner/services/CLAUDE.md
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
# Core Services Module
|
|
2
|
-
|
|
3
|
-
**IMMUTABLE SCAFFOLDING CODE** - These are the framework's core services that provide essential functionality.
|
|
4
|
-
|
|
5
|
-
## What's Here
|
|
6
|
-
|
|
7
|
-
This module contains the scaffolding's core services:
|
|
8
|
-
|
|
9
|
-
- **email.py** - Email sending via AWS SES
|
|
10
|
-
- **blob.py** - File storage and blob management
|
|
11
|
-
|
|
12
|
-
## Important Rules
|
|
13
|
-
|
|
14
|
-
⚠️ **DO NOT MODIFY** these core services directly.
|
|
15
|
-
|
|
16
|
-
**For changes to core services:**
|
|
17
|
-
|
|
18
|
-
- File an issue at `https://github.com/alltuner/scaffolding`
|
|
19
|
-
- Core changes benefit all projects using the scaffolding
|
|
20
|
-
|
|
21
|
-
**For your application services:**
|
|
22
|
-
|
|
23
|
-
- Create them in `src/app/services/` instead
|
|
24
|
-
- Import core services when needed: `from vibetuner.services.email import send_email`
|
|
25
|
-
|
|
26
|
-
## User Service Pattern (for reference)
|
|
27
|
-
|
|
28
|
-
Your application services in `src/app/services/` should follow this pattern:
|
|
29
|
-
|
|
30
|
-
```python
|
|
31
|
-
from vibetuner.models import UserModel
|
|
32
|
-
|
|
33
|
-
class NotificationService:
|
|
34
|
-
async def send_notification(
|
|
35
|
-
self,
|
|
36
|
-
user: UserModel,
|
|
37
|
-
message: str,
|
|
38
|
-
priority: str = "normal"
|
|
39
|
-
) -> bool:
|
|
40
|
-
# Implementation
|
|
41
|
-
return True
|
|
42
|
-
|
|
43
|
-
# Singleton
|
|
44
|
-
notification_service = NotificationService()
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
## Using Core Services
|
|
48
|
-
|
|
49
|
-
### Email Service
|
|
50
|
-
|
|
51
|
-
```python
|
|
52
|
-
from vibetuner.services.email import send_email
|
|
53
|
-
|
|
54
|
-
await send_email(
|
|
55
|
-
to_email="user@example.com",
|
|
56
|
-
subject="Welcome",
|
|
57
|
-
html_content="<h1>Welcome!</h1>",
|
|
58
|
-
text_content="Welcome!"
|
|
59
|
-
)
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
### Blob Service
|
|
63
|
-
|
|
64
|
-
```python
|
|
65
|
-
from vibetuner.services.blob import blob_service
|
|
66
|
-
|
|
67
|
-
# Upload file
|
|
68
|
-
blob = await blob_service.upload(file_data, "image.png")
|
|
69
|
-
|
|
70
|
-
# Get file URL
|
|
71
|
-
url = await blob_service.get_url(blob.id)
|
|
72
|
-
```
|
|
73
|
-
|
|
74
|
-
## Creating Your Own Services
|
|
75
|
-
|
|
76
|
-
Place your application services in `src/app/services/`:
|
|
77
|
-
|
|
78
|
-
```python
|
|
79
|
-
# src/app/services/external_api.py
|
|
80
|
-
import httpx
|
|
81
|
-
|
|
82
|
-
async def call_api(api_url: str, api_key: str, data: dict) -> dict:
|
|
83
|
-
async with httpx.AsyncClient() as client:
|
|
84
|
-
response = await client.post(
|
|
85
|
-
api_url,
|
|
86
|
-
json=data,
|
|
87
|
-
headers={"Authorization": f"Bearer {api_key}"}
|
|
88
|
-
)
|
|
89
|
-
response.raise_for_status()
|
|
90
|
-
return response.json()
|
|
91
|
-
```
|
|
92
|
-
|
|
93
|
-
## Dependency Injection
|
|
94
|
-
|
|
95
|
-
```python
|
|
96
|
-
from fastapi import Depends
|
|
97
|
-
|
|
98
|
-
@router.post("/notify")
|
|
99
|
-
async def notify(
|
|
100
|
-
message: str,
|
|
101
|
-
service=Depends(lambda: notification_service)
|
|
102
|
-
):
|
|
103
|
-
await service.send_notification(user, message)
|
|
104
|
-
```
|
vibetuner/tasks/AGENTS.md
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
# Core Tasks Module
|
|
2
|
-
|
|
3
|
-
**IMMUTABLE SCAFFOLDING CODE** - This is the framework's core background task infrastructure.
|
|
4
|
-
|
|
5
|
-
## What's Here
|
|
6
|
-
|
|
7
|
-
This module contains the scaffolding's core task components:
|
|
8
|
-
|
|
9
|
-
- **worker.py** - Streaq worker setup and configuration
|
|
10
|
-
- **context.py** - Task context management (DB, HTTP client, etc.)
|
|
11
|
-
- ****init**.py** - Task infrastructure exports
|
|
12
|
-
|
|
13
|
-
## Important Rules
|
|
14
|
-
|
|
15
|
-
⚠️ **DO NOT MODIFY** these core task components directly.
|
|
16
|
-
|
|
17
|
-
**For changes to core tasks:**
|
|
18
|
-
|
|
19
|
-
- File an issue at `https://github.com/alltuner/scaffolding`
|
|
20
|
-
- Core changes benefit all projects using the scaffolding
|
|
21
|
-
|
|
22
|
-
**For your application tasks:**
|
|
23
|
-
|
|
24
|
-
- Create them in `src/app/tasks/` instead
|
|
25
|
-
- Import the worker from vibetuner: `from vibetuner.tasks.worker import worker`
|
|
26
|
-
|
|
27
|
-
## Quick Reference
|
|
28
|
-
|
|
29
|
-
Tasks are only available if job queue was enabled during scaffolding.
|
|
30
|
-
|
|
31
|
-
The worker is defined in `vibetuner.tasks.worker` and should be imported from there in your app tasks.
|
|
32
|
-
|
|
33
|
-
## User Task Pattern (for reference)
|
|
34
|
-
|
|
35
|
-
Your application tasks in `src/app/tasks/` should follow this pattern:
|
|
36
|
-
|
|
37
|
-
```python
|
|
38
|
-
# src/app/tasks/emails.py
|
|
39
|
-
from vibetuner.models import UserModel
|
|
40
|
-
from vibetuner.tasks.worker import worker
|
|
41
|
-
|
|
42
|
-
@worker.task()
|
|
43
|
-
async def send_welcome_email(user_id: str) -> dict[str, str]:
|
|
44
|
-
"""Example background job."""
|
|
45
|
-
|
|
46
|
-
# Access context
|
|
47
|
-
res = await worker.context.http_client.get(url)
|
|
48
|
-
|
|
49
|
-
if user := await UserModel.get(user_id):
|
|
50
|
-
# Perform side effects
|
|
51
|
-
return {"status": "sent", "user": user.email}
|
|
52
|
-
return {"status": "skipped"}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## Queueing Tasks
|
|
56
|
-
|
|
57
|
-
```python
|
|
58
|
-
# In your routes: src/app/frontend/routes/auth.py
|
|
59
|
-
from app.tasks.emails import send_welcome_email
|
|
60
|
-
|
|
61
|
-
@router.post("/signup")
|
|
62
|
-
async def signup(email: str):
|
|
63
|
-
user = await create_user(email)
|
|
64
|
-
|
|
65
|
-
task = await send_welcome_email.enqueue(user.id)
|
|
66
|
-
# Optional: await task.result() or check task.id
|
|
67
|
-
|
|
68
|
-
return {"status": "registered", "job_id": task.id}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
Note: Import your task functions from `src/app/tasks/` but the worker itself comes from `vibetuner.tasks.worker`.
|
|
72
|
-
|
|
73
|
-
## Worker Management
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
just worker-dev # Run worker locally with auto-reload
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## Task Registration
|
|
80
|
-
|
|
81
|
-
Add new task modules at the end of `src/app/tasks/__init__.py`:
|
|
82
|
-
|
|
83
|
-
```python
|
|
84
|
-
# src/app/tasks/__init__.py
|
|
85
|
-
# Import your task modules so decorators register with worker
|
|
86
|
-
from . import emails # noqa: F401
|
|
87
|
-
from . import new_tasks # noqa: F401
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
## Monitoring
|
|
91
|
-
|
|
92
|
-
```python
|
|
93
|
-
task = await send_digest_email.enqueue(account_id)
|
|
94
|
-
|
|
95
|
-
status = await task.status()
|
|
96
|
-
result = await task.result(timeout=30)
|
|
97
|
-
await task.abort() # Cancel if needed
|
|
98
|
-
```
|
vibetuner/tasks/CLAUDE.md
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
# Core Tasks Module
|
|
2
|
-
|
|
3
|
-
**IMMUTABLE SCAFFOLDING CODE** - This is the framework's core background task infrastructure.
|
|
4
|
-
|
|
5
|
-
## What's Here
|
|
6
|
-
|
|
7
|
-
This module contains the scaffolding's core task components:
|
|
8
|
-
|
|
9
|
-
- **worker.py** - Streaq worker setup and configuration
|
|
10
|
-
- **context.py** - Task context management (DB, HTTP client, etc.)
|
|
11
|
-
- ****init**.py** - Task infrastructure exports
|
|
12
|
-
|
|
13
|
-
## Important Rules
|
|
14
|
-
|
|
15
|
-
⚠️ **DO NOT MODIFY** these core task components directly.
|
|
16
|
-
|
|
17
|
-
**For changes to core tasks:**
|
|
18
|
-
|
|
19
|
-
- File an issue at `https://github.com/alltuner/scaffolding`
|
|
20
|
-
- Core changes benefit all projects using the scaffolding
|
|
21
|
-
|
|
22
|
-
**For your application tasks:**
|
|
23
|
-
|
|
24
|
-
- Create them in `src/app/tasks/` instead
|
|
25
|
-
- Import the worker from vibetuner: `from vibetuner.tasks.worker import worker`
|
|
26
|
-
|
|
27
|
-
## Quick Reference
|
|
28
|
-
|
|
29
|
-
Tasks are only available if job queue was enabled during scaffolding.
|
|
30
|
-
|
|
31
|
-
The worker is defined in `vibetuner.tasks.worker` and should be imported from there in your app tasks.
|
|
32
|
-
|
|
33
|
-
## User Task Pattern (for reference)
|
|
34
|
-
|
|
35
|
-
Your application tasks in `src/app/tasks/` should follow this pattern:
|
|
36
|
-
|
|
37
|
-
```python
|
|
38
|
-
# src/app/tasks/emails.py
|
|
39
|
-
from vibetuner.models import UserModel
|
|
40
|
-
from vibetuner.tasks.worker import worker
|
|
41
|
-
|
|
42
|
-
@worker.task()
|
|
43
|
-
async def send_welcome_email(user_id: str) -> dict[str, str]:
|
|
44
|
-
"""Example background job."""
|
|
45
|
-
|
|
46
|
-
# Access context
|
|
47
|
-
res = await worker.context.http_client.get(url)
|
|
48
|
-
|
|
49
|
-
if user := await UserModel.get(user_id):
|
|
50
|
-
# Perform side effects
|
|
51
|
-
return {"status": "sent", "user": user.email}
|
|
52
|
-
return {"status": "skipped"}
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
## Queueing Tasks
|
|
56
|
-
|
|
57
|
-
```python
|
|
58
|
-
# In your routes: src/app/frontend/routes/auth.py
|
|
59
|
-
from app.tasks.emails import send_welcome_email
|
|
60
|
-
|
|
61
|
-
@router.post("/signup")
|
|
62
|
-
async def signup(email: str):
|
|
63
|
-
user = await create_user(email)
|
|
64
|
-
|
|
65
|
-
task = await send_welcome_email.enqueue(user.id)
|
|
66
|
-
# Optional: await task.result() or check task.id
|
|
67
|
-
|
|
68
|
-
return {"status": "registered", "job_id": task.id}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
Note: Import your task functions from `src/app/tasks/` but the worker itself comes from `vibetuner.tasks.worker`.
|
|
72
|
-
|
|
73
|
-
## Worker Management
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
just worker-dev # Run worker locally with auto-reload
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
## Task Registration
|
|
80
|
-
|
|
81
|
-
Add new task modules at the end of `src/app/tasks/__init__.py`:
|
|
82
|
-
|
|
83
|
-
```python
|
|
84
|
-
# src/app/tasks/__init__.py
|
|
85
|
-
# Import your task modules so decorators register with worker
|
|
86
|
-
from . import emails # noqa: F401
|
|
87
|
-
from . import new_tasks # noqa: F401
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
## Monitoring
|
|
91
|
-
|
|
92
|
-
```python
|
|
93
|
-
task = await send_digest_email.enqueue(account_id)
|
|
94
|
-
|
|
95
|
-
status = await task.status()
|
|
96
|
-
result = await task.result(timeout=30)
|
|
97
|
-
await task.abort() # Cancel if needed
|
|
98
|
-
```
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# Core Email Templates - DO NOT MODIFY
|
|
2
|
-
|
|
3
|
-
**⚠️ IMPORTANT**: Package-managed files. Changes will be lost on package updates.
|
|
4
|
-
|
|
5
|
-
## How to Override
|
|
6
|
-
|
|
7
|
-
**NEVER modify files in this directory!** Instead:
|
|
8
|
-
|
|
9
|
-
1. Copy template to your project's `templates/email/`
|
|
10
|
-
2. Maintain the same directory structure
|
|
11
|
-
3. Your version overrides automatically
|
|
12
|
-
|
|
13
|
-
### Example
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
# Core template (DO NOT EDIT, bundled in vibetuner package):
|
|
17
|
-
vibetuner/templates/email/default/magic_link.html.jinja
|
|
18
|
-
|
|
19
|
-
# Your override (CREATE THIS in your project):
|
|
20
|
-
templates/email/default/magic_link.html.jinja
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Template Structure
|
|
24
|
-
|
|
25
|
-
```text
|
|
26
|
-
vibetuner/email/
|
|
27
|
-
└── default/
|
|
28
|
-
├── magic_link.html.jinja # Passwordless login email (HTML)
|
|
29
|
-
└── magic_link.txt.jinja # Passwordless login email (text)
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Magic Link Email
|
|
33
|
-
|
|
34
|
-
The core provides magic link authentication emails used by the auth system.
|
|
35
|
-
|
|
36
|
-
### Variables Available
|
|
37
|
-
|
|
38
|
-
- `login_url` - The magic link URL for authentication
|
|
39
|
-
- `project_name` - Your project's display name
|
|
40
|
-
|
|
41
|
-
Override these templates to customize branding, styling, and content.
|
|
42
|
-
|
|
43
|
-
## Best Practices
|
|
44
|
-
|
|
45
|
-
1. Always provide both HTML and text versions
|
|
46
|
-
2. Test overrides after scaffolding updates
|
|
47
|
-
3. Keep branding consistent across all emails
|
|
48
|
-
4. Use inline styles for HTML emails
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
# Core Email Templates - DO NOT MODIFY
|
|
2
|
-
|
|
3
|
-
**⚠️ IMPORTANT**: Package-managed files. Changes will be lost on package updates.
|
|
4
|
-
|
|
5
|
-
## How to Override
|
|
6
|
-
|
|
7
|
-
**NEVER modify files in this directory!** Instead:
|
|
8
|
-
|
|
9
|
-
1. Copy template to your project's `templates/email/`
|
|
10
|
-
2. Maintain the same directory structure
|
|
11
|
-
3. Your version overrides automatically
|
|
12
|
-
|
|
13
|
-
### Example
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
# Core template (DO NOT EDIT, bundled in vibetuner package):
|
|
17
|
-
vibetuner/templates/email/default/magic_link.html.jinja
|
|
18
|
-
|
|
19
|
-
# Your override (CREATE THIS in your project):
|
|
20
|
-
templates/email/default/magic_link.html.jinja
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Template Structure
|
|
24
|
-
|
|
25
|
-
```text
|
|
26
|
-
vibetuner/email/
|
|
27
|
-
└── default/
|
|
28
|
-
├── magic_link.html.jinja # Passwordless login email (HTML)
|
|
29
|
-
└── magic_link.txt.jinja # Passwordless login email (text)
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
## Magic Link Email
|
|
33
|
-
|
|
34
|
-
The core provides magic link authentication emails used by the auth system.
|
|
35
|
-
|
|
36
|
-
### Variables Available
|
|
37
|
-
|
|
38
|
-
- `login_url` - The magic link URL for authentication
|
|
39
|
-
- `project_name` - Your project's display name
|
|
40
|
-
|
|
41
|
-
Override these templates to customize branding, styling, and content.
|
|
42
|
-
|
|
43
|
-
## Best Practices
|
|
44
|
-
|
|
45
|
-
1. Always provide both HTML and text versions
|
|
46
|
-
2. Test overrides after scaffolding updates
|
|
47
|
-
3. Keep branding consistent across all emails
|
|
48
|
-
4. Use inline styles for HTML emails
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
# Core Frontend Templates - DO NOT MODIFY
|
|
2
|
-
|
|
3
|
-
**⚠️ IMPORTANT**: Package-managed files. Changes will be lost on package updates.
|
|
4
|
-
|
|
5
|
-
## How to Override
|
|
6
|
-
|
|
7
|
-
**NEVER modify files in this directory!** Instead:
|
|
8
|
-
|
|
9
|
-
1. Copy template to your project's `templates/frontend/`
|
|
10
|
-
2. Maintain the same directory structure
|
|
11
|
-
3. Your version overrides automatically
|
|
12
|
-
|
|
13
|
-
### Example
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
# Core template (DO NOT EDIT, bundled in vibetuner package):
|
|
17
|
-
vibetuner/templates/frontend/base/footer.html.jinja
|
|
18
|
-
|
|
19
|
-
# Your override (CREATE THIS in your project):
|
|
20
|
-
templates/frontend/base/footer.html.jinja
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
The template system searches in order:
|
|
24
|
-
|
|
25
|
-
1. `templates/frontend/` (your project overrides)
|
|
26
|
-
2. `vibetuner/templates/frontend/` (package defaults)
|
|
27
|
-
|
|
28
|
-
## Template Structure
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
vibetuner/frontend/
|
|
32
|
-
├── base/ # Core layout
|
|
33
|
-
│ ├── skeleton.html.jinja
|
|
34
|
-
│ ├── header.html.jinja
|
|
35
|
-
│ ├── footer.html.jinja
|
|
36
|
-
│ ├── opengraph.html.jinja
|
|
37
|
-
│ └── favicons.html.jinja
|
|
38
|
-
├── debug/ # Dev tools (DEBUG mode only)
|
|
39
|
-
│ ├── index.html.jinja
|
|
40
|
-
│ ├── info.html.jinja
|
|
41
|
-
│ ├── users.html.jinja
|
|
42
|
-
│ ├── collections.html.jinja
|
|
43
|
-
│ └── version.html.jinja
|
|
44
|
-
├── email/ # Email-related pages
|
|
45
|
-
│ └── magic_link templates
|
|
46
|
-
├── lang/ # Language switcher
|
|
47
|
-
│ └── select.html.jinja
|
|
48
|
-
├── meta/ # SEO and meta files
|
|
49
|
-
│ ├── robots.txt.jinja
|
|
50
|
-
│ ├── sitemap.xml.jinja
|
|
51
|
-
│ ├── site.webmanifest.jinja
|
|
52
|
-
│ └── browserconfig.xml.jinja
|
|
53
|
-
├── user/ # User account pages
|
|
54
|
-
│ ├── profile.html.jinja
|
|
55
|
-
│ └── edit.html.jinja
|
|
56
|
-
├── index.html.jinja # Default homepage
|
|
57
|
-
├── login.html.jinja # Login page
|
|
58
|
-
└── email_sent.html.jinja # Magic link sent confirmation
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## Common Overrides
|
|
62
|
-
|
|
63
|
-
- `base/skeleton.html.jinja` - Add meta tags, global CSS/JS
|
|
64
|
-
- `base/header.html.jinja` - Customize navigation
|
|
65
|
-
- `base/footer.html.jinja` - Custom footer
|
|
66
|
-
- `index.html.jinja` - Custom homepage
|
|
67
|
-
|
|
68
|
-
## Best Practices
|
|
69
|
-
|
|
70
|
-
1. Override only what you need
|
|
71
|
-
2. Document why each override exists
|
|
72
|
-
3. Test after `just update-scaffolding`
|
|
73
|
-
4. Use template inheritance and blocks
|
|
74
|
-
5. Keep overrides minimal to ease updates
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
# Core Frontend Templates - DO NOT MODIFY
|
|
2
|
-
|
|
3
|
-
**⚠️ IMPORTANT**: Package-managed files. Changes will be lost on package updates.
|
|
4
|
-
|
|
5
|
-
## How to Override
|
|
6
|
-
|
|
7
|
-
**NEVER modify files in this directory!** Instead:
|
|
8
|
-
|
|
9
|
-
1. Copy template to your project's `templates/frontend/`
|
|
10
|
-
2. Maintain the same directory structure
|
|
11
|
-
3. Your version overrides automatically
|
|
12
|
-
|
|
13
|
-
### Example
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
# Core template (DO NOT EDIT, bundled in vibetuner package):
|
|
17
|
-
vibetuner/templates/frontend/base/footer.html.jinja
|
|
18
|
-
|
|
19
|
-
# Your override (CREATE THIS in your project):
|
|
20
|
-
templates/frontend/base/footer.html.jinja
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
The template system searches in order:
|
|
24
|
-
|
|
25
|
-
1. `templates/frontend/` (your project overrides)
|
|
26
|
-
2. `vibetuner/templates/frontend/` (package defaults)
|
|
27
|
-
|
|
28
|
-
## Template Structure
|
|
29
|
-
|
|
30
|
-
```text
|
|
31
|
-
vibetuner/frontend/
|
|
32
|
-
├── base/ # Core layout
|
|
33
|
-
│ ├── skeleton.html.jinja
|
|
34
|
-
│ ├── header.html.jinja
|
|
35
|
-
│ ├── footer.html.jinja
|
|
36
|
-
│ ├── opengraph.html.jinja
|
|
37
|
-
│ └── favicons.html.jinja
|
|
38
|
-
├── debug/ # Dev tools (DEBUG mode only)
|
|
39
|
-
│ ├── index.html.jinja
|
|
40
|
-
│ ├── info.html.jinja
|
|
41
|
-
│ ├── users.html.jinja
|
|
42
|
-
│ ├── collections.html.jinja
|
|
43
|
-
│ └── version.html.jinja
|
|
44
|
-
├── email/ # Email-related pages
|
|
45
|
-
│ └── magic_link templates
|
|
46
|
-
├── lang/ # Language switcher
|
|
47
|
-
│ └── select.html.jinja
|
|
48
|
-
├── meta/ # SEO and meta files
|
|
49
|
-
│ ├── robots.txt.jinja
|
|
50
|
-
│ ├── sitemap.xml.jinja
|
|
51
|
-
│ ├── site.webmanifest.jinja
|
|
52
|
-
│ └── browserconfig.xml.jinja
|
|
53
|
-
├── user/ # User account pages
|
|
54
|
-
│ ├── profile.html.jinja
|
|
55
|
-
│ └── edit.html.jinja
|
|
56
|
-
├── index.html.jinja # Default homepage
|
|
57
|
-
├── login.html.jinja # Login page
|
|
58
|
-
└── email_sent.html.jinja # Magic link sent confirmation
|
|
59
|
-
```
|
|
60
|
-
|
|
61
|
-
## Common Overrides
|
|
62
|
-
|
|
63
|
-
- `base/skeleton.html.jinja` - Add meta tags, global CSS/JS
|
|
64
|
-
- `base/header.html.jinja` - Customize navigation
|
|
65
|
-
- `base/footer.html.jinja` - Custom footer
|
|
66
|
-
- `index.html.jinja` - Custom homepage
|
|
67
|
-
|
|
68
|
-
## Best Practices
|
|
69
|
-
|
|
70
|
-
1. Override only what you need
|
|
71
|
-
2. Document why each override exists
|
|
72
|
-
3. Test after `just update-scaffolding`
|
|
73
|
-
4. Use template inheritance and blocks
|
|
74
|
-
5. Keep overrides minimal to ease updates
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
# Core Markdown Templates - DO NOT MODIFY
|
|
2
|
-
|
|
3
|
-
**⚠️ IMPORTANT**: Package-managed files. Changes will be lost on package updates.
|
|
4
|
-
|
|
5
|
-
## How to Override
|
|
6
|
-
|
|
7
|
-
**NEVER modify files in this directory!** Instead:
|
|
8
|
-
|
|
9
|
-
1. Copy template to your project's `templates/markdown/`
|
|
10
|
-
2. Maintain the same directory structure
|
|
11
|
-
3. Your version overrides automatically
|
|
12
|
-
|
|
13
|
-
### Example
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
# Core template (if exists, bundled in vibetuner package):
|
|
17
|
-
vibetuner/templates/markdown/default/template.md.jinja
|
|
18
|
-
|
|
19
|
-
# Your override (CREATE THIS in your project):
|
|
20
|
-
templates/markdown/default/template.md.jinja
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Template Structure
|
|
24
|
-
|
|
25
|
-
Currently, no core markdown templates are provided by the package.
|
|
26
|
-
|
|
27
|
-
This directory is a placeholder for potential future package markdown templates.
|
|
28
|
-
|
|
29
|
-
All markdown templates should be created in `templates/markdown/`.
|