Compare commits
7 Commits
b9d2e57d5d
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bfdda8a164 | ||
|
|
58e10876b4 | ||
|
|
67f279103c | ||
|
|
4d9d069cd2 | ||
|
|
4a1a7c042a | ||
|
|
f6daba165f | ||
|
|
199676800d |
@@ -7,7 +7,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
deploy:
|
deploy:
|
||||||
runs-on: vps-host
|
runs-on: benny-vps
|
||||||
steps:
|
steps:
|
||||||
- name: Pull latest code
|
- name: Pull latest code
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
6
app.py
6
app.py
@@ -20,10 +20,10 @@ HUB_PUSH_SECRET = os.getenv("HUB_PUSH_SECRET")
|
|||||||
|
|
||||||
CONTACT = {
|
CONTACT = {
|
||||||
"name": os.environ.get("BH_CONTACT_NAME", "Benjamin Mosley"),
|
"name": os.environ.get("BH_CONTACT_NAME", "Benjamin Mosley"),
|
||||||
"title": os.environ.get("BH_CONTACT_TITLE", "E-Commerce Manager, United Supermarkets"),
|
"title": os.environ.get("BH_CONTACT_TITLE", "Level II Technical Support, AMA TechTel"),
|
||||||
"email": os.environ.get("BH_CONTACT_EMAIL", "ben@bennyshouse.net"),
|
"email": os.environ.get("BH_CONTACT_EMAIL", "ben@bennyshouse.net"),
|
||||||
"phone": os.environ.get("BH_CONTACT_PHONE", "(806) 655 2300"),
|
"phone": os.environ.get("BH_CONTACT_PHONE", "Contact via Email for Phone #"),
|
||||||
"city": os.environ.get("BH_CONTACT_CITY", "Canyon / Amarillo / Borger / Remote"),
|
"city": os.environ.get("BH_CONTACT_CITY", "Greater Amarillo Area"),
|
||||||
"cal": os.environ.get("BH_CONTACT_CAL", "https://calendly.com/bennyshouse24/30min"),
|
"cal": os.environ.get("BH_CONTACT_CAL", "https://calendly.com/bennyshouse24/30min"),
|
||||||
"link": os.environ.get("BH_CONTACT_LINK", "https://www.linkedin.com/in/benjamin-mosley-849643329/"),
|
"link": os.environ.get("BH_CONTACT_LINK", "https://www.linkedin.com/in/benjamin-mosley-849643329/"),
|
||||||
"site": os.environ.get("BH_CONTACT_SITE", "https://bennyshouse.net"),
|
"site": os.environ.get("BH_CONTACT_SITE", "https://bennyshouse.net"),
|
||||||
|
|||||||
Binary file not shown.
@@ -40,15 +40,15 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="px-5 py-3 text-[rgb(var(--muted))]">{{ projectpost.category }}</td>
|
<td class="px-5 py-3 text-[rgb(var(--muted))]">{{ projectpost.category }}</td>
|
||||||
<td class="px-5 py-3 flex flex-wrap gap-2">
|
<td class="px-5 py-3 flex flex-wrap gap-2">
|
||||||
<a href="{{ url_for('view_project', slug=projectpost.slug) }}" class="btn btn-ghost border-none bg-blue-600 hover:bg-blue-700 text-white">Preview</a>
|
<a href="{{ url_for('view_project', slug=projectpost.slug) }}" class="btn border-none bg-blue-600 hover:bg-blue-700 text-white">Preview</a>
|
||||||
<a href="{{ url_for('edit_project', slug=projectpost.slug) }}" class="btn btn-ghost border-none bg-yellow-500 hover:bg-yellow-600 text-white">Edit</a>
|
<a href="{{ url_for('edit_project', slug=projectpost.slug) }}" class="btn border-none bg-yellow-500 hover:bg-yellow-600 text-white">Edit</a>
|
||||||
{% if projectpost.draft %}
|
{% if projectpost.draft %}
|
||||||
<form action="{{ url_for('publish_project', slug=projectpost.slug) }}" method="POST">
|
<form action="{{ url_for('publish_project', slug=projectpost.slug) }}" method="POST">
|
||||||
<button type="submit" class="btn btn-ghost border-none bg-green-600 hover:bg-green-700 text-white">Publish</button>
|
<button type="submit" class="btn border-none bg-green-600 hover:bg-green-700 text-white">Publish</button>
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<form action="{{ url_for('delete_project', slug=projectpost.slug) }}" method="POST" onsubmit="return confirm('Delete this project?');">
|
<form action="{{ url_for('delete_project', slug=projectpost.slug) }}" method="POST" onsubmit="return confirm('Delete this project?');">
|
||||||
<button type="submit" class="btn btn-ghost border-none bg-red-600 hover:bg-red-700 text-white">Delete</button>
|
<button type="submit" class="btn border-none bg-red-600 hover:bg-red-700 text-white">Delete</button>
|
||||||
</form>
|
</form>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
@@ -92,15 +92,15 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="px-5 py-3 text-[rgb(var(--muted))]">{{ blogpost.category }}</td>
|
<td class="px-5 py-3 text-[rgb(var(--muted))]">{{ blogpost.category }}</td>
|
||||||
<td class="px-5 py-3 flex flex-wrap gap-2">
|
<td class="px-5 py-3 flex flex-wrap gap-2">
|
||||||
<a href="{{ url_for('view_blog', slug=blogpost.slug) }}" class="btn btn-ghost border-none bg-blue-600 hover:bg-blue-700 text-white">Preview</a>
|
<a href="{{ url_for('view_blog', slug=blogpost.slug) }}" class="btn border-none bg-blue-600 hover:bg-blue-700 text-white">Preview</a>
|
||||||
<a href="{{ url_for('edit_blog', slug=blogpost.slug) }}" class="btn btn-ghost border-none bg-yellow-500 hover:bg-yellow-600 text-white">Edit</a>
|
<a href="{{ url_for('edit_blog', slug=blogpost.slug) }}" class="btn border-none bg-yellow-500 hover:bg-yellow-600 text-white">Edit</a>
|
||||||
{% if blogpost.draft %}
|
{% if blogpost.draft %}
|
||||||
<form action="{{ url_for('publish_blog', slug=blogpost.slug) }}" method="POST">
|
<form action="{{ url_for('publish_blog', slug=blogpost.slug) }}" method="POST">
|
||||||
<button type="submit" class="btn btn-ghost border-none bg-green-600 hover:bg-green-700 text-white">Publish</button>
|
<button type="submit" class="btn border-none bg-green-600 hover:bg-green-700 text-white">Publish</button>
|
||||||
</form>
|
</form>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<form action="{{ url_for('delete_blog', slug=blogpost.slug) }}" method="POST" onsubmit="return confirm('Delete this post?');">
|
<form action="{{ url_for('delete_blog', slug=blogpost.slug) }}" method="POST" onsubmit="return confirm('Delete this post?');">
|
||||||
<button type="submit" class="btn btn-ghost border-none bg-red-600 hover:bg-red-700 text-white">Delete</button>
|
<button type="submit" class="btn border-none bg-red-600 hover:bg-red-700 text-white">Delete</button>
|
||||||
</form>
|
</form>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|||||||
@@ -6,7 +6,7 @@
|
|||||||
<!-- Hero -->
|
<!-- Hero -->
|
||||||
<section class="text-center py-20 bg-gradient-to-br from-orange-500/20 via-rose-500/10 to-fuchsia-500/10 text-white shadow-inner">
|
<section class="text-center py-20 bg-gradient-to-br from-orange-500/20 via-rose-500/10 to-fuchsia-500/10 text-white shadow-inner">
|
||||||
<h1 class="text-5xl font-extrabold mb-4">Contact Me</h1>
|
<h1 class="text-5xl font-extrabold mb-4">Contact Me</h1>
|
||||||
<p class="text-lg opacity-90">Here’s my professional contact card — let’s connect!</p>
|
<p class="text-lg opacity-90">Here’s my contact card — let’s connect!</p>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
<!-- vCard Section -->
|
<!-- vCard Section -->
|
||||||
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
<!-- Avatar / Photo -->
|
<!-- Avatar / Photo -->
|
||||||
<div class="flex-shrink-0">
|
<div class="flex-shrink-0">
|
||||||
<img src="{{ url_for('static', filename='Headshot.jpg') }}" alt="{{ CONTACT.name }}"
|
<img src="{{ url_for('static', filename='Headshot.jpeg') }}" alt="{{ CONTACT.name }}"
|
||||||
class="w-40 h-40 rounded-full border-4 border-[rgb(var(--accent))] shadow-glass object-cover">
|
class="w-40 h-40 rounded-full border-4 border-[rgb(var(--accent))] shadow-glass object-cover">
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -45,7 +45,7 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="pt-4 flex flex-wrap gap-3">
|
<div class="pt-4 flex flex-wrap gap-3">
|
||||||
<a href="{{ CONTACT.site }}" target="_blank" class="btn btn-primary items-center">
|
<a href="{{ CONTACT.site }}" target="_blank" class="btn btn-primary border-none bg-[rgb(var(--card))] hover:bg-[rgb(var(--border))]">
|
||||||
<i class="fa fa-globe mr-2 text-[rgb(var(--accent))]"></i> Website
|
<i class="fa fa-globe mr-2 text-[rgb(var(--accent))]"></i> Website
|
||||||
</a>
|
</a>
|
||||||
<a href="{{ CONTACT.link }}" target="_blank" class="btn btn-primary border-none bg-[rgb(var(--card))] hover:bg-[rgb(var(--border))]">
|
<a href="{{ CONTACT.link }}" target="_blank" class="btn btn-primary border-none bg-[rgb(var(--card))] hover:bg-[rgb(var(--border))]">
|
||||||
|
|||||||
@@ -10,7 +10,7 @@
|
|||||||
<div class="grid lg:grid-cols-[1.1fr_0.9fr] items-center gap-10">
|
<div class="grid lg:grid-cols-[1.1fr_0.9fr] items-center gap-10">
|
||||||
<div>
|
<div>
|
||||||
<h1 class="heading-hero">
|
<h1 class="heading-hero">
|
||||||
Builder. Operator. <span class="text-accent">Problem-solver.</span>
|
My name is Ben. <span class="text-accent">How can I help you?</span>
|
||||||
</h1>
|
</h1>
|
||||||
<p class="mt-4 subtle max-w-2xl text-lg">
|
<p class="mt-4 subtle max-w-2xl text-lg">
|
||||||
I’m Ben — CIS student, full-stack web dev, and infrastructure tinkerer.
|
I’m Ben — CIS student, full-stack web dev, and infrastructure tinkerer.
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
<!-- Content -->
|
<!-- Content -->
|
||||||
<div>
|
<div>
|
||||||
<label for="content" class="block font-semibold mb-1">Post Content</label>
|
<label for="content" class="block font-semibold mb-1">Post Content</label>
|
||||||
<textarea id="content" name="content" required
|
<textarea id="content" name="content"
|
||||||
class="text-black bg-white w-full border border-gray-300 rounded px-4 py-2 leading-relaxed text-base focus:ring-2 focus:ring-orange-400 focus:outline-none resize-none overflow-hidden"
|
class="text-black bg-white w-full border border-gray-300 rounded px-4 py-2 leading-relaxed text-base focus:ring-2 focus:ring-orange-400 focus:outline-none resize-none overflow-hidden"
|
||||||
rows="1"></textarea>
|
rows="1"></textarea>
|
||||||
</div>
|
</div>
|
||||||
@@ -77,12 +77,15 @@
|
|||||||
|
|
||||||
<script src="https://unpkg.com/easymde/dist/easymde.min.js"></script>
|
<script src="https://unpkg.com/easymde/dist/easymde.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
new EasyMDE({
|
const easyMDE = new EasyMDE({
|
||||||
element: document.getElementById('content'),
|
element: document.getElementById('content'),
|
||||||
spellChecker: false,
|
spellChecker: false,
|
||||||
autosave: { enabled: true, uniqueId: 'new_blog' },
|
autosave: { enabled: true, uniqueId: 'new_blog' },
|
||||||
toolbar: ['bold','italic','heading','|','quote','unordered-list','ordered-list','|','link','image','|','preview','side-by-side','fullscreen','|','guide'],
|
toolbar: ['bold','italic','heading','|','quote','unordered-list','ordered-list','|','link','image','|','preview','side-by-side','fullscreen','|','guide'],
|
||||||
});
|
});
|
||||||
|
document.querySelector('form').addEventListener('submit', function() {
|
||||||
|
easyMDE.codemirror.save();
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -29,7 +29,7 @@
|
|||||||
<!-- Content -->
|
<!-- Content -->
|
||||||
<div>
|
<div>
|
||||||
<label for="content" class="block font-semibold mb-1">Post Content</label>
|
<label for="content" class="block font-semibold mb-1">Post Content</label>
|
||||||
<textarea id="content" name="content" required
|
<textarea id="content" name="content"
|
||||||
class="text-black bg-white w-full border border-gray-300 rounded px-4 py-2 leading-relaxed text-base focus:ring-2 focus:ring-orange-400 focus:outline-none resize-none overflow-hidden"
|
class="text-black bg-white w-full border border-gray-300 rounded px-4 py-2 leading-relaxed text-base focus:ring-2 focus:ring-orange-400 focus:outline-none resize-none overflow-hidden"
|
||||||
rows="1"></textarea>
|
rows="1"></textarea>
|
||||||
</div>
|
</div>
|
||||||
@@ -76,12 +76,15 @@
|
|||||||
|
|
||||||
<script src="https://unpkg.com/easymde/dist/easymde.min.js"></script>
|
<script src="https://unpkg.com/easymde/dist/easymde.min.js"></script>
|
||||||
<script>
|
<script>
|
||||||
new EasyMDE({
|
const easyMDE = new EasyMDE({
|
||||||
element: document.getElementById('content'),
|
element: document.getElementById('content'),
|
||||||
spellChecker: false,
|
spellChecker: false,
|
||||||
autosave: { enabled: true, uniqueId: 'new_project' },
|
autosave: { enabled: true, uniqueId: 'new_project' },
|
||||||
toolbar: ['bold','italic','heading','|','quote','unordered-list','ordered-list','|','link','image','|','preview','side-by-side','fullscreen','|','guide'],
|
toolbar: ['bold','italic','heading','|','quote','unordered-list','ordered-list','|','link','image','|','preview','side-by-side','fullscreen','|','guide'],
|
||||||
});
|
});
|
||||||
|
document.querySelector('form').addEventListener('submit', function() {
|
||||||
|
easyMDE.codemirror.save();
|
||||||
|
});
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
Reference in New Issue
Block a user