5.5 KiB
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
- 8 complete protocol templates for different facilitation styles
- YAML-based template system for easy content management
- Server-side template rendering for reliable cross-platform compatibility
- Export protocols as Markdown, PDF, or JSON
- Import previously created protocols (JSON format)
- Markdown support for rich text formatting in preview mode and exports
- Responsive design for desktop and mobile
Setup and Installation
- Make sure you have Hugo installed
- Clone this repository
- Run the local development server:
cd builder-prototype
hugo server -D
- Access the site at http://localhost:1313/
Customizing the Dispute Protocol
Adding or Modifying Stages and Components
The UI structure is defined in data/stages_array.yaml
, which contains all stages, components, and fields in a consolidated format:
- id: new-stage
title: "New Stage Name"
description: "Description of this stage"
order: 7 # This determines the order in which stages appear
components:
- id: new-component
title: "New Component Title"
description: "Description of what this component addresses"
order: 1
fields:
- id: newComponentField
type: text
label: "Field Label"
placeholder: "Placeholder text..."
required: true
Using Protocol Templates
The application includes 8 complete protocol templates that pre-fill all components with consistent content:
- Shalish Mediation: Traditional mediation process from Bangladesh with modern adaptations
- Restorative Justice Circle: Community-based approach focusing on healing relationships
- Transformative Justice Process: Addresses systemic issues and power dynamics
- Community Jury: Formal adjudication process with community jurors
- Community Referee: Neutral third party makes binding decisions
- Peer-to-Peer Resolution: Direct negotiation with minimal third-party intervention
- Chosen Facilitator: Participants mutually select a facilitator
- Facilitation Council: Group of trained facilitators support resolution
Users can select a template from the Templates section to automatically populate all fields. Templates support full markdown formatting including links, bold text, and lists.
Adding New Protocol Templates
To add a new protocol template:
- Create a new YAML file in the
data/templates/
directory (e.g.,my-new-template.yaml
) - Define your template with this structure:
id: "my-new-template"
title: "My New Template"
description: "Brief description of this template approach"
data:
stages:
basics:
community_rules:
communityRulesText: "Your content here with **markdown** support and [links](https://example.com)"
shared_values:
sharedValuesText: "Content for shared values..."
# Continue with all stages and components
- The template will automatically appear in the Templates section - no code changes needed!
Templates are rendered server-side by Hugo and embedded directly in the HTML, ensuring reliable loading across all deployment environments.
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 with YAML data files
- Server-side template rendering for cross-platform compatibility
- Modern JavaScript for form interactions and export functionality
- YAML-based template system for easy content management
- jsPDF for PDF generation
- Marked.js for Markdown rendering in preview mode and exports
License
This project is licensed under the MIT License - see the LICENSE file for details.