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

  1. Make sure you have Hugo installed
  2. Clone this repository
  3. Run the local development server:
cd dispute-protocol
hugo server -D
  1. 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:

  1. Shalish Mediation: A process based on the traditional shalish process for village-level mediation in Bangladesh, with modernizing improvements.

  2. Restorative Justice: A collaborative process that focuses on healing relationships and repairing harm rather than punitive measures.

  3. 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:

  1. Create a new JavaScript file in the static/js/templates/ directory
  2. 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;
  1. 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:

  1. GitLab Pages - Automatically deployed when you push to the master branch
  2. Custom Server Deployment - Deploy to your own server using rsync

Setting Up Custom Server Deployment

  1. In your GitLab repository, go to Settings > CI/CD > Variables

  2. Add the following variables:

    • SSH_PRIVATE_KEY: Your private SSH key for the deployment server
    • SSH_KNOWN_HOSTS: Output of ssh-keyscan your-server.com
    • SSH_USER: Username on your deployment server
    • SSH_HOST: Hostname or IP of your deployment server
    • DEPLOY_PATH: Path on your server where the site should be deployed
  3. Uncomment the deploy job in .gitlab-ci.yml

  4. Update the url parameter in the environment section with your actual domain

  5. 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.

Description
No description provided
Readme MIT 568 KiB
Languages
JavaScript 56.9%
CSS 22.3%
HTML 18.6%
Shell 2.2%