Finding Strength in Music: A Reflection on ‘Be Who You Are’

Some days are harder than others. Lately, I’ve been struggling with imposter syndrome, feeling like I haven’t truly earned my place at work. It’s a nagging thought that seeps in, making me question my value. On top of that, budgeting—something that already feels like a Herculean task for anyone with ADHD—has been weighing heavily on me as I work to keep my home. The combination of these stressors has made for a tough stretch.

But then, in the midst of it all, a good friend sent me a music video this morning: [Be Who You Are – YouTube Link: https://www.youtube.com/watch?v=ppOkf-S_ieA&t=2s].

I didn’t expect much when I clicked play. But as the song unfolded, something inside me shifted. The lyrics, the melody, the sheer emotion behind it—it all spoke to me in a way I didn’t realize I needed.

The Power of a Thoughtful Gesture

Music has a way of saying what we struggle to articulate. It reminds us that we’re not alone, that others have walked this road before us, and that there’s light at the end of the tunnel—even when we can’t see it yet. My friend knew exactly what I needed before I did, and that act of kindness, of being seen and understood, meant the world to me.

In a time when I’ve been doubting myself, the song was a reminder that my worth isn’t measured in spreadsheets or productivity reports. It’s not defined by a single tough month. My value isn’t just in what I produce—it’s in who I am, in the relationships I build, in the way I show up, even on the hardest days.

Navigating Tough Times with Music and Friendship

There’s a lesson here, one I’m still working through: Hard times don’t define us. Our struggles with work, finances, or mental health are just chapters in a much longer story. And sometimes, when words fail, music steps in to bridge the gap.

Today, this song reminded me that I’m not alone. That I’m seen. That I matter. And if you’re reading this, feeling something similar, let this be your reminder too. You’re more than your struggles. You’re more than what you accomplish. You’re enough, just as you are.

And sometimes, the right song at the right moment can be exactly what we need to hear.

What are songs that have inspired you through tough times?

It had been a while since I last hit the course, but I finally made it back for a short 7-hole round at Redmond Ridge Golf Course. This was my first time swinging the clubs since injuring my right index finger, and let’s just say… it wasn’t my best scoring day.

But this round wasn’t really about the score—it was about getting back into the game, testing my recovery, and learning a few things along the way.

Watch the full video here: https://youtu.be/-jfjMc1IpZ0

Getting Back After an Injury

If you’ve ever taken time off from golf—whether due to injury, weather, or life getting in the way—you know how it feels to step back onto the course after a break. Everything feels just a little off: the rhythm, the timing, and (unfortunately) the scorecard.

The Good, the Bad, and the Rusty

  • The Good: I was able to play pain-free, which was my biggest concern.
  • The Bad: My touch around the greens was nonexistent. Chipping and putting? Yikes.
  • The Rusty: My swing felt disconnected at times, and I could tell my muscle memory needed some fine-tuning.

Lessons Learned

Beyond just shaking off the rust, I also learned a few things about filming and editing a golf video. I won’t lie—some of the shots were a little shaky, and the editing process showed me areas where I can improve for future content. But that’s part of the journey!

One big mistake? I completely forgot to hit record on my tee shot and putting on the 6th hole. So while I played 7 holes, only 6 made it into the video. Lesson learned: Check the camera before every shot!

What’s Next?

This round gave me a good baseline for where my game is post-injury. Now, it’s time to work on consistency, rebuild my short game, and dial in my iron play so I can get back to playing at my best.

Your Turn: How Long Have You Gone Without Playing?

If you’ve ever had to take time off from golf, you know how tough it is to return. I’d love to hear from you—what’s the longest break you’ve taken, and how did your first round back go?

Let me know your thoughts in the comments!

The Perfect Saturday: Training, Forging, and Golf

There’s nothing quite like a well-balanced Saturday—one that kicks off with a solid workout, slows down with some quality family time, and wraps up with a beautiful round of golf. For me, Saturdays are about movement, craftsmanship, and soaking in the best moments with my family.

Early Morning: Training and Pushing Limits

I like to get up early and start my Saturday with a great workout. There’s something about pushing myself first thing in the morning that sets the tone for the rest of the day. My Spartan Super training guide keeps me on track, making sure I get in a mix of strength, endurance, and grip work—because let’s be honest, obstacles like the rope climb and monkey bars aren’t going to get easier on their own. I also incorporate Peloton rides into my training, using them to build endurance and strengthen my legs without putting too much strain on my knees. Training hard gives me the energy and focus I need for the rest of the day’s activities.

Mid-Morning: Forged in Fire and Family Time

After training, I settle in for one of my favorite Saturday traditions—watching Forged in Fire with my daughter Maura. She’s 21 and has DDX3X, and this time together is something I truly cherish. DDX3X is a rare genetic condition that primarily affects girls and can cause developmental delays, intellectual disabilities, and other challenges.


Despite this, Maura has a bright spirit and a love for spending time together, especially when we’re watching bladesmiths craft their creations. There’s something relaxing about watching skilled artisans work and just enjoying the show with her. It’s a great way to slow things down after an intense morning workout.

Afternoon: Beating on Iron with Collin

Lately, my oldest son, Collin, and I have been getting into forging. We’ve got a medium-sized two-burner forge and all the starting tools, and there’s nothing quite like heating up a piece of metal and hammering it into something new. The physicality of forging, the precision it requires, and the satisfaction of shaping metal with your own hands—it’s an art form and a great way to bond. Whether we’re working on a simple knife or just experimenting with new techniques, it’s time well spent.

Evening: Golfing in the PNW Sun

If the Pacific Northwest blesses us with a sunny day, you can bet I’m ending it on the golf course. Walking the course, taking in the scenery, and challenging myself to play better each round—it’s the perfect way to wrap up the day. Golf is a sport that requires patience, strategy, and a little bit of luck, but mostly, it’s about enjoying the moment. After a full day of training, forging, and family time, stepping onto the course brings everything full circle.

Finding the Perfect Balance

For me, a great Saturday isn’t about doing just one thing—it’s about finding that balance between movement, creativity, and connection. Whether it’s pushing my limits in training, bonding over bladesmithing, or soaking in the beauty of a well-struck golf shot, each part of my Saturday adds something valuable.

What does your perfect Saturday look like?

Portland Golf Club Course Review

Portland Golf Club is one of the most historic and well-regarded private courses in the Pacific Northwest. Known for its tree-lined fairways, strategic layout, and an abundance of water hazards, it offers a challenging yet rewarding experience—especially for those playing from the blue tees. As an 8-handicap golfer, I found the course to be a true test of shot-making, patience, and knowing when to bail out and I failed that test… 🙂
It was the most beautiful day in October in Portland. I loved the course.

Course Overview

  • 📍 Location: Portland, Oregon
  • ⛳ Par: 72
  • 📏 Yardage from Blue Tees: ~6,600 yards
  • 🌲 Style: Classic parkland
  • 💦 Water Hazards: Water comes into play on 14 of the 18 holes
  • 🏆 Notable Events: Has hosted the PGA Championship, Ryder Cup, and LPGA Tour events

Course Conditions & Design

All of the greens were faster than I had ever putted on. They were running about a 12 on the stimp meter.

The fairways were lush, the greens were fast but fair, and the bunkers were strategically placed to make you think about every approach shot. But what stood out most? Water. While not on every hole, Fanno Creek and several ponds make key shots nerve-wracking.

Key Design Features:
✔️ Tree-Lined Fairways: Demands accuracy off the tee—straying too far off line makes recovery difficult.
✔️ Water on 8 Holes: Fanno Creek and ponds force strategic shot placement.
✔️ Well-Bunkered Greens: Positioning on approach shots is critical to avoid tough sand saves.
✔️ Classic Layout: No gimmicks, just pure, strategic golf.

Most Memorable Holes

🏌️‍♂️ Hole 4 (Par 3, 190 yards) – A Precise Iron Test

A scenic par 3 that requires a precise mid-to-long iron into a green that slopes heavily. The pin position can make a huge difference—if it’s tucked, good luck holding the green.

😡 Hole 7 (Par 4, 410 yards) – The One That Got Me

Let’s talk about Hole 7, because it absolutely ate my lunch. A dogleg right with a narrow landing area, this hole demands precision off the tee and an even better approach. I thought I had it under control—until I didn’t. A slight mis-hit off the tee sent my ball sailing toward the trees, and before I knew it, I was yelling “FORE!” at unsuspecting golfers down the fairway. The recovery wasn’t much better, and I closed out the hole with a frustrating double bogey. This hole is a perfect example of why smart golf beats aggressive golf at Portland GC.

🌊 Hole 8 (Par 3, 190 yards) – The Creek That Swallows Golf Balls

You know that feeling when you think you’ve hit a great shot, only to watch it disappear into the abyss? Welcome to Hole 8. A 190-yard par 3 with Fanno Creek guarding the left side of the green—a seemingly innocent little creek that devours golf balls for sport. I aimed safely for the right side but didn’t commit, sending my ball straight toward the water. Plop. Gone. Another drop, another putt, and just like that—another double bogey. Lesson learned: respect the creek.

💦 Hole 11 (Par 4, 430 yards) – Water Comes Into Play Off the Tee

This par 4 tempts you into going for distance off the tee, but a well-placed lake forces you to make a decision—play safe or risk a big number. If you don’t hit your drive just right, water is in play. Approach shots aren’t much easier, with bunkers guarding the front.

⛳ Hole 14 (Par 4, 400 yards) – A Challenging Approach

By this point in the round, you’d think I’d have figured out how to handle approach shots. But Hole 14 had other plans. The fairway is generous, but the approach requires pinpoint accuracy to avoid trouble. It’s a classic risk-reward hole, but if you get too aggressive, you’ll pay the price.

🏆 Hole 17 (Par 3, 175 yards) – The Creek Makes You Think

A mid-iron par 3 that shouldn’t be too tricky—except for the creek right in front of the green. If you don’t commit to the shot, it’s easy to come up short and watch your ball disappear.

Playing from the Blue Tees

For an 8-handicapper, the blue tees at ~6,600 yards offer a solid challenge without being overwhelming. The biggest keys to scoring well here:
✔️ Drive the ball accurately. Fairways are narrow, and errant drives lead to punch-outs.
✔️ Respect the water. It’s lurking on key holes, and even a small mistake can cost you strokes.
✔️ Dial in approach shots. The greens are tricky, and missing in the wrong spot makes for tough up-and-downs.
✔️ Stay patient. The course rewards smart, strategic play.

Overall Rating

🌟 Challenge: 9/10 (water on key holes will test you)
🌳 Scenery: 9/10
⛳ Course Conditions: 9.5/10
🏌️ Fun Factor: 8/10 (depends on how many golf balls you lose)

Final Thoughts

Portland Golf Club is an old-school, strategic course that rewards precision and punishes reckless play. If you love thinking your way around the course, it’s a fantastic test. If you’re prone to losing golf balls, bring extra. Holes 7, 8, 11, 14, and 17 will take them from you. If you get the chance to play it, take it—you won’t be disappointed.

Giving Back with Tech: My Experience at GiveCamp Memphis

As the president of Seattle GiveCamp, I’ve seen firsthand how technology can transform nonprofits. GiveCamp is a weekend-long event where developers, designers, and project managers donate their time to build technology solutions for nonprofits. I’ve volunteered for roughly 20 GiveCamps across America.

But this GiveCamp was personal for me to volunteer in. GiveCamp Memphis picked up Center Point Cemetery which is where generations of my family, dating back to my great-great-great-grandparents, are buried dating back to the 1800s. When I had the chance to volunteer at GiveCamp Memphis, I knew this project would be more than just another website build. It was an opportunity to create something meaningful for families like mine.

Building a Digital Future for Center Point Cemetery

The main project was building CenterPointCemetery.org, a website with two primary features:

  1. Plot Finder – A tool that allows visitors to search for burial locations, view headstone images, and access obituaries. If you check it out, search for Charlene. You can see her plot, headstone, and obituary. Then do a search for Holmes. (Yes, those are all my relatives…)  
  2. Donation Page – A PayPal-integrated page that enables secure and seamless donations to support the cemetery’s upkeep.

Cleaning Up the Data

Before GiveCamp even started, I spent time cleaning the cemetery’s burial records—an effort I documented in this blog post. This data cleansing was crucial in ensuring that the Plot Finder worked correctly and provided accurate search results.

The data was spread across 65 different spreadsheets, each formatted differently and containing inconsistencies, duplicates, and missing information. I leveraged AI to develop a Node.js application to automate the process, standardizing the records and integrating them into a unified database. 

This preparatory work ensured that by the time GiveCamp started, we had a reliable dataset ready for development, allowing the team to focus on building the features rather than fixing data issues on the fly.

The GiveCamp Team

I wasn’t alone in this effort. I had an incredible team of volunteers, including my Seattle GiveCamp technical lead, Ben Lobaugh, who participated remotely. Ben is a seasoned developer with deep expertise in WordPress, cloud solutions, and software architecture. His contributions were invaluable as he helped guide architectural decisions and troubleshoot technical challenges from afar, ensuring that our solutions were both scalable and sustainable. Having his mentorship available remotely provided an extra layer of support for our on-site team.

Ben also played a key role in developing the Plot Finder’s search capabilities, helping to optimize queries and ensure the search function performed efficiently on a large dataset. His insights into structuring the data and improving search performance significantly enhanced the user experience, making it easy for visitors to find burial records quickly and accurately.

On-site, we had four full-time developers and a designer:

Three of them—Isaiah, Arlina, and Michael—were either students or graduates of Memphis’s CodeCrew program, and Jack, who graduated four years ago with a Computer Science degree from the University of Memphis, has been working as a manager at Chick-fil-A. Charise, a talented designer, brought her creativity to the project by designing a brand-new logo that gave the site a professional and polished look. All five of them are highly skilled and absolutely hireable—I’d hire any of them in a heartbeat.

Task Distribution & Contributions

We split the work based on expertise and interest:

  • Michael tackled PayPal integration, initially using a plugin, but pivoted to direct PayPal embedding when the plugin couldn’t handle recurring payments.
  • Arlina worked on the History and About Us pages.
  • Isaiah took on the WordPress theming, learning from scratch and implementing the new branding.
  • Jack embedded interactive maps on the Plot Finder results pages and leaned in on how we navigate the website.
  • Charise designed the new logo and branding elements for the cemetery’s website.

All four of my developers leaned in and helped each other. They also taught Donnie and Carla Nichols, our nonprofit organization representatives, how to edit the website. Donnie works at a company that does piping around large commercial projects, where he estimates bids. Carla is a personal banker. Neither of them is highly literate in computers; however, both of them learned a bunch from all of the volunteers and are now capable of maintaining their website. Watching that was amazing. It was a powerful reminder of how technology can empower people, even those without a technical background, to take ownership of their own digital tools.

A Brake Pad Lesson with Isaiah

On Saturday, Isaiah told me he might not be able to make it on Sunday because his brakes had started screeching, and he probably shouldn’t drive on them. I wasn’t about to let that stop him from finishing an awesome weekend of work, so I volunteered to buy him new brake pads and teach him how to change them. Thanks to Trey Albertson, a long-time GiveCamp Memphis volunteer, who had tools in his car that I could borrow, we got the job done. It’s not every GiveCamp where you teach someone WordPress theming and how to change brake pads in the same weekend!

Challenges and Lessons Learned

Like any project, we encountered challenges along the way. One of the biggest hurdles was ensuring the Plot Finder search function was both fast and accurate, given the large dataset we were working with. Thanks to Ben’s expertise, we optimized the queries and structured the data efficiently. Additionally, navigating PayPal’s restrictions on recurring payments required Michael to pivot and implement a direct integration.

Another challenge was time—GiveCamp is an intense weekend sprint, and balancing speed with quality was crucial. At this rate, next year we might need to add a session on changing tires alongside the coding workshops! The entire team leaned in to support each other, learning on the fly and adapting to roadblocks quickly.

Beyond the technical aspects, one of my biggest takeaways was the impact of mentorship and teamwork. Watching the volunteers not only build the website but also teach Donnie and Carla how to maintain it was inspiring.

Impact and Takeaways

By the end of the weekend, we had a fully functioning website that will help families find their loved ones and allow the cemetery to receive much-needed donations. This project was a testament to the power of community-driven development and the immense talent within the GiveCamp network.

This project reminded me just how much impact a small but dedicated team can have in a short amount of time. It’s not just about building technology—it’s about empowering people with tools they can actually use. And that’s what GiveCamp is all about. GiveCamp Memphis was an amazing experience, and I look forward to continuing to support this incredible event—though I’ll never let them forget their unfortunate naming choice!

If you’re looking for talented developers, consider reaching out to Isaiah, Arlina, Michael, Jack, or Charise. And if you want to get involved in making a difference through tech, consider joining the next GiveCamp near you! You can find more information at GiveCamp.org.

Revolutionizing Cemetery Data Management with AI-Powered Development

In the ever-evolving landscape of technology, the ability to rapidly develop and deploy software solutions has become a game-changer, particularly in the nonprofit sector. At GiveCamp Memphis, I had the opportunity to apply cutting-edge tools to a real-world problem, helping Center Point Cemetery modernize its data management. By leveraging AI-powered coding with Cursor, I transformed a complex collection of spreadsheets into a fully integrated database solution, all within a remarkably short timeframe.

The Challenge: A Data Maze

Center Point Cemetery, like many historical cemeteries, relied on an extensive but fragmented system of spreadsheets to manage its records. Their database consisted of:

  • 65 separate spreadsheets
    • One “Main Spreadsheet”
    • 63 sub-spreadsheets
    • A cemetery map for plot visualization
  • 2189 plots with names on them
  • A total of 3,041 rows of data

Manually consolidating and cleansing this data would have been an arduous task. The goal was to create a centralized, structured database that could be easily maintained and accessed via a new WordPress-based website.

The Solution: AI-Assisted Development with Cursor

Cursor is an AI-powered coding assistant that emerged as a fork of VS Code in 2023, Microsoft’s open-source code editor. The decision to fork VS Code was driven by the desire to integrate AI more deeply into the development experience, enabling features such as real-time code suggestions, automated debugging, and intelligent refactoring. By leveraging this advanced tooling, developers can streamline workflows and boost productivity without leaving their coding environment.

Given the complexity of the data, I turned to Cursor, an AI-powered coding assistant, to streamline the development process. In just 45 minutes, I was able to:

  1. Generate a Node.js application to handle data cleansing and the merging of all 65 spreadsheets.
  2. Define a package.json file for dependency management, allowing for an efficient and structured workflow.
  3. Develop an automated upload application to transfer all 3,041 rows of cleaned data into the newly built WordPress site.

Code Implementation: Merging and Cleaning Data

What made this process unique was that I never manually typed code into the editor. Instead, I engaged in a conversation with Cursor, describing the problem, refining the logic, and iterating on the solution step by step. Cursor generated the initial code, and through dialogue, I was able to refine it efficiently.

For example, I started with a basic script to merge spreadsheets, but as I interacted with Cursor, I asked it to:

  • Modify the script to dynamically read all .xls and .xlsx files from a directory after I requested this adjustment.
  • Implement logic to ensure that the “Paid” field was correctly mapped from the main spreadsheet when section, row, and plot matched, based on my direction.
  • Improve data cleansing by standardizing date formats and handling missing fields after I pointed out inconsistencies in the dataset.
  • Redesign the upload logic for Advanced Custom Fields (ACF) in WordPress after I instructed Cursor to streamline the integration.

To handle data consolidation, I used Node.js with the xlsx package to read, clean, and merge all spreadsheets dynamically from a directory. The samples are simply samples where the full codebases would be several pages each. 
Here’s an updated snippet:

const xlsx = require('xlsx');
const fs = require('fs');
const path = require('path');

const dataDir = './data'; // Directory containing all Excel files
const mainFile = path.join(dataDir, 'Main.xlsx');
let mergedData = [];

// Function to load data from an Excel file
function loadExcelFile(filePath) {
    const workbook = xlsx.readFile(filePath);
    const sheetName = workbook.SheetNames[0];
    return xlsx.utils.sheet_to_json(workbook.Sheets[sheetName]);
}

// Load main data
const mainData = loadExcelFile(mainFile);
mergedData.push(...mainData);

// Read and process all spreadsheets in the directory
fs.readdirSync(dataDir).forEach(file => {
    const filePath = path.join(dataDir, file);
    if (file !== 'Main.xlsx' && (file.endsWith('.xls') || file.endsWith('.xlsx'))) {
        const data = loadExcelFile(filePath);
        data.forEach(entry => {
            const match = mainData.find(m => m.Section === entry.Section && m.Plot === entry.Plot && m.Row === entry.Row);
            if (match) {
                entry.Paid = match.Paid || 'Unknown';
            }
            mergedData.push(entry);
        });
    }
});

fs.writeFileSync(path.join(dataDir, 'merged_data.json'), JSON.stringify(mergedData, null, 2));
console.log('Data merged successfully!');

Uploading Data to WordPress with ACF

To ensure structured data management in WordPress, we leveraged Advanced Custom Fields (ACF), a powerful tool for handling custom metadata. This allowed us to map cemetery records to dedicated fields for easy retrieval and display.

After merging the data, I needed to upload it to WordPress using the REST API. Here’s an example of how I structured the upload:

const axios = require('axios');
const data = require('./data/merged_data.json');

const WP_API_URL = 'https://example.com/wp-json/wp/v2/cemetery_records';
const AUTH_TOKEN = 'your-auth-token';

async function uploadData() {
    for (const entry of data) {
        await axios.post(WP_API_URL, entry, {
            headers: { 'Authorization': `Bearer ${AUTH_TOKEN}` }
        });
        console.log(`Uploaded: ${entry.Name}`);
    }
}

uploadData().then(() => console.log('Upload complete!'));

AI’s Impact: Accelerating Development

Traditional data integration projects often require weeks of planning, scripting, and testing. With Cursor:

  • Data parsing and validation were automated, ensuring consistency and accuracy.
  • Data transformation logic was quickly generated, reducing manual intervention.
  • Integration with WordPress was streamlined, allowing for a seamless upload process.

Results: A New Digital Presence

By the end of the GiveCamp weekend, Center Point Cemetery had:

  • A fully functional WordPress site with a structured database.
  • A consolidated, searchable record of all cemetery plots.
  • A scalable digital solution that will support future data updates.

Reflections: AI as a Coding Partner

This project was a revelation in how AI can transform software development. Traditionally, coding requires a methodical process of writing, testing, and debugging. With Cursor, I skipped directly to problem-solving.

Instead of manually typing code, I described my intent, and Cursor generated the initial implementation. When refinements were needed—whether to process all .xls files, map the “Paid” field, or improve data cleansing—I simply asked. Cursor adjusted instantly, making the process iterative and frictionless.

This conversational approach to coding didn’t just speed up development; it reshaped how I think about software creation. AI-powered tools like Cursor allow developers to focus on solutions rather than syntax, making high-quality software more accessible—especially for nonprofits that lack extensive technical resources.

GiveCamp Memphis wasn’t just an opportunity to build something useful; it was a firsthand experience in how AI is revolutionizing development. The future of coding isn’t about typing—it’s about collaborating with AI to create solutions faster, smarter, and more efficiently.

You can learn more about GiveCamp Memphis at https://givecampmemphis.org and Center Point Cemetery at https://centerpointcemetery.org.

Resume Tip – Relationship between Resume and LinkedIn

Yesterday a friend asked about the relationship between their resume and their LinkedIn profile. I thought I’d cover that off here in a resume tip.

I believe that LinkedIn is an extension of your resume. Your resume is the condensed view of you, the marketing brochure tailored to the job you are applying for whereas LinkedIn can be much deeper and broader.

Check out the whole youtube channel at https://bit.ly/joshholmesyoutube.