Add Hugo static site with homepage, resume, and blog sections
This commit is contained in:
19
.gitignore
vendored
Normal file
19
.gitignore
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
# Hugo generated files
|
||||
/public/
|
||||
/resources/_gen/
|
||||
/bin/
|
||||
|
||||
# OS files
|
||||
.DS_Store
|
||||
Thumbs.db
|
||||
|
||||
# Editor files
|
||||
*.swp
|
||||
*.swo
|
||||
*~
|
||||
|
||||
# Hugo cache
|
||||
.hugo_build.lock
|
||||
|
||||
# Downloaded archives
|
||||
*.tar.gz
|
||||
204
DEPLOYMENT.md
Normal file
204
DEPLOYMENT.md
Normal file
@@ -0,0 +1,204 @@
|
||||
# Deployment Guide for LXC Container
|
||||
|
||||
This guide explains how to deploy this Hugo website to an LXC container running Arch Linux (or similar). The site is built as a static site and served via nginx.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- LXC container with Arch Linux (or adjust package manager commands for your distribution)
|
||||
- SSH access to the container
|
||||
- Git installed on container
|
||||
- Domain name `dustin.coffee` pointing to container's IP address (or adjust baseURL in `hugo.toml`)
|
||||
|
||||
## Step 1: Install Hugo on LXC
|
||||
|
||||
On the container, install Hugo (extended version recommended):
|
||||
|
||||
```bash
|
||||
# For Arch Linux
|
||||
sudo pacman -S hugo
|
||||
|
||||
# For Debian/Ubuntu
|
||||
# sudo apt install hugo
|
||||
|
||||
# For other distributions, see https://gohugo.io/installation/
|
||||
```
|
||||
|
||||
Verify installation:
|
||||
```bash
|
||||
hugo version
|
||||
```
|
||||
|
||||
## Step 2: Clone Repository
|
||||
|
||||
Clone your git repository to a directory, e.g., `/srv/www/dustin.coffee`:
|
||||
|
||||
```bash
|
||||
sudo mkdir -p /srv/www
|
||||
sudo chown $USER:$USER /srv/www
|
||||
cd /srv/www
|
||||
git clone <your-git-repo-url> dustin.coffee
|
||||
cd dustin.coffee
|
||||
```
|
||||
|
||||
## Step 3: Build Static Site
|
||||
|
||||
Generate the static site:
|
||||
|
||||
```bash
|
||||
hugo --minify
|
||||
```
|
||||
|
||||
The built site will be in the `public/` directory.
|
||||
|
||||
## Step 4: Install and Configure nginx
|
||||
|
||||
Install nginx:
|
||||
|
||||
```bash
|
||||
sudo pacman -S nginx
|
||||
```
|
||||
|
||||
Create nginx configuration file at `/etc/nginx/sites-available/dustin.coffee` (create directory if needed):
|
||||
|
||||
```nginx
|
||||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name dustin.coffee www.dustin.coffee;
|
||||
|
||||
root /srv/www/dustin.coffee/public;
|
||||
index index.html;
|
||||
|
||||
# Security headers
|
||||
add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
add_header X-Content-Type-Options "nosniff" always;
|
||||
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
|
||||
|
||||
# Gzip compression
|
||||
gzip on;
|
||||
gzip_vary on;
|
||||
gzip_min_length 1024;
|
||||
gzip_types text/plain text/css text/xml text/javascript application/javascript application/xml+rss application/json;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
# Cache static assets
|
||||
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
|
||||
expires 365d;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
Enable the site by creating a symlink:
|
||||
|
||||
```bash
|
||||
sudo ln -s /etc/nginx/sites-available/dustin.coffee /etc/nginx/sites-enabled/
|
||||
sudo nginx -t # Test configuration
|
||||
sudo systemctl restart nginx
|
||||
```
|
||||
|
||||
## Step 5: Set Up SSL with Let's Encrypt (Optional but Recommended)
|
||||
|
||||
Install certbot:
|
||||
|
||||
```bash
|
||||
sudo pacman -S certbot certbot-nginx
|
||||
```
|
||||
|
||||
Obtain certificate:
|
||||
|
||||
```bash
|
||||
sudo certbot --nginx -d dustin.coffee -d www.dustin.coffee
|
||||
```
|
||||
|
||||
Certbot will automatically update nginx configuration.
|
||||
|
||||
## Step 6: Automation Script
|
||||
|
||||
Create a deployment script `deploy.sh` in the repository root:
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# deploy.sh - rebuild and copy site
|
||||
|
||||
set -e
|
||||
|
||||
cd /srv/www/dustin.coffee
|
||||
|
||||
# Pull latest changes
|
||||
git pull
|
||||
|
||||
# Build site
|
||||
hugo --minify
|
||||
|
||||
# Optional: restart nginx if configuration changed
|
||||
# sudo systemctl reload nginx
|
||||
|
||||
echo "Deployment completed at $(date)"
|
||||
```
|
||||
|
||||
Make it executable:
|
||||
|
||||
```bash
|
||||
chmod +x deploy.sh
|
||||
```
|
||||
|
||||
Now after SSH-ing into the container, you can run `./deploy.sh` to update the site.
|
||||
|
||||
## Step 7: Systemd Service (Alternative: Hugo Server)
|
||||
|
||||
If you prefer to run Hugo as a server (not recommended for production), create a systemd service:
|
||||
|
||||
Create `/etc/systemd/system/hugo-dustin.service`:
|
||||
|
||||
```ini
|
||||
[Unit]
|
||||
Description=Hugo Server for dustin.coffee
|
||||
After=network.target
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=www-data
|
||||
Group=www-data
|
||||
WorkingDirectory=/srv/www/dustin.coffee
|
||||
ExecStart=/usr/bin/hugo server --bind 0.0.0.0 --port 1313 --baseURL=https://dustin.coffee/
|
||||
Restart=on-failure
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
```
|
||||
|
||||
Then enable and start:
|
||||
|
||||
```bash
|
||||
sudo systemctl daemon-reload
|
||||
sudo systemctl enable hugo-dustin
|
||||
sudo systemctl start hugo-dustin
|
||||
```
|
||||
|
||||
## Notes
|
||||
|
||||
- Update the `baseURL` in `hugo.toml` if your domain changes.
|
||||
- The site uses a custom theme `personal`; ensure all theme files are committed to git.
|
||||
- Blog posts are stored in `content/posts/` as markdown files.
|
||||
- To add new blog posts, create markdown files in `content/posts/` on your development machine, push to git, then run the deploy script on the container.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- If nginx shows 404, ensure the `public/` directory exists and contains built files.
|
||||
- If Hugo fails to build, check Hugo version matches the one used in development.
|
||||
- Check nginx error logs: `sudo journalctl -u nginx`
|
||||
- Check Hugo build logs: run `hugo --verbose`
|
||||
|
||||
## Updating
|
||||
|
||||
To update the site after making changes on your development machine:
|
||||
|
||||
1. Push changes to your git server
|
||||
2. SSH into LXC container
|
||||
3. Navigate to site directory: `cd /srv/www/dustin.coffee`
|
||||
4. Run `git pull` then `./deploy.sh` (or just `hugo --minify`)
|
||||
|
||||
55
README.md
55
README.md
@@ -1,3 +1,54 @@
|
||||
# blog
|
||||
# Dustin Coffee Personal Website
|
||||
|
||||
my blog
|
||||
A personal website built with Hugo static site generator, featuring:
|
||||
- Homepage/About me page
|
||||
- Resume/CV page
|
||||
- Blog with markdown posts
|
||||
|
||||
## Features
|
||||
|
||||
- Responsive design with modern CSS
|
||||
- Navigation menu
|
||||
- Blog posts with tags and categories
|
||||
- Easy deployment to LXC containers
|
||||
- Markdown-based content management
|
||||
|
||||
## Development
|
||||
|
||||
### Prerequisites
|
||||
|
||||
- Hugo (extended version) - see [Installation](https://gohugo.io/installation/)
|
||||
|
||||
### Local Development
|
||||
|
||||
1. Clone this repository
|
||||
2. Run `hugo server` to start local development server
|
||||
3. Open http://localhost:1313
|
||||
|
||||
### Adding Content
|
||||
|
||||
- **Homepage**: Edit `content/_index.md`
|
||||
- **Resume**: Edit `content/resume.md`
|
||||
- **Blog Posts**: Create markdown files in `content/posts/`
|
||||
- **New Pages**: Create markdown files in `content/` with appropriate front matter
|
||||
|
||||
### Project Structure
|
||||
|
||||
```
|
||||
├── archetypes/ # Content templates
|
||||
├── assets/ # Theme assets (CSS, JS)
|
||||
├── content/ # Website content (markdown files)
|
||||
├── layouts/ # HTML templates
|
||||
├── static/ # Static files (images, etc.)
|
||||
├── themes/personal # Custom theme
|
||||
├── hugo.toml # Site configuration
|
||||
└── deploy.sh # Deployment script
|
||||
```
|
||||
|
||||
## Deployment
|
||||
|
||||
See [DEPLOYMENT.md](DEPLOYMENT.md) for detailed instructions on deploying to an LXC container.
|
||||
|
||||
## License
|
||||
|
||||
MIT License - see [LICENSE](LICENSE) file.
|
||||
5
archetypes/default.md
Normal file
5
archetypes/default.md
Normal file
@@ -0,0 +1,5 @@
|
||||
+++
|
||||
date = '{{ .Date }}'
|
||||
draft = true
|
||||
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
|
||||
+++
|
||||
38
content/_index.md
Normal file
38
content/_index.md
Normal file
@@ -0,0 +1,38 @@
|
||||
---
|
||||
title: "about me"
|
||||
date: 2026-02-12T13:27:00-05:00
|
||||
draft: false
|
||||
---
|
||||
|
||||
# Hello! I'm Dustin
|
||||
|
||||
I'm an IT professional with a passion for technology and its transformative power. I live in Syracuse, NY with my incredible wife. Our journey together has been filled with love, mutual support, and academic pursuits.
|
||||
|
||||
## My Journey
|
||||
|
||||
Born and raised in Cato, I graduated high school in 2010 and embarked on an academic journey at RIT. Living on campus, I made lifelong friends and memories. My path then took me to Red Creek, balancing work with my studies at ITT-Tech, laying the foundation for my IT career.
|
||||
|
||||
After graduating, I moved to Central Square and worked at Walmart. It was here, in 2014, I met my wife. Our shared path has led us through various cities in New York, and we got married in 2020, marking a significant milestone in our adventure together. After settling in Fayetteville in 2023, we moved back to Syracuse in 2024. We returned to familiar grounds as we continue to build our life together.
|
||||
|
||||
## Supporting Each Other
|
||||
|
||||
Throughout our relationship, I've been proudly supporting my wife through her academic endeavors. She earned her Associate's degree from CCC as a commuter while we lived together, followed by her Bachelor's at SUNY Geneseo, where she lived on campus and I was in Liverpool, NY. Her Master's from St. Bonaventure was completed online while we were together. She began a PhD at the University of Arkansas (UARK) and, after deciding it wasn’t the right fit, she’s now continuing her education in an online program with Waynesburg University.
|
||||
|
||||
## Professional Journey
|
||||
|
||||
In my professional life, I've navigated various roles in IT. I started at Delta Sonic, moved on to the New York State Office of Information Technology Services, and later thrived as a Desktop Support Specialist at VSO (Virtual Service Operations). After a role with Greene Resources as an Infrastructure Support Specialist, I joined Waygate Technologies in Skaneateles as an End User Support Engineer. Most recently, in March 2025, I returned to New York State service (Office of Information Technology Services), where I continue supporting end users and enterprise operations.
|
||||
|
||||
## Educational Background
|
||||
|
||||
I'm a proud alum of Cato-Meridian High School and ITT-Technical Institute, where I earned my AAS in Computer & Network Systems Administration. These experiences have been instrumental in shaping my professional knowledge and skills.
|
||||
|
||||
## Skills and Expertise
|
||||
|
||||
Over the years, I've developed a rich skill set, including expertise in Microsoft Office Suite, Outlook, Mac OS, Linux, SiteWatch, Radiant, and a comprehensive understanding of IT infrastructure services, security, and protocols. My strengths include analytical thinking, diagnostic skills, and problem-solving abilities.
|
||||
|
||||
## Life Beyond Work
|
||||
|
||||
Outside of work, my life revolves around my family. My wife and I cherish our time together in Syracuse. Our story, from our first meeting to supporting each other through various life chapters, is a testament to our shared commitment and love.
|
||||
|
||||
## Contact
|
||||
Email me, [dustin@dustin.coffee](mailto:dustin@dustin.coffee).
|
||||
33
content/posts/2023-12-27-New-Site.md
Normal file
33
content/posts/2023-12-27-New-Site.md
Normal file
@@ -0,0 +1,33 @@
|
||||
---
|
||||
layout: post
|
||||
title: "d@n tech is Live!"
|
||||
---
|
||||
|
||||
# New Site Deployed: D@N Tech is Now Live!
|
||||
|
||||
I am excited to announce that my new Jekyll site, **d@n tech**, is officially live! This is a significant milestone for me, and I'm thrilled to share this journey with you.
|
||||
|
||||
## The Journey to Jekyll
|
||||
|
||||
Initially, I considered using WordPress for my website. WordPress is a powerful tool with a lot of flexibility, and it's great for many projects. However, for my specific needs, I found it to be somewhat bulky. I needed something streamlined, efficient, and more suited to a tech-centric site like mine.
|
||||
|
||||
That's when I turned to Jekyll. Jekyll is a static site generator that's perfect for developers who want to dive into code, customize their site extensively, and have a more hands-on approach to site management. It's lightweight, fast, and allows for greater control over the site's design and functionality.
|
||||
|
||||
## Why Jekyll?
|
||||
|
||||
There are several reasons why Jekyll stood out to me:
|
||||
|
||||
- **Simplicity and Speed**: Jekyll sites are static, which means they load faster and are simpler to host and manage.
|
||||
- **Developer-Friendly**: As a developer, I appreciate being able to work directly with the code, and Jekyll is built for this kind of hands-on approach.
|
||||
- **Customization**: With Jekyll, I have more freedom to customize my site exactly how I want it.
|
||||
- **Community and Support**: The Jekyll community is vibrant and supportive, offering a wealth of plugins and themes.
|
||||
|
||||
## What's Next for D@N Tech?
|
||||
|
||||
The launch of d@n tech is just the beginning. This blog will serve as a chronicle of my journey in tech, a place where I can share updates, insights, and experiences.
|
||||
|
||||
- **Regular Updates**: Expect regular posts on projects I'm working on, new technologies I'm exploring, and general thoughts on the IT world.
|
||||
- **Resource Sharing**: I'll be sharing resources and tips that I find useful in my professional journey.
|
||||
- **Community Interaction**: I'm looking forward to engaging with the community, learning from others, and sharing my knowledge.
|
||||
|
||||
Stay tuned for more updates, and thank you for being a part of this exciting journey!
|
||||
44
content/posts/2024-01-03-brewing-a-stronger-it-career.md
Normal file
44
content/posts/2024-01-03-brewing-a-stronger-it-career.md
Normal file
@@ -0,0 +1,44 @@
|
||||
---
|
||||
layout: post
|
||||
title: "brewing a stronger it career: from helpdesk to higher ed"
|
||||
---
|
||||
|
||||
Hello everyone!
|
||||
|
||||
Today, I want to share some exciting personal updates and reflections on my ongoing journey in the tech world.
|
||||
|
||||
## Hitting the Glass Ceiling with an Associate's Degree
|
||||
|
||||
For a while now, I've been navigating the IT landscape with my Associate's degree in hand. While it's been a valuable stepping stone, I've increasingly felt the constraints of what some call the "glass ceiling" in the tech industry. Despite my efforts and experience, I've found myself confined primarily to helpdesk roles. It's a common plateau many of us in tech face, and it's led me to a significant decision.
|
||||
|
||||
## Stepping Up: My Admission to WGU's Accelerated IT Program
|
||||
|
||||
I'm thrilled to announce my admission to Western Governors University's accelerated Bachelor's and Master's Degree program in Information Technology, starting on February 1, 2024. This program is a unique opportunity for me to deepen my knowledge, broaden my skills, and break through the career barriers I've been facing.
|
||||
|
||||
## Why Further Education?
|
||||
|
||||
I've always believed in the power of education to fill in knowledge gaps and open new doors. With technology evolving at a breakneck pace, there's always more to learn. This program is not just about getting higher qualifications; it's about equipping myself to contribute more significantly to the field I am passionate about.
|
||||
|
||||
## The Role of My Homelab
|
||||
|
||||
My homelab has been a cornerstone of my learning journey. It's where I experiment, explore, and expand my practical knowledge of IT systems. I anticipate that the WGU program will not only benefit from my hands-on experience in the homelab but will also provide new insights and challenges that I can bring back to my personal lab setup and services I provide.
|
||||
|
||||
## A Call for Support
|
||||
|
||||
As I embark on this new educational path, any support to enhance my homelab capabilities and cover the costs of running services would be greatly appreciated. Your support, whether through knowledge sharing, equipment recommendations, or financial contributions, will play a crucial role in my journey.
|
||||
|
||||
## Merchandise on the Horizon
|
||||
|
||||
In other exciting news, I'm working on launching a range of merchandise on Redbubble. This is not just about creating cool, tech-themed items; it's a creative outlet for me and a way to connect with the community. Stay tuned for more updates!
|
||||
|
||||
|
||||
Logo for merch:
|
||||
|
||||

|
||||
|
||||
|
||||
## In Closing
|
||||
|
||||
I'm at an exciting crossroads, filled with new challenges and opportunities. I look forward to sharing my experiences and learnings with all of you. Let's continue to grow and learn together in this ever-evolving world of technology.
|
||||
|
||||
Thank you for being a part of my journey!
|
||||
@@ -0,0 +1,72 @@
|
||||
---
|
||||
layout: post
|
||||
title: "tech infrastructure unpacked: from cloud to home server"
|
||||
---
|
||||
|
||||
#### Introduction: Sit back and grab a coffee
|
||||
Welcome to a behind-the-scenes look at the infrastructure powering my websites, Dustin.coffee and Hobokenchicken.com. In this post, I'll lay out the complexities and intricacies of my personal tech setup, demonstrating the importance of reliability, technical skills, and the sheer appreciation of a well-built system.
|
||||
|
||||
#### Section 1: Domain and DNS Configuration
|
||||
-**Cloudflare for DNS Management**
|
||||
- **Why the Switch?** I transitioned to Cloudflare for managing the DNS of dustin.coffee and hobokenchicken.com after Google Domains shut down.
|
||||
- **Understanding DNS Management:** Think of DNS (Domain Name System) management like a coffee shop's menu. It helps people find my websites using easy-to-remember names (like dustin.coffee) instead of complex numerical addresses, much like how you'd order a "Caramel Macchiato" instead of remembering a specific recipe.
|
||||
- **Choosing Cloudflare:** Cloudflare is renowned for its speed and security, akin to a highly efficient and safe coffee shop where your order is always secure and served quickly.
|
||||
- **Content Delivery Network (CDN) Explained:** Cloudflare includes a CDN, which can be likened to having multiple coffee stations in a large office. Instead of everyone queuing at one station, causing delays, there are several stations strategically placed around the office. This setup means that no matter where you are in the office, you can get your coffee quickly. In the same way, the CDN ensures that the static content of my websites (like images and stylesheets that don't change often) is stored in various locations on the internet, so it’s served faster to you, the visitor, no matter where you are.
|
||||
|
||||
#### Section 2: Oracle VPS and Its Role
|
||||
- **Choosing Oracle VPS:** Think of Oracle VPS as a reliable and affordable storage unit for my website's digital data. After exploring options like Google Cloud and Hetzner, Oracle VPS stood out for its excellent free tier, offering just the right balance of space and features for my needs. And with the balooning costs of Google and Hetzner, Oracle's free tier had exactly what I wanted and needed for no cost.
|
||||
- **Making Connections Work:**
|
||||
- **Nginx Proxy Manager:** This is akin to a smart sorting system in a post office. When someone requests to view my website, Nginx Proxy Manager efficiently directs this request to the right destination. It ensures that every digital 'letter' (or in this case, a request to access my website) is sorted and sent to the correct mailbox (my server).
|
||||
- **Tailscale:** Imagine Tailscale as a secure and private delivery service. It safely transports information from my Oracle VPS (the digital 'storage unit') to my home server (the 'house' where my website lives). Tailscale ensures this digital journey is secure, keeping the data safe from any unwanted interference.
|
||||
- **How They Work Together:**
|
||||
- The data journey starts when you type in my website's address. This request travels to Cloudflare (the DNS manager), which acts like a directory, pointing the request to the Oracle VPS.
|
||||
- Next, the Oracle VPS, equipped with the Nginx Proxy Manager, receives this request. Nginx checks where the request needs to go – in this case, it's directed to my home server.
|
||||
- Tailscale then steps in, creating a secure path for this request to travel from the Oracle VPS to my home server. This ensures that the data remains private and secure as it makes its way to the server.
|
||||
- Once the request arrives at my home server, the server processes it and sends back the requested web page or information via the same secure route, back to your screen.
|
||||
This setup ensures a smooth, secure, and efficient flow of data, from the moment you request to view my website to the moment the content is displayed on your screen.
|
||||
|
||||
#### Section 3: The Home Server - Heart of the Operation
|
||||
- **Server Specifications:**
|
||||
- My home server, a Dell r720xd, is the workhorse behind my entire setup. It's designed to handle demanding tasks with ease. Here's a quick rundown of what it packs:
|
||||
- **Processors:** It boasts 2x Xeon E5-2695v2 CPUs. These processors are like the brains of the server, handling multiple tasks simultaneously without breaking a sweat.
|
||||
- **Memory:** With 378GB of RAM, it's like having a vast workspace, allowing me to run several applications and processes concurrently without any lag.
|
||||
- **Storage:** For quick access and operations, it has 2x 1TB SSDs. These are like the top drawers of a desk, where I keep frequently used tools. For larger, less frequently accessed data, there are 12 10TB SAS HDDs, acting like a massive filing cabinet, offering ample space.
|
||||
- This combination of processors, memory, and storage means the server can manage heavy data loads, run multiple services smoothly, and store a vast amount of data – perfect for my varied needs.
|
||||
- **Tailscale Subnet Router VM:**
|
||||
- This particular VM (Virtual Machine) plays a unique role. It's set up as a subnet router for Tailscale. To understand its function, imagine Tailscale as a secure, private network connecting various devices. Normally, each device (or in my case, each LXC container) would need its own Tailscale setup, which can be like having a separate security system for each room in a house.
|
||||
- What the Tailscale Subnet Router VM does is act like a central security system for the entire house. It means that instead of setting up Tailscale on every individual LXC container, they all automatically get secure access through this VM. This setup simplifies management, enhances security, and ensures that each part of my server communicates securely with the outside world.
|
||||
- **A Note on Server Age and Ko-fi Initiative:**
|
||||
- While my Dell r720xd server has been a reliable cornerstone of my digital infrastructure, it's important to note that it's part of an aging platform. In the tech world, this is akin to having a classic car - it has its charm and capabilities, but it also requires maintenance and eventual upgrades to keep up with modern demands and efficiencies.
|
||||
- To address this, I've started a Ko-fi initiative. Think of Ko-fi as a digital tip jar where supporters can contribute small amounts to help fund upgrades and maintenance for the server. This initiative is all about ensuring that my server continues to run smoothly and remains capable of supporting the latest technologies and my growing needs. Contributions will go directly towards hardware upgrades, ensuring that the server remains robust, secure, and efficient.
|
||||
- If you appreciate the content and services I provide and want to support the longevity and improvement of this setup, consider contributing to my Ko-fi. Every little bit helps in keeping this digital engine running at its best!
|
||||
|
||||
#### Section 4: LXC Containers and Services
|
||||
- **Plex with GPU Passthrough:**
|
||||
- My Plex server is a key component of my home entertainment system. By utilizing GPU passthrough, the server's graphics processing capabilities are significantly enhanced. This means smoother, higher-quality video transcoding, allowing for a better viewing experience on various devices, regardless of their native format compatibility.
|
||||
- **Calibre-web in Docker:**
|
||||
- Calibre-web, hosted in a Docker container, serves as a digital library. It's primarily used for managing and providing access to a wide range of college textbooks and educational materials for students I support. This setup simplifies the process of storing, accessing, and reading these books, making it an invaluable resource for their academic needs.
|
||||
- **Jekyll Blog Hosting:**
|
||||
- For my Jekyll blog, I've tailored a hosting environment that allows for efficient management and seamless content updates. This setup ensures that my blog remains responsive, secure, and easy to navigate, offering visitors a pleasant reading experience.
|
||||
- **Foundry Server for Pathfinder:**
|
||||
- The Foundry server is dedicated to hosting Pathfinder role-playing games. It's one of my oldest and most cherished projects, co-managed with another Dungeon Master. This server provides a rich, interactive platform for our gaming sessions, complete with maps, character sheets, and real-time updates, enhancing our Pathfinder experiences.
|
||||
- **'Arr' Stack in Docker:**
|
||||
- The 'Arr' stack, hosted within Docker, comprises several components including Prowlarr, Radarr, Sonarr, Sabnzbd, Lidarr, Bazarr, Overseer, Tautulli, Deemix, and Homarr. Each of these components plays a specific role, from managing TV show downloads (Sonarr) to handling music (Lidarr), and even tracking and analyzing Plex usage (Tautulli). This stack represents a comprehensive media management solution, catering to various entertainment needs.
|
||||
- **Mealie Website for Recipes:**
|
||||
- Mealie is a recent addition to my setup, currently in the testing phase. It's a web application for meal planning, recipe storage, and generating shopping lists. This tool is aimed at simplifying the process of deciding what to eat, preparing meals, and shopping for ingredients, streamlining the entire culinary experience in my household.
|
||||
|
||||
#### Section 5: Data Flow and Security
|
||||
- **Overview of Data Flow**
|
||||
- I'll provide a diagram and a thorough explanation of how data moves through this intricate setup.
|
||||
- **Security Measures**
|
||||
- Discussion of the various security measures in place, especially focusing on the role of Tailscale and other precautions I've implemented.
|
||||
|
||||
#### Conclusion: Bringing It All Together
|
||||
As we've journeyed through the various components of my digital setup – from DNS management with Cloudflare to the intricacies of my home server and LXC containers – it's clear that managing such a system requires a blend of technical know-how, strategic planning, and a passion for technology.
|
||||
|
||||
The complexity of this setup not only showcases the dynamic nature of tech infrastructure but also highlights the importance of ongoing learning and adaptation. Whether it's handling the transition from Google Domains to Cloudflare, optimizing the use of Oracle VPS, or maintaining the myriad services on my Dell r720xd, each element plays a crucial role in delivering a seamless digital experience.
|
||||
|
||||
Beyond the technical aspects, this journey is also about the community and the shared experiences. From hosting Pathfinder games to providing educational resources through Calibre-web, each service has its unique impact.
|
||||
|
||||
As technology continues to evolve, so will the components of my setup. I'm excited to continue sharing these developments, insights, and stories with you. Your feedback, questions, and support – especially through initiatives like the Ko-fi for server upgrades – are what make this journey enriching and worthwhile.
|
||||
|
||||
Thank you for taking the time to delve into the world of dustin.coffee and hobokenchicken.com. I hope this glimpse behind the scenes not only informs but also inspires you in your own tech endeavors.
|
||||
43
content/posts/2024-01-22-my-it-odyssey.md
Normal file
43
content/posts/2024-01-22-my-it-odyssey.md
Normal file
@@ -0,0 +1,43 @@
|
||||
---
|
||||
layout: post
|
||||
title: "my it odyssey: from entry-level to expertise"
|
||||
---
|
||||
|
||||
#### Introduction
|
||||
Hello, I'm Dustin, and I've been navigating the dynamic world of IT support since 2017. With a foundation in Computer Network Systems and Administration from ITT-Tech (2013), my career has taken me through various roles, each offering unique challenges and learnings. Today, I'd like to share my journey, hoping to inspire those starting in IT or looking to advance in this field.
|
||||
|
||||
#### First Steps at Delta Sonic Car Wash (2017-2019)
|
||||
- **Role:** Computer Support Technician
|
||||
- **Scope:** Managed IT needs across 9 locations in 2 cities.
|
||||
- **Deeper Dive:**
|
||||
- **Challenges Faced:** Tackling complex POS system issues and network dilemmas was a daily task, pushing me to develop effective troubleshooting skills.
|
||||
- **Skill Development:** This role was crucial in honing my technical problem-solving abilities and customer service skills, teaching me the value of patience and clear communication.
|
||||
- **Key Takeaways:** I learned the importance of a meticulous approach to diagnostics and the necessity of translating tech jargon into understandable language for non-tech staff.
|
||||
|
||||
#### Leveling Up at NYS ITS (2019-2023)
|
||||
- **Role:** Level 2 IT Support (L2 ITS)
|
||||
- **Scope:** Provided IT support for 25 agencies over 10 counties in Central NY.
|
||||
- **Expanding Horizons:**
|
||||
- **Broader Impact:** My efforts here went beyond fixing immediate issues, contributing to smoother operations across multiple agencies.
|
||||
- **Professional Growth:** This period was marked by growth in project management and strategic planning, as I spearheaded hardware rollouts and upgrades.
|
||||
- **Memorable Projects:** A significant project I managed was the standup of the Mass Vaccination Site at the NYS Fairgrounds, which taught me valuable lessons in large-scale project execution.
|
||||
|
||||
#### Current Role at Virtual Service Operations (VSO) (2023-Present)
|
||||
- **Role:** Raytheon Technology Deskside Support at Pratt & Whitney
|
||||
- **Scope:** Catering to the IT needs of about 200 users at the Pratt and Whitney PSD campus.
|
||||
- **Current Endeavors:**
|
||||
- **Solo Operations:** As the only IT support on campus, I handle everything from software installations to complex troubleshooting, ensuring smooth tech operations for all users.
|
||||
- **Adapting to Change:** This role requires me to be agile and up-to-date with the latest technologies, adapting quickly to new challenges and IT methodologies.
|
||||
- **Independent Problem Solving:** Working alone has honed my ability to tackle issues independently and develop innovative solutions, reinforcing the importance of self-reliance and resourcefulness in tech support.
|
||||
|
||||
|
||||
#### Future Plans and Aspirations
|
||||
- **Academic Pursuits:** I'm excited to start an Accelerated Bachelor's and Master's IT degree program at WGU on 2/1/24, aiming to deepen my knowledge and open new career avenues.
|
||||
- **Career Vision:** Post-graduation, I envision a role that not only challenges me but also aligns more closely with my passion for emerging technologies and innovative solutions.
|
||||
|
||||
#### Personal Reflections
|
||||
- **The Tech Landscape:** The IT field has evolved tremendously, and I believe we're on the cusp of more groundbreaking changes in technology and how we interact with it.
|
||||
- **Work-Life Balance:** Balancing a demanding career with personal passions like homelabs and Pathfinder gaming has been a fulfilling journey in itself.
|
||||
|
||||
#### Conclusion
|
||||
My journey through the IT landscape has been enriching and enlightening. I'm grateful for the challenges and opportunities I've encountered, and I hope my story encourages others to pursue their own path in tech. If you're on a similar journey, I'd love to hear about your experiences and challenges. Together, let's continue to learn, grow, and innovate in this ever-evolving field.
|
||||
30
content/posts/2024-03-04-changes-are-brewing.md
Normal file
30
content/posts/2024-03-04-changes-are-brewing.md
Normal file
@@ -0,0 +1,30 @@
|
||||
---
|
||||
layout: post
|
||||
title: "transitioning from lxc to vms: preparing for xcp-ng"
|
||||
---
|
||||
|
||||
#### Introduction:
|
||||
In this latest discussion at d@n tech, we're focusing on a significant transition in the server environment. I've recently embarked on a project to shift from LXC containers to VMs (Virtual Machines), a move prompted by upcoming changes in the server infrastructure.
|
||||
|
||||
#### Why the Shift?:
|
||||
The move away from LXC containers, a staple in my Proxmox setup, to VMs is driven by a need for greater flexibility and platform independence. With plans to eventually migrate to XCP-NG from Proxmox, VMs present a more viable option due to their portability and compatibility with various platforms.
|
||||
|
||||
#### The Transition Process:
|
||||
|
||||
- **Evaluation:** The initial phase involved assessing the existing LXC configurations, understanding the nuances of their deployment within Proxmox.
|
||||
- **Selecting the VM Platform:** After exploring various options, I settled on a VM platform that complements the forthcoming XCP-NG environment.
|
||||
- **Migration Strategy:** I planned the migration in stages, aiming to minimize disruptions and ensure data integrity throughout the process.
|
||||
- **Implementation:** The services were methodically transitioned from LXC to VMs, with each step rigorously tested for performance and functionality.
|
||||
- **Post-Migration Optimization:** Following the migration, I've been focusing on fine-tuning the VMs to optimize their performance in the new environment.
|
||||
|
||||
#### Upcoming Changes:
|
||||
The most significant upcoming change is the construction and deployment of a new server that will run XCP-NG. This shift marks a departure from the current Proxmox setup. Once the new server is built and put into production, the VMs, currently housed within Proxmox, will be migrated over to XCP-NG. This transition is not just a change in technology but a strategic move towards a more versatile and robust server ecosystem.
|
||||
|
||||
#### Challenges and Learnings:
|
||||
Navigating through this transition hasn't been straightforward. From compatibility checks to performance tuning, each step presented its own set of challenges. However, these hurdles have provided valuable insights into both Proxmox and XCP-NG platforms.
|
||||
|
||||
#### Conclusion:
|
||||
This journey from LXC containers to VMs, culminating in the move to XCP-NG, is more than a technical upgrade. It's a step towards future-proofing the server environment, ensuring I stay agile and adaptable in the ever-evolving tech landscape.
|
||||
|
||||
#### Looking Ahead at d@n tech:
|
||||
As we move closer to the full deployment of the XCP-NG server, stay tuned for more updates, insights, and learnings from this journey.
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
layout: post
|
||||
title: "java journeys: transitioning to it infrastructure at wolfspeed"
|
||||
---
|
||||
|
||||
#### Introduction:
|
||||
Hey there, folks! Today, I'm sharing a pivotal moment in my career journey with you at d@n tech. After five months of serving as a Desktop Support Specialist at Pratt & Whitney PSD, I've moved into a new role as an IT Infrastructure Support Technician at Wolfspeed.
|
||||
|
||||
|
||||
#### My Time at Pratt & Whitney PSD:
|
||||
At Pratt & Whitney PSD, I was the go-to guy for 200 end users, juggling tasks in office spaces and on the bustling machining floor. It was a busy gig that taught me the value of staying cool under pressure and finding solutions on the fly.
|
||||
|
||||
|
||||
#### Transitioning to Wolfspeed:
|
||||
Now, I'm settling into life at Wolfspeed, where I'm supporting around 80 end users across office and electrical lab environments. My plate is full with projects, L2 support, and handling the ins and outs of new user deployments.
|
||||
|
||||
|
||||
#### Facing the Challenges:
|
||||
Switching gears to a new role isn't without its hurdles. Getting acquainted with Wolfspeed's IT setup and catering to a smaller user base has been a bit of a learning curve. But hey, every challenge is just a chance to level up, right?
|
||||
|
||||
|
||||
#### Embracing the Opportunities:
|
||||
Despite the adjustments, I'm pumped about what lies ahead. Wolfspeed offers a chance to dive deep into IT infrastructure support, exploring new tech and fine-tuning my project management chops along the way.
|
||||
|
||||
|
||||
#### A Blend of Passion and Purpose:
|
||||
For a homelabber and tech enthusiast like me, this career shift is more than just a job change - it's about pursuing what fires me up and pushing myself to grow, both personally and professionally.
|
||||
|
||||
|
||||
|
||||
#### Looking Forward:
|
||||
As I settle into my groove at Wolfspeed, I'll be dishing out insights, tips, and tales from the trenches of IT support. So keep an eye out for more updates and musings as we journey through the world of tech and coffee together here at d@n tech.
|
||||
|
||||
|
||||
#### Conclusion:
|
||||
Change can be a wild ride, but it's all about rolling with the punches and savoring the journey. Here's to new beginnings, endless possibilities, and a good old cup of Americano to keep us grounded along the way.
|
||||
@@ -0,0 +1,22 @@
|
||||
---
|
||||
layout: post
|
||||
title: "brewing resilience: from lxc to vm for flawless plex and beyond"
|
||||
---
|
||||
|
||||
#### Introduction:
|
||||
Hey everyone, it's time for another tech update from d@n tech! Recently, I made a significant change to my Plex server setup that I'm excited to share with you all. After encountering issues with hardware transcoding, I decided to transition my Plex server from an LXC container to a VM, utilizing GPU passthrough for flawless transcoding performance.
|
||||
|
||||
#### The Importance of Hardware Transcoding and GPU Passthrough:
|
||||
Before diving into the transition process, let's talk about why hardware transcoding and GPU passthrough are crucial for a smooth Plex experience. Hardware transcoding offloads the burden of video transcoding from the CPU to specialized hardware, such as a GPU. This results in lower CPU usage, faster transcoding speeds, and better playback performance, especially for remote streaming or multiple concurrent streams. GPU passthrough allows a virtual machine to directly access and utilize a physical GPU, ensuring optimal performance for tasks like video encoding and decoding.
|
||||
|
||||
#### Encountering Issues and Making the Transition:
|
||||
A couple of weeks ago, I noticed that hardware transcoding on my Plex server was no longer functioning properly. After troubleshooting for hours, I discovered that something had broken, preventing the GPU from being utilized for transcoding within the LXC container. Faced with this dilemma, I decided to take the plunge and convert my Plex server to a VM, passing the GPU directly to the VM for optimal performance.
|
||||
|
||||
#### The Transition Process:
|
||||
Converting the Plex server from an LXC container to a VM was no small feat, but it was well worth the effort. I spent several hours meticulously configuring the VM and setting up GPU passthrough. Once everything was in place, I fired up Plex and was thrilled to see hardware transcoding working flawlessly once again. The difference in performance was like night and day, with smoother playback and reduced CPU load.
|
||||
|
||||
#### Conclusion:
|
||||
The transition from LXC to VM with GPU passthrough has revitalized my Plex server, ensuring seamless streaming experiences for users across the United States. With hardware transcoding back on track, remote streaming is once again smooth and reliable, regardless of the distance. Beyond Plex, this change underscores the significance of leveraging hardware acceleration and GPU passthrough for a wide range of services hosted on my server. From media streaming to collaborative projects and beyond, the improved performance enhances the overall user experience and reinforces the reliability of my server infrastructure.
|
||||
|
||||
#### Stay Tuned:
|
||||
As I continue to fine-tune my server setup and explore new technologies, including optimizations for remote streaming and enhancements to various hosted services, be sure to stay tuned for more updates and insights here at d@n tech. Whether you're a fellow tech enthusiast or a remote user enjoying the benefits of my server, there's always something new on the horizon.
|
||||
@@ -0,0 +1,21 @@
|
||||
---
|
||||
layout: post
|
||||
title: "when the coffee gets cold: recent adventures in my tech homelab"
|
||||
---
|
||||
|
||||
#### A Not-So-Smooth Brew: Plex VM Crash
|
||||
Just like the perfect cup of coffee, my Plex Media Server has always been a source of comfort. However, recently, it decided to give me a bit of a jolt. The Plex VM crashed, which felt like spilling a fresh brew all over the counter. Thankfully, no media was lost. But, just like trying to clean up a coffee spill, restoring the backup didn’t go as planned.
|
||||
|
||||
Instead of throwing in the towel, I rolled up my sleeves and rebuilt the VM from scratch. In the end, it was like discovering a new coffee blend – different, but better. I made some significant changes that improved the performance and reliability of the server. Sometimes, the best way to deal with a mess is to embrace the opportunity to improve.
|
||||
|
||||
#### Fresh Beans: Upgrading the Server
|
||||
In the quest for better performance, I decided it was time for a hardware upgrade. I purchased 8 Xeon Gold 6138 processors, two per node, and got one node up and running for testing. It was like upgrading from instant coffee to a high-end espresso machine. The server feels more powerful and ready to handle anything I throw at it.
|
||||
|
||||
However, before I can start moving my VMs, I need to invest in more RAM. For now, the new node is up and running, and I've tested moving VMs from Proxmox to XCP-NG. The process was smooth, with no issues – like making a seamless transition from drip coffee to a French press. Everything worked perfectly, setting the stage for future migrations.
|
||||
|
||||
#### Scheduled Downtime: Brewing the Perfect Cup
|
||||
As any coffee aficionado knows, good things take time. Similarly, my server setup will require some planned downtime in the last week of July into early August. While this might feel like waiting for your morning coffee to brew, I assure you it’s worth it. There will be no loss of data, although services will be temporarily impacted.
|
||||
|
||||
This downtime is necessary to ensure everything is running as smoothly as a freshly brewed cup of coffee. Once complete, my homelab will be stronger and more efficient, ready to serve up the tech equivalent of a perfect cup of joe.
|
||||
|
||||
Stay tuned for more updates from dustin.coffee. Until then, keep your coffee hot and your servers cool!
|
||||
@@ -0,0 +1,23 @@
|
||||
---
|
||||
layout: post
|
||||
title: "a roast of reality: life changes, career shifts, and what's next"
|
||||
---
|
||||
|
||||
Life can be compared to coffee: bitter, sweet, and full of unexpected flavors. Over the past few years, I've experienced various life changes and career shifts that have brought challenges and opportunities. Let's explore my journey in several distinct phases.
|
||||
|
||||
#### The Big Decision
|
||||
In April 2024, my wife decided to leave her PhD program. This pivotal moment led us to reevaluate our priorities and consider a change of scenery. We decided to move back to New York on August 1st, 2024, seeking new opportunities and a fresh start.
|
||||
|
||||
#### Facing Challenges
|
||||
Upon returning to New York, financial responsibilities took center stage. To meet these obligations, I took a job at Walmart towards the end of August 2024. Although it wasn't my dream position, I reminded myself that every experience offers room for growth and learning.
|
||||
|
||||
#### New Opportunities
|
||||
As the seasons changed, so did my luck. On October 1st, 2024, I began a new role as a contractor through MergeIT, working with Waygate Tech in Skaneateles. This position allowed me to put my IT expertise to good use and reignite my passion for technology.
|
||||
|
||||
#### Future Aspirations
|
||||
Even as I settle into my current role, I'm still looking for opportunities to return to New York State ITS. The public sector presents unique challenges and a chance to make a positive impact on a broader scale.
|
||||
|
||||
#### Embracing Change
|
||||
Moving forward, I'm committed to embracing whatever life has in store for me, whether it's another career change or a fresh start in a new city. Just as coffee beans must undergo a roasting process to reveal their full potential, life's twists and turns can refine us, fostering growth and resilience.
|
||||
In conclusion, life is unpredictable, and careers can be uncertain. By staying true to ourselves and embracing new experiences, we can weather any storm and come out stronger. So, let's raise a cup to life's bitter and sweet moments and toast the journey ahead!
|
||||
It's been four months since I last posted on this blog. This hiatus is mainly due to a lack of time, energy, and uncertainty about what to share. However, I'm committed to getting back into the swing of things and providing valuable content for my readers. Thank you for your patience and continued support.
|
||||
@@ -0,0 +1,32 @@
|
||||
---
|
||||
layout: post
|
||||
title: "brewed reflections: a semester wrap-up and steaming future ahead"
|
||||
---
|
||||
|
||||
Welcome back to my corner of the internet! As I sit down to reflect on this past semester, I’m filled with a sense of accomplishment and excitement for what lies ahead. This journey has been nothing short of enlightening, and I'm eager to share my experiences while stirring in a bit of my favorite brew!
|
||||
|
||||
**Sipping on Knowledge: Classes Completed**
|
||||
|
||||
This semester, I’ve had the privilege of diving into five diverse courses that have each contributed uniquely to my academic growth:
|
||||
|
||||
- **American Politics and the US Constitution**: This course provided a deep dive into the foundational aspects of American governance. Understanding the nuances of our political system has been both fascinating and enlightening—much like savoring a bold cup of coffee!
|
||||
|
||||
- **Natural Sciences Lab**: Hands-on experiments in the lab have reinforced theoretical concepts, making abstract ideas tangible through practical application. It’s been an engaging way to explore scientific principles—comparable to the precise process of brewing the perfect espresso.
|
||||
|
||||
- **Applied Algebra**: Strengthening my algebraic skills has proven invaluable, especially in problem-solving scenarios that require analytical thinking. The practical applications of these skills are vast and exciting— kind of like calculating the ideal coffee-to-water ratio!
|
||||
|
||||
- **Ethics in Technology**: This course challenged me to think critically about the moral implications of technological advancements. It's a crucial area as technology continues to evolve rapidly, impacting society in profound ways—much like how innovations in coffee brewing have transformed our mornings.
|
||||
|
||||
- **Cloud Foundations**: Completing this course was a significant milestone, capped by earning my **AWS Certified Cloud Practitioner certification**. This achievement feels like a testament to my dedication and hard work, opening doors to new career opportunities in the cloud computing field.
|
||||
|
||||
Reflecting on these courses, I’m proud of the effort I’ve put in and the knowledge I’ve gained. Each has prepared me for new challenges and adventures.
|
||||
|
||||
**Espresso Yourself: Excitement for Next Steps**
|
||||
|
||||
Looking ahead, I’m thrilled to embark on my next semester with **Web Development Foundations** and **Web Development Applications**. With my experience building and hosting a couple of websites, I'm excited to deepen my knowledge in these areas. It’s incredibly rewarding to see ideas come to life online, similar to watching a barista perfect their craft.
|
||||
|
||||
**Final Thoughts: Brewing Success**
|
||||
|
||||
As I move forward, I remain committed to my educational goals, excited for the challenges and opportunities ahead. The journey is as important as the destination, and I’m grateful for each step taken so far. Here’s to continued growth, new skills, and achieving my aspirations in this ever-evolving educational landscape.
|
||||
|
||||
Thank you for joining me on this journey. Stay tuned for more updates as I continue to explore new horizons—because like a good cup of coffee, there’s always something brewing!
|
||||
@@ -0,0 +1,52 @@
|
||||
---
|
||||
layout: post
|
||||
title: "percolating ideas: my web dev adventure"
|
||||
---
|
||||
|
||||
|
||||
Creating a website is more than just coding; it’s about having a vision and bringing it to life. Recently, I embarked on an exciting web development adventure that was both personally and professionally fulfilling. Over the course of two weeks, I built a website for my friend, a dedicated mental health counselor, using HTML, CSS, Bootstrap, and PHP. Here’s a glimpse into my journey, from the initial brainstorming sessions to the final launch, and everything in between.
|
||||
|
||||
## The Inspiration Behind the Website
|
||||
|
||||
The foundation of this project was rooted in a profound purpose: to help my friend connect with individuals seeking mental health support. She had a clear vision for her website—a space that not only highlighted her counseling services but also provided resources, insights, and a sense of community. Understanding this, I was eager to turn her vision into a reality.
|
||||
|
||||
## Planning and Design: Laying the Groundwork
|
||||
|
||||
Every great project begins with a solid plan. We kicked things off with brainstorming sessions where my friend shared her ideas about the website’s content and structure. Together, we outlined the key pages:
|
||||
|
||||
- **About Page**: An introduction to my friend’s background and her approach to mental health counseling.
|
||||
- **Services Offered**: Detailed descriptions of the different counseling options available.
|
||||
- **Resource Hub**: A curated collection of articles, tips, and links to support mental well-being.
|
||||
- **Contact Form**: An easy-to-use form for potential clients to get in touch.
|
||||
|
||||
Using Bootstrap allowed me to create a responsive and visually appealing layout. The emphasis was on clarity and accessibility, ensuring that visitors could find what they needed without hassle.
|
||||
|
||||
## Development Process: Turning Ideas into Reality
|
||||
|
||||
My two-week development timeline was packed with creativity and learning. Here are some highlights from this adventure:
|
||||
|
||||
### Week 1: Structuring the Site
|
||||
|
||||
In the first week, I focused on the website’s foundational structure, employing HTML to set up content organization. CSS came next, allowing me to craft the aesthetic that matched my friend’s compassionate and professional tone. Bootstrap was instrumental during this phase, enabling a swift transition to a mobile-friendly design that adapts to various screen sizes.
|
||||
|
||||
### Week 2: Bringing Functionality to Life
|
||||
|
||||
With the structure in place, I sprinted into the second week, where I added PHP functionality for the contact form. This important feature would allow prospective clients to reach out without the hassle of dealing with their email accounts—a small yet significant convenience.
|
||||
|
||||
### Version Control: Keeping Track with GitHub
|
||||
|
||||
Track changes was a breeze thanks to GitHub. Every implementation and tweak was logged in the repository, which not only helped streamline development but also made it easier to involve my friend in the feedback loop. Iteration and collaboration became the backbone of our process, ensuring the final product was truly reflective of her vision.
|
||||
|
||||
## Hosting and Domain Setup: The Finishing Touches
|
||||
|
||||
Once we settled on the design and functionality, it was time to get the website online. I opted to host the site on a virtual machine (VM) within my own server. This gave me complete control over the hosting environment and security features.
|
||||
|
||||
For domain registration, we selected Cloudflare, known for its robust features and security enhancements. This decision meant that visitors would benefit from faster load times and improved site safety—important factors when dealing with sensitive topics like mental health.
|
||||
|
||||
## Conclusion: A Journey of Purpose
|
||||
|
||||
Building this website was more than a technical endeavor; it was an opportunity to contribute to a cause I truly believe in. Knowing that this platform can help connect individuals with the mental health support they need is immensely gratifying.
|
||||
|
||||
As my friend embarks on this new chapter of her practice, I’m excited to see how the website will grow and evolve. If you’re a mental health professional in need of an online presence or any kind of support to bring your ideas to fruition, remember: the journey may pose challenges, but the rewards are lasting.
|
||||
|
||||
This web dev adventure taught me that purpose drives creativity. Creating a meaningful website is not just an end goal; it’s a way to serve and connect with the community. Here’s to more adventures and the endless possibilities that come from percolating ideas!
|
||||
@@ -0,0 +1,41 @@
|
||||
---
|
||||
layout: post
|
||||
title: "from beans to bills: crafting my first project quote"
|
||||
---
|
||||
|
||||
|
||||
As I embark on the journey of freelancing, I found myself transitioning from creative coffee shop sessions to the business side of things. Like a well-brewed cup of coffee, managing my finances requires the right blend of tools and practices. Recently, I set up some essential systems that will help me streamline my invoicing process, including self-hosted InvoiceNinja software and a PayPal business account. Join me as I walk you through my experience of crafting my first project quote and the choices I made along the way.
|
||||
|
||||
## Brewing the Right Tools: Why I Chose InvoiceNinja
|
||||
|
||||
When it came to invoicing solutions, I needed something that was both flexible and easy to use. After researching various options, I settled on a self-hosted version of **InvoiceNinja**. This open-source software allowed me to have complete control over my data—much like crafting the perfect roast to suit my taste buds.
|
||||
|
||||
Self-hosting means I can customize the software according to my needs, and I love the idea of managing invoices without relying solely on a third-party provider. It’s important for me to keep my operations as streamlined and personalized as a cozy coffee shop experience.
|
||||
|
||||
## Setting Up a PayPal Business Account: A Step Towards Professionalism
|
||||
|
||||
In tandem with InvoiceNinja, I opened a **PayPal business account**. Why PayPal? Its widespread recognition and reliability make it an ideal choice for freelancers and service providers alike. More importantly, I wanted to leverage the **PayPal API** for seamless integration with InvoiceNinja. This integration enables my clients to pay invoices directly through their PayPal accounts, creating a smoother transaction process.
|
||||
|
||||
The setup was straightforward—just like brewing a basic cup of coffee. I went through PayPal’s registration process, ensuring I provided all the necessary information for a business account. Once my account was active, diving into the API documentation was my next step, which paved the way for my future work with InvoiceNinja.
|
||||
|
||||
## Crafting My First Project Quote: A Blend of Creativity and Precision
|
||||
|
||||
With the systems in place, it was time to craft my first project quote. I approached it with the same care I put into creating my favorite coffee blend, ensuring every detail was perfect.
|
||||
|
||||
1. **Defining the Scope**: I laid out what the project entailed—including deliverables, timelines, and any specific requirements from the client. Clarity here is essential to avoid misunderstandings later.
|
||||
|
||||
2. **Pricing**: I accounted for my time, the resources I’d need, and any potential expenses. Similar to calculating the cost of specialty beans, finding the right balance in pricing is crucial to ensure I’m compensated fairly while remaining competitive.
|
||||
|
||||
3. **Creating the Quote in InvoiceNinja**: With everything defined, I jumped into InvoiceNinja. The platform made it easy to create a polished quote with customizable templates. I added my branding (because what’s a business without a little personal flair?) and ensured the document looked professional yet inviting.
|
||||
|
||||
4. **Integrating PayPal**: Next, I set up the integration with PayPal, enabling a “Pay Now” button directly on the invoice. This feature is like a cherry on top of my coffee—making it easy for clients to settle their bills without delay.
|
||||
|
||||
5. **Sending the Quote**: Finally, I hit send! A mix of excitement and nervousness coursed through me. The quote looked great, and I was eager to see how my client would respond.
|
||||
|
||||
## The Aftertaste: Reflection and Learning
|
||||
|
||||
Crafting my first project quote was a learning experience—one that parallels tasting new coffee varieties. As I sip and savor, I reflect on what went well and what I could improve in future transactions.
|
||||
|
||||
The combination of self-hosted InvoiceNinja and PayPal has set the tone for how I will manage my finances moving forward. Having these tools in place not only streamlines my process but also provides my clients with a professional experience—much like being served the perfect brew in a café.
|
||||
|
||||
As I continue this journey, I look forward to refining my invoicing skills and serving clients with the same passion I bring to my craft. If you're on your own freelancing path, remember: success comes from blending the right tools to create a delightful experience for both you and your clients. Cheers to many more quotes, projects, and expansive horizons ahead!
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
layout: post
|
||||
title: "coffee, code, and creativity: the launch of my new website"
|
||||
---
|
||||
|
||||
|
||||
I’m excited to announce the launch of my brand-new web development website! This venture has been a blend of creativity, dedication, and a lot of caffeinated brainstorming. The goal of my website is to serve as a landing page for potential clients, showcasing my skills and the services I offer, much like a beautifully curated coffee menu at your favorite café.
|
||||
|
||||
## Welcome to My Digital Space!
|
||||
|
||||
### Who Am I?
|
||||
|
||||
Just like each coffee has its unique flavor profile, I bring a distinct set of skills and experiences to web development. I specialize in creating responsive, user-friendly websites that not only look good but also function seamlessly. My passion for design and coding drives me to deliver solutions tailored to each client’s needs.
|
||||
|
||||
### What I Offer
|
||||
|
||||
On my newly launched website, you’ll find a clear overview of my services:
|
||||
|
||||
- **Custom Web Development**: From concept to launch, I can create a website that matches your vision and goals.
|
||||
- **Responsive Design**: All of my sites are designed to be mobile-friendly, ensuring a smooth experience for users on any device.
|
||||
- **E-commerce Solutions**: Ready to take your business online? I’ll help you set up an engaging and easy-to-navigate online store.
|
||||
- **SEO Optimization**: Let's make sure your website is visible when potential customers are searching for your services.
|
||||
- **Ongoing Support**: I believe in building long-term relationships. I provide ongoing support and maintenance to keep your site running smoothly.
|
||||
|
||||
## Why Choose Me?
|
||||
|
||||
In a world full of options, why should you choose to work with me? Here are a few reasons:
|
||||
|
||||
- **Personalized Approach**: I take the time to understand your unique needs and goals, just like how a barista will customize your order based on your preferences.
|
||||
- **Quality First**: My commitment to quality ensures that every project I take on meets high standards.
|
||||
- **Timely Delivery**: I value your time as much as a good cup of coffee—prompt, efficient service is guaranteed.
|
||||
|
||||
## Portfolio Showcase
|
||||
|
||||
Your first impression matters, and that’s why I’ve included a portfolio section showcasing my previous projects. Each piece reflects my capabilities and attention to detail, just like a well-crafted beverage reflects a barista's skill. This section will give you an idea of the work I do and the quality you can expect when you choose to collaborate with me.
|
||||
|
||||
## Get in Touch
|
||||
|
||||
I know that starting a new project can feel overwhelming, just like choosing the perfect brew in a coffee shop. That’s why I’ve made it easy for you to reach out. If you have an idea, a project in mind, or just want to chat about web development, my contact form is just a click away. Let's take that first step together!
|
||||
|
||||
## Subscribe for Insights
|
||||
|
||||
Additionally, I invite you to subscribe to my blog for tips, tutorials, and industry insights. Much like sharing coffee brewing techniques, I believe in sharing knowledge and helping others grow in their web journey.
|
||||
|
||||
## Conclusion: Cheers to New Beginnings!
|
||||
|
||||
Launching my web development website is an exciting milestone, and I can’t wait to connect with you and help bring your ideas to life. Thank you for visiting, and I hope to work with you soon to create something extraordinary together. Cheers to new beginnings and a future rich with possibilities!
|
||||
@@ -0,0 +1,36 @@
|
||||
---
|
||||
layout: post
|
||||
title: "brewing success: my journey into freelance web development and server upgrades"
|
||||
---
|
||||
|
||||
As a tech enthusiast with a love for life’s little pleasures—like a well-brewed cup of coffee—I often find myself reflecting on the intersection of my passions and pursuits. Recently, I’ve had the incredible opportunity to take on a couple of paid web development projects, which not only expanded my skill set but also funded an exciting server upgrade project. Join me as I spill the beans on my experiences in freelancing, my recent tech acquisitions, and how Invoice Ninja became my trusty sidekick in this journey.
|
||||
|
||||
## Pouring the Foundations: Freelancing in Web Development
|
||||
|
||||
The web development projects I completed were a fantastic exercise in blending creativity with technical skill. My first client was a dear friend launching her **Mental Health Counseling** practice, **Pemu Counseling and Wellness**. This comprehensive mental health service provider focuses on offering personalized counseling and wellness programs. Building her website from scratch was a rewarding endeavor, allowing me to combine my technical skills with a mission close to my heart. Hosting her site on my server not only helped keep costs down but also gave me an opportunity to fine-tune my server management skills.
|
||||
|
||||
Next up was a massage therapist transitioning her services to **shamanism and energy healing** with her business, **Powerful Healing Arts**. This sanctuary is dedicated to helping women move beyond physical healing into deeper energetic and spiritual transformation. For her, I built a new website using **Squarespace**, but with a twist—creating a new site allowed the old one to remain live while I developed it, ensuring there was zero downtime. This tactic was crucial for her business, and it showcased my ability to manage multiple projects while prioritizing client needs.
|
||||
|
||||
These projects pushed my problem-solving abilities to the forefront. Not only was I able to deliver functional websites, but I also learned to communicate effectively and manage timelines—skills that are crucial in the fast-paced freelance world.
|
||||
|
||||
## Upgrading My Server: A Techie’s Dream
|
||||
|
||||
With the earnings from my freelance work, I decided it was time to tackle my server upgrade project. Having recently acquired a **Dell C6420** that was lacking RAM, I knew the first step was to equip it with the necessary components. This led me on a treasure hunt, culminating in the purchase of a **NetApp DS4246** off eBay for a mere **$170**—a steal considering it typically retails for around **$500**!
|
||||
|
||||
The excitement didn’t stop there. I also acquired 45 sticks of **16GB RAM** for just **$5 each** in Rochester, while similar RAM on eBay was fetching around **$30 each**. I felt like a savvy scavenger with each deal I bagged, transforming my server into a powerhouse without emptying my wallet.
|
||||
|
||||
## Tools of the Trade: Harnessing Invoice Ninja
|
||||
|
||||
With my freelancing ventures underway and new technology purchases piling up, I realized I needed a robust tool to manage quotes, task tracking, and invoicing. Enter **Invoice Ninja**! This streamlined software has been a game changer, allowing me to easily track my projects while ensuring timely payments from clients.
|
||||
|
||||
Not only does it provide a professional touch to the invoicing process, but its user-friendly interface has simplified my workflow, letting me focus more on what I love—coding and creating. With customized quotes and task tracking, I can keep my projects organized and ensure nothing falls through the cracks.
|
||||
|
||||
## The Perfect Blend: Coffee and Coding
|
||||
|
||||
As I embark on these projects, I can’t help but savor a steaming mug of coffee by my side, fueling my productivity and creativity. The scent of freshly brewed coffee often inspires my coding sessions, turning each challenge into an enjoyable endeavor. It reminds me that work can be pleasurable, especially when you find the right balance between passion and profession.
|
||||
|
||||
## Conclusion
|
||||
|
||||
In retrospective sips of coffee, it’s clear that the intersection of freelancing, server upgrades, and the right tools has ignited a spark in my tech journey. Whether it's honing my web development skills to help clients shine or upgrading my server to expand my capabilities, I’m excited about the path ahead.
|
||||
|
||||
If you’re considering freelancing, I encourage you to explore your options and invest your earnings wisely—who knows what kind of tech treasures you might uncover? Until next time, keep coding, keep sipping, and keep crafting your unique blend of technology and life!
|
||||
@@ -0,0 +1,47 @@
|
||||
---
|
||||
layout: post
|
||||
title: "brewing up my homelab: new services, hardware, and monitoring magic"
|
||||
---
|
||||
|
||||
Hello fellow tech enthusiasts (and coffee lovers)!
|
||||
|
||||
As much as I enjoy a freshly brewed cup of coffee, there’s something equally satisfying about brewing up new capabilities in my homelab. Over the past few weeks, I’ve been busy adding some fresh services and hardware to keep my setup not just humming, but buzzing with efficiency and helpfulness. Whether you’re managing your own digital playground or just curious about what’s possible on a home scale, here’s what’s new on the docket — plus, the gear that’s making it all work.
|
||||
|
||||
## New Services: From Collaboration to Monitoring and Gaming
|
||||
|
||||
### Nextcloud-AIO – Saying Goodbye to Discord Dependence
|
||||
First up: I’ve integrated **Nextcloud-AIO** to replace our previous dependence on Discord for collaboration and file sharing. With the all-in-one Nextcloud setup, I’ve gained a self-hosted, privacy-respecting platform that handles chat, file sharing, calendar syncing, and more — all under my control. It’s the perfect homebrew alternative to relying on third-party cloud services.
|
||||
|
||||
### Grafana, Prometheus, and Telegraf – Monitoring Made Beautiful
|
||||
Monitoring is crucial, especially as my homelab grows in complexity. I’ve hooked up **Grafana**, **Prometheus**, and **Telegraf** to create a robust monitoring stack that tracks performance metrics and visualizes everything in sleek, coffee-black dashboards. From CPU temps to network throughput, now I can sip some espresso while stats gently pour in real time.
|
||||
|
||||
### Uptime Kuma – Watching Over My Homelab from the Cloud
|
||||
While my monitoring stack watches internal metrics, I also set up **Uptime Kuma** on my VPS to keep an eye on service availability from an external vantage point. Having an external health check ensures that I’m alerted if services go down when I’m away from home—because coffee breaks shouldn’t be interrupted by unexpected outages!
|
||||
|
||||
### WeddingShare – Celebrating with Friends
|
||||
On a more personal note, I deployed **WeddingShare** for a friend’s upcoming wedding. This open-source project is a fantastic way to collaboratively share photos and memories securely. Running it on my homelab feels great—using technology to enhance life’s special moments.
|
||||
|
||||
### Enshrouded Game Server – Because Play Is Important
|
||||
Lastly, I gave new life to my gaming side by spinning up an **Enshrouded game server**. After all, every techie needs downtime, and running a self-hosted game server keeps me connected with friends while enjoying some pixelated adventures.
|
||||
|
||||
## Upgrading the Hardware: Rack ’Em, Stack ’Em, and Speed ’Em Up
|
||||
|
||||
To support all these new services and keep things neat, I’ve invested in some solid hardware upgrades:
|
||||
|
||||
- **25U Rack** — Finally, my scattered gear is beautifully racked and organized. Nothing like a sturdy rack to keep cables tidy and airflow optimal.
|
||||
- **10Gb NICs for C6420** — High-speed networking is a must, so I equipped my C6420 with 10 Gigabit NICs. Moving data is faster than ever.
|
||||
- **NetApp DS4246** — Storage gets a big upgrade with this robust disk shelf, improving both capacity and reliability.
|
||||
- **NETGEAR GS724T v2 PROSAFE 24-Port Switch** — For all the 1Gb connections, this switch provides plenty of ports and solid management features.
|
||||
- **Rails for R720xd, C6420, and NetApp DS4246** — Proper mounting hardware makes installing and servicing equipment a breeze.
|
||||
|
||||
## Lessons Learned & What’s Next
|
||||
|
||||
Setting up all these components has been a rewarding challenge that reminds me why I love blending technology with a little caffeine-induced focus. With better monitoring, more control over collaboration, and robust hardware behind it, my homelab feels ready to handle just about anything I throw at it.
|
||||
|
||||
Looking ahead, I’m keen to explore containerizing more apps, automating backups, and maybe even dabbling in some home automation tied into this setup. And of course, keeping the coffee flowing remains a top priority.
|
||||
|
||||
---
|
||||
|
||||
If you’re running your own homelab or considering starting one, I hope this update sparks some ideas (and maybe convinces you to add a rack or two!). Feel free to reach out if you want details on how I set up any of these services or hardware.
|
||||
|
||||
Until next post — stay caffeinated and curious!
|
||||
@@ -0,0 +1,40 @@
|
||||
---
|
||||
layout: post
|
||||
title: "a fresh brew of code: opencode, agents, and new projects"
|
||||
---
|
||||
|
||||
the kettle's whistling, and the code is fresh. it's been a season of deep dives, new tools, and shipping projects. let's pour a cup and catch up on the latest from the terminal.
|
||||
|
||||
## steeping in opencode
|
||||
|
||||
recently, i've been fully immersed in the [opencode](https://github.com/opencode) ecosystem. there's a certain clarity to its philosophy that resonates – like a well-prepared pour-over. it's not just about writing code, but about crafting understandable, maintainable systems. this exploration has fundamentally shifted how i approach problem-solving, emphasizing simplicity and elegance over clever complexity. think of it as choosing a single-origin bean for its clean profile rather than a noisy, over-blended dark roast.
|
||||
|
||||
## new beans in the jar: deepseek & grok apis
|
||||
|
||||
the landscape of accessible AI apis is exploding, and i've been test-driving two intriguing new additions to the pantry.
|
||||
|
||||
* **deepseek** has been impressively capable for code generation and reasoning tasks. its outputs often feel sharp and focused, like a precision espresso shot.
|
||||
* **grok** (via xAI) brings a different, more conversational flavor to the table. it's been interesting to experiment with its unique "personality" for brainstorming and drafting.
|
||||
|
||||
both are powerful tools that are finding their way into different parts of my workflow, each suited for a different kind of task.
|
||||
|
||||
## automating the grind: agents with oh-my-opencode
|
||||
|
||||
the real magic started when i began pairing these new APIs with **oh-my-opencode**. using AI agents to manage and interact with my opencode projects has been a game-changer. imagine telling your assistant, "set up a new microservice for user auth," and watching the boilerplate, structure, and initial logic get drafted automatically. it's not about replacing the craft; it's about eliminating the repetitive grind, freeing me up to focus on the nuanced architecture and the unique problems. it feels like having a supercharged auto-tamper and grinder – the foundational steps are handled perfectly, so i can focus on the pull.
|
||||
|
||||
## fresh out the oven: dissertationpath.com
|
||||
|
||||
from ideation to launch in one focused week: i'm excited to share [dissertationpath.com](https://dissertationpath.com). this tool is for anyone navigating the daunting mountain of academic research. it helps you find a clear path, structure your thoughts, and identify key resources. it was a intense sprint, built with a modern stack focused on speed and user clarity. go ahead, give it a look if you or someone you know is in the thesis trenches.
|
||||
|
||||
## a updated home base: dev.dustin.coffee
|
||||
|
||||
my little corner of the dev web, [dev.dustin.coffee](https://dev.dustin.coffee), got a refactor. it's cleaner, faster, and better organized – much like tidying up the coffee station for a new season. it now more accurately reflects the current blend of projects and interests.
|
||||
|
||||
## what's in the hopper
|
||||
|
||||
the ideation board is full. a few beans currently roasting:
|
||||
* a tool to visualize and manage personal knowledge graphs (inspired by the dissertationpath work).
|
||||
* an experiment in blending local AI models with opencode patterns for fully offline, agent-assisted development.
|
||||
* more writings and possibly small utilities emerging from the opencode dive.
|
||||
|
||||
the energy is high, and the pipeline is full. thanks for reading. what's brewing in your terminal lately?
|
||||
9
content/posts/_index.md
Normal file
9
content/posts/_index.md
Normal file
@@ -0,0 +1,9 @@
|
||||
---
|
||||
title: "blog"
|
||||
date: 2026-02-12T13:29:00-05:00
|
||||
draft: false
|
||||
---
|
||||
|
||||
Welcome to my blog! Here I write about technology, life, and other things.
|
||||
|
||||
<!-- This page will list all blog posts automatically -->
|
||||
36
content/posts/first-post.md
Normal file
36
content/posts/first-post.md
Normal file
@@ -0,0 +1,36 @@
|
||||
---
|
||||
title: "My First Blog Post"
|
||||
date: 2026-02-12T13:30:00-05:00
|
||||
draft: false
|
||||
tags: ["hello", "blog"]
|
||||
---
|
||||
|
||||
# Welcome to My Blog
|
||||
|
||||
This is my first blog post on my new Hugo site.
|
||||
|
||||
I plan to write about:
|
||||
- Web development
|
||||
- Linux and containers
|
||||
- Personal projects
|
||||
- Other tech topics
|
||||
|
||||
Stay tuned for more content!
|
||||
|
||||
## Markdown Example
|
||||
|
||||
This post is written in Markdown, which Hugo renders beautifully.
|
||||
|
||||
You can use **bold**, *italic*, and `inline code`.
|
||||
|
||||
```javascript
|
||||
console.log("Hello, world!");
|
||||
```
|
||||
|
||||
> Blockquotes work too.
|
||||
|
||||
- List item 1
|
||||
- List item 2
|
||||
|
||||
1. Numbered list
|
||||
2. Another item
|
||||
105
content/resume.md
Normal file
105
content/resume.md
Normal file
@@ -0,0 +1,105 @@
|
||||
---
|
||||
title: "resume"
|
||||
date: 2026-02-12T13:28:00-05:00
|
||||
draft: false
|
||||
---
|
||||
|
||||
# DUSTIN NEWKIRK(7)
|
||||
|
||||
## NAME
|
||||
**Dustin Newkirk** - Experienced IT Professional
|
||||
|
||||
## SYNOPSIS
|
||||
`dustin` [OPTIONS]... [COMMAND]...
|
||||
|
||||
## DESCRIPTION
|
||||
Results-driven IT professional with a strong background in systems administration, network infrastructure, and customer support. Adept at resolving complex technical issues, coordinating projects, and delivering top-notch service to stakeholders. Proficient in planning, organizing, and documenting complex server/network activities and collaborating effectively in team environments. ITILv4 Foundations and CompTIA A+ certified.
|
||||
|
||||
## EXPERIENCE
|
||||
|
||||
### March 2025 - Present
|
||||
**Information Technology Specialist 2, New York State Office of Information Technology Services**
|
||||
- Coordinates and facilitates data and business systems support to end-users.
|
||||
- Independently resolves hardware, network connectivity, and application issues.
|
||||
- Performs risk assessments, recommends IT solutions, assists in upgrades.
|
||||
|
||||
### October 2024 - March 2025
|
||||
**MergeIT**
|
||||
*End User Support Engineer, Waygate Technologies - Contract*
|
||||
- Provide on-site deskside support in office and light manufacturing settings.
|
||||
- Perform technical work activities remotely or on-site to fulfill business and customer needs.
|
||||
- Coordinate small teams and deliver work packages following company processes.
|
||||
- Document work completed and escalate issues in line with company procedures.
|
||||
- Offer excellent customer service to both internal and external customers in a dynamic team environment.
|
||||
|
||||
### March 2024 - June 2024
|
||||
**Greene Resources**
|
||||
*Infrastructure Support Specialist, Wolfspeed - Contract*
|
||||
- Maintained operational stability in IT support by swiftly addressing issues, demonstrating persistence and urgency, and aligning short-term results with long-term strategic objectives.
|
||||
- Managed and resolved IT incidents, including prioritizing, diagnosing, and resolving client, telecom, network, and data storage issues, with a focus on first-contact solutions and backlog management.
|
||||
- Efficiently escalated and routed IT tickets, adhered to incident SLAs, and regularly updated a central knowledge base with troubleshooting solutions and known issues.
|
||||
- Coordinated within the IT team to optimize service delivery, time management, and process documentation, ensuring effective task completion and issue escalation.
|
||||
- Handled workstation imaging, software installation, hardware logistics, and asset management, including deployment, relocation, and lifecycle management in accordance with CMDB standards.
|
||||
|
||||
### October 2023 - March 2024
|
||||
**VSO (Virtual Service Operations)**
|
||||
*Desktop Support Specialist, Pratt & Whitney - Contract*
|
||||
- Provides desk support, diagnoses problems, resolves technical issues.
|
||||
- Performs installations, repairs, upgrades, backups, and maintenance.
|
||||
- Sets up Audio/Visual equipment, maintains hardware and software inventory.
|
||||
|
||||
### June 2019 - August 2023
|
||||
**Information Technology Specialist 2, New York State Office of Information Technology Services**
|
||||
- Coordinates and facilitates data and business systems support to end-users.
|
||||
- Independently resolves hardware, network connectivity, and application issues.
|
||||
- Performs risk assessments, recommends IT solutions, assists in upgrades.
|
||||
|
||||
### September 2017 - June 2019
|
||||
**Computer Support Technician, Delta Sonic**
|
||||
- Repairs and maintains point-of-sale equipment, computers, and network systems.
|
||||
- Configures and troubleshoots hardware/software, resolves computer and network issues.
|
||||
- Maintains company IT asset records.
|
||||
|
||||
## EDUCATION
|
||||
|
||||
**Computer & Network Systems Administration, AAS**
|
||||
- ITT-Technical Institute, May 2013
|
||||
|
||||
## CERTIFICATIONS
|
||||
|
||||
**ITILv4 Foundations**
|
||||
- Received February, 2024
|
||||
- Proficient in IT Service Management principles and practices.
|
||||
|
||||
**CompTIA A+**
|
||||
- Received October, 2023
|
||||
- Demonstrates expertise in computer systems, networking, and security.
|
||||
|
||||
**AWS Certified Cloud Practitioner**
|
||||
- Received January, 2025
|
||||
- Validates foundational understanding of AWS Cloud concepts, services, security, architecture, pricing, and support. Recognizes the importance of AWS Cloud in driving business value through effective cloud adoption and management.
|
||||
|
||||
|
||||
## TECHNICAL SKILLS
|
||||
|
||||
- Systems Administration: Windows Server, Linux (Ubuntu, CentOS), Active Directory, System Center Configuration Manager (SCCM)
|
||||
- Networking: TCP/IP, DNS, DHCP, VPN, LAN/WAN
|
||||
- Customer Support: ServiceNow, Spiceworks
|
||||
- Virtualization: VMware, Hyper-V, XCP-NG, Proxmox
|
||||
- Scripting: PowerShell, Bash
|
||||
- Programming: PHP, HTML, CSS, Bootstrap
|
||||
- Databases: MySQL
|
||||
- Security: Firewalls, Antivirus, IDS/IPS, SIEM
|
||||
|
||||
## SOFT SKILLS
|
||||
|
||||
- Problem-solving and troubleshooting
|
||||
- Communication and collaboration
|
||||
- Time management and organization
|
||||
- Adaptability and continuous learning
|
||||
|
||||
## AUTHOR
|
||||
Dustin Newkirk <dustin@dustin.coffee>
|
||||
|
||||
## SEE ALSO
|
||||
[LinkedIn profile](https://linkedin.com/in/dnewkirk)
|
||||
22
deploy.sh
Executable file
22
deploy.sh
Executable file
@@ -0,0 +1,22 @@
|
||||
#!/bin/bash
|
||||
# Deployment script for Hugo site on LXC container
|
||||
# Run this script after SSH-ing into the container and navigating to the site directory
|
||||
|
||||
set -e # Exit on error
|
||||
|
||||
echo "Starting deployment at $(date)"
|
||||
|
||||
# Pull latest changes from git
|
||||
echo "Pulling latest changes from git..."
|
||||
git pull
|
||||
|
||||
# Build the site with minification
|
||||
echo "Building site with Hugo..."
|
||||
hugo --minify
|
||||
|
||||
echo "Deployment completed successfully at $(date)"
|
||||
echo "Site updated in ./public directory"
|
||||
|
||||
# Optional: Reload nginx if configuration changed
|
||||
# echo "Reloading nginx..."
|
||||
# sudo systemctl reload nginx
|
||||
27
hugo.toml
Normal file
27
hugo.toml
Normal file
@@ -0,0 +1,27 @@
|
||||
baseURL = 'https://dustin.coffee/'
|
||||
languageCode = 'en-us'
|
||||
title = 'd@n tech'
|
||||
theme = 'personal'
|
||||
|
||||
[params]
|
||||
description = "Personal website of Dustin"
|
||||
author = "dustin"
|
||||
|
||||
[taxonomies]
|
||||
tag = "tags"
|
||||
category = "categories"
|
||||
|
||||
[[menu.main]]
|
||||
name = "home"
|
||||
pageRef = "/"
|
||||
weight = 10
|
||||
|
||||
[[menu.main]]
|
||||
name = "resume"
|
||||
pageRef = "/resume"
|
||||
weight = 20
|
||||
|
||||
[[menu.main]]
|
||||
name = "blog"
|
||||
pageRef = "/posts"
|
||||
weight = 30
|
||||
5
themes/personal/archetypes/default.md
Normal file
5
themes/personal/archetypes/default.md
Normal file
@@ -0,0 +1,5 @@
|
||||
+++
|
||||
date = '{{ .Date }}'
|
||||
draft = true
|
||||
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
|
||||
+++
|
||||
184
themes/personal/assets/css/main.css
Normal file
184
themes/personal/assets/css/main.css
Normal file
@@ -0,0 +1,184 @@
|
||||
/* Reset and base styles */
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
body {
|
||||
color: #333;
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
||||
line-height: 1.6;
|
||||
margin: 0;
|
||||
padding: 20px;
|
||||
background-color: #f9f9f9;
|
||||
max-width: 900px;
|
||||
margin: 0 auto;
|
||||
padding: 40px 20px;
|
||||
}
|
||||
|
||||
/* Header */
|
||||
header {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding-bottom: 20px;
|
||||
margin-bottom: 40px;
|
||||
border-bottom: 2px solid #eaeaea;
|
||||
}
|
||||
|
||||
header h1 {
|
||||
font-size: 2rem;
|
||||
font-weight: 700;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
/* Navigation */
|
||||
nav ul {
|
||||
display: flex;
|
||||
list-style: none;
|
||||
gap: 30px;
|
||||
}
|
||||
|
||||
nav a {
|
||||
color: #555;
|
||||
text-decoration: none;
|
||||
font-weight: 500;
|
||||
font-size: 1.1rem;
|
||||
padding: 5px 0;
|
||||
position: relative;
|
||||
transition: color 0.2s;
|
||||
}
|
||||
|
||||
nav a:hover {
|
||||
color: #222;
|
||||
}
|
||||
|
||||
nav a.active {
|
||||
color: #222;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
nav a.active::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
bottom: -2px;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 2px;
|
||||
background-color: #222;
|
||||
}
|
||||
|
||||
/* Main content */
|
||||
main {
|
||||
min-height: 60vh;
|
||||
padding: 20px 0;
|
||||
}
|
||||
|
||||
main h1, main h2, main h3 {
|
||||
margin-top: 1.5em;
|
||||
margin-bottom: 0.5em;
|
||||
color: #222;
|
||||
}
|
||||
|
||||
main p {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
main ul, main ol {
|
||||
margin-left: 2em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
main code {
|
||||
background-color: #f0f0f0;
|
||||
padding: 2px 6px;
|
||||
border-radius: 4px;
|
||||
font-family: "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace;
|
||||
font-size: 0.9em;
|
||||
}
|
||||
|
||||
main pre {
|
||||
background-color: #f5f5f5;
|
||||
padding: 1em;
|
||||
border-radius: 8px;
|
||||
overflow-x: auto;
|
||||
margin: 1.5em 0;
|
||||
}
|
||||
|
||||
main blockquote {
|
||||
border-left: 4px solid #ddd;
|
||||
padding-left: 1em;
|
||||
margin-left: 0;
|
||||
color: #666;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* Footer */
|
||||
footer {
|
||||
margin-top: 60px;
|
||||
padding-top: 20px;
|
||||
border-top: 2px solid #eaeaea;
|
||||
color: #777;
|
||||
text-align: center;
|
||||
font-size: 0.9rem;
|
||||
}
|
||||
|
||||
/* Links */
|
||||
a {
|
||||
color: #2563eb;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
/* Blog post list */
|
||||
.post-list {
|
||||
list-style: none;
|
||||
margin-top: 2em;
|
||||
}
|
||||
|
||||
.post-list li {
|
||||
margin-bottom: 2em;
|
||||
padding-bottom: 2em;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
.post-list li:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
.post-list h2 {
|
||||
margin-top: 0;
|
||||
font-size: 1.5rem;
|
||||
}
|
||||
|
||||
.post-list .date {
|
||||
color: #777;
|
||||
font-size: 0.9rem;
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
|
||||
/* Responsive */
|
||||
@media (max-width: 768px) {
|
||||
body {
|
||||
padding: 20px 15px;
|
||||
}
|
||||
|
||||
header {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
gap: 20px;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
flex-direction: column;
|
||||
gap: 15px;
|
||||
}
|
||||
|
||||
nav a {
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
1
themes/personal/assets/js/main.js
Normal file
1
themes/personal/assets/js/main.js
Normal file
@@ -0,0 +1 @@
|
||||
console.log('This site was generated by Hugo.');
|
||||
9
themes/personal/content/_index.md
Normal file
9
themes/personal/content/_index.md
Normal file
@@ -0,0 +1,9 @@
|
||||
+++
|
||||
title = 'Home'
|
||||
date = 2023-01-01T08:00:00-07:00
|
||||
draft = false
|
||||
+++
|
||||
|
||||
Laborum voluptate pariatur ex culpa magna nostrud est incididunt fugiat
|
||||
pariatur do dolor ipsum enim. Consequat tempor do dolor eu. Non id id anim anim
|
||||
excepteur excepteur pariatur nostrud qui irure ullamco.
|
||||
7
themes/personal/content/posts/_index.md
Normal file
7
themes/personal/content/posts/_index.md
Normal file
@@ -0,0 +1,7 @@
|
||||
+++
|
||||
title = 'Posts'
|
||||
date = 2023-01-01T08:30:00-07:00
|
||||
draft = false
|
||||
+++
|
||||
|
||||
Tempor est exercitation ad qui pariatur quis adipisicing aliquip nisi ea consequat ipsum occaecat. Nostrud consequat ullamco laboris fugiat esse esse adipisicing velit laborum ipsum incididunt ut enim. Dolor pariatur nulla quis fugiat dolore excepteur. Aliquip ad quis aliqua enim do consequat.
|
||||
10
themes/personal/content/posts/post-1.md
Normal file
10
themes/personal/content/posts/post-1.md
Normal file
@@ -0,0 +1,10 @@
|
||||
+++
|
||||
title = 'Post 1'
|
||||
date = 2023-01-15T09:00:00-07:00
|
||||
draft = false
|
||||
tags = ['red']
|
||||
+++
|
||||
|
||||
Tempor proident minim aliquip reprehenderit dolor et ad anim Lorem duis sint eiusmod. Labore ut ea duis dolor. Incididunt consectetur proident qui occaecat incididunt do nisi Lorem. Tempor do laborum elit laboris excepteur eiusmod do. Eiusmod nisi excepteur ut amet pariatur adipisicing Lorem.
|
||||
|
||||
Occaecat nulla excepteur dolore excepteur duis eiusmod ullamco officia anim in voluptate ea occaecat officia. Cillum sint esse velit ea officia minim fugiat. Elit ea esse id aliquip pariatur cupidatat id duis minim incididunt ea ea. Anim ut duis sunt nisi. Culpa cillum sit voluptate voluptate eiusmod dolor. Enim nisi Lorem ipsum irure est excepteur voluptate eu in enim nisi. Nostrud ipsum Lorem anim sint labore consequat do.
|
||||
10
themes/personal/content/posts/post-2.md
Normal file
10
themes/personal/content/posts/post-2.md
Normal file
@@ -0,0 +1,10 @@
|
||||
+++
|
||||
title = 'Post 2'
|
||||
date = 2023-02-15T10:00:00-07:00
|
||||
draft = false
|
||||
tags = ['red','green']
|
||||
+++
|
||||
|
||||
Anim eiusmod irure incididunt sint cupidatat. Incididunt irure irure irure nisi ipsum do ut quis fugiat consectetur proident cupidatat incididunt cillum. Dolore voluptate occaecat qui mollit laborum ullamco et. Ipsum laboris officia anim laboris culpa eiusmod ex magna ex cupidatat anim ipsum aute. Mollit aliquip occaecat qui sunt velit ut cupidatat reprehenderit enim sunt laborum. Velit veniam in officia nulla adipisicing ut duis officia.
|
||||
|
||||
Exercitation voluptate irure in irure tempor mollit Lorem nostrud ad officia. Velit id fugiat occaecat do tempor. Sit officia Lorem aliquip eu deserunt consectetur. Aute proident deserunt in nulla aliquip dolore ipsum Lorem ut cupidatat consectetur sit sint laborum. Esse cupidatat sit sint sunt tempor exercitation deserunt. Labore dolor duis laborum est do nisi ut veniam dolor et nostrud nostrud.
|
||||
BIN
themes/personal/content/posts/post-3/bryce-canyon.jpg
Normal file
BIN
themes/personal/content/posts/post-3/bryce-canyon.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 19 KiB |
12
themes/personal/content/posts/post-3/index.md
Normal file
12
themes/personal/content/posts/post-3/index.md
Normal file
@@ -0,0 +1,12 @@
|
||||
+++
|
||||
title = 'Post 3'
|
||||
date = 2023-03-15T11:00:00-07:00
|
||||
draft = false
|
||||
tags = ['red','green','blue']
|
||||
+++
|
||||
|
||||
Occaecat aliqua consequat laborum ut ex aute aliqua culpa quis irure esse magna dolore quis. Proident fugiat labore eu laboris officia Lorem enim. Ipsum occaecat cillum ut tempor id sint aliqua incididunt nisi incididunt reprehenderit. Voluptate ad minim sint est aute aliquip esse occaecat tempor officia qui sunt. Aute ex ipsum id ut in est velit est laborum incididunt. Aliqua qui id do esse sunt eiusmod id deserunt eu nostrud aute sit ipsum. Deserunt esse cillum Lorem non magna adipisicing mollit amet consequat.
|
||||
|
||||

|
||||
|
||||
Sit excepteur do velit veniam mollit in nostrud laboris incididunt ea. Amet eu cillum ut reprehenderit culpa aliquip labore laborum amet sit sit duis. Laborum id proident nostrud dolore laborum reprehenderit quis mollit nulla amet veniam officia id id. Aliquip in deserunt qui magna duis qui pariatur officia sunt deserunt.
|
||||
24
themes/personal/hugo.toml
Normal file
24
themes/personal/hugo.toml
Normal file
@@ -0,0 +1,24 @@
|
||||
baseURL = 'https://example.org/'
|
||||
languageCode = 'en-US'
|
||||
title = 'My New Hugo Site'
|
||||
|
||||
[menus]
|
||||
[[menus.main]]
|
||||
name = 'Home'
|
||||
pageRef = '/'
|
||||
weight = 10
|
||||
|
||||
[[menus.main]]
|
||||
name = 'Posts'
|
||||
pageRef = '/posts'
|
||||
weight = 20
|
||||
|
||||
[[menus.main]]
|
||||
name = 'Tags'
|
||||
pageRef = '/tags'
|
||||
weight = 30
|
||||
|
||||
[module]
|
||||
[module.hugoVersion]
|
||||
extended = false
|
||||
min = '0.146.0'
|
||||
1
themes/personal/layouts/_partials/footer.html
Normal file
1
themes/personal/layouts/_partials/footer.html
Normal file
@@ -0,0 +1 @@
|
||||
<p>Copyright {{ now.Year }}. All rights reserved.</p>
|
||||
5
themes/personal/layouts/_partials/head.html
Normal file
5
themes/personal/layouts/_partials/head.html
Normal file
@@ -0,0 +1,5 @@
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width">
|
||||
<title>{{ if .IsHome }}{{ site.Title }}{{ else }}{{ printf "%s | %s" .Title site.Title }}{{ end }}</title>
|
||||
{{ partialCached "head/css.html" . }}
|
||||
{{ partialCached "head/js.html" . }}
|
||||
9
themes/personal/layouts/_partials/head/css.html
Normal file
9
themes/personal/layouts/_partials/head/css.html
Normal file
@@ -0,0 +1,9 @@
|
||||
{{- with resources.Get "css/main.css" }}
|
||||
{{- if hugo.IsDevelopment }}
|
||||
<link rel="stylesheet" href="{{ .RelPermalink }}">
|
||||
{{- else }}
|
||||
{{- with . | minify | fingerprint }}
|
||||
<link rel="stylesheet" href="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous">
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
16
themes/personal/layouts/_partials/head/js.html
Normal file
16
themes/personal/layouts/_partials/head/js.html
Normal file
@@ -0,0 +1,16 @@
|
||||
{{- with resources.Get "js/main.js" }}
|
||||
{{- $opts := dict
|
||||
"minify" (not hugo.IsDevelopment)
|
||||
"sourceMap" (cond hugo.IsDevelopment "external" "")
|
||||
"targetPath" "js/main.js"
|
||||
}}
|
||||
{{- with . | js.Build $opts }}
|
||||
{{- if hugo.IsDevelopment }}
|
||||
<script src="{{ .RelPermalink }}"></script>
|
||||
{{- else }}
|
||||
{{- with . | fingerprint }}
|
||||
<script src="{{ .RelPermalink }}" integrity="{{ .Data.Integrity }}" crossorigin="anonymous"></script>
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
2
themes/personal/layouts/_partials/header.html
Normal file
2
themes/personal/layouts/_partials/header.html
Normal file
@@ -0,0 +1,2 @@
|
||||
<h1>{{ site.Title }}</h1>
|
||||
{{ partial "menu.html" (dict "menuID" "main" "page" .) }}
|
||||
51
themes/personal/layouts/_partials/menu.html
Normal file
51
themes/personal/layouts/_partials/menu.html
Normal file
@@ -0,0 +1,51 @@
|
||||
{{- /*
|
||||
Renders a menu for the given menu ID.
|
||||
|
||||
@context {page} page The current page.
|
||||
@context {string} menuID The menu ID.
|
||||
|
||||
@example: {{ partial "menu.html" (dict "menuID" "main" "page" .) }}
|
||||
*/}}
|
||||
|
||||
{{- $page := .page }}
|
||||
{{- $menuID := .menuID }}
|
||||
|
||||
{{- with index site.Menus $menuID }}
|
||||
<nav>
|
||||
<ul>
|
||||
{{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }}
|
||||
</ul>
|
||||
</nav>
|
||||
{{- end }}
|
||||
|
||||
{{- define "_partials/inline/menu/walk.html" }}
|
||||
{{- $page := .page }}
|
||||
{{- range .menuEntries }}
|
||||
{{- $attrs := dict "href" .URL }}
|
||||
{{- if $page.IsMenuCurrent .Menu . }}
|
||||
{{- $attrs = merge $attrs (dict "class" "active" "aria-current" "page") }}
|
||||
{{- else if $page.HasMenuCurrent .Menu .}}
|
||||
{{- $attrs = merge $attrs (dict "class" "ancestor" "aria-current" "true") }}
|
||||
{{- end }}
|
||||
{{- $name := .Name }}
|
||||
{{- with .Identifier }}
|
||||
{{- with T . }}
|
||||
{{- $name = . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
<li>
|
||||
<a
|
||||
{{- range $k, $v := $attrs }}
|
||||
{{- with $v }}
|
||||
{{- printf " %s=%q" $k $v | safeHTMLAttr }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
>{{ $name }}</a>
|
||||
{{- with .Children }}
|
||||
<ul>
|
||||
{{- partial "inline/menu/walk.html" (dict "page" $page "menuEntries" .) }}
|
||||
</ul>
|
||||
{{- end }}
|
||||
</li>
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
23
themes/personal/layouts/_partials/terms.html
Normal file
23
themes/personal/layouts/_partials/terms.html
Normal file
@@ -0,0 +1,23 @@
|
||||
{{- /*
|
||||
For a given taxonomy, renders a list of terms assigned to the page.
|
||||
|
||||
@context {page} page The current page.
|
||||
@context {string} taxonomy The taxonomy.
|
||||
|
||||
@example: {{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }}
|
||||
*/}}
|
||||
|
||||
{{- $page := .page }}
|
||||
{{- $taxonomy := .taxonomy }}
|
||||
|
||||
{{- with $page.GetTerms $taxonomy }}
|
||||
{{- $label := (index . 0).Parent.LinkTitle }}
|
||||
<div>
|
||||
<div>{{ $label }}:</div>
|
||||
<ul>
|
||||
{{- range . }}
|
||||
<li><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></li>
|
||||
{{- end }}
|
||||
</ul>
|
||||
</div>
|
||||
{{- end }}
|
||||
17
themes/personal/layouts/baseof.html
Normal file
17
themes/personal/layouts/baseof.html
Normal file
@@ -0,0 +1,17 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="{{ site.Language.LanguageCode }}" dir="{{ or site.Language.LanguageDirection `ltr` }}">
|
||||
<head>
|
||||
{{ partial "head.html" . }}
|
||||
</head>
|
||||
<body>
|
||||
<header>
|
||||
{{ partial "header.html" . }}
|
||||
</header>
|
||||
<main>
|
||||
{{ block "main" . }}{{ end }}
|
||||
</main>
|
||||
<footer>
|
||||
{{ partial "footer.html" . }}
|
||||
</footer>
|
||||
</body>
|
||||
</html>
|
||||
9
themes/personal/layouts/home.html
Normal file
9
themes/personal/layouts/home.html
Normal file
@@ -0,0 +1,9 @@
|
||||
{{ define "main" }}
|
||||
{{ .Content }}
|
||||
{{ range site.RegularPages }}
|
||||
<section>
|
||||
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
|
||||
{{ .Summary }}
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
10
themes/personal/layouts/page.html
Normal file
10
themes/personal/layouts/page.html
Normal file
@@ -0,0 +1,10 @@
|
||||
{{ define "main" }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
|
||||
{{ $dateMachine := .Date | time.Format "2006-01-02T15:04:05-07:00" }}
|
||||
{{ $dateHuman := .Date | time.Format ":date_long" }}
|
||||
<time datetime="{{ $dateMachine }}">{{ $dateHuman }}</time>
|
||||
|
||||
{{ .Content }}
|
||||
{{ partial "terms.html" (dict "taxonomy" "tags" "page" .) }}
|
||||
{{ end }}
|
||||
10
themes/personal/layouts/section.html
Normal file
10
themes/personal/layouts/section.html
Normal file
@@ -0,0 +1,10 @@
|
||||
{{ define "main" }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ .Content }}
|
||||
{{ range .Pages }}
|
||||
<section>
|
||||
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
|
||||
{{ .Summary }}
|
||||
</section>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
7
themes/personal/layouts/taxonomy.html
Normal file
7
themes/personal/layouts/taxonomy.html
Normal file
@@ -0,0 +1,7 @@
|
||||
{{ define "main" }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ .Content }}
|
||||
{{ range .Pages }}
|
||||
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
7
themes/personal/layouts/term.html
Normal file
7
themes/personal/layouts/term.html
Normal file
@@ -0,0 +1,7 @@
|
||||
{{ define "main" }}
|
||||
<h1>{{ .Title }}</h1>
|
||||
{{ .Content }}
|
||||
{{ range .Pages }}
|
||||
<h2><a href="{{ .RelPermalink }}">{{ .LinkTitle }}</a></h2>
|
||||
{{ end }}
|
||||
{{ end }}
|
||||
BIN
themes/personal/static/favicon.ico
Normal file
BIN
themes/personal/static/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
Reference in New Issue
Block a user