Scaffold Flask 3.1 + Vue.js full-stack projects with single-port architecture, structured logging, and distinctive frontend design.
| Layer | Technology |
|---|---|
| ------- | ----------- |
| Web Framework | Flask 3.1.0 |
| Frontend | Vue.js (CDN, single-port) |
| Dependency Management | uv |
| Logging | Python logging (TimedRotatingFileHandler) |
| Port | 80 (unified) |
All requests served by Flask on port 80. Static files (HTML/CSS/JS) delivered via Flask routes from templates/ directory.
Follow these steps in order:
scripts/init_project.pypyproject.toml with uvAsk the user for:
Run the init script:
python scripts/init_project.py <project-name> --path <target-directory>
This creates:
<project-name>/
├── AGENTS.md # AI Agent project guide (auto-generated)
├── src/
│ ├── <project-name>.py # Flask main entry (with logging)
│ ├── pyproject.toml # uv project config
│ ├── templates/ # Frontend resources
│ │ ├── <project-name>.html # Main page (Vue.js)
│ │ ├── css/ # Stylesheets
│ │ ├── js/ # JavaScript files
│ │ └── assets/ # Static assets (images, fonts, etc.)
│ ├── utils/ # Core utility modules
│ │ ├── __init__.py
│ │ └── logger.py # Logging module
│ └── log/ # Log output directory
│ └── *.log # Per-module log files (daily rotation)
The pyproject.toml is auto-generated with uv mirror config:
[tool.uv]
index-url = "https://pypi.tuna.tsinghua.edu.cn/simple"
Core dependencies:
dependencies = [
"flask>=3.1.0",
]
The generated includes integrated logging:
from flask import Flask, send_from_directory, send_file
from utils.logger import get_logger
app = Flask(__name__)
logger = get_logger('<project-name>')
@app.route('/')
def index():
return send_file('templates/<project-name>.html')
# ... static file routes ...
if __name__ == '__main__':
logger.info('Starting server on port 80...')
app.run(host='0.0.0.0', port=80, debug=True)
Apply the frontend design guidelines when creating HTML/CSS/JS. See references/frontend-design.md for the complete design system.
Key principles:
patternVue.js integration pattern:
<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
<div id="app">
<!-- Vue template -->
</div>
<script>
const { createApp, ref, computed, onMounted } = Vue
const app = createApp({
setup() {
// Composition API
return {}
}
})
app.mount('#app')
</script>
For detailed Vue.js best practices, see references/vue-guidelines.md.
CRITICAL: After any project modification, update AGENTS.md to reflect changes.
The AGENTS.md file is auto-generated at project creation and serves as the AI Agent project guide. It must be kept in sync with the actual project state.
When to update AGENTS.md:
What to update:
Changelog format:
## 更新日志
| 日期 | 版本 | 变更内容 |
|------|------|---------|
| 2026-06-07 | 0.1.0 | 初始项目创建 |
| 2026-06-08 | 0.2.0 | 新增用户认证模块 |
cd <project-path>/src
uv sync
uv run python <project-name>.py
src/utils/logger.pysrc/log/%(asctime)s | %(levelname)-8s | %(name)s | %(message)sfrom utils.logger import get_logger
logger = get_logger('module_name')
logger.info('Operation completed successfully')
logger.warning('Something unexpected happened')
logger.error('An error occurred: %s', error_detail)
Each logger name creates a separate log file: src/log/
Files rotate at midnight, with naming pattern:
Before delivering, verify:
pyproject.toml includes [tool.uv] with Tsinghua mirrorsrc/log/ directory exists with .gitkeepAGENTS.md exists and reflects current project statecursor-pointer共 1 个版本