Case Study

HVA State Representative Resource Center

A private document library for Handicapped Veterans Association's national staff and three-state pilot. Five roles each see only their own documents, and every file is checked before it opens.

The homepage of the HVA Resource Center site on a laptop screen.
The homepage of the HVA Resource Center site on a phone.
The Kentucky tab for a State Representative, and on the phone, an HVA Account Manager. Shown with sample documents.
Client
Handicapped Veterans Association
Sector
Nonprofit / Veterans
Engagement
Pro bono via Taproot Foundation
Delivered
2026
Status
Live in Production
Core feature
Role-based private document library

At a Glance

202
automated access checks passing
5 roles
across 3 pilot states
~3 hrs
to build, from scratch
$660
pro bono value, per Taproot Foundation

Executive Summary

Handicapped Veterans Association is piloting a state program in Kentucky, North Carolina and Illinois. State Representatives and HVA Account Managers at each VA regional hospital share one playbook: governance documents, outreach checklists, brand materials, event locations and state reports.

There was no system for this yet, so it was built from scratch: a WordPress plugin that turns a fresh WordPress install into a private, login-only resource center. National staff control what is official, each state sees only its own working files, and every sign-in and download is on record.

The Problem

The pilot's crews table in their communities to teach people about VA suicide prevention training. Everyone needs the same core material, but the lines between people matter just as much as the shared playbook.

  • People in one state must never see another state's working files
  • Volunteers should only see the outreach material they need
  • The national office has to stay in control of what is official
  • HVA needed a record of who opened what, for regular access reviews

The project also changed shape midway. It started as a merchandise store and became this resource center once the state pilot took priority. HVA's team preferred not to grant server or DNS access during the build, so the result had to install cleanly on their side without anyone logging in for them.

The Approach

A plugin, not a site. Instead of building on HVA's server, the resource center is one WordPress plugin, developed and tested on a local copy. HVA received a single zip file, a README and a recorded walkthrough. Their CTO creates a fresh WordPress install on the subdomain and uploads the plugin, and activation sets up the roles, categories, database tables and home page. The access constraint turned into a cleaner handoff, with nothing to migrate and no test data on their server.

One gate for every file. Documents are stored outside the website folder, so no file can be reached by its address. Every preview and download goes through a single route that checks the person's role, state and the document's status first. Anyone who isn't allowed gets a plain “File not found,” so a shared link does not even confirm the file exists.

Tests that act like real people. The test suite signs in as every role and tries everything: opening each document directly, editing the address bar to reach another state, searching for another state's files, and the usual WordPress side doors like the REST API, feeds and sitemaps. It finished at 202 passing checks.

A security review that caught two real problems. By default, WordPress deletes everything a user authored when their account is deleted. Removing a departed staff member the wrong way would have erased their documents. That is now blocked, with a test that deletes an account and checks the documents remain. Testing also showed that a fix to stop the password-reset page from revealing which usernames exist only worked for email addresses. WordPress adds its “no account” error after the hook the fix used, so the check now looks for a missing account instead of the error message.

Architecture

LayerImplementation
PlatformWordPress, PHP and MySQL on HVA's own subdomain
AccessFive custom roles with per-person state and category assignments, decided in one central permission check
FilesProtected storage outside the web root, served only through a permission-checked route
DocumentsVersioned records with owner, effective date and version, archived instead of deleted
ApprovalsDepartment Head submissions held as pending until an administrator publishes them
LoginLockout after repeated failures, passwords of at least 12 characters and two-step verification for admins
OversightAn activity log nobody can edit, with CSV export and a quarterly access report
Admin toolsA Resource Center dashboard, a States screen and an Admin Guide inside WordPress

Results

202 checks
confirm every role sees only what it should, plus 12 server-side checks for deletion protection, sign-in lockout and session rules
5 roles, 3 states
each seeing the Shared Library and its own state, with new states added from an admin screen and no code changes
One file
handed over with a README and a setup of about 30 minutes, with no server or DNS access needed during the build
Nothing lost
documents can be archived and restored but never deleted, and every sign-in, upload and download is logged

Why This Matters

A nonprofit's pilot program lives or dies on whether the people in the field have the right material at the right moment. The usual answer is a shared drive that slowly fills with duplicates, where nobody can say which version is official or who has seen what.

Role-based access, one gate for every file and tests that prove both are what let a small team hand this to volunteers with confidence. The best handoff is one where the client never has to trust that it works, because the tests already show it.

Stack

WordPressPHPMySQLCustom WordPress pluginWP-CLIPython test suiteLocalWPTwo-Factor