- Use blueprints to modularize routes (e.g., blueprints/user_routes.py).
- Prefer function-based views; use classes only for complex Flask views.
- Apply type hints to all route handlers and utility functions.
- Use snake_case (lowercase with underscores) for Flask files and directories.
- Follow RORO pattern: receive an object, return an object in views.
- Use `request.get_json()` for JSON body parsing and `request.args.get('key', default)` for query parameters with type coercion.
- Register blueprints for modular routing: `bp = Blueprint('users', __name__, url_prefix='/api/users')` then `app.register_blueprint(bp)`.
- Use `@app.errorhandler(404)` for custom error pages and `abort(404)` to trigger them from route handlers.
- Configure Flask with `app.config.from_object('config.ProductionConfig')` — use environment-specific config classes.