Software Built Around Your Business

North Carolina State Grange

We Got Years of Member Records Out of Spreadsheets and Into One System

The Grange had years of membership history sitting in exported files and spreadsheets, in formats that had drifted apart over time. We moved all of it into one system that understands local chapters, the different kinds of membership the organization actually uses, and who is allowed to see what.

The Problem

Membership information lived in files and spreadsheets. Names, addresses, phone numbers and dates had been entered different ways over the years, so the same person could look like two different people, and nobody could say with confidence which copy was the current one.

The organization is not a flat list of names either. Members belong to local chapters, hold different kinds of membership, and change status over time. A spreadsheet cannot hold that shape, so it lived in the knowledge of whoever had been doing the job longest. There was also no way to see who had changed a record, or when, which is a problem for any organization that has to account for its own decisions.

What We Built

One member database that can be searched and filtered
Chapter records with their members attached to them
Support for the different member types the organization actually uses
Their existing records brought across from the old files
Logins that show each role only the records it should see
A history of who changed what, and when
Status tracking for active, retired and deceased members
A dashboard with current member and chapter numbers
Newsletter subscription management

What Changed

  • The records they already had came across intact. Inconsistent dates and phone number formats were cleaned up on the way in rather than re-typed by hand.
  • Member information sits in one place instead of being copied between files that then quietly disagree with each other.
  • The chapter a member belongs to and the type of membership they hold are part of the record, so the shape of the organization lives in the system rather than in one person's memory.
  • The right people can see the right records. Staff and administrators get access to what their role needs, and not to what it does not.
  • There is a history of changes. Every edit is recorded with what the value was before and what it became, so the question of who changed something has an answer.
  • Finding a member is a search rather than a hunt through files.
  • Current member and chapter numbers sit on a dashboard instead of being counted by hand every time somebody asks.

What This Could Do in Your Business

Getting years of accumulated records out of spreadsheets and into something searchable, without losing what is already there.
Cleaning up inconsistent legacy data as part of the move, rather than paying somebody to re-key all of it.
Modeling an organization that has chapters, branches, regions or franchises rather than one flat list of customers.
Giving each role its own level of access, for any organization where not everyone should see everything.
Keeping a defensible record of changes where there are governance, audit or compliance obligations.
A dashboard that answers the numbers question leadership asks most often, without somebody building a report first.

Still running your member or customer list out of a spreadsheet?

Spreadsheets, an old database, a filing cabinet, three people's inboxes - most membership records live in several places at once. Moving them into one system without losing any of the history is the work.

Under the Hood

For the technical evaluators: how this was actually built.
North Carolina State Grange 2024 Completed

Build Summary

15+
Record types tracked
4
Legacy data sources imported
Full
Audit Trail System
Role
based access control

Scope and Requirements

A Laravel application covering centralized member and chapter records, bulk import of the legacy data, role-based access control and a full activity log.

Constraints We Had to Design Around

The data model had to carry membership hierarchies and multiple member types (subordinate, associate, junior), with granular access controls for different administrative roles. The historical records arrived as legacy CSV exports with inconsistent formats, so the import had to normalize as it went rather than reject rows.

Key Requirements
  • Centralized member database with relationship management
  • Bulk data import from legacy CSV files
  • Role-based access control for staff and administrators
  • Activity tracking and audit trails for compliance
  • Automated status management (active, retired, deceased)
  • Real-time dashboard for organizational insights
Solution Delivered
  • Comprehensive membership management system
  • Intelligent CSV import with data normalization
  • Granular permission system (Laratrust)
  • Complete audit trail (Spatie Activity Log)
  • Administrative dashboard with real-time statistics
  • Newsletter subscription management

Core Features & Functionality

Member Management
  • Complete CRUD operations for member records
  • Multiple member types (Subordinate, Associate, Junior)
  • Member status tracking (active, retired, deceased)
  • Address management with county tracking
  • Membership level assignment
  • Chapter (Grange) affiliation
  • Member search and filtering
Chapter (Grange) Management
  • Grange CRUD operations
  • Active/inactive status management
  • Address and location information
  • Member association and viewing
  • Grange detail pages with member listings
  • Notes and additional information fields
Data Import & Migration
  • CSV import commands for multiple member types
  • Intelligent data parsing and normalization
  • Phone number format standardization
  • Date format conversion (multiple input formats)
  • Automatic grange creation for missing chapters
  • Transaction-based imports with rollback on errors
Role-Based Access Control
  • Granular permission system (Laratrust)
  • Role and permission assignment
  • Middleware-based route protection
  • Permission checks in views
  • Role-based dashboard visibility
  • User account management
Audit Trail & Activity Logging
  • Comprehensive activity tracking (Spatie Activity Log)
  • User action logging (login/logout)
  • Activity feed on dashboard
  • Role-based activity visibility
  • Detailed change tracking with before/after values
  • Compliance-ready audit trails
Dashboard & Analytics
  • Real-time member statistics
  • Grange count and status overview
  • Employee count display
  • Recent member additions feed
  • Deceased members tracking with year filtering
  • Permission-based widget visibility

Technical Implementation

Backend Architecture
Laravel 11.9 PHP 8.2+ Service Layer Pattern Form Request Validation Eloquent ORM RESTful APIs
Database Design
MySQL/SQLite Normalized Schema Complex Relationships Migration Management Query Optimization
Frontend Implementation
Blade Templates Bootstrap 5.3.3 DataTables Select2 Responsive Design
Third-Party Packages
Laratrust (RBAC) Spatie Activity Log League CSV Laravel Breeze

Engineering Detail

Legacy Data Migration

Successfully migrated legacy membership data from CSV files with intelligent parsing, handling inconsistent date formats, phone number variations, and automatic relationship creation. Implemented transaction-based imports with comprehensive error handling.

Granular Permission System

Implemented Laratrust for role-based and permission-based access control. Created fine-grained permissions (view-members, edit-members, delete-members, etc.) with middleware protection and view-level permission checks.

Comprehensive Audit Trail

Integrated Spatie Activity Log for complete change tracking. Implemented selective attribute logging, relationship change tracking, and role-based visibility controls for compliance and accountability.

Database Architecture

Designed normalized relational database with 15+ tables, complex relationships (one-to-one, one-to-many, polymorphic), and strategic indexing. Implemented query optimization with eager loading and scopes.

Service Layer Architecture

Implemented service classes (MemberService, GrangeService, EmployeeService) to separate business logic from controllers, enabling code reusability, easier testing, and maintainable architecture.

Administrative Dashboard

Created real-time dashboard with member statistics, activity feeds, and permission-aware widgets. Implemented filtered views and responsive design for mobile-friendly administration.

The Capability Behind This Project

If any of that sounded like your business, this is the service it falls under.

Have a system like this to replace?

Member lists, customer records, client files, equipment registers. If it lives in a spreadsheet that several people edit, it can live in one system that keeps track of itself. Tell us what you are working with.