Initial commit.

This commit is contained in:
2025-12-10 16:49:59 -08:00
commit 2a2b4a3f83
1366 changed files with 95853 additions and 0 deletions

View File

@@ -0,0 +1,2 @@
# Custom Dictionary Words

9
.gitignore vendored Normal file
View File

@@ -0,0 +1,9 @@
# Hugo build output
/public/
/resources/_gen/
/assets/jsconfig.json
# Hugo cache
/.hugo_build.lock
.working

7
.gitmodules vendored Normal file
View File

@@ -0,0 +1,7 @@
[submodule "themes/ananke"]
path = themes/ananke
url = https://github.com/theNewDynamic/gohugo-theme-ananke.git
[submodule "themes/blowfish"]
path = themes/blowfish
url = https://github.com/nunocoracao/blowfish.git
branch = main

17
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,17 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "Hugo Server",
"type": "node-terminal",
"request": "launch",
"command": "hugo server -D",
"cwd": "${workspaceFolder}",
"serverReadyAction": {
"pattern": "Web Server is available at //localhost:(\\d+)",
"uriFormat": "http://localhost:%s",
"action": "openExternally"
}
}
]
}

10
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,10 @@
{
"cSpell.customDictionaries": {
"custom-dictionary-workspace": {
"name": "custom-dictionary-workspace",
"path": "${workspaceFolder:civildynamics.org}/.cspell/custom-dictionary-workspace.txt",
"addWords": true,
"scope": "workspace"
}
}
}

105
CLAUDE.md Normal file
View File

@@ -0,0 +1,105 @@
# CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
## Overview
CivilDynamics.org is a Hugo-based static website presenting the Civil Dynamics framework—a structural analysis of political power and its implications for civil society. The site uses the Blowfish theme to present this theoretical framework and its implications for understanding how accessible AI might transform political organization.
## Development Commands
### Development Server
```bash
hugo server
```
Starts the development server with live reload at http://localhost:1313
### Build
```bash
hugo build
```
Builds the static site to the `public/` directory
### Dependencies
- Install hugo (static site generator)
- Install dart-sass (CSS processing)
## Deployment
### Local Docker Build
```bash
hugo build
docker build -t payneio/civildynamics.org . --file ./Dockerfile
docker push payneio/civildynamics.org
```
### Production Deployment
From payne-cloud environment:
```bash
# First time deployment
bin/wild-app-deploy civildynamics
# Updates
kubectl rollout restart deployment civildynamics -n civildynamics
```
## Site Architecture
### Content Structure
- `content/` - All site content in Markdown format
- `_index.md` - Homepage introducing the Civil Dynamics framework
- `about/` - Detailed explanation of the framework and its concepts
### Configuration
- `config/_default/` - Hugo configuration split across multiple files
- `hugo.toml` - Main site configuration (baseURL: https://civildynamics.org/)
- `params.toml` - Theme-specific parameters
- `menus.en.toml` - Navigation menu structure
- `languages.en.toml` - Language settings and site metadata
### Theme
- Uses the Blowfish theme (located in `themes/blowfish/`)
- Theme is included as a git submodule
- Custom CSS can be added in `assets/css/custom.css`
### Static Assets
- `static/` - Static files served directly
- `assets/` - Assets processed by Hugo
- `public/` - Generated output directory (not committed)
## Content Guidelines
### Civil Dynamics Framework
The site focuses on presenting a structural framework for understanding political power:
- The three-vertex pyramid (state, moral, commercial power)
- Purity dynamics and their effect on civil society
- Historical resilience of hierarchical structures
- How accessible AI might enable governance without rule
- The importance of distributed vs. centralized AI architecture
### Page Organization
- Articles use bundle structure with `index.md` and associated images
- Featured images should be named `featured.png` or `featured.jpg`
- Use front matter for metadata (title, description, etc.)
### Hugo Features Used
- Page bundles for content organization
- Taxonomies (tags, categories, authors, series)
- Related content based on tags/categories
- RSS feeds and JSON output
- SEO-optimized with proper meta tags and sitemap generation
## Docker Deployment
The site is containerized using a simple Nginx Alpine image:
- Hugo builds static files to `public/`
- Dockerfile copies `public/` to Nginx document root
- No server-side processing required
## Development Notes
- The site presents a theoretical framework for understanding political power structures
- Content emphasizes structural analysis over ideological positions
- The framework is non-partisan and applies across political systems
- Focus is on how distributed AI might enable new forms of coordination
- No analytics tracking currently configured (googleAnalytics = "")

2
Dockerfile Normal file
View File

@@ -0,0 +1,2 @@
FROM nginx:alpine
COPY ./public /usr/share/nginx/html

17
README.md Normal file
View File

@@ -0,0 +1,17 @@
# CivilDynamics.org
## Dev environment
- Install hugo.
- Install dart-sass.
```bash
hugo server -D
npm run dev # TailwindCSS JIT compilation
```
## Deploy
```bash
scripts/deploy.sh
```

5
archetypes/default.md Normal file
View File

@@ -0,0 +1,5 @@
+++
date = '{{ .Date }}'
draft = true
title = '{{ replace .File.ContentBaseName "-" " " | title }}'
+++

4984
assets/css/compiled/main.css Normal file

File diff suppressed because it is too large Load Diff

22
assets/css/custom.css Normal file
View File

@@ -0,0 +1,22 @@
@font-face {
font-family: font;
src: url('/fonts/OpenSans-Regular.ttf');
}
@font-face {
font-family: cstf;
src: url('/fonts/LinLibertine_R.ttf');
}
html {
font-family: font;
}
h1, h2, h3, h4, h5, h6, .main-menu, .decoration-primary-500 {
font-family: cstf;
}
figure {
margin: .5em;
padding: 0;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 127 KiB

77
config/_default/hugo.toml Normal file
View File

@@ -0,0 +1,77 @@
# -- Site Configuration --
# Refer to the theme docs for more details about each of these parameters.
# https://blowfish.page/docs/getting-started/
theme = "blowfish"
baseURL = "https://civildynamics.org/"
defaultContentLanguage = "en"
# pluralizeListTitles = "true" # hugo function useful for non-english languages, find out more in https://gohugo.io/getting-started/configuration/#pluralizelisttitles
enableRobotsTXT = true
summaryLength = 20
buildDrafts = false
buildFuture = false
enableEmoji = true
googleAnalytics = ""
[pagination]
pagerSize = 100
[imaging]
anchor = 'Center'
[taxonomies]
tag = "tags"
category = "categories"
author = "authors"
series = "series"
person = "people"
[sitemap]
changefreq = 'daily'
filename = 'sitemap.xml'
priority = 0.5
[outputs]
home = ["HTML", "RSS", "JSON"]
[related]
threshold = 0
toLower = false
[[related.indices]]
name = "tags"
weight = 100
[[related.indices]]
name = "categories"
weight = 100
[[related.indices]]
name = "series"
weight = 50
[[related.indices]]
name = "authors"
weight = 20
[[related.indices]]
name = "date"
weight = 10
[[related.indices]]
applyFilter = false
name = 'fragmentrefs'
type = 'fragments'
weight = 10
[markup]
[markup.goldmark]
[markup.goldmark.parser]
[markup.goldmark.parser.attribute]
block = true
title = true

View File

@@ -0,0 +1,73 @@
disabled = false
languageCode = "en"
languageName = "English"
weight = 1
title = "Civil Dynamics"
[params]
displayName = "EN"
isoCode = "en"
rtl = false
dateFormat = "2 January 2006"
# logo = "img/logo.png"
# secondaryLogo = "img/secondary-logo.png"
description = "A framework for understanding and transforming political power"
# copyright = "Copy, _right?_ :thinking_face:"
[params.author]
name = "Civil Dynamics"
email = "paul@payne.io"
# image = "img/blowfish_logo.png"
# imageQuality = 96
# headline = "I'm only human"
# bio = "A little bit about you"
# links = [
# { email = "mailto:hello@your_domain.com" },
# { link = "https://link-to-some-website.com/" },
# { amazon = "https://www.amazon.com/hz/wishlist/ls/wishlist-id" },
# { apple = "https://www.apple.com" },
# { blogger = "https://username.blogspot.com/" },
# { bluesky = "https://bsky.app/profile/username" },
# { codepen = "https://codepen.io/username" },
# { dev = "https://dev.to/username" },
# { discord = "https://discord.gg/invitecode" },
# { dribbble = "https://dribbble.com/username" },
# { facebook = "https://facebook.com/username" },
# { flickr = "https://www.flickr.com/photos/username/" },
# { foursquare = "https://foursquare.com/username" },
# { github = "https://github.com/username" },
# { gitlab = "https://gitlab.com/username" },
# { google = "https://www.google.com/" },
# { hashnode = "https://username.hashnode.dev" },
# { instagram = "https://instagram.com/username" },
# { itch-io = "https://username.itch.io" },
# { keybase = "https://keybase.io/username" },
# { kickstarter = "https://www.kickstarter.com/profile/username" },
# { lastfm = "https://lastfm.com/user/username" },
# { linkedin = "https://linkedin.com/in/username" },
# { mastodon = "https://mastodon.instance/@username" },
# { medium = "https://medium.com/username" },
# { microsoft = "https://www.microsoft.com/" },
# { orcid = "https://orcid.org/userid" },
# { patreon = "https://www.patreon.com/username" },
# { pinterest = "https://pinterest.com/username" },
# { reddit = "https://reddit.com/user/username" },
# { researchgate = "https://www.researchgate.net/profile/username" },
# { slack = "https://workspace.url/team/userid" },
# { snapchat = "https://snapchat.com/add/username" },
# { soundcloud = "https://soundcloud.com/username" },
# { spotify = "https://open.spotify.com/user/userid" },
# { stack-overflow = "https://stackoverflow.com/users/userid/username" },
# { steam = "https://steamcommunity.com/profiles/userid" },
# { telegram = "https://t.me/username" },
# { threads = "https://www.threads.net/@username" },
# { tiktok = "https://tiktok.com/@username" },
# { tumblr = "https://username.tumblr.com" },
# { twitch = "https://twitch.tv/username" },
# { twitter = "https://twitter.com/username" },
# { x-twitter = "https://twitter.com/username" },
# { whatsapp = "https://wa.me/phone-number" },
# { youtube = "https://youtube.com/username" },
# { ko-fi = "https://ko-fi.com/username" },
# { codeberg = "https://codeberg.org/username"},
# ]

View File

@@ -0,0 +1,13 @@
# -- Markup --
# These settings are required for the theme to function.
[goldmark]
[goldmark.renderer]
unsafe = true
[highlight]
noClasses = false
[tableOfContents]
startLevel = 2
endLevel = 4

View File

@@ -0,0 +1,64 @@
# -- Main Menu --
# The main menu is displayed in the header at the top of the page.
# Acceptable parameters are name, pageRef, page, url, title, weight.
#
# The simplest menu configuration is to provide:
# name = The name to be displayed for this menu link
# pageRef = The identifier of the page or section to link to
#
# By default the menu is ordered alphabetically. This can be
# overridden by providing a weight value. The menu will then be
# ordered by weight from lowest to highest.
[[main]]
name = "About"
pageRef = "about"
weight = 30
[[main]]
name = "Articles"
pageRef = "articles"
weight = 40
#[[main]]
# name = "example sub-menu 2"
# parent = "Parent"
# pageRef = "posts"
# weight = 20
#[[subnavigation]]
# name = "An interesting topic"
# pageRef = "tags/interesting-topic"
# weight = 10
#[[subnavigation]]
# name = "My Awesome Category"
# pre = "github"
# pageRef = "categories/awesome"
# weight = 20
#[[main]]
# name = "Categories"
# pageRef = "categories"
# weight = 20
#[[main]]
# name = "Tags"
# pageRef = "tags"
# weight = 30
# -- Footer Menu --
# The footer menu is displayed at the bottom of the page, just before
# the copyright notice. Configure as per the main menu above.
[[footer]]
name = "Contribute"
pageRef = "contribute"
weight = 10
# [[footer]]
# name = "Categories"
# pageRef = "categories"
# weight = 20

View File

@@ -0,0 +1,3 @@
[hugoVersion]
extended = false
min = "0.87.0"

167
config/_default/params.toml Normal file
View File

@@ -0,0 +1,167 @@
# -- Theme Options --
# These options control how the theme functions and allow you to
# customise the display of your website.
#
# Refer to the theme docs for more details about each of these parameters.
# https://blowfish.page/docs/configuration/#theme-parameters
colorScheme = "blowfish"
defaultAppearance = "light" # valid options: light or dark
autoSwitchAppearance = true
enableSearch = true
enableCodeCopy = false
replyByEmail = false
# mainSections = ["section1", "section2"]
# robots = ""
disableImageOptimization = false
disableTextInHeader = false
# backgroundImageWidth = 1200
# defaultBackgroundImage = "IMAGE.jpg" # used as default for background images
# defaultFeaturedImage = "IMAGE.jpg" # used as default for featured images in all articles
# highlightCurrentMenuArea = true
# smartTOC = true
# smartTOCHideUnfocusedChildren = true
# giteaDefaultServer = "https://git.fsfe.org"
# forgejoDefaultServer = "https://v8.next.forgejo.org"
[header]
layout = "basic" # valid options: basic, fixed, fixed-fill, fixed-gradient, fixed-fill-blur
[footer]
showMenu = true
showCopyright = true
showThemeAttribution = false
showAppearanceSwitcher = true
showScrollToTop = true
[homepage]
layout = "custom" # valid options: page, profile, hero, card, background, custom
#homepageImage = "IMAGE.jpg" # used in: hero, and card
showRecent = ["articles"]
showRecentItems = 3
showMoreLink = false
showMoreLinkDest = "/articles/"
cardView = true
cardViewScreenWidth = false
layoutBackgroundBlur = false # only used when layout equals background
[article]
showDate = true
showViews = false
showLikes = false
showDateOnlyInArticle = false
showDateUpdated = false
showAuthor = false
# showAuthorBottom = false
showHero = true
heroStyle = "big" # valid options: basic, big, background, thumbAndBackground
layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground
layoutBackgroundHeaderSpace = true # only used when heroStyle equals background
showBreadcrumbs = true
showDraftLabel = true
showEdit = false
# editURL = "https://github.com/username/repo/"
editAppendPath = true
seriesOpened = false
showHeadingAnchors = true
showPagination = true
invertPagination = false
showReadingTime = true
showTableOfContents = true
showRelatedContent = false
relatedContentLimit = 3
showTaxonomies = true
showAuthorsBadges = false
showWordCount = true
sharingLinks = [ "linkedin", "twitter", "bluesky", "mastodon", "reddit", "facebook", "email", "whatsapp", "telegram"]
showZenMode = true
[list]
showHero = true
heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
layoutBackgroundBlur = true # only used when heroStyle equals background or thumbAndBackground
layoutBackgroundHeaderSpace = true # only used when heroStyle equals background
showBreadcrumbs = true
showSummary = true
showViews = false
showLikes = false
showTableOfContents = false
showCards = true
orderByWeight = false
groupByYear = false
cardView = false
cardViewScreenWidth = false
constrainItemsWidth = false
[sitemap]
excludedKinds = ["taxonomy", "term"]
[taxonomy]
showTermCount = true
showHero = false
# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
showBreadcrumbs = false
showViews = false
showLikes = false
showTableOfContents = false
cardView = false
[term]
showHero = false
# heroStyle = "background" # valid options: basic, big, background, thumbAndBackground
showBreadcrumbs = false
showViews = false
showLikes = false
showTableOfContents = true
groupByYear = false
cardView = false
cardViewScreenWidth = false
[firebase]
# apiKey = "XXXXXX"
# authDomain = "XXXXXX"
# projectId = "XXXXXX"
# storageBucket = "XXXXXX"
# messagingSenderId = "XXXXXX"
# appId = "XXXXXX"
# measurementId = "XXXXXX"
[fathomAnalytics]
# site = "ABC12345"
# domain = "llama.yoursite.com"
[umamiAnalytics]
# websiteid = "ABC12345"
# domain = "llama.yoursite.com"
# dataDomains = "yoursite.com,yoursite2.com"
# scriptName = ""
# enableTrackEvent = true
[selineAnalytics]
# token = "XXXXXX"
# enableTrackEvent = true
[buymeacoffee]
# identifier = ""
# globalWidget = true
# globalWidgetMessage = "Hello"
# globalWidgetColor = "#FFDD00"
# globalWidgetPosition = "Right"
[verification]
# google = ""
# bing = ""
# pinterest = ""
# yandex = ""
# fediverse = ""
[rssnext]
# feedId = ""
# userId = ""

60
content/_index.md Normal file
View File

@@ -0,0 +1,60 @@
---
title: "Civil Dynamics"
description: "A framework for understanding and transforming political power"
---
<div class="prose dark:prose-invert max-w-4xl mx-auto pt-8">
## A Framework for Understanding Political Power
Civil Dynamics is a structural framework for understanding the universal architecture of political power and its implications for civil society. At its core, it identifies a consistent geometric pattern that appears across all complex societies: a **three-vertex pyramid** combining state power, moral authority, and commercial power, organized hierarchically from masses to elites.
This framework goes beyond traditional political analysis by treating power not as an ideological phenomenon but as a structural one—an emergent pattern arising from fundamental coordination constraints in human societies.
### The Three Vertices
Every complex society operates through three irreducible forms of power:
1. **State Power**: Formal violence, lawmaking, enforcement, bureaucracy
2. **Moral Power**: Religion, ideology, identity, normative authority, legitimacy
3. **Commercial Power**: Resource allocation, capital flows, incentives, markets
These are not optional features that vary by culture or ideology—they are structural roles that every political system must fill. What changes across societies is the *content* that fills each vertex (which religion, which ideology, which economic system), not whether the vertex exists.
### Why This Matters
Civil society thrives on horizontal relationships, distributed legitimacy, pluralism, and voluntary association. The tri-vertex pyramid systematically undermines all of these because:
- **Moral power demands purity**: Creates totalizing boundaries that corrode pluralism
- **State power enforces alignment**: When fused with moral authority, dissent becomes deviance
- **Commercial power amplifies narratives**: Capital and media accelerate moral-political fusion
- **Hierarchy makes dissent costly**: Elite consolidation at the apex punishes challenges to the structure itself
This dynamic—not any specific ideology—is fundamentally corrosive to civil society.
### The AI Inflection Point
Accessible, sovereign artificial intelligence represents the first technological shift in centuries that could actually deform the political geometry. For the first time in history, we can plausibly separate **governance** (the processes by which groups coordinate, resolve conflicts, and make decisions) from **rule** (centralized enforcement by hierarchical authority).
AI changes the fundamental constraints:
- Cognition is no longer scarce
- Coordination becomes cheap
- Information asymmetries collapse
- Administrative capacity distributes
- Narrative production democratizes
**The decisive factor is not capability but architecture.** Accessible, sovereign AI softens the pyramid; centralized AI hardens it into something sharper than anything in history.
### Learn More
This framework offers:
- **Structural universalism**: Invariant patterns across all political systems
- **Geometric formalism**: Spatial metaphors as analytical tools
- **Anthropological realism**: Acknowledges deep constraints without cynicism
- **Technological specificity**: Identifies why AI specifically changes the equation
- **Non-ideological approach**: Applies regardless of political commitments
- **Actionable insights**: Points toward concrete architectural principles
For the first time, the physics of political organization can change.
</div>

237
content/about/index.md Normal file
View File

@@ -0,0 +1,237 @@
---
title: "About Civil Dynamics"
description: "Understanding the universal architecture of political power"
showTableOfContents: true
---
## Introduction
Civil Dynamics is a structural framework for understanding the universal architecture of political power and its implications for civil society. At its core, it identifies a consistent geometric pattern that appears across all complex societies: a three-vertex pyramid combining **state power**, **moral authority**, and **commercial power**, organized hierarchically from masses to elites.
This framework goes beyond traditional political analysis by treating power not as an ideological phenomenon but as a structural one—an emergent pattern arising from fundamental coordination constraints in human societies. More importantly, it explores how accessible, sovereign artificial intelligence might represent the first genuine opportunity in history to fundamentally alter this geometry.
## The Universal Political Structure
### The Three Vertices
Every complex society operates through three irreducible forms of power:
1. **State Power**: Formal violence, lawmaking, enforcement, bureaucracy
2. **Moral Power**: Religion, ideology, identity, normative authority, legitimacy
3. **Commercial Power**: Resource allocation, capital flows, incentives, markets
These are not optional features that vary by culture or ideology—they are structural roles that every political system must fill. What changes across societies is the *content* that fills each vertex (which religion, which ideology, which economic system), not whether the vertex exists.
### The Hierarchical Dimension
These three vertices support a vertical axis:
- **Bottom**: The masses
- **Apex**: Consolidated elites who coordinate across all three vertices
This pyramid shape is not accidental—it emerges as the equilibrium solution to large-scale coordination challenges. Each power domain solves a non-substitutable function:
- State → enforces order
- Moral → legitimizes order
- Commercial → provisions and allocates resources
### Purity Dynamics
A critical feature of this structure is **purity**—the degree of conformity to the system's normative ideal. Every system enforces purity tests to maintain in-group/out-group boundaries, whether through:
- Religious orthodoxy (theocracies)
- Ideological compliance (communist regimes, fascist states)
- Constitutional adherence (liberal democracies)
- Corporate culture fit (institutional settings)
- Ethnic or national identity (ethno-nationalist regimes)
Purity is not about the specific content of beliefs—it's a structural requirement for system coherence, serving as the membrane that keeps the pyramid stable.
## The Structural Threat to Civil Society
Civil society thrives on:
- Horizontal relationships
- Distributed legitimacy
- Pluralism
- Voluntary association
- Norms that limit coercion
The tri-vertex pyramid systematically undermines all of these because:
1. **Moral power demands purity**: Creates totalizing in/out boundaries that corrode pluralism
2. **State power enforces alignment**: When fused with moral authority, dissent becomes deviance
3. **Commercial power amplifies narratives**: Capital and media accelerate moral-political fusion
4. **Hierarchy makes dissent costly**: Elite consolidation at the apex punishes challenges to the structure itself
This dynamic—not any specific ideology—is fundamentally corrosive to civil society. The structure itself generates:
- Polarization
- Ideological capture
- Moral authoritarianism
- Weak civic trust
- Elite manipulation
- Us-them dynamics
- Instability under stress
### Examples Across Systems
In the United States, Christian nationalism represents one sharp manifestation of this structure—the fusion of religious moral authority with state power and commercial backing. But the same structural dynamics appear in:
- Marxist-Leninist regimes (ideological purity enforced by party-state)
- Corporate capture (business values fused with governance)
- Technocratic systems (expert consensus as moral authority)
- Progressive movements (moral righteousness backed by institutional power)
Different content, same skeleton.
## Historical Resilience of the Pyramid
Throughout history, attempts to invert, weaken, or dissolve this structure have been temporary and unstable:
- **Late Roman Republic**: Hierarchy inverted temporarily, then reconsolidated under Augustus
- **Early Medieval Europe**: Dissolution into localism, followed by gradual reformation
- **Classical Athens**: Weak hierarchy that collapsed under external pressure
- **Reformation Era**: Moral vertex fragmented, leading to conflict resolved by strengthening state sovereignty
- **Pirate Republics**: Flat hierarchies that proved unsustainable
- **Paris Commune**: Radical bottom-up power lasting only two months
- **Early Soviet Russia**: Commercial vertex eliminated but re-emerged informally
- **Modern experiments** (Rojava, Zapatista regions): Struggle to scale beyond local contexts
The consistent lesson: when one vertex collapses or hierarchy flattens, the structure regenerates. The pyramid persists because it solves deep coordination problems and aligns with human tendencies toward hierarchy and meaning-making.
## Why Alternative Geometries Have Failed
The tri-vertex pyramid keeps reappearing because:
1. **Coordination at scale requires some hierarchy**: Decision-making, conflict resolution, and priority-setting become exponentially harder without it
2. **Humans naturally form status hierarchies**: Social organization gravitates toward stratification
3. **Societies require shared narratives**: No complex society survives without common normative frameworks
4. **Resource allocation demands structure**: Material flows need organizational coordination
5. **External threats push centralization**: Crises favor unified command structures
6. **Elite incentives align structurally**: Those controlling different vertices benefit from fusion at the apex
## The AI Inflection Point
### Why Now Is Different
Accessible, sovereign artificial intelligence represents the first technological shift in centuries that could actually deform the political geometry. It affects all three vertices in ways that undercut their traditional foundations.
For the first time in history, we can plausibly separate **governance** (the processes by which groups coordinate, resolve conflicts, and make decisions) from **rule** (centralized enforcement by hierarchical authority). This separation was previously impossible because:
- Cognition was scarce
- Coordination was expensive
- Information was asymmetric
- Administrative capacity required large bureaucracies
- Narrative production was controlled by elites
AI changes all of these constraints.
### How AI Transforms Each Vertex
**State Power**:
- AI can perform bureaucratic functions (processing, classification, logistics, tracking) outside centralized state structures
- Local governments, cooperatives, and civil associations can match nation-state administrative competence
- The structural indispensability of centralized bureaucracy declines
**Moral Power**:
- Competing moral frames can be generated, maintained, and iterated at speed
- Minority worldviews can defend themselves with sophisticated rhetorical and analytical tools
- Purity enforcement becomes contested by adaptive counter-narratives
- Moral authority fragments into self-sustaining pluralism
**Commercial Power**:
- Capital concentration no longer buys narrative control
- Small entities gain analysis previously reserved for corporate giants
- AI enables lateral market coordination: peer-to-peer contracting, federated supply chains, decentralized planning
- Giant firms lose coordination advantages
### The Critical Condition
Centralized AI reverses all potential gains:
- Perfects surveillance
- Unifies moral narratives
- Enhances elite coordination
- Optimizes purity dynamics
- Becomes a fourth super-vertex above the others
**The decisive factor is not capability but architecture.** Accessible, sovereign AI softens the pyramid; centralized AI hardens it into something sharper than anything in history.
## Governance Without Rule: A Minimal Structure
Assuming distributed intelligence, governance without rule requires only:
1. **Local decision nodes**: Autonomous units (neighborhoods, cooperatives, associations) with local AI tools and legitimacy
2. **Shared negotiation protocols**: Open standards enabling horizontal coordination without hierarchy
3. **Distributed AI mediation**: Systems that simulate outcomes, detect conflicts, translate across frameworks, and optimize joint resource use
4. **Polycentric adjudication**: Voluntary, overlapping arbitration networks without enforcement monopolies
5. **Modular economic commons**: Transparent, protocol-governed resource allocation systems
6. **Moral pluralism**: Multiple co-equal moral frameworks with AI-assisted translation between them
7. **Federated safety nets**: Distributed, multi-key crisis response capabilities with strict temporal and scope limits
This minimal structure enables coordination without command, justice without monopoly, allocation without domination, and protection without rulers.
### Key Design Principles
- **Sharded capabilities**: No node controls significant force alone
- **Multi-key activation**: Major actions require cross-cutting coalitions
- **Time-boxed mandates**: Emergency powers auto-expire
- **Radical transparency**: All major uses logged and auditable
- **Voluntary participation**: Liquid membership prevents authoritarian consolidation
- **Cross-cutting networks**: Overlapping memberships prevent stable bloc formation
## The Path Forward: Bottom-Up Emergence
The only viable pathway to governance-without-rule is **organic, voluntary substitution**—not revolution or top-down redesign.
### Why Bottom-Up?
Direct attempts to dismantle rule-structures trigger:
- Defensive consolidation
- Moral panic
- Elite closure
- Legitimacy crises
- Loss of coordination capacity
Bottom-up emergence works because:
- It grows within existing structures
- Demonstrates value incrementally
- Scales by replication, not confrontation
- Doesn't require initial legitimacy fights
- Creates no power vacuum
### The Substitution Dynamic
As distributed governance tools become more effective:
1. People choose alternative coordination because it works better
2. Legacy rule-structures lose functional centrality
3. They become ceremonial, redundant, or specialized fallbacks
4. The pyramid dissolves by **atrophy**, not destruction
This is not rebellion—it's systemic evolution. Like markets gradually displacing feudalism, distributed governance would surround hierarchical authority with more useful structures.
## What Makes This Framework Unique
1. **Structural universalism**: Identifies invariant patterns across all political systems
2. **Geometric formalism**: Uses spatial metaphors as analytical tools, not just rhetoric
3. **Anthropological realism**: Acknowledges deep constraints without cynicism
4. **Technological specificity**: Identifies why AI specifically changes the equation
5. **Non-ideological**: Applies regardless of one's political commitments
6. **Actionable**: Points toward concrete architectural principles
7. **Evolutionary**: Emphasizes gradual transformation over revolutionary rupture
## Core Concepts at a Glance
- **The Pyramid**: Universal tri-vertex (state/moral/commercial) hierarchical structure
- **Purity**: Boundary-maintenance mechanism that stabilizes hierarchy
- **Civil Society**: Horizontal, pluralistic relationships undermined by pyramid structure
- **Governance vs. Rule**: Coordination vs. centralized command
- **Distributed Intelligence**: AI enabling coordination without hierarchy
- **Bottom-Up Emergence**: Voluntary substitution as the only stable transformation path
- **Accessible AI**: Technology that collapses cognitive scarcity and enables new political geometries
- **Federated Structure**: Minimal architecture for governance without rule
## Conclusion
The tri-vertex political pyramid—state, moral, commercial—is a universal attractor in human societies because it solves deep coordination challenges and aligns with human tendencies toward hierarchy and meaning-making. This structure is intrinsically corrosive to civil society, which requires distributed legitimacy and plural moral spaces.
Historically, no society has escaped the pyramid for long. But accessible, sovereign AI is a generational anomaly: a tool that dissolves informational asymmetry, decentralizes coordination, weakens moral monopolies, and flattens economic and administrative power.
**For the first time, the physics of political organization can change.**
The opportunity is real. So is the danger. Whether AI softens the pyramid or crystallizes it further depends entirely on whether it remains accessible, sovereign, decentralized, and plural—or becomes centralized, opaque, and fused with existing power vertices.
This is not utopian speculation. It's structural analysis of the first moment in history where governance can plausibly separate from rule, where coordination need not collapse into command, and where civil society might finally escape the gravitational pull of the hierarchical pyramid.

65
definition.example.yml Normal file
View File

@@ -0,0 +1,65 @@
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: civildynamicsorg
annotations:
traefik.ingress.kubernetes.io/router.entrypoints: websecure
traefik.ingress.kubernetes.io/router.tls: "true"
cert-manager.io/cluster-issuer: k3s-ca-cluster-issuer
spec:
tls:
- hosts:
- civilsociety.dev
secretName: k3s-ca-civildynamicsorg-tls
rules:
- host: "civildynamics.org"
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: civildynamicsdev-service
port:
name: http
---
apiVersion: v1
kind: Service
metadata:
name: civildynamicsdev-service
spec:
ports:
- port: 80
protocol: TCP
selector:
app: civildynamicsdev
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: civildynamicsdev-nginx
labels:
app: civildynamicsdev
version: v1
tier: backend
environment: production
owner: payneio
app.kubernetes.io/instance: civildynamicsdev
app.kubernetes.io/managed-by: kubectl
spec:
selector:
matchLabels:
app: civildynamicsdev
replicas: 2
template:
metadata:
labels:
app: civildynamicsdev
spec:
containers:
- name: civildynamicsdev
image: payneio/civildynamics.org:latest
ports:
- containerPort: 80

View File

@@ -0,0 +1,8 @@
<a
class="!rounded-lg bg-primary-600 px-4 py-2 !text-neutral !no-underline hover:!bg-primary-500 dark:bg-primary-800 dark:hover:!bg-primary-700"
{{ with .Get "href" }}href="{{ . }}"{{ end }}
{{ with .Get "target" }}target="{{ . }}"{{ end }}
{{ with .Get "rel" }}rel="{{ . }}"{{ end }}
role="button">
{{ .Inner }}
</a>

View File

@@ -0,0 +1,3 @@
<div class="{{ .Get "class" }}">
{{ .Inner }}
</div>

View File

@@ -0,0 +1,8 @@
<div class="flex cursor-pointer justify-end -mt-4">
<a
href="{{ .Params.href }}"
class="rounded-lg border border-primary-400 px-2 py-[1px] text-s text-primary-700 dark:border-primary-600 dark:text-primary-400 hover:bg-primary-100 dark:hover:bg-primary-800 transition-colors duration-200 hover:rounded-lg"
>
Read more
</a>
</div>

14
layouts/home.html Normal file
View File

@@ -0,0 +1,14 @@
{{ define "main" }}
<article class="h-full max-w-full flex flex-col items-center justify-center">
<section class="mt-6">
{{ .Content }}
</section>
<section>
{{ partial "recent-articles/main.html" . }}
</section>
<footer class="pt-8">
</footer>
</article>
{{ end }}

9
package.json Normal file
View File

@@ -0,0 +1,9 @@
{
"name": "civildynamics.org",
"version": "2.87.0",
"description": "CivilDynamics.org website.",
"scripts": {
"dev": "NODE_ENV=development npx ./themes/blowfish/node_modules/@tailwindcss/cli -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit -w",
"build": "NODE_ENV=production npx ./themes/blowfish/node_modules/@tailwindcss/cli -c ./themes/blowfish/tailwind.config.js -i ./themes/blowfish/assets/css/main.css -o ./assets/css/compiled/main.css --jit"
}
}

18
scripts/deploy.sh Executable file
View File

@@ -0,0 +1,18 @@
#!/bin/bash
# Build the TailwindCSS assets
npm run build
# Build the site
hugo build
# Build and push the Docker image
docker build -t payneio/civildynamics.org . --file ./Dockerfile
docker push payneio/civildynamics.org
# Deploy to Kubernetes
# First time...
# bin/wild-app-deploy civildynamics
kubectl rollout restart deployment civildynamics -n civildynamics

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
static/apple-touch-icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
static/favicon-16x16.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 545 B

BIN
static/favicon-32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

BIN
static/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

1
static/site.webmanifest Normal file
View File

@@ -0,0 +1 @@
{"name":"","short_name":"","icons":[{"src":"/android-chrome-192x192.png","sizes":"192x192","type":"image/png"},{"src":"/android-chrome-512x512.png","sizes":"512x512","type":"image/png"}],"theme_color":"#ffffff","background_color":"#ffffff","display":"standalone"}

View File

@@ -0,0 +1,10 @@
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 2
[*.md]
trim_trailing_whitespace = false

View File

@@ -0,0 +1,35 @@
---
name: Bug report
about: Create a report to help us improve
title: ''
labels: ''
assignees: ''
---
**Describe the bug**
A clear and concise description of what the bug is.
**To Reproduce**
Steps to reproduce the behavior:
1. Go to '...'
2. Click on '....'
3. Scroll down to '....'
4. See error
**Expected behavior**
A clear and concise description of what you expected to happen.
**Screenshots**
If applicable, add screenshots to help explain your problem.
**Desktop (please complete the following information):**
- OS: [e.g. iOS]
- Browser [e.g. chrome, safari]
- Version [e.g. 22]
**Hugo & Blowfish versions**
Which version of Hugo and Blowfish are you using?
**Additional context**
Add any other context about the problem here.

View File

@@ -0,0 +1,20 @@
---
name: Feature request
about: Suggest an idea for this project
title: ''
labels: ''
assignees: ''
---
**Is your feature request related to a problem? Please describe.**
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
**Describe the solution you'd like**
A clear and concise description of what you want to happen.
**Describe alternatives you've considered**
A clear and concise description of any alternative solutions or features you've considered.
**Additional context**
Add any other context or screenshots about the feature request here.

View File

@@ -0,0 +1,7 @@
## Describe your changes
## Issue ticket number and link
## Checklist before requesting a review
- [ ] I have performed a self-review of my code
- [ ] Will this be part of a product update? If yes, please write one phrase about this update.

25
themes/blowfish/.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,25 @@
# To get started with Dependabot version updates, you'll need to specify which
# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
target-branch: "dev"
schedule:
interval: "weekly"
day: "wednesday"
commit-message:
prefix: "📌"
labels:
- "dependencies"
- package-ecosystem: "github-actions"
directory: "/"
target-branch: "dev"
schedule:
interval: "weekly"
day: "wednesday"
commit-message:
prefix: "👷"
labels:
- "dependencies"

View File

@@ -0,0 +1,54 @@
name: Build Theme
on: [pull_request_target]
jobs:
build:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: "${{ github.head_ref }}"
- name: Install dependencies and Build Theme
uses: actions/setup-node@v4
- run: npm install
- run: npm run assets
- name: Commit and push Chart.js changes
uses: stefanzweifel/git-auto-commit-action@v6
with:
branch: "${{ github.head_ref }}"
push_options: "--dry-run"
file_pattern: "assets/lib/chart/*"
commit_message: "📦 Update packaged ChartJS"
- name: Commit Fuse changes
uses: stefanzweifel/git-auto-commit-action@v6
with:
branch: "${{ github.head_ref }}"
push_options: "--dry-run"
file_pattern: "assets/lib/fuse/*"
commit_message: "📦 Update packaged FuseJS"
- name: Commit KaTeX changes
uses: stefanzweifel/git-auto-commit-action@v6
with:
branch: "${{ github.head_ref }}"
push_options: "--dry-run"
file_pattern: "assets/lib/katex/*"
commit_message: "📦 Update packaged KaTeX"
- name: Commit Mermaid changes
uses: stefanzweifel/git-auto-commit-action@v6
with:
branch: "${{ github.head_ref }}"
push_options: "--dry-run"
file_pattern: "assets/lib/mermaid/*"
commit_message: "📦 Update packaged Mermaid"
- run: npm run build
- name: Commit CSS changes
uses: stefanzweifel/git-auto-commit-action@v6
with:
branch: "${{ github.head_ref }}"
push_options: "--dry-run"
file_pattern: "assets/css/compiled/main.css"
commit_message: "💄 Rebuild CSS"
- run: git push

View File

@@ -0,0 +1,21 @@
name: Create ZIP
on:
release:
types: [published]
workflow_dispatch:
jobs:
zip:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: zip -r config-default.zip config/_default
- uses: actions/upload-artifact@v4
with:
name: config-default
path: config-default.zip
- name: Upload to release
uses: softprops/action-gh-release@v2
with:
files: config-default.zip
tag_name: ${{ github.event.release.tag_name }}

View File

@@ -0,0 +1,16 @@
name: Greetings
on: [pull_request_target, issues]
jobs:
greeting:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/first-interaction@v1
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
issue-message: "Thanks for contributing to Blowfish"
pr-message: "Thanks for contributing to Blowfish"

View File

@@ -0,0 +1,54 @@
name: Update Hugo version
on:
schedule:
- cron: "0 6 * * *"
workflow_dispatch:
jobs:
updateBlowfish:
runs-on: ubuntu-latest
steps:
- name: Check out code into the Go module directory
uses: actions/checkout@v4
with:
ref: dev
submodules: true # Fetch Hugo themes (true OR recursive)
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
- name: Fetch release version
id: fetch-release
run: |
curl -sL https://api.github.com/repos/gohugoio/hugo/releases/latest | \
jq -r ".tag_name" > release-versions/hugo-latest.txt
- name: Check for modified files
id: git-check
run:
echo ::set-output name=modified::$([ -z "`git status --porcelain`" ]
&& echo "false" || echo "true")
- name: Update config.toml
id: update-config
if: steps.git-check.outputs.modified == 'true'
run: |
cat release-versions/hugo-latest.txt | \
while read version; do sed -i'' -E "s/(max = \")[0-9]+\.[0-9]+\.[0-9]+(\")/\1${version#v}\2/g" config.toml; done
- name: Create Pull Request
if: steps.git-check.outputs.modified == 'true'
uses: peter-evans/create-pull-request@v7
with:
commit-message: Update Hugo supported version
title: ⚙️ Update Hugo supported version
body: |
Updates [Hugo][1] support
Auto-generated by [create-pull-request][2]
[1]: https://github.com/gohugoio/hugo
[2]: https://github.com/peter-evans/create-pull-request
labels: dependencies, automated pr
branch: hugo-new-version
base: dev

View File

@@ -0,0 +1,68 @@
# Sample workflow for building and deploying a Hugo site to GitHub Pages
name: Blowfish Docs Deploy
on:
# Runs on pushes targeting the default branch
push:
branches: ["main"]
# Allows you to run this workflow manually from the Actions tab
workflow_dispatch:
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow one concurrent deployment
concurrency:
group: "pages"
cancel-in-progress: true
# Default to bash
defaults:
run:
shell: bash
jobs:
# Build job
build:
runs-on: ubuntu-latest
env:
HUGO_VERSION: 0.102.3
steps:
- name: Install Hugo CLI
run: |
wget -O ${{ runner.temp }}/hugo.deb https://github.com/gohugoio/hugo/releases/download/v${HUGO_VERSION}/hugo_extended_${HUGO_VERSION}_Linux-64bit.deb \
&& sudo dpkg -i ${{ runner.temp }}/hugo.deb
- name: Checkout
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup Pages
id: pages
uses: actions/configure-pages@v5
- name: Build with Hugo
env:
# For maximum backward compatibility with Hugo modules
HUGO_ENVIRONMENT: production
HUGO_ENV: production
run: |
hugo --minify -s exampleSite --themesDir ../.. -d ../docs --baseURL https://nunocoracao.github.io/blowfish/
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
path: ./docs
# Deployment job
deploy:
environment:
name: github-pages
url: https://nunocoracao.github.io/blowfish/
runs-on: ubuntu-latest
needs: build
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4

View File

@@ -0,0 +1,34 @@
# This workflow warns and then closes issues and PRs that have had no activity for a specified amount of time.
#
# You can adjust the behavior by modifying this file.
# For more information, see:
# https://github.com/actions/stale
name: Mark stale issues and pull requests
on:
schedule:
- cron: "0 1 * * *"
workflow_dispatch:
jobs:
stale:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v9
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message:
"This issue will be closed since it has been stale for 60 days."
stale-pr-message:
"This pull request will be closed since it has been stale for 60
days."
stale-issue-label: "no-issue-activity"
stale-pr-label: "no-pr-activity"
days-before-stale: 60
days-before-close: 0
remove-stale-when-updated: true
operations-per-run: 100

View File

@@ -0,0 +1,27 @@
name: Test Build
on: [push]
jobs:
build:
name: Build Example Site
runs-on: ubuntu-latest
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
fetch-depth: 0
- name: Setup Hugo
uses: peaceiris/actions-hugo@v3.0.0
with:
hugo-version: "latest"
- name: Build
working-directory: ./exampleSite
run:
hugo --minify --themesDir ../.. --baseURL
https://nunocoracao.github.io/blowfish/

34
themes/blowfish/.gitignore vendored Normal file
View File

@@ -0,0 +1,34 @@
# Hugo and Blowfish
public/
resources/
exampleSite/resources/
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories (remove the comment below to include it)
# vendor/
#others
node_modules
.hugo_build.lock
# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
.idea
.Ulysses-Group.plist
.Ulysses-Settings.plist

View File

@@ -0,0 +1,35 @@
# https://github.com/gohugoio/hugo/blob/b39b24962350090122b5f3927456dde710cffb57/docs/.prettierignore
# https://github.com/gohugoio/hugo/blob/b39b24962350090122b5f3927456dde710cffb57/docs/.prettierrc
# develop
.vscode
node_modules
package.json
# Hugo
assets/lib
assets/css/compiled
content
themes
public
static
*.md
# Invalid nodes and unexpected tokens, mostly caused by unmatched tags in Hugo statements.
# For example:
# {{ with .Params.externalUrl }}
# <a href="{{ . }}">
# {{ else }}
# <a href="{{ .RelPermalink }}" class="min-w-full">
# {{ end }}
#
# This create an unclose node
layouts/_default/_markup/render-heading.html
layouts/_default/index.json
layouts/_default/list.html
layouts/shortcodes/screenshot.html
layouts/shortcodes/figure.html
layouts/partials/hugo-embedded/shortcodes/figure-default.html
assets/js/appearance.js

Some files were not shown because too many files have changed in this diff Show More