Category Archives: nonprofit

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.

Seattle GiveCamp 2019

The Seattle GiveCamp Crew 2019

We just wrapped the Seattle GiveCamp 2019. If you’ve never heard of GiveCamp, make sure to check out https://givecamp.org/. The short version is that we get a number of non-profits with technical needs and a number of willing technical volunteers to come help them with those technical needs – lots more detail below.

Josh Holmes presenting at Seattle GiveCamp

I’ve been involved in the Ann Arbor GiveCamp back when we were really early on in figuring out the process. Chris Koenig got this movement started in Dallas. I got involved when Jennifer Marsman and Michael Eaton ran one in Ann Arbor. I feel in love with the movement and have been involved a ton. Two years ago, while at a conference and giving a talk about building community, I talked heavily about GiveCamp and the Seattle GiveCamp leads, Paul Litwin and Suzanna Litwin, came up to me and asked me if I’d like to get involved in the Seattle GiveCamp. Of course I said yes and have helped with the last two.

This year has been a fantastic labor of love. We had 10 non-profits this year:

  • Cancer Pathways — provides support to those affected by cancer. They run an annual contest for teens to write about how cancer affected them. They had just a folder of PDFs which we helped to organize better, convert to HTML, allow for search and much more over the past 13 years worth of contest articles. You can see that work live now at – https://cancerpathways.org/winning-essays/.
  • Freedom Project — supports healing connection and restorative communities both inside and outside prison through the strategies of Nonviolent Communication, mindfulness, racial equity and anti-oppression. As their non-profit rep said, the website looked like an encyclopedia with lots of walls of text. They needed a redesign that embodied their culture and mission. You can see that live now at http://freedomprojectwa.org/.
  • Friendship Adventures — is dedicated to enriching the lives of people with developmental disabilities by providing social, recreational and educational activities in a safe, engaging environment—building interpersonal skills, confidence and lifelong friendships one smile at a time. I have a special connection to this one as my daughter Maura is likely to become a member as she approaches her adulthood. They were doing the registration of all 1500+ of their members by hand on paper. They desperately needed way to do this all electronically. You can see the form that we created for them live now under Yearly Registration Form – https://friendshipadventures.org/forms/. Freedom Adventures GiveCamp Team
  • iD.A.Y.dream — inspires youth to daydream out loud. They needed a website that would embody their mission and have automation around email lists and more. Deeper than that, we had a fantastic designer on the project who helped them produce a complete brand language including colors, fonts, logos, … You can see that live now at https://www.idaydream.org/
  • Neurological Vocational Services Unit — helps people with neurological conditions gain independence one person, one job, at a time. This non-profit was a repeat customer of the Seattle GiveCamp. They had build a website with us many years ago but as tech moves on, the template that had been used was no longer supported by the latest versions of WordPress. Take a pause and realize that they were actually updating their WordPress install themselves – I love that. They needed a refresh on the site and a new theme that would be compatible with the new versions of WordPress. You can see that live now at http://nvsrehab.org/.
  • PeaceTrees Vietnam — heals the legacy of war by removing dangerous explosives, returning land to safe use, promoting peace and cultivating a brighter future for the children and families of Vietnam. It’s amazing, they will turn a landmine filled field into a park, school, library, … They needed an interactive map that can show their projects all over Vietnam so that they could show their impact for their donors so that they can get funding to accomplish even more. We built that complete with an admin portal that can edit the points. It’s not quite live at the time of writing here but it’s coming soon. Peace Trees Vietnam GiveCamp Team.
  • Roots Young Adult Shelter — builds community and fosters dignity through access to essential services and a safe place to sleep for young adults experiencing homelessness. Their site was unwieldy and complicated to manage. We helped them rebuild their website so that it was far more accessible to their audience and manageable by their staff. You can see that’s live now at https://www.rootsinfo.org.
  • Special Bunny Rabbit Rescue — is a Seattle-area house rabbit rescue. Bunnies are the number three most adopted pet and the number one abandoned. Special Bunny Rabbit Rescue rescues these rabbits and helps those who have special needs bunnies. They had an overly complicated to navigate and maintain website which we helped them redesign and rebuild. They are live now at https://specialbunny.org/. Gil the Bunny
  • Street Youth Ministries — provides youth in Seattle’s University District with life-skills, resources, and relationships that bring hope and healing to their lives and the community. This is another repeat customer to GiveCamp. Last year, we helped them build their light weight CRM so to speak. They have a highly customized use case and which only used about 5% of the functionality of a traditional CRM but required at least that much custom work. This year, we helped them implement new functionality and bug fixed a few things from last year. That’s an internal tool that they’ve already rolled out to their staff.
  • Transplant House — provides thoughtful and clean spaces for transplant patients and their families, a home away from home so to speak. They had been doing the hoteling for all of their rooms manually with a lot of excel spreadsheets. We built them a workflow that helps them manage that on the back end of their website complete with reports and more. Transplant House GiveCamp Team

We helped a lot of people this weekend. As always, it was an incredibly rewarding and incredibly exhausting experience.

Paul and Suzanna have been running the Seattle GiveCamp for the last 9 years and have decided to step back a little. They will still be involved but not running things next year. They have asked me to lead next year and I’ve said yes.

Looking forward to next year’s Seattle GiveCamp! It will be Oct 23-25, 2020.

If you are or know of a non-profit in the Seattle Area, have them sign up for notification when we have the call for non-profits, have them sign up at http://seattlegivecamp.org/nonprofit.aspx.

If you would like to volunteer, either as a tech volunteer or as a operational support volunteer, please register to be notified when we open our call for volunteers at http://seattlegivecamp.org/volunteer.aspx.