Compare commits

...

7 Commits

Author SHA1 Message Date
benny
bfdda8a164 Update .gitea/workflows/deploy.yml
All checks were successful
Deploy Portfolio / deploy (push) Successful in 2s
2026-04-23 19:55:26 +00:00
Ben Mosley
58e10876b4 Updated Hero
Some checks failed
Deploy Portfolio / deploy (push) Failing after 0s
2026-04-23 11:58:07 -05:00
Ben Mosley
67f279103c Fixed buttons
All checks were successful
Deploy Portfolio / deploy (push) Successful in 2s
2026-04-23 11:46:46 -05:00
Ben Mosley
4d9d069cd2 Fixed contact page
All checks were successful
Deploy Portfolio / deploy (push) Successful in 2s
2026-04-23 11:40:18 -05:00
Ben Mosley
4a1a7c042a Stop tracking posts.db — database must not be in version control
All checks were successful
Deploy Portfolio / deploy (push) Successful in 2s
The live server writes to this file continuously; tracking it causes
git pull to abort on deploy whenever posts are created or updated.
instance/ is already in .gitignore so the file stays on disk.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-23 11:32:36 -05:00
Ben Mosley
f6daba165f Merge remote-tracking branch 'origin/main'
Some checks failed
Deploy Portfolio / deploy (push) Failing after 0s
2026-04-23 11:29:03 -05:00
Ben Mosley
199676800d Fixed draft feature 2026-04-23 11:28:18 -05:00
8 changed files with 26 additions and 20 deletions

View File

@@ -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
View File

@@ -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.

View File

@@ -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>

View File

@@ -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">Heres my professional contact card — lets connect!</p> <p class="text-lg opacity-90">Heres my contact card — lets 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))]">

View File

@@ -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">
Im Ben — CIS student, full-stack web dev, and infrastructure tinkerer. Im Ben — CIS student, full-stack web dev, and infrastructure tinkerer.

View File

@@ -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 %}

View File

@@ -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 %}