Community Dispute Protocol Builder
A Hugo-based web application that helps communities create structured processes for resolving conflicts and disputes.
Created as a prototype by Nathan Schneider with Claude Code.
Features
- Interactive protocol builder with multi-stage process
- Complete protocol templates for different facilitation styles
- Simple template system with direct content application
- Export protocols as Markdown, PDF, or JSON
- Import previously created protocols (JSON format)
- Markdown support for rich text formatting
- Responsive design for desktop and mobile
Setup and Installation
- Make sure you have Hugo installed
- Clone this repository
- Run the local development server:
cd dispute-protocol
hugo server -D
- Access the site at http://localhost:1313/
Customizing the Dispute Protocol
Adding or Modifying Stages
Edit the file data/stages/stages.yaml
to modify the stages of the dispute resolution process.
- id: new-stage
title: New Stage Name
description: Description of this stage
order: 7 # This determines the order in which stages appear
Adding or Modifying Components
Components are grouped by stage. Create or edit files in the data/components/
directory, naming the file after the stage ID.
For example, to add components to a stage with ID "new-stage", create data/components/new-stage.yaml
:
- id: new-component
title: New Component Title
description: Description of what this component addresses
stageId: new-stage
order: 1
fields:
- id: newComponentField
type: text
label: Field Label
placeholder: Placeholder text...
required: true
Using Protocol Templates
The application includes complete protocol templates that pre-fill all components with consistent content. Several templates are provided:
-
Shalish Mediation: A process based on the traditional shalish process for village-level mediation in Bangladesh, with modernizing improvements.
-
Restorative Justice: A collaborative process that focuses on healing relationships and repairing harm rather than punitive measures.
-
Transformative Justice: A process that addresses immediate harm while working to transform the conditions that allowed harm to occur.
Users can select a template from the dropdown at the top of the builder page to automatically populate all fields. They can then customize the content as needed for their community's specific requirements.
Adding New Protocol Templates
To add a new protocol template:
- Create a new JavaScript file in the
static/js/templates/
directory - Define your template with the following structure:
const newTemplate = {
id: "template-id",
title: "Template Name",
description: "Brief description of this template approach",
data: {
stages: {
// Full protocol data structure with content for all stages and components
}
}
};
export default newTemplate;
- Register the template in
static/js/templates/index.js
:
import newTemplate from './template-id.js';
const templates = [
// existing templates...
newTemplate,
];
export default templates;
The builder will automatically load all templates registered in the index.js file at startup.
Deployment
Building for Production
To build the site for production:
hugo --minify
The generated site will be in the public
directory, which you can deploy to any static hosting service.
Deploying from a Self-Hosted GitLab Server
This project includes GitLab CI/CD configuration for easy deployment. The included .gitlab-ci.yml
file supports two deployment options:
- GitLab Pages - Automatically deployed when you push to the master branch
- Custom Server Deployment - Deploy to your own server using rsync
Setting Up Custom Server Deployment
-
In your GitLab repository, go to Settings > CI/CD > Variables
-
Add the following variables:
SSH_PRIVATE_KEY
: Your private SSH key for the deployment serverSSH_KNOWN_HOSTS
: Output ofssh-keyscan your-server.com
SSH_USER
: Username on your deployment serverSSH_HOST
: Hostname or IP of your deployment serverDEPLOY_PATH
: Path on your server where the site should be deployed
-
Uncomment the
deploy
job in.gitlab-ci.yml
-
Update the
url
parameter in the environment section with your actual domain -
Push your changes to the master branch to trigger the deployment
Web Server Configuration
For Nginx, use a configuration similar to this:
server {
listen 80;
server_name your-domain.com;
location / {
root /path/to/deployment;
index index.html;
try_files $uri $uri/ =404;
}
}
For Apache, create a .htaccess file in your deployment directory:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ /index.html [L]
Technologies Used
- Hugo static site generator
- Modern JavaScript (ES Modules) for template management
- Modular template architecture with simplified importing
- jsPDF for PDF generation
- Marked.js for Markdown rendering
License
This project is licensed under the MIT License - see the LICENSE file for details.