Initial upload of bennys production files
This commit is contained in:
101
app.py
Normal file
101
app.py
Normal file
@@ -0,0 +1,101 @@
|
||||
# app.py
|
||||
from __future__ import annotations
|
||||
import os
|
||||
from datetime import datetime
|
||||
from flask import Flask, render_template, url_for, jsonify, Response
|
||||
|
||||
app = Flask(__name__, static_folder="static", template_folder="templates")
|
||||
app.secret_key = os.getenv("APP_SECRET_KEY", "dev")
|
||||
|
||||
CONTACT = {
|
||||
"name": os.getenv("BH_CONTACT_NAME", "Benjamin Mosley"),
|
||||
"title": os.getenv("BH_CONTACT_TITLE", "E-Commerce Manager, United Supermarkets"),
|
||||
"email": os.getenv("BH_CONTACT_EMAIL", "ben@bennyshouse.net"),
|
||||
"phone": os.getenv("BH_CONTACT_PHONE", "(806) 655 2300"),
|
||||
"city": os.getenv("BH_CONTACT_CITY", "Canyon / Amarillo / Borger / Remote"),
|
||||
"cal": os.getenv("BH_CONTACT_CAL", "https://calendly.com/bennyshouse24/30min"),
|
||||
"link": os.getenv("BH_CONTACT_LINK", "https://www.linkedin.com/in/benjamin-mosley-849643329/"),
|
||||
"site": os.getenv("BH_CONTACT_SITE", "https://bennyshouse.net"),
|
||||
"hours": os.getenv("BH_CONTACT_HOURS", "Mon–Fri, 9a–5p CT"),
|
||||
}
|
||||
|
||||
BRAND = "Benny’s House"
|
||||
TAGLINE = "Fast to prototype. Safe to scale."
|
||||
|
||||
@app.route("/")
|
||||
def home():
|
||||
hero_imgs = [
|
||||
url_for("static", filename="IMG_2153.jpeg"),
|
||||
url_for("static", filename="IMG_2149.jpeg"),
|
||||
url_for("static", filename="IMG_2158.jpeg"),
|
||||
]
|
||||
return render_template(
|
||||
"index.html",
|
||||
brand=BRAND,
|
||||
tagline=TAGLINE,
|
||||
contact=CONTACT,
|
||||
hero_imgs=hero_imgs,
|
||||
year=datetime.now().year,
|
||||
)
|
||||
|
||||
@app.route("/about")
|
||||
def about_page():
|
||||
return render_template(
|
||||
"about.html",
|
||||
brand=BRAND,
|
||||
tagline=TAGLINE,
|
||||
contact=CONTACT,
|
||||
year=datetime.now().year,
|
||||
)
|
||||
|
||||
@app.route("/services")
|
||||
def services_page():
|
||||
return render_template(
|
||||
"services.html",
|
||||
brand=BRAND,
|
||||
tagline=TAGLINE,
|
||||
contact=CONTACT,
|
||||
year=datetime.now().year,
|
||||
)
|
||||
|
||||
@app.route("/contact")
|
||||
def contact_page():
|
||||
return render_template(
|
||||
"contact.html",
|
||||
brand=BRAND,
|
||||
tagline=TAGLINE,
|
||||
contact=CONTACT,
|
||||
year=datetime.now().year,
|
||||
)
|
||||
|
||||
@app.route("/api/contact")
|
||||
def contact_json():
|
||||
return jsonify(CONTACT)
|
||||
|
||||
@app.route("/benjamin.vcf")
|
||||
def vcard_download():
|
||||
v = _build_vcard(CONTACT)
|
||||
return Response(
|
||||
v,
|
||||
mimetype="text/vcard; charset=utf-8",
|
||||
headers={"Content-Disposition": "attachment; filename=benjamin-mosley.vcf"},
|
||||
)
|
||||
|
||||
def _build_vcard(c: dict) -> str:
|
||||
lines = [
|
||||
"BEGIN:VCARD",
|
||||
"VERSION:3.0",
|
||||
f"FN:{c['name']}",
|
||||
f"TITLE:{c['title']}",
|
||||
f"EMAIL;TYPE=INTERNET:{c['email']}",
|
||||
f"TEL;TYPE=CELL:{c['phone']}",
|
||||
f"ADR;TYPE=WORK:;;{c['city']};;;",
|
||||
f"URL:{c['site']}",
|
||||
f"X-LINKEDIN:{c['link']}",
|
||||
"END:VCARD",
|
||||
]
|
||||
return "\r\n".join(lines) + "\r\n"
|
||||
|
||||
if __name__ == "__main__":
|
||||
app.run(debug=True)
|
||||
|
||||
Reference in New Issue
Block a user