Compare commits
No commits in common. "master" and "main" have entirely different histories.
20
.clever.json
|
@ -1,20 +0,0 @@
|
||||||
{
|
|
||||||
"apps": [
|
|
||||||
{
|
|
||||||
"app_id": "app_d8484497-b014-41f1-8285-ba9758a56682",
|
|
||||||
"org_id": "orga_5bfefbab-7e3e-41ad-92f9-85613f632510",
|
|
||||||
"deploy_url": "https://push-n3-par-clevercloud-customers.services.clever-cloud.com/app_d8484497-b014-41f1-8285-ba9758a56682.git",
|
|
||||||
"git_ssh_url": "git+ssh://git@push-n3-par-clevercloud-customers.services.clever-cloud.com/app_d8484497-b014-41f1-8285-ba9758a56682.git",
|
|
||||||
"name": "0-timeline-new.",
|
|
||||||
"alias": "0-timeline-new"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"app_id": "app_d49a454e-50ab-4a86-ae4b-0cea72ac583f",
|
|
||||||
"org_id": "orga_5bfefbab-7e3e-41ad-92f9-85613f632510",
|
|
||||||
"deploy_url": "https://push-n3-par-clevercloud-customers.services.clever-cloud.com/app_d49a454e-50ab-4a86-ae4b-0cea72ac583f.git",
|
|
||||||
"git_ssh_url": "git+ssh://git@push-n3-par-clevercloud-customers.services.clever-cloud.com/app_d49a454e-50ab-4a86-ae4b-0cea72ac583f.git",
|
|
||||||
"name": "0_timeline",
|
|
||||||
"alias": "0timeline"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
|
@ -1,13 +0,0 @@
|
||||||
{
|
|
||||||
"build": {
|
|
||||||
"type": "pip"
|
|
||||||
},
|
|
||||||
"deploy": {
|
|
||||||
"hooks": {
|
|
||||||
"pre_run": [
|
|
||||||
"mkdocs build"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"start": "python -m http.server $PORT --directory site"
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,8 +0,0 @@
|
||||||
# MkDocs build output
|
|
||||||
site/
|
|
||||||
|
|
||||||
# Python virtual environment
|
|
||||||
venv/
|
|
||||||
|
|
||||||
# macOS files
|
|
||||||
.DS_Store
|
|
|
@ -1 +0,0 @@
|
||||||
Subproject commit b881df3dbe2a490b49b73e8a84daa88d9cdd2b35
|
|
|
@ -1,7 +0,0 @@
|
||||||
# Privacy Protection - Never commit personal data
|
|
||||||
ownership/identity-mapping.csv
|
|
||||||
**/identity-mapping.csv
|
|
||||||
|
|
||||||
# Backup files
|
|
||||||
*.backup
|
|
||||||
*.bak
|
|
|
@ -1,343 +0,0 @@
|
||||||
|
|
||||||
# 💰 Smartup Zero Currency Ledger System
|
|
||||||
|
|
||||||
A git-native, transparent, and democratically governed dual-currency system for collective ownership and fair compensation.
|
|
||||||
|
|
||||||
**Status**: ✅ **FULLY OPERATIONAL** - Complete system with live transparency on timeline0.org and working task-SC integration
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 What We Built
|
|
||||||
|
|
||||||
The **Currency Ledger System** is the financial backbone of Smartup Zero, implementing:
|
|
||||||
|
|
||||||
- **Smartup Credits (SC)**: 1 SC = €1 treasury claim for completed work
|
|
||||||
- **Social Karma (SK)**: Non-transferable reputation currency for community contributions
|
|
||||||
- **Book of Owners**: Complete organizational chart with team memberships and role assignments
|
|
||||||
- **Progressive Transparency**: Public governance with strategic development protection
|
|
||||||
- **Democratic Validation**: Community oversight of all currency awards and policy changes
|
|
||||||
- **Pending SC System**: Phased validation for large retrospective awards (like founding work)
|
|
||||||
- **Task-Based Work System**: Effort-based assessment and SC allocation for collaborative work
|
|
||||||
|
|
||||||
## 🚀 Live Public Transparency
|
|
||||||
|
|
||||||
**All currency data is publicly visible on timeline0.org:**
|
|
||||||
|
|
||||||
- 📖 **[Book of Owners](https://timeline0.org/smartup-zero/book-of-owners/)** - Live organizational chart
|
|
||||||
- 💰 **[Financial Transparency](https://timeline0.org/smartup-zero/financial-transparency/)** - Complete financial health
|
|
||||||
- 💱 **[Currency System](https://timeline0.org/smartup-zero/currency-system/)** - How it all works
|
|
||||||
|
|
||||||
*Pages auto-generate from CSV ledger data - complete transparency in action.*
|
|
||||||
|
|
||||||
## 💎 Founder Accountability Model
|
|
||||||
|
|
||||||
**Current Status**: 82,200 SC pending validation representing 10 years of R&D work
|
|
||||||
|
|
||||||
### Democratic Vesting Schedule
|
|
||||||
- **Design Phase**: 24,660 SC (30%) - Needs Team Captain validation
|
|
||||||
- **Production Phase**: 32,880 SC (40%) - Needs community vote
|
|
||||||
- **Organization Phase**: 24,660 SC (30%) - Automatic at market success
|
|
||||||
|
|
||||||
### Integrity Principles
|
|
||||||
- ✅ **Cannot self-validate** - Founder subject to same democratic rules
|
|
||||||
- ✅ **Success alignment** - Vesting tied to collective achievement
|
|
||||||
- ✅ **Community oversight** - Every SC requires external approval
|
|
||||||
- ✅ **Transparent process** - All validation public and recorded
|
|
||||||
|
|
||||||
**This demonstrates Smartup Zero's "no special founders" principle in practice.**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🏗️ System Architecture
|
|
||||||
|
|
||||||
```
|
|
||||||
currency-ledger/
|
|
||||||
├── ledger/ # Transaction records (public)
|
|
||||||
│ ├── smartup-credits/ # Live SC awards and redemptions
|
|
||||||
│ ├── social-karma/ # SK awards and decay events
|
|
||||||
│ ├── pending-sc/ # Awaiting democratic validation
|
|
||||||
│ ├── treasury/ # EUR balance and liability tracking
|
|
||||||
│ └── task-management/ # Work session logs and task tracking
|
|
||||||
├── ownership/ # Organizational structure (public)
|
|
||||||
│ ├── book-of-owners.csv # Public ownership registry with aliases
|
|
||||||
│ ├── license-transactions.csv # License purchase/upgrade history
|
|
||||||
│ └── identity-mapping.csv # Private: real names ↔ aliases (NEVER COMMITTED)
|
|
||||||
├── policies/ # Configuration and rules (public)
|
|
||||||
│ ├── credit-rates.yml # SC award rates and ADM split rules
|
|
||||||
│ ├── karma-rules.yml # SK categories, thresholds, decay rates
|
|
||||||
│ ├── validation-rules.yml # Democratic oversight processes
|
|
||||||
│ ├── license-policies.yml # License types and capabilities
|
|
||||||
│ ├── organizational-structure.yml # Teams, roles, assignment rules
|
|
||||||
│ └── task-management/ # Effort assessment and work coordination
|
|
||||||
│ ├── effort-assessment-template.yml
|
|
||||||
│ └── mission-leader-rules.yml
|
|
||||||
└── scripts/ # Management and automation tools
|
|
||||||
├── validate-ledger.py # System integrity checking
|
|
||||||
├── generate-reports.py # Financial transparency reports
|
|
||||||
├── manage-owners.py # License and ownership management
|
|
||||||
├── manage-organization.py # Team and role assignments
|
|
||||||
├── validate-pending-sc.py # Pending SC validation workflows
|
|
||||||
├── update-profile.py # Personal information updates
|
|
||||||
├── generate-public-pages.py # Auto-generate timeline0.org pages
|
|
||||||
├── system-check.py # Comprehensive system validation
|
|
||||||
├── destroy-sc.py # SC destruction for system integrity
|
|
||||||
└── task-management/ # Task workflow automation
|
|
||||||
├── create-task-with-budget.py
|
|
||||||
└── assess-work-session.py
|
|
||||||
```
|
|
||||||
|
|
||||||
## 📊 Current System Status
|
|
||||||
|
|
||||||
### Financial Health: ✅ **EXCELLENT**
|
|
||||||
- **Live SC Outstanding**: 153 SC (€153 liability)
|
|
||||||
- **Pending SC**: 82,200 SC (awaiting validation)
|
|
||||||
- **EUR Treasury**: €0 (no current funding)
|
|
||||||
- **3x Rule**: ✅ PENDING (SC outstanding but no treasury funding yet)
|
|
||||||
|
|
||||||
### Organizational Status: ✅ **READY**
|
|
||||||
- **Total Owners**: 1 (robbert_founder)
|
|
||||||
- **Teams Formed**: 1 (Leadership Team)
|
|
||||||
- **Roles Assigned**: 1 (Founding Entrepreneur)
|
|
||||||
- **License Distribution**: 1 Work License
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 Task-Based Work System
|
|
||||||
|
|
||||||
### The ADM Triangle for Collaborative Work
|
|
||||||
Every task involves three roles:
|
|
||||||
- **Attacker (Senior)**: Performs primary work, mentors junior (90% SC)
|
|
||||||
- **Defender (Junior)**: Learns, provides QA, documents process (10% SC)
|
|
||||||
- **Midfielder (Bot)**: Coordinates, logs activity, handles administration
|
|
||||||
|
|
||||||
### Effort-Based Assessment
|
|
||||||
Work sessions are evaluated using structured criteria:
|
|
||||||
- **Attacker Effort** (1-10): Time investment, approach quality, communication, mentoring
|
|
||||||
- **Defender Learning** (1-10): Engagement level, skill acquisition, contributions
|
|
||||||
- **Collaborative Quality** (1-10): Team coordination, problem-solving, documentation
|
|
||||||
|
|
||||||
### SC Payout Based on Effort Quality
|
|
||||||
- **Excellent Session** (27-30 points): 95-100% of budgeted SC
|
|
||||||
- **Good Session** (24-27 points): 80-95% of budgeted SC
|
|
||||||
- **Adequate Session** (18-24 points): 60-80% of budgeted SC
|
|
||||||
- **Poor Session** (6-18 points): 20-60% of budgeted SC
|
|
||||||
- **Failed Session** (0-6 points): 0-20% of budgeted SC
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🚀 How to Use the System
|
|
||||||
|
|
||||||
### For Team Captains
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Create a new task with SC budget
|
|
||||||
python3 scripts/task-management/create-task-with-budget.py \
|
|
||||||
--objective 5_3_0 \
|
|
||||||
--team-repo 3_1_leadership_team \
|
|
||||||
--title "Fix authentication bug" \
|
|
||||||
--description "Resolve login issues in mobile app" \
|
|
||||||
--sc-budget 100 \
|
|
||||||
--captain your_alias \
|
|
||||||
--attacker senior_dev \
|
|
||||||
--defender junior_dev
|
|
||||||
|
|
||||||
# Assess completed work session
|
|
||||||
python3 scripts/task-management/assess-work-session.py \
|
|
||||||
--task-id 6_1_3_0 \
|
|
||||||
--mission-leader your_alias \
|
|
||||||
--start-time 2025-01-16T14:00:00Z \
|
|
||||||
--end-time 2025-01-16T18:00:00Z \
|
|
||||||
--attacker-effort-score 8 \
|
|
||||||
--defender-learning-score 7 \
|
|
||||||
--collaboration-score 9 \
|
|
||||||
--session-notes "Detailed assessment of work quality and collaboration"
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🚀 How to Use the System
|
|
||||||
|
|
||||||
### For Current Owner (robbert_founder)
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Check system health
|
|
||||||
python3 currency-ledger/scripts/system-check.py
|
|
||||||
|
|
||||||
# View organizational chart
|
|
||||||
python3 currency-ledger/scripts/manage-organization.py
|
|
||||||
|
|
||||||
# Generate transparency reports
|
|
||||||
python3 currency-ledger/scripts/generate-reports.py
|
|
||||||
|
|
||||||
# Update public website pages
|
|
||||||
python3 currency-ledger/scripts/generate-public-pages.py
|
|
||||||
|
|
||||||
# Update personal profile
|
|
||||||
python3 currency-ledger/scripts/update-profile.py
|
|
||||||
```
|
|
||||||
|
|
||||||
### For Future Team Captains
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Review pending SC validations
|
|
||||||
python3 currency-ledger/scripts/validate-pending-sc.py
|
|
||||||
|
|
||||||
# Validate founder's design phase work (24,660 SC)
|
|
||||||
# Process: Review work → Community discussion → Leadership vote → Validation
|
|
||||||
```
|
|
||||||
|
|
||||||
## 🔧 Key Operations
|
|
||||||
|
|
||||||
### Adding New Owners
|
|
||||||
|
|
||||||
```python
|
|
||||||
from scripts.manage_owners import OwnershipManager
|
|
||||||
manager = OwnershipManager()
|
|
||||||
manager.add_new_owner(
|
|
||||||
real_name="Alice Johnson",
|
|
||||||
email="alice@example.com",
|
|
||||||
display_name="alice_builder",
|
|
||||||
license_type="work",
|
|
||||||
payment_eur=200
|
|
||||||
)
|
|
||||||
```
|
|
||||||
|
|
||||||
### For Contributors
|
|
||||||
|
|
||||||
1. **Join**: Purchase license via Open Collective
|
|
||||||
2. **Onboard**: Get added to Book of Owners
|
|
||||||
3. **Contribute**: Claim tasks, work in ADM pairs
|
|
||||||
4. **Progress**: Advance through license tiers based on SK accumulation
|
|
||||||
5. **Lead**: Become Team Captain, validate others' work
|
|
||||||
|
|
||||||
## 🔧 Key Operations
|
|
||||||
|
|
||||||
### SC Lifecycle Management
|
|
||||||
1. **Task Creation**: Captain allocates SC budget to specific objectives
|
|
||||||
2. **Work Session**: ADM pair collaborates on task completion
|
|
||||||
3. **Effort Assessment**: Mission leader evaluates session quality
|
|
||||||
4. **Pending Validation**: SC awards go to pending-sc for review
|
|
||||||
5. **Democratic Approval**: Team Captain validates through existing system
|
|
||||||
6. **SC Award**: Validated SC moves to live ledger
|
|
||||||
|
|
||||||
### SC Destruction (System Integrity)
|
|
||||||
```bash
|
|
||||||
# Destroy SC for system corrections or personal choice
|
|
||||||
python3 scripts/destroy-sc.py \
|
|
||||||
--owner account_alias \
|
|
||||||
--amount 50 \
|
|
||||||
--reason "System integrity correction" \
|
|
||||||
--destroyer captain_alias
|
|
||||||
```
|
|
||||||
|
|
||||||
### Treasury Management
|
|
||||||
```bash
|
|
||||||
# Monitor system health and 3x rule compliance
|
|
||||||
python3 scripts/generate-reports.py
|
|
||||||
|
|
||||||
# Validate pending SC entries
|
|
||||||
python3 scripts/validate-pending-sc.py
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎯 Success Metrics
|
|
||||||
|
|
||||||
The currency system succeeds when:
|
|
||||||
|
|
||||||
- **Democratic**: All owners can see and influence how money flows
|
|
||||||
- **Fair**: Contributors earn proportional to verified effort and value created
|
|
||||||
- **Sustainable**: Treasury growth keeps pace with SC awards
|
|
||||||
- **Scalable**: System works at 10x, 100x current contributor count
|
|
||||||
- **Aligned**: Individual incentives serve collective SDG mission
|
|
||||||
- **Transparent**: Every transaction auditable by anyone, anytime
|
|
||||||
|
|
||||||
## 📈 Live System Data
|
|
||||||
|
|
||||||
**First Task-Based SC Awards (Historic)**:
|
|
||||||
- Task 6_1_3_0: Prototype Effort-Based Task-SC Integration System
|
|
||||||
- Session Score: 26/30 (85% payout)
|
|
||||||
- Awards: 153 SC (robbert_founder), 17 SC (test_defender - system test account, later destroyed)
|
|
||||||
- Evidence: Complete audit trail in session logs and transaction records
|
|
||||||
|
|
||||||
**System Test Account**: `test_defender` appears in financial records as a documented system testing artifact used during development of the effort-based assessment system.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🔄 Integration Roadmap
|
|
||||||
|
|
||||||
### Phase 1: ✅ COMPLETE (Validation Phase)
|
|
||||||
- ✅ Complete currency system operational
|
|
||||||
- ✅ Public transparency live on timeline0.org
|
|
||||||
- ✅ Task-SC integration system built and tested
|
|
||||||
- ✅ Effort-based assessment framework implemented
|
|
||||||
- ✅ First SC awards through collaborative work sessions
|
|
||||||
|
|
||||||
### Phase 2: Design Phase
|
|
||||||
- 🎯 Team Captains validate 24,660 SC (Design tranche)
|
|
||||||
- 🎯 Engelbot integration for automated task coordination
|
|
||||||
- 🎯 Open Collective treasury sync for funding flows
|
|
||||||
- 🎯 Matrix/Element integration for real-time session notifications
|
|
||||||
- 🎯 Advanced mission leader dashboard and assessment tools
|
|
||||||
|
|
||||||
### Phase 3: Production Phase
|
|
||||||
- 🎯 Community validates 32,880 SC (Production tranche)
|
|
||||||
- 🎯 Advanced reporting and analytics dashboards
|
|
||||||
- 🎯 Automated treasury management and redemption processing
|
|
||||||
- 🎯 50+ owners with mature democratic governance
|
|
||||||
- 🎯 Cross-team collaboration and skill development tracking
|
|
||||||
|
|
||||||
### Phase 4: Organization Phase
|
|
||||||
- 🎯 Final 24,660 SC automatically vests at market success
|
|
||||||
- 🎯 Full production deployment with global 24/7 coverage
|
|
||||||
- 🎯 Template system for launching additional Smartups
|
|
||||||
- 🎯 Proven model scaling to multiple SDG-focused organizations
|
|
||||||
|
|
||||||
## 🤝 Contributing to the System
|
|
||||||
|
|
||||||
This currency system is itself a collective creation. Improvements welcome:
|
|
||||||
|
|
||||||
1. **Identify Enhancement**: System limitation or optimization opportunity
|
|
||||||
2. **Propose Solution**: Detailed proposal in General Forum
|
|
||||||
3. **Community Discussion**: Democratic debate and refinement
|
|
||||||
4. **Implementation**: Code changes with full testing and validation
|
|
||||||
5. **Integration**: Merge with updated documentation and transparency reports
|
|
||||||
|
|
||||||
## 📋 Development History
|
|
||||||
|
|
||||||
**Task 6_0_3_0 - System Foundation (August 2025)**:
|
|
||||||
Complete prototype of effort-based task-SC integration system built through collaborative work session between robbert_founder (attacker) and test_defender (defender). Established foundational workflows for task creation, effort assessment, and SC distribution through existing democratic validation system.
|
|
||||||
|
|
||||||
**Key Innovations Implemented**:
|
|
||||||
- Structured effort assessment using 30-point scoring system
|
|
||||||
- Session-based work logging with complete audit trails
|
|
||||||
- Integration with existing currency ledger validation workflows
|
|
||||||
- SC destruction capabilities for system integrity maintenance
|
|
||||||
- Mission leader role for real-time work coordination
|
|
||||||
|
|
||||||
**System Integrity Measures**:
|
|
||||||
- Book of Owners integration ensures only licensed members earn SC
|
|
||||||
- Progressive transparency maintains public accountability
|
|
||||||
- Democratic validation prevents unilateral SC awards
|
|
||||||
- Complete audit trails enable full transaction history review
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🌍 Planetary Organization Vision
|
|
||||||
|
|
||||||
This system enables:
|
|
||||||
- **24/7 Global Operations**: Contributors worldwide working across timezones
|
|
||||||
- **Equal Compensation**: Same SC rates regardless of geographic location
|
|
||||||
- **Borderless Collaboration**: Skills and contributions valued over nationality
|
|
||||||
- **Democratic Governance**: All major decisions subject to community oversight
|
|
||||||
- **Sustainable Economics**: Treasury growth balanced with SC liability management
|
|
||||||
|
|
||||||
**Built with transparency and democratic accountability in mind.**
|
|
||||||
|
|
||||||
This system embodies the core Smartup principle: Technology should serve collective human needs, built by and for the communities that use it, with full democratic accountability and protection from extraction.
|
|
||||||
|
|
||||||
**Ready to earn your first Smartup Credits?** Complete a task, demonstrate effort and collaboration, and join the future of work! 🚀
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Version**: 1.1 (Updated August 2025)
|
|
||||||
**Status**: Production-ready with active task-based SC system
|
|
||||||
**Next Update**: Integration with Engelbot automation and expanded team operations
|
|
|
@ -1,110 +0,0 @@
|
||||||
# Comprehensive Founding Work Audit - Community Review
|
|
||||||
|
|
||||||
## Review Period: August 4, 2025 - Ongoing (Phased Validation)
|
|
||||||
|
|
||||||
### Executive Summary
|
|
||||||
|
|
||||||
**Entrepreneur**: robbert_founder (Owner #001)
|
|
||||||
**Total Work Period**: 2016-2025 (10 years)
|
|
||||||
**Total Hours Claimed**: 3,210 hours
|
|
||||||
**Total SC Value**: 82,200 SC
|
|
||||||
**Average Rate**: €25.60/hour
|
|
||||||
**Validation Method**: Phased vesting with democratic approval
|
|
||||||
|
|
||||||
### 10-Year Journey Overview
|
|
||||||
|
|
||||||
| Period | Focus | Hours | SC Value | Key Achievements |
|
|
||||||
|--------|-------|-------|----------|------------------|
|
|
||||||
| **2016-2017** | TNO Research | 1,000h | 25,000 SC | Context Engine, platform integration |
|
|
||||||
| **2017-2019** | Onlive Social | 550h | 13,750 SC | Real-world group networks, UX research |
|
|
||||||
| **2020-2022** | COVID Pivot | 500h | 12,500 SC | Erasmus collaboration, crisis communication |
|
|
||||||
| **2023-2024** | Mesh Networks | 430h | 10,750 SC | Hanze partnership, 75+ node validation |
|
|
||||||
| **2024-2025** | Smartup Zero | 730h | 20,200 SC | Complete system, currency ledger, OSBP |
|
|
||||||
| **TOTAL** | **10 Years** | **3,210h** | **82,200 SC** | **Revolutionary collective ownership model** |
|
|
||||||
|
|
||||||
### Vesting Schedule & Democratic Validation
|
|
||||||
|
|
||||||
#### Tranche 1: Design Phase (30% - 24,660 SC)
|
|
||||||
**Trigger**: Recruitment of 2+ Team Captains
|
|
||||||
**Validation**: Team Captain review + Leadership Team vote
|
|
||||||
**Work Focus**:
|
|
||||||
- Recent Smartup model development (180h)
|
|
||||||
- Currency ledger system (120h)
|
|
||||||
- OSBP documentation (140h)
|
|
||||||
- Progressive transparency architecture (80h)
|
|
||||||
- Timeline0 website (100h)
|
|
||||||
|
|
||||||
**Rationale**: Recent work that Team Captains can directly evaluate and validate.
|
|
||||||
|
|
||||||
#### Tranche 2: Production Phase (40% - 32,880 SC)
|
|
||||||
**Trigger**: Community maturity (50+ owners) OR working MVP
|
|
||||||
**Validation**: Community binding vote
|
|
||||||
**Work Focus**:
|
|
||||||
- ONLIFE mission and technical architecture (200h)
|
|
||||||
- Complete business model development (180h)
|
|
||||||
- Comprehensive research documentation (200h)
|
|
||||||
- Academic collaborations and validation (300h)
|
|
||||||
- Emergency communication protocol development (220h)
|
|
||||||
|
|
||||||
**Rationale**: Core ONLIFE development work that built the foundation for production.
|
|
||||||
|
|
||||||
#### Tranche 3: Organization Phase (30% - 24,660 SC)
|
|
||||||
**Trigger**: Market launch + revenue milestone
|
|
||||||
**Validation**: Automatic vesting
|
|
||||||
**Work Focus**:
|
|
||||||
- Historical TNO research foundation (800h)
|
|
||||||
- Platform and technical feasibility research (350h)
|
|
||||||
- Early prototyping and market validation (300h)
|
|
||||||
- Long-term strategic positioning (100h)
|
|
||||||
|
|
||||||
**Rationale**: Historical R&D that enabled everything else - validated by market success.
|
|
||||||
|
|
||||||
### Democratic Safeguards & Integrity Measures
|
|
||||||
|
|
||||||
1. **No Self-Validation**: Founder cannot approve own SC awards
|
|
||||||
2. **Escalating Validation**: Each tranche requires higher community participation
|
|
||||||
3. **Evidence-Based**: Every SC claim linked to verifiable public documentation
|
|
||||||
4. **Vesting Alignment**: Founder success tied to collective success
|
|
||||||
5. **Community Override**: Any tranche can be reduced/rejected by community vote
|
|
||||||
|
|
||||||
### Comparison to Traditional Startup Equity
|
|
||||||
|
|
||||||
**Traditional Startup Founder**:
|
|
||||||
- Takes 20-50% equity immediately
|
|
||||||
- Can cash out through investment rounds
|
|
||||||
- Success not tied to employee welfare
|
|
||||||
- No community oversight
|
|
||||||
|
|
||||||
**Smartup Zero Founder**:
|
|
||||||
- Earns SC only through validated work
|
|
||||||
- Cannot cash out until community succeeds
|
|
||||||
- Subject to democratic approval process
|
|
||||||
- Success tied to collective achievement
|
|
||||||
|
|
||||||
### Questions for Future Validation
|
|
||||||
|
|
||||||
**For Team Captains (Tranche 1)**:
|
|
||||||
1. Does the recent validation phase work (2024-2025) justify 24,660 SC?
|
|
||||||
2. Are the technical implementations (currency system, website) of professional quality?
|
|
||||||
3. Is the Smartup model innovative enough to warrant the governance SC awards?
|
|
||||||
|
|
||||||
**For Community (Tranche 2)**:
|
|
||||||
1. Does the 10-year development journey create sufficient value for 32,880 SC?
|
|
||||||
2. Should historical R&D work receive the same rates as current validation work?
|
|
||||||
3. Is the vesting schedule fair to both founder and future contributors?
|
|
||||||
|
|
||||||
**For Market (Tranche 3)**:
|
|
||||||
1. Did the historical research foundation enable a successful market launch?
|
|
||||||
2. Should the final tranche be automatic or require additional validation?
|
|
||||||
|
|
||||||
### Current Status
|
|
||||||
|
|
||||||
- **Tranche 1**: ⏳ AWAITING TEAM CAPTAIN RECRUITMENT
|
|
||||||
- **Tranche 2**: ❓ PENDING COMMUNITY GROWTH
|
|
||||||
- **Tranche 3**: 🔮 PENDING MARKET VALIDATION
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Last Updated**: August 4, 2025
|
|
||||||
**Total Pending SC**: 82,200 SC
|
|
||||||
**Democratic Principle**: Founder earns through validation, not privilege
|
|
|
@ -1,29 +0,0 @@
|
||||||
category,task_description,period,hours_estimate,sc_rate,sc_proposed,evidence_link,phase,priority,notes
|
|
||||||
research,TNO Context Engine development and testing,2016-2017,800,25,20000,timeline0.org/history#phase-1,historical,essential,Original smartphone context-aware app research
|
|
||||||
research,Platform integration and app store negotiations,2016-2017,200,25,5000,timeline0.org/history#phase-1,historical,high,Dealing with Google/Apple gatekeepers
|
|
||||||
research,Onlive social network architecture and prototyping,2017-2019,400,25,10000,timeline0.org/history#phase-2,historical,essential,Pivot to real-world social group connections
|
|
||||||
research,User testing and market validation for social features,2018-2019,150,25,3750,timeline0.org/history#phase-2,historical,high,Understanding group dynamics in physical space
|
|
||||||
research,COVID-19 pivot to digital herd immunity concept,2020-2021,200,25,5000,timeline0.org/history#phase-4,historical,high,Emergency response application development
|
|
||||||
research,Erasmus University collaboration and UX validation,2020-2022,180,25,4500,timeline0.org/history#phase-4,historical,essential,Academic validation and user research
|
|
||||||
research,Crisis communication and group tracing research,2021-2022,120,25,3000,timeline0.org/history#phase-4,historical,medium,Emergency use case development
|
|
||||||
research,Mesh networking protocol research and testing,2023-2024,250,25,6250,timeline0.org/history#phase-5,historical,essential,Hanze University partnership and 75+ node tests
|
|
||||||
research,Smartphone offline communication feasibility,2023-2024,100,25,2500,timeline0.org/history#phase-5,historical,high,Technical validation of mesh capabilities
|
|
||||||
governance,Smartup organizational model conception,2023-2024,180,25,4500,timeline0.org/social-subsystem,validation,essential,Revolutionary democratic ownership structure
|
|
||||||
governance,Progressive transparency architecture design,2024,80,25,2000,timeline0.org/experiment-overview,validation,essential,Balancing openness with strategic protection
|
|
||||||
governance,ADM triangle and buddy system development,2024,60,25,1500,timeline0.org/social-subsystem,validation,high,Peer accountability and learning systems
|
|
||||||
planning,ONLIFE emergency network mission definition,2024,120,25,3000,timeline0.org/executive-summary,validation,essential,Positioning as critical EU infrastructure
|
|
||||||
planning,SDG grounding and impact framework,2024,80,25,2000,timeline0.org/executive-summary,validation,essential,UN Sustainable Development Goals alignment
|
|
||||||
planning,Business model and licensing structure,2024,100,25,2500,timeline0.org/smartup-zero/business-blueprint,validation,essential,Sustainable revenue without VC extraction
|
|
||||||
writing,Complete OSBP documentation creation,2024-2025,140,20,2800,timeline0.org/smartup-zero,validation,essential,All 7 blueprints comprehensively authored
|
|
||||||
writing,Technical architecture documentation,2024-2025,80,20,1600,timeline0.org/smartup-zero/development-blueprint,validation,high,Development and science blueprints
|
|
||||||
writing,Governance and operational procedures,2024-2025,60,20,1200,timeline0.org/social-subsystem,validation,high,Democratic processes and workflows
|
|
||||||
coding,Timeline0 website development and deployment,2024-2025,100,30,3000,timeline0.org,validation,essential,MkDocs site with complete content architecture
|
|
||||||
coding,Currency ledger system architecture and implementation,2025,80,30,2400,currency-ledger/,validation,essential,Comprehensive dual-currency system
|
|
||||||
coding,Organizational management and validation scripts,2025,40,30,1200,currency-ledger/scripts/,validation,high,Owner management and democratic tools
|
|
||||||
governance,SOS cooperative establishment and legal framework,2024,60,25,1500,open-collective-setup,validation,essential,Organizational foundation and transparency
|
|
||||||
governance,Community building and early recruitment,2024-2025,80,25,2000,timeline0.org/book-of-owners,validation,medium,Initial community formation and onboarding
|
|
||||||
planning,Integration architecture for future automation,2025,40,25,1000,currency-ledger/README.md,validation,medium,Engelbot and Open Collective integration design
|
|
||||||
# SUBTOTAL: 3210 hours over 10 years
|
|
||||||
# TOTAL SC PROPOSED: 82,200 SC
|
|
||||||
# AVERAGE: 25.6 SC/hour (€25.60/hour effective rate)
|
|
||||||
# NOTE: Exceeds 10,000 SC cap by 72,200 SC - will use pending SC system for democratic validation
|
|
Can't render this file because it has a wrong number of fields in line 26.
|
|
@ -1,9 +0,0 @@
|
||||||
vesting_tranche,work_focus,sc_amount,percentage,validation_trigger,validator_required
|
|
||||||
design_phase,Recent validation work + Smartup model,24660,30%,Team Captains recruited,team-captains+leadership-vote
|
|
||||||
production_phase,ONLIFE development + comprehensive OSBP,32880,40%,Community maturity (50+ owners),community-binding-vote
|
|
||||||
organization_phase,Historical R&D foundation,24660,30%,Market launch + revenue,automatic-vesting
|
|
||||||
TOTAL,,82200,100%,,
|
|
||||||
# RATIONALE:
|
|
||||||
# Design phase: Most recent work that Team Captains can directly validate
|
|
||||||
# Production phase: Core ONLIFE and business development work
|
|
||||||
# Organization phase: Historical R&D that enabled everything else
|
|
|
|
@ -1,10 +0,0 @@
|
||||||
timestamp,type,amount,from,to,reference,description,validator_required,phase,evidence_link,status,vesting_tranche
|
|
||||||
# Pending Smartup Credits - Comprehensive 10-Year Founding Work Audit
|
|
||||||
# Total: 82,200 SC (3,210 hours @ avg 25.6 SC/hour)
|
|
||||||
# Distributed across 3 vesting tranches for democratic validation
|
|
||||||
2025-08-04T17:00:00Z,PENDING_SC,24660,,robbert_founder,founding-work-tranche-1,Design Phase: Smartup model + validation work + currency system,team-captains+leadership-vote,validation,currency-ledger/founding-work-audit/comprehensive-task-inventory.csv,PENDING_VALIDATION,design_phase
|
|
||||||
2025-08-04T17:00:00Z,PENDING_SC,32880,,robbert_founder,founding-work-tranche-2,Production Phase: ONLIFE development + OSBP + technical architecture,community-binding-vote,validation,currency-ledger/founding-work-audit/comprehensive-task-inventory.csv,PENDING_VALIDATION,production_phase
|
|
||||||
2025-08-04T17:00:00Z,PENDING_SC,24660,,robbert_founder,founding-work-tranche-3,Organization Phase: Historical R&D foundation + 10-year research journey,automatic-vesting,historical,currency-ledger/founding-work-audit/comprehensive-task-inventory.csv,PENDING_VALIDATION,organization_phase
|
|
||||||
# TOTAL PENDING: 82,200 SC
|
|
||||||
# VALIDATION PATHWAY: 24,660 SC → 57,540 SC → 82,200 SC over 3 phases
|
|
||||||
# DEMOCRATIC SAFEGUARD: Cannot self-validate, requires team formation and community growth
|
|
|
|
@ -1,7 +0,0 @@
|
||||||
timestamp,type,amount,from,to,reference,description,approver,phase,evidence_link
|
|
||||||
# Smartup Credits (SC) Transaction Ledger
|
|
||||||
# Format: ISO timestamp, SC/REDEEM, amount, from_user, to_user, task_id, description, approver, phase, link_to_work
|
|
||||||
# Example: 2025-01-15T10:30:00Z,SC,50,,alice,task-123,Backend API completion,bob,validation,https://forgejo.../issues/123
|
|
||||||
2025-08-05T17:15:00Z,SC,153,,robbert_founder,task-6_1_3_0-attacker,Task 6_1_3_0: Prototype Effort-Based Task-SC Integration System - Attacker role (85% effort payout),robbert_founder,validation,https://smartup-zero-forgejo.fly.dev/smartup-zero/3_1_leadership_team/issues/1
|
|
||||||
2025-08-05T17:15:00Z,SC,17,,test_defender,task-6_1_3_0-defender,Task 6_1_3_0: Prototype Effort-Based Task-SC Integration System - Defender role (85% effort payout),robbert_founder,validation,https://smartup-zero-forgejo.fly.dev/smartup-zero/3_1_leadership_team/issues/1
|
|
||||||
2025-08-05T21:15:00Z,DESTROY,17,test_defender,,system-correction,AI testing account correction - SC destroyed to maintain system integrity,robbert_founder,validation,task-6_1_3_0-defender
|
|
|
|
@ -1,4 +0,0 @@
|
||||||
timestamp,type,amount,from,to,reference,description,awarded_by,category,evidence_link
|
|
||||||
# Social Karma (SK) Transaction Ledger
|
|
||||||
# Format: ISO timestamp, KARMA/DECAY, amount, from_user, to_user, event_id, description, awarder, category, evidence
|
|
||||||
# Example: 2025-01-15T11:00:00Z,KARMA,10,,alice,pr-456,Excellent code review for mesh protocol,bob,code_review,https://forgejo.../pull/456
|
|
|
|
@ -1,2 +0,0 @@
|
||||||
session_id,task_id,start_time,end_time,attacker,defender,mission_leader,attacker_effort_score,defender_learning_score,collaboration_score,total_score,recommended_payout_percent,session_notes
|
|
||||||
sess_6_1_3_0_20250805_1708,6_1_3_0,2025-08-05T14:00:00Z,2025-08-05T17:00:00Z,robbert_founder,test_defender,robbert_founder,9,8,9,26,85,"Exceptional systems design session. Robbert demonstrated deep architectural thinking, balancing complexity with practicality. Claude showed strong learning engagement, asking clarifying questions and contributing meaningful insights. Excellent collaborative problem-solving - true ADM triangle in action. Built complete task creation system with proper integration to existing currency ledger. This session establishes the foundation for effort-based work culture."
|
|
|
|
@ -1,22 +0,0 @@
|
||||||
task_id,forgejo_issue_url,objective_id,team_repo,total_sc_budget,attacker_alias,defender_alias,attacker_sc,defender_sc,created_date,captain_alias,status,title,description
|
|
||||||
6_1_3_0,https://smartup-zero-forgejo.fly.dev/smartup-zero/3_1_leadership_team/issues/1,5_3_0,3_1_leadership_team,200,robbert_founder,test_defender,180,20,2025-08-05T16:43:28.898517,robbert_founder,created,Prototype Effort-Based Task-SC Integration System,Build working 0.1 prototype connecting task creation → effort assessment → SC payout via existing currency ledger. This is the foundational task establishing effort-based work culture in Smartup Zero.
|
|
||||||
6_2_3_0,TBD - Create manually,5_3_0,3_1_leadership_team,100,,,90,10,2025-08-06T14:40:28.772474,robbert_founder,created,Implement SC Patience Multiplier System,"Design and implement phase-based SC multipliers that reward contributors who wait until phase completion to redeem their SC. System should maintain 1 SC = 1 EUR foundation while providing gentle incentives for treasury health. Includes policy configuration, ledger tracking, and integration with existing redemption system."
|
|
||||||
6_3_3_0,TBD - Create manually,5_3_0,3_1_leadership_team,200,,,180,20,2025-08-06T15:09:05.841253,robbert_founder,created,Essential Engelbot-Currency Integration,"Build MVP chat interface for currency ledger system. Enable Team Captains to create tasks, assess work, and check balances via Matrix commands. Critical for experiment launch."
|
|
||||||
6_4_3_0,TBD - Create manually,5_3_0,3_1_leadership_team,200,,,180,20,2025-08-07T17:00:37.250013,robbert_founder,created,Implement fixed salary rule for elected Team Captains,"Design and implement a policy and ledger mechanism for providing monthly SC salaries to elected team captains, tied to org phases and validated via leadership processes."
|
|
||||||
6_1_4_0,TBD - Create manually,5_4_0,3_1_leadership_team,100,robbert_founder,test_defender,90,10,2025-08-09T15:55:14.887083,robbert_founder,created,Complete System Backup and Documentation,"Export all data from fly.io systems, document current configurations, create comprehensive rollback procedures for Matrix and Forgejo"
|
|
||||||
6_2_4_0,TBD - Create manually,5_4_0,3_1_leadership_team,200,robbert_founder,test_defender,180,20,2025-08-09T16:02:27.561032,robbert_founder,created,Export and Archive Current Data,"Extract git repositories, database backups, Matrix room data, user accounts, and all configuration files from current fly.io infrastructure"
|
|
||||||
6_3_4_0,TBD - Create manually,5_4_0,3_1_leadership_team,200,robbert_founder,test_defender,180,20,2025-08-09T16:05:51.618792,robbert_founder,created,Set Up Forgejo on Clever Cloud,"Deploy Forgejo container on Clever Cloud with PostgreSQL addon, configure persistent storage, set up SSL certificates and domain mapping"
|
|
||||||
6_4_4_0,TBD - Create manually,5_4_0,3_1_leadership_team,200,robbert_founder,test_defender,180,20,2025-08-09T17:20:03.526121,robbert_founder,created,Migrate Git Repositories and Data,"Import all git repositories, user accounts, issue data, and organizational settings to new Forgejo instance. Verify data integrity and access permissions"
|
|
||||||
6_5_4_0,TBD - Create manually,5_4_0,3_1_leadership_team,100,robbert_founder,test_defender,90,10,2025-08-09T17:22:17.573981,robbert_founder,created,Update All Webhook Configurations,"Reconfigure Engelbot webhooks, Timeline0.org mirroring, and all integration endpoints to point to new Clever Cloud Forgejo instance"
|
|
||||||
6_6_4_0,TBD - Create manually,5_4_0,3_1_leadership_team,100,robbert_founder,test_defender,90,10,2025-08-09T17:24:11.800628,robbert_founder,created,Research and Choose Matrix Hosting Strategy,"Evaluate matrix.org vs EU providers vs self-hosted options. Make strategic decision based on sovereignty goals, complexity, and timeline constraints"
|
|
||||||
6_7_4_0,TBD - Create manually,5_4_0,3_1_leadership_team,200,robbert_founder,test_defender,180,20,2025-08-09T17:26:11.718817,robbert_founder,created,Execute Matrix Infrastructure Migration,"Set up new Matrix homeserver, migrate user accounts and rooms, preserve message history, configure federation and security settings"
|
|
||||||
6_8_4_0,TBD - Create manually,5_4_0,3_1_leadership_team,100,robbert_founder,test_defender,90,10,2025-08-09T17:27:43.280719,robbert_founder,created,Update Engelbot Matrix Configuration,"Reconfigure Engelbot authentication, room IDs, and homeserver settings for new Matrix infrastructure. Test all webhook-to-Matrix workflows"
|
|
||||||
6_9_4_0,TBD - Create manually,5_4_0,3_1_leadership_team,100,robbert_founder,test_defender,90,10,2025-08-09T17:29:27.750290,robbert_founder,created,Validate Complete System Integration,Test full workflow: Forgejo issue creation → Engelbot webhook → Matrix notification → Timeline0.org mirroring. Verify all systems communicate properly
|
|
||||||
6_10_4_0,TBD - Create manually,5_4_0,3_1_leadership_team,100,robbert_founder,test_defender,90,10,2025-08-09T17:30:26.413792,robbert_founder,created,Update DNS and Final Cutover,"Point all domains to new EU infrastructure, update Timeline0.org references, coordinate final switchover with minimal downtime"
|
|
||||||
6_11_4_0,TBD - Create manually,5_4_0,3_1_leadership_team,100,robbert_founder,test_defender,90,10,2025-08-09T17:31:26.054368,robbert_founder,created,Performance Testing and Documentation,"Benchmark new infrastructure performance, document all new endpoints and configurations, create maintenance procedures for EU-sovereign stack"
|
|
||||||
6_1_5_0,TBD - Create manually,5_5_0,3_7_operational_team,100,robbert_founder,test_defender,90,10,2025-08-09T17:46:26.355703,robbert_founder,created,Design Multi-Team Configuration System,"Create YAML configuration system for repo-to-room mapping, supporting dynamic team addition without code changes. Design validation and error handling for missing rooms/repos."
|
|
||||||
6_2_5_0,TBD - Create manually,5_5_0,3_7_operational_team,200,robbert_founder,test_defender,180,20,2025-08-09T17:47:44.869625,robbert_founder,created,Refactor Webhook Handler for Dynamic Routing,Replace hardcoded repo name check with dynamic mapping system. Update forgejoWebhook.ts to read configuration and route to appropriate Matrix rooms based on repository name.
|
|
||||||
6_3_5_0,TBD - Create manually,5_5_0,3_7_operational_team,200,robbert_founder,test_defender,180,20,2025-08-09T17:48:46.203473,robbert_founder,created,Create Team Room Discovery System,"Build Matrix room discovery system that automatically maps team repositories to corresponding Matrix rooms. Handle room creation, invitations, and permission management."
|
|
||||||
6_4_5_0,TBD - Create manually,5_5_0,3_7_operational_team,100,robbert_founder,test_defender,90,10,2025-08-09T17:49:57.987199,robbert_founder,created,Implement Configuration Hot-Reloading,Enable Engelbot to reload team mappings without restart. Add API endpoint for configuration updates and real-time team addition support.
|
|
||||||
6_5_5_0,TBD - Create manually,5_5_0,3_7_operational_team,100,robbert_founder,test_defender,90,10,2025-08-09T17:51:26.588047,robbert_founder,created,Test Multi-Team Integration,"Create test repositories for multiple teams, verify webhook delivery to correct Matrix rooms, validate error handling for misconfigured teams. Document troubleshooting procedures."
|
|
||||||
6_6_5_0,TBD - Create manually,5_5_0,3_7_operational_team,100,robbert_founder,test_defender,90,10,2025-08-09T17:52:21.266247,robbert_founder,created,Update Deployment and Documentation,Update Clever Cloud deployment configuration for new features. Create team captain guide for adding new teams to Engelbot. Update technical documentation and troubleshooting guides.
|
|
|
|
@ -1,11 +0,0 @@
|
||||||
timestamp,event_type,amount_eur_delta,total_eur_balance,sc_outstanding,sc_liability_eur,ratio,notes,reference
|
|
||||||
# Treasury Balance and SC Liability Tracking
|
|
||||||
# Format: ISO timestamp, event_type, EUR_change, total_EUR, total_SC, SC_value_EUR, ratio, notes, reference
|
|
||||||
# The 3x Rule: sc_liability_eur must be ≤ 3x total_eur_balance
|
|
||||||
2025-01-15T00:00:00Z,INIT,0,0,0,0,0.0,Treasury initialized - Smartup Zero launch,system-init
|
|
||||||
2025-08-04T17:00:00Z,PENDING_LOGGED,0,0,0,0,0.0,82200 SC pending validation - not yet liability,comprehensive-founding-audit
|
|
||||||
# NOTE: Pending SC (82,200) tracked separately until validated
|
|
||||||
# Current liability: €0 (no validated SC yet)
|
|
||||||
# Contingent liability: €82,200 (if all pending SC validated)
|
|
||||||
2025-08-05T17:15:00Z,SC_MINTED,0,0,170,170,0.0,Task 6_1_3_0 effort-based SC awards validated,6_1_3_0
|
|
||||||
2025-08-05T21:15:00Z,SC_DESTROYED,0,0,153,153,0.0,Claude SC destroyed - system integrity correction,system-correction
|
|
|
|
@ -1,6 +0,0 @@
|
||||||
owner_id,display_name,license_type,license_date,current_sk,voting_weight,status,team_memberships,role_assignments,seniority_levels,last_updated
|
|
||||||
# Extended Book of Owners with Organizational Structure
|
|
||||||
# team_memberships: comma-separated list (e.g., "3_1_leadership_team,3_2_design_team")
|
|
||||||
# role_assignments: comma-separated list (e.g., "4_1_1_founding_entrepreneur,4_2_3_backend_lead")
|
|
||||||
# seniority_levels: comma-separated list matching roles (e.g., "senior,junior")
|
|
||||||
001,robbert_founder,work,2025-08-04T14:37:16.470130Z,0,1.00,active,3_1_leadership_team,4_1_1_founding_entrepreneur,senior,2025-08-04T14:37:16.470130Z
|
|
Can't render this file because it has a wrong number of fields in line 2.
|
|
@ -1,2 +0,0 @@
|
||||||
timestamp,owner_id,transaction_type,from_license,to_license,payment_eur,upgrade_reason,reference,approver
|
|
||||||
2025-08-04T14:37:16.470130Z,001,FOUNDER,,work,0,founding_entrepreneur,system-init,smartup-zero-launch
|
|
|
|
@ -1,45 +0,0 @@
|
||||||
# Smartup Credits (SC) Rate Structure
|
|
||||||
# 1 SC = 1 EUR claim on treasury
|
|
||||||
# Updated: 2025-01-15
|
|
||||||
|
|
||||||
# Standard Task Rates
|
|
||||||
task_rates:
|
|
||||||
small_task: 25 # 1-2 hours work
|
|
||||||
medium_task: 50 # 3-4 hours work
|
|
||||||
large_task: 100 # 5-8 hours work
|
|
||||||
complex_task: 200 # 1-2 days work
|
|
||||||
|
|
||||||
# ADM Triangle Split (Attacker/Defender Model)
|
|
||||||
adm_split:
|
|
||||||
attacker_percentage: 90 # Senior contributor doing main work
|
|
||||||
defender_percentage: 10 # Junior contributor learning + reviewing
|
|
||||||
midfielder_percentage: 0 # Engelbot handles automatically
|
|
||||||
|
|
||||||
# Founding Work Audit Rates (Retroactive)
|
|
||||||
founding_work_rates:
|
|
||||||
research_hour: 25 # Historical R&D and investigation
|
|
||||||
planning_hour: 25 # Business plan and strategy creation
|
|
||||||
coding_hour: 30 # Technical development and prototyping
|
|
||||||
writing_hour: 20 # Documentation and content creation
|
|
||||||
governance_hour: 25 # Smartup model design and legal setup
|
|
||||||
|
|
||||||
# Special Contribution Rates
|
|
||||||
special_rates:
|
|
||||||
team_captain_monthly: 100 # Monthly leadership bonus
|
|
||||||
mission_leader_bonus: 50 # Per completed objective
|
|
||||||
emergency_fix: 150 # Critical bug fixes
|
|
||||||
community_building: 75 # Outreach and recruitment
|
|
||||||
|
|
||||||
# Phase-Based Multipliers
|
|
||||||
phase_multipliers:
|
|
||||||
validation: 1.0 # Standard rates during proof phase
|
|
||||||
design: 1.1 # 10% bonus during intensive design
|
|
||||||
production: 1.2 # 20% bonus during crunch time
|
|
||||||
organization: 1.0 # Back to standard for stable operations
|
|
||||||
|
|
||||||
# Treasury Protection Rules
|
|
||||||
treasury_rules:
|
|
||||||
max_outstanding_multiplier: 3 # Outstanding SC ≤ 3x cash treasury
|
|
||||||
founding_work_cap: 10000 # Maximum retroactive SC for entrepreneur
|
|
||||||
daily_mint_limit: 500 # Max SC mintable per person per day
|
|
||||||
requires_defender_approval: true
|
|
|
@ -1,70 +0,0 @@
|
||||||
# Social Karma (SK) Award Structure
|
|
||||||
# Non-transferable reputation currency
|
|
||||||
# Updated: 2025-01-15
|
|
||||||
|
|
||||||
# SK Award Categories
|
|
||||||
karma_awards:
|
|
||||||
# Code & Technical Quality
|
|
||||||
code_review: 5 # Reviewing PRs and providing feedback
|
|
||||||
bug_find: 10 # Finding and reporting bugs
|
|
||||||
documentation: 15 # Writing guides and technical docs
|
|
||||||
|
|
||||||
# Community Building
|
|
||||||
mentoring_session: 10 # One-on-one help with newcomers
|
|
||||||
mentoring_weekly: 5 # Ongoing mentorship (awarded weekly)
|
|
||||||
conflict_resolution: 25 # Successfully mediating disputes
|
|
||||||
onboarding_help: 8 # Helping new members navigate
|
|
||||||
|
|
||||||
# Governance & Leadership
|
|
||||||
governance_participation: 20 # Leading discussions in General Forum
|
|
||||||
proposal_accepted: 20 # Successful proposals that pass votes
|
|
||||||
meeting_facilitation: 15 # Running team meetings effectively
|
|
||||||
cross_team_coordination: 12 # Bridging different teams
|
|
||||||
|
|
||||||
# Mission Completion
|
|
||||||
objective_completion: 15 # Completing mission objectives
|
|
||||||
deadline_hit: 10 # Meeting critical deadlines
|
|
||||||
quality_delivery: 12 # Exceptional work quality recognition
|
|
||||||
|
|
||||||
# SK Privilege Thresholds
|
|
||||||
privilege_thresholds:
|
|
||||||
propose_in_forum: 50 # Can create binding vote proposals
|
|
||||||
apply_team_captain: 100 # Eligible for team leadership roles
|
|
||||||
lead_missions: 200 # Can be assigned as Mission Leader
|
|
||||||
join_leadership_team: 500 # Eligible for Leadership Team
|
|
||||||
|
|
||||||
# Voting Weight (SK enhances but doesn't replace democracy)
|
|
||||||
voting_weight:
|
|
||||||
base_vote: 1.0 # Everyone gets 1 vote regardless
|
|
||||||
sk_bonus_max: 1.5 # Maximum vote weight with high SK
|
|
||||||
sk_bonus_threshold: 500 # SK needed for max voting bonus
|
|
||||||
calculation: "min(1.5, 1 + (sk_points / 1000))"
|
|
||||||
|
|
||||||
# SK Decay Mechanism (prevents founder entrenchment)
|
|
||||||
decay_rules:
|
|
||||||
monthly_decay_rate: 0.10 # 10% monthly decay
|
|
||||||
minimum_floor: 0 # Can decay to zero (stay active!)
|
|
||||||
grace_period_days: 30 # No decay for first month after earning
|
|
||||||
activity_bonus: 5 # Monthly bonus for active participation
|
|
||||||
|
|
||||||
# Anti-Gaming Measures
|
|
||||||
validation_rules:
|
|
||||||
cannot_buy: true # No amount of money gets you SK
|
|
||||||
cannot_transfer: true # Your reputation is yours alone
|
|
||||||
cannot_hoard: true # Use influence or lose it to decay
|
|
||||||
peer_review_required: true # SK awards need defender confirmation
|
|
||||||
|
|
||||||
# SK Sources (who can award SK)
|
|
||||||
award_sources:
|
|
||||||
peer_recognition: true # Team members award each other
|
|
||||||
captain_awards: true # Team Captains can award their team
|
|
||||||
leadership_awards: true # Leadership Team for exceptional cases
|
|
||||||
community_votes: true # General Forum for major contributions
|
|
||||||
automated_systems: false # No bot-awarded SK (human judgment only)
|
|
||||||
|
|
||||||
# Monthly SK Budget (prevents inflation)
|
|
||||||
team_budgets:
|
|
||||||
per_team_monthly: 200 # Each team can award 200 SK/month
|
|
||||||
leadership_monthly: 500 # Leadership Team additional budget
|
|
||||||
community_monthly: 300 # General Forum discretionary awards
|
|
||||||
rollover_limit: 0.5 # Unused budget 50% carries to next month
|
|
|
@ -1,105 +0,0 @@
|
||||||
# License System Policies
|
|
||||||
# Updated: 2025-01-15
|
|
||||||
|
|
||||||
# License Types and Capabilities
|
|
||||||
license_capabilities:
|
|
||||||
campaign:
|
|
||||||
can_earn_sk: true
|
|
||||||
can_earn_sc: false
|
|
||||||
sk_categories: ["community_building", "governance_participation", "mentoring_help"]
|
|
||||||
max_daily_sk: 25
|
|
||||||
voting_rights: true
|
|
||||||
forum_access: "1_general_forum"
|
|
||||||
|
|
||||||
watch:
|
|
||||||
can_earn_sk: true
|
|
||||||
can_earn_sc: false
|
|
||||||
sk_categories: ["all_except_leadership"]
|
|
||||||
max_daily_sk: 50
|
|
||||||
voting_rights: true
|
|
||||||
forum_access: "1_general_forum,limited_2_workplace"
|
|
||||||
|
|
||||||
work:
|
|
||||||
can_earn_sk: true
|
|
||||||
can_earn_sc: true
|
|
||||||
sk_categories: ["all"]
|
|
||||||
max_daily_sk: 100
|
|
||||||
max_daily_sc: 500
|
|
||||||
voting_rights: true
|
|
||||||
forum_access: "all_tiers"
|
|
||||||
|
|
||||||
organizational:
|
|
||||||
can_earn_sk: true
|
|
||||||
can_earn_sc: true
|
|
||||||
sk_categories: ["all"]
|
|
||||||
max_daily_sk: 100
|
|
||||||
max_daily_sc: 500
|
|
||||||
voting_rights: true
|
|
||||||
voting_weight_bonus: 0 # Same as individual, no special treatment
|
|
||||||
forum_access: "all_tiers"
|
|
||||||
|
|
||||||
# Automatic Upgrade Rules
|
|
||||||
upgrade_thresholds:
|
|
||||||
campaign_to_watch:
|
|
||||||
sk_required: 100
|
|
||||||
additional_requirements: []
|
|
||||||
approval_needed: false
|
|
||||||
notification_required: true
|
|
||||||
|
|
||||||
watch_to_work:
|
|
||||||
payment_required: 200 # EUR
|
|
||||||
sk_minimum: 50 # Must demonstrate some engagement
|
|
||||||
approval_needed: false
|
|
||||||
|
|
||||||
work_to_organizational:
|
|
||||||
payment_required: 5000 # EUR
|
|
||||||
sk_minimum: 200 # Must be proven contributor
|
|
||||||
approval_needed: true # Community/Leadership review
|
|
||||||
|
|
||||||
# License Pricing (increases by phase)
|
|
||||||
pricing:
|
|
||||||
validation_phase:
|
|
||||||
campaign: 0
|
|
||||||
watch: 100
|
|
||||||
work: 200
|
|
||||||
organizational: 5000
|
|
||||||
|
|
||||||
design_phase:
|
|
||||||
campaign: 0
|
|
||||||
watch: 200
|
|
||||||
work: 400
|
|
||||||
organizational: 10000
|
|
||||||
|
|
||||||
production_phase:
|
|
||||||
campaign: 0
|
|
||||||
watch: 400
|
|
||||||
work: 800
|
|
||||||
organizational: 20000
|
|
||||||
|
|
||||||
organization_phase:
|
|
||||||
campaign: 0
|
|
||||||
watch: 800
|
|
||||||
work: 1600
|
|
||||||
organizational: 40000
|
|
||||||
|
|
||||||
# Identity and Privacy
|
|
||||||
identity_rules:
|
|
||||||
alias_required: false
|
|
||||||
real_name_public: false
|
|
||||||
can_change_alias: true
|
|
||||||
alias_change_limit: 2 # per year
|
|
||||||
privacy_levels: ["full_public", "alias_only", "anonymous"]
|
|
||||||
|
|
||||||
# Voting Weight Calculation
|
|
||||||
voting_weight:
|
|
||||||
base_weight: 1.0
|
|
||||||
sk_bonus_formula: "min(1.5, 1 + (current_sk / 1000))"
|
|
||||||
max_weight: 1.5
|
|
||||||
organizational_bonus: 0 # No special voting power for big payments
|
|
||||||
|
|
||||||
# Status Management
|
|
||||||
status_rules:
|
|
||||||
inactive_threshold_days: 90 # No activity = inactive status
|
|
||||||
suspension_requires: "leadership_vote"
|
|
||||||
reactivation_requires: "login_activity"
|
|
||||||
permanent_ban_requires: "community_vote"
|
|
|
@ -1,185 +0,0 @@
|
||||||
# Organizational Structure Definitions
|
|
||||||
# Updated: 2025-08-04
|
|
||||||
|
|
||||||
# Team Definitions (Layer 3)
|
|
||||||
teams:
|
|
||||||
3_1_leadership_team:
|
|
||||||
name: "Leadership Team"
|
|
||||||
description: "Strategic coordination and oversight"
|
|
||||||
min_license: "work"
|
|
||||||
min_sk: 200
|
|
||||||
requires_election: true
|
|
||||||
|
|
||||||
3_2_design_team:
|
|
||||||
name: "Design Team"
|
|
||||||
description: "UX/UI design and user research"
|
|
||||||
min_license: "work"
|
|
||||||
min_sk: 50
|
|
||||||
requires_election: false
|
|
||||||
|
|
||||||
3_3_development_team:
|
|
||||||
name: "Development Team"
|
|
||||||
description: "Technical implementation and architecture"
|
|
||||||
min_license: "work"
|
|
||||||
min_sk: 50
|
|
||||||
requires_election: false
|
|
||||||
|
|
||||||
3_4_business_team:
|
|
||||||
name: "Business Team"
|
|
||||||
description: "Strategy, partnerships, and sustainability"
|
|
||||||
min_license: "work"
|
|
||||||
min_sk: 75
|
|
||||||
requires_election: false
|
|
||||||
|
|
||||||
3_5_media_team:
|
|
||||||
name: "Media Team"
|
|
||||||
description: "Content creation and community outreach"
|
|
||||||
min_license: "campaign" # Special: Campaign license holders can join
|
|
||||||
min_sk: 25
|
|
||||||
requires_election: false
|
|
||||||
|
|
||||||
3_6_science_team:
|
|
||||||
name: "Science Team"
|
|
||||||
description: "Research validation and peer review"
|
|
||||||
min_license: "work"
|
|
||||||
min_sk: 100
|
|
||||||
requires_election: true # High standards for scientific oversight
|
|
||||||
|
|
||||||
3_7_operational_team:
|
|
||||||
name: "Operational Team"
|
|
||||||
description: "Process design and workflow management"
|
|
||||||
min_license: "work"
|
|
||||||
min_sk: 75
|
|
||||||
requires_election: false
|
|
||||||
|
|
||||||
# Role Definitions (Layer 4)
|
|
||||||
roles:
|
|
||||||
# Leadership Team Roles (4_1_X)
|
|
||||||
4_1_1_founding_entrepreneur:
|
|
||||||
name: "Founding Entrepreneur"
|
|
||||||
team: "3_1_leadership_team"
|
|
||||||
description: "Project initiator and strategic vision"
|
|
||||||
seniority: "senior"
|
|
||||||
unique: true # Only one person can hold this role
|
|
||||||
|
|
||||||
4_1_2_tc_design_team:
|
|
||||||
name: "Design Team Captain"
|
|
||||||
team: "3_1_leadership_team"
|
|
||||||
description: "Leadership representative for design team"
|
|
||||||
seniority: "senior"
|
|
||||||
unique: true
|
|
||||||
|
|
||||||
4_1_3_tc_development_team:
|
|
||||||
name: "Development Team Captain"
|
|
||||||
team: "3_1_leadership_team"
|
|
||||||
description: "Leadership representative for development team"
|
|
||||||
seniority: "senior"
|
|
||||||
unique: true
|
|
||||||
|
|
||||||
# Design Team Roles (4_2_X)
|
|
||||||
4_2_1_ux_researcher:
|
|
||||||
name: "UX Researcher"
|
|
||||||
team: "3_2_design_team"
|
|
||||||
description: "User research and testing"
|
|
||||||
seniority: "flexible" # Can be junior or senior
|
|
||||||
|
|
||||||
4_2_2_ui_designer:
|
|
||||||
name: "UI Designer"
|
|
||||||
team: "3_2_design_team"
|
|
||||||
description: "Interface design and prototyping"
|
|
||||||
seniority: "flexible"
|
|
||||||
|
|
||||||
4_2_3_brand_designer:
|
|
||||||
name: "Brand Designer"
|
|
||||||
team: "3_2_design_team"
|
|
||||||
description: "Visual identity and marketing materials"
|
|
||||||
seniority: "flexible"
|
|
||||||
|
|
||||||
# Development Team Roles (4_3_X)
|
|
||||||
4_3_1_backend_developer:
|
|
||||||
name: "Backend Developer"
|
|
||||||
team: "3_3_development_team"
|
|
||||||
description: "Server-side development and APIs"
|
|
||||||
seniority: "flexible"
|
|
||||||
|
|
||||||
4_3_2_frontend_developer:
|
|
||||||
name: "Frontend Developer"
|
|
||||||
team: "3_3_development_team"
|
|
||||||
description: "Client-side development and interfaces"
|
|
||||||
seniority: "flexible"
|
|
||||||
|
|
||||||
4_3_3_mobile_developer:
|
|
||||||
name: "Mobile Developer"
|
|
||||||
team: "3_3_development_team"
|
|
||||||
description: "iOS/Android app development"
|
|
||||||
seniority: "flexible"
|
|
||||||
|
|
||||||
4_3_4_devops_engineer:
|
|
||||||
name: "DevOps Engineer"
|
|
||||||
team: "3_3_development_team"
|
|
||||||
description: "Infrastructure and deployment automation"
|
|
||||||
seniority: "flexible"
|
|
||||||
|
|
||||||
# Media Team Roles (4_5_X) - Special: Campaign license holders can join
|
|
||||||
4_5_1_content_creator:
|
|
||||||
name: "Content Creator"
|
|
||||||
team: "3_5_media_team"
|
|
||||||
description: "Blog posts, articles, and documentation"
|
|
||||||
seniority: "flexible"
|
|
||||||
min_license: "campaign"
|
|
||||||
|
|
||||||
4_5_2_social_media_manager:
|
|
||||||
name: "Social Media Manager"
|
|
||||||
team: "3_5_media_team"
|
|
||||||
description: "Community outreach and engagement"
|
|
||||||
seniority: "flexible"
|
|
||||||
min_license: "campaign"
|
|
||||||
|
|
||||||
# Seniority Rules
|
|
||||||
seniority_rules:
|
|
||||||
junior:
|
|
||||||
sc_percentage: 10 # Gets 10% of task SC (learning while earning)
|
|
||||||
sk_multiplier: 1.0 # Standard SK awards
|
|
||||||
can_be_defender: true
|
|
||||||
can_be_attacker: true
|
|
||||||
voting_weight: 1.0
|
|
||||||
|
|
||||||
senior:
|
|
||||||
sc_percentage: 90 # Gets 90% of task SC (teaching while earning)
|
|
||||||
sk_multiplier: 1.2 # 20% bonus SK for mentoring
|
|
||||||
can_be_defender: true
|
|
||||||
can_be_attacker: true
|
|
||||||
can_lead_missions: true
|
|
||||||
voting_weight: 1.0 # Seniority doesn't affect democratic voting
|
|
||||||
|
|
||||||
# Role Assignment Rules
|
|
||||||
assignment_rules:
|
|
||||||
max_roles_per_person: 3 # Prevent over-assignment
|
|
||||||
max_teams_per_person: 2 # Focus over spreading thin
|
|
||||||
captain_election_required: true # Team Captains elected by team
|
|
||||||
leadership_team_approval: ["4_1_2_tc_design_team", "4_1_3_tc_development_team"] # Need approval
|
|
||||||
|
|
||||||
# Team Access by License
|
|
||||||
license_team_access:
|
|
||||||
campaign:
|
|
||||||
allowed_teams: ["3_5_media_team"]
|
|
||||||
can_apply_roles: true
|
|
||||||
sk_earning_limit: 50
|
|
||||||
|
|
||||||
watch:
|
|
||||||
allowed_teams: [] # Can observe but not join
|
|
||||||
can_apply_roles: false
|
|
||||||
sk_earning_limit: 25
|
|
||||||
|
|
||||||
work:
|
|
||||||
allowed_teams: ["3_2_design_team", "3_3_development_team", "3_4_business_team", "3_5_media_team", "3_7_operational_team"]
|
|
||||||
can_apply_roles: true
|
|
||||||
sk_earning_limit: 100
|
|
||||||
leadership_eligible: true # Can be elected to leadership roles
|
|
||||||
|
|
||||||
organizational:
|
|
||||||
allowed_teams: ["3_2_design_team", "3_3_development_team", "3_4_business_team", "3_5_media_team", "3_7_operational_team"]
|
|
||||||
can_apply_roles: true
|
|
||||||
sk_earning_limit: 100
|
|
||||||
leadership_eligible: true
|
|
||||||
voting_weight_bonus: 0 # No special voting power despite higher payment
|
|
|
@ -1,44 +0,0 @@
|
||||||
# Effort-Based Work Assessment Framework
|
|
||||||
# Version: 0.1 (Prototype for 6_0_3_0)
|
|
||||||
# Updated: 2025-01-16
|
|
||||||
|
|
||||||
session_evaluation:
|
|
||||||
attacker_effort:
|
|
||||||
scoring_range: "1-10"
|
|
||||||
criteria:
|
|
||||||
- "time_invested: Hours logged vs task complexity"
|
|
||||||
- "approach_quality: Systematic vs random problem-solving"
|
|
||||||
- "communication: Clear progress updates, blockers identified"
|
|
||||||
- "handoff_quality: Good briefing for next contributor"
|
|
||||||
- "collaboration: Effective mentoring of defender"
|
|
||||||
|
|
||||||
defender_learning:
|
|
||||||
scoring_range: "1-10"
|
|
||||||
criteria:
|
|
||||||
- "engagement_level: Asked questions, participated actively"
|
|
||||||
- "skill_acquisition: Demonstrated understanding of new concepts"
|
|
||||||
- "contribution: Provided valuable input beyond observation"
|
|
||||||
- "knowledge_transfer: Can explain what was learned"
|
|
||||||
|
|
||||||
collaborative_quality:
|
|
||||||
scoring_range: "1-10"
|
|
||||||
criteria:
|
|
||||||
- "adm_triangle_function: All three roles (A/D/Engelbot) working effectively"
|
|
||||||
- "problem_solving: Used collective intelligence well"
|
|
||||||
- "documentation: Session well-recorded for future contributors"
|
|
||||||
- "handoff_preparation: Next contributor can pick up easily"
|
|
||||||
|
|
||||||
payout_calculation:
|
|
||||||
excellent_session: "95-100%" # High scores across all areas (27-30 total)
|
|
||||||
good_session: "80-95%" # Solid effort, good collaboration (24-27 total)
|
|
||||||
adequate_session: "60-80%" # Some issues but genuine work done (18-24 total)
|
|
||||||
poor_session: "20-60%" # Problems with effort or collaboration (6-18 total)
|
|
||||||
failed_session: "0-20%" # No real work attempted (0-6 total)
|
|
||||||
|
|
||||||
# Special cases for nuanced assessment
|
|
||||||
partial_payout_scenarios:
|
|
||||||
time_vs_progress: "2 hours on 4-hour task with major breakthrough = full payout"
|
|
||||||
learning_intensive: "Complex task where defender learning is primary value"
|
|
||||||
research_dead_end: "Thorough investigation proving approach won't work"
|
|
||||||
handoff_quality: "Incomplete work but excellent documentation for next person"
|
|
||||||
breakthrough_discovery: "Unexpected insights that advance the mission significantly"
|
|
|
@ -1,37 +0,0 @@
|
||||||
# Mission Leader Role Definition
|
|
||||||
# Version: 0.1 (Prototype for 6_0_3_0)
|
|
||||||
# Updated: 2025-01-16
|
|
||||||
|
|
||||||
role_definition:
|
|
||||||
title: "Mission Leader (Field Commander)"
|
|
||||||
core_responsibility: "Ensure objective has all roles needed for progress"
|
|
||||||
shift_max: 8_hours
|
|
||||||
scope: "Real-time coordination of live work sessions"
|
|
||||||
authority: "Recommend SC payouts (60-100%), staff roles, coordinate handoffs"
|
|
||||||
reports_to: "Team Captain (strategic oversight)"
|
|
||||||
|
|
||||||
qualification_requirements:
|
|
||||||
minimum_sk: 100 # Proven community contribution
|
|
||||||
team_captain_appointment: true # TC must approve mission leaders
|
|
||||||
cross_team_experience: true # Understanding of multiple disciplines
|
|
||||||
timezone_availability: true # Commit to specific coverage hours
|
|
||||||
|
|
||||||
responsibilities:
|
|
||||||
primary_staffing: "All critical roles for objective progress are filled"
|
|
||||||
session_coordination: "Brief incoming contributors, manage handoffs"
|
|
||||||
effort_assessment: "Evaluate work sessions, recommend SC payouts"
|
|
||||||
escalation: "Alert TC when roles cannot be staffed or issues arise"
|
|
||||||
documentation: "Maintain session logs, progress reports"
|
|
||||||
|
|
||||||
assessment_authority:
|
|
||||||
can_recommend: "60-100% of budgeted SC based on effort quality"
|
|
||||||
must_document: "Rationale for all payout recommendations"
|
|
||||||
escalation_required: "Payouts below 60% need TC approval"
|
|
||||||
cannot_override: "Team Captain has final approval authority"
|
|
||||||
|
|
||||||
# Bootstrap phase (single captain scenario)
|
|
||||||
bootstrap_rules:
|
|
||||||
self_assessment_allowed: true # When TC is also mission leader
|
|
||||||
transparency_required: true # All assessments documented publicly
|
|
||||||
community_review: true # Subject to lazy consensus validation
|
|
||||||
conservative_bias: true # When in doubt, recommend lower payout
|
|
|
@ -1,116 +0,0 @@
|
||||||
# Currency Ledger Validation Rules
|
|
||||||
# Ensures system integrity and democratic oversight
|
|
||||||
# Updated: 2025-01-15
|
|
||||||
|
|
||||||
# Transaction Validation
|
|
||||||
transaction_rules:
|
|
||||||
requires_defender_approval: true
|
|
||||||
requires_captain_approval: true # Team Captain must approve team transactions
|
|
||||||
requires_evidence: true # Link to completed work required
|
|
||||||
max_transaction_age_days: 7 # Must be processed within week
|
|
||||||
retroactive_limit_days: 30 # Can't claim SC for work >30 days old
|
|
||||||
|
|
||||||
# Democratic Oversight
|
|
||||||
approval_process:
|
|
||||||
small_transactions_threshold: 100 # SC amounts ≤ 100 need team approval
|
|
||||||
large_transactions_threshold: 200 # SC amounts > 200 need community review
|
|
||||||
founding_work_review_days: 7 # Community review period for founding audit
|
|
||||||
binding_vote_threshold: 3 # Major issues need General Forum vote
|
|
||||||
lazy_consensus_hours: 48 # 48h for community feedback
|
|
||||||
|
|
||||||
# License Integration (Progressive Transparency)
|
|
||||||
license_requirements:
|
|
||||||
campaign_license:
|
|
||||||
can_view_ledger: true
|
|
||||||
can_propose_transactions: false
|
|
||||||
can_approve_transactions: false
|
|
||||||
watch_license:
|
|
||||||
can_view_ledger: true
|
|
||||||
can_propose_transactions: false
|
|
||||||
can_approve_transactions: false
|
|
||||||
work_license:
|
|
||||||
can_view_ledger: true
|
|
||||||
can_propose_transactions: true # Can claim SC for completed tasks
|
|
||||||
can_approve_transactions: false
|
|
||||||
organizational_license:
|
|
||||||
can_view_ledger: true
|
|
||||||
can_propose_transactions: true
|
|
||||||
can_approve_transactions: false # No special approval powers
|
|
||||||
|
|
||||||
# Treasury Protection
|
|
||||||
treasury_validation:
|
|
||||||
max_outstanding_ratio: 3.0 # Outstanding SC ≤ 3x treasury EUR
|
|
||||||
min_treasury_reserve: 1000 # Always keep €1000 emergency reserve
|
|
||||||
redemption_window_trigger: 0.8 # Open redemption at 80% treasury capacity
|
|
||||||
fifo_redemption: true # First earned, first redeemed
|
|
||||||
|
|
||||||
# Quality Assurance
|
|
||||||
quality_rules:
|
|
||||||
requires_task_reference: true # Must link to Forgejo issue/task
|
|
||||||
requires_time_estimate: true # Estimate vs actual hours tracking
|
|
||||||
requires_defender_review: true # Code/work quality confirmation
|
|
||||||
allows_partial_payments: true # Can pay in installments for large tasks
|
|
||||||
|
|
||||||
# Anti-Fraud Measures
|
|
||||||
security_rules:
|
|
||||||
max_daily_sc_per_person: 500 # Prevents gaming
|
|
||||||
requires_captain_countersign: true # Team Captain must approve team payments
|
|
||||||
founder_cap_total: 10000 # Max retroactive SC for any founder
|
|
||||||
community_veto_window: 48 # Hours for community to object
|
|
||||||
permanent_public_record: true # All transactions permanent in git history
|
|
||||||
|
|
||||||
# Integration Rules
|
|
||||||
technical_integration:
|
|
||||||
forgejo_issue_required: true # Must reference actual task
|
|
||||||
element_notification: true # Announce all awards in General Forum
|
|
||||||
engelbot_automation: true # Bot handles routine validations
|
|
||||||
open_collective_sync: true # Treasury sync with OC EU
|
|
||||||
|
|
||||||
# Phase-Specific Rules
|
|
||||||
phase_rules:
|
|
||||||
validation_phase:
|
|
||||||
founding_work_audit: true # Special process for entrepreneur work
|
|
||||||
community_vote_required: true # Major SC awards need approval
|
|
||||||
conservative_rates: true # Start with proven rates
|
|
||||||
design_phase:
|
|
||||||
increased_complexity_bonus: true # Higher rates for complex design work
|
|
||||||
science_team_veto: true # Science team can halt inappropriate awards
|
|
||||||
cross_team_collaboration_bonus: true
|
|
||||||
production_phase:
|
|
||||||
crunch_time_multiplier: 1.2 # 20% bonus during intensive development
|
|
||||||
quality_gates: true # Extra validation for production code
|
|
||||||
user_feedback_integration: true # Bonus for incorporating
|
|
||||||
|
|
||||||
# Founding Work and Vesting Policies
|
|
||||||
founding_work_policies:
|
|
||||||
max_self_validation_sc: 0 # Founders cannot validate own work
|
|
||||||
requires_team_captain_review: true
|
|
||||||
requires_community_vote: true
|
|
||||||
max_founding_work_sc: 10000 # Total cap remains
|
|
||||||
|
|
||||||
# Vesting Schedule for Large Founding Awards
|
|
||||||
vesting_schedule:
|
|
||||||
design_phase:
|
|
||||||
percentage: 0.30 # 30% released when teams form
|
|
||||||
trigger: "2+ Team Captains recruited"
|
|
||||||
validation: "Team Captain review + Leadership vote"
|
|
||||||
production_phase:
|
|
||||||
percentage: 0.40 # 40% released at community maturity
|
|
||||||
trigger: "50+ active owners OR working MVP"
|
|
||||||
validation: "Community binding vote"
|
|
||||||
organization_phase:
|
|
||||||
percentage: 0.30 # 30% released at market success
|
|
||||||
trigger: "Revenue milestone OR market launch"
|
|
||||||
validation: "Automatic vesting"
|
|
||||||
|
|
||||||
# Validation Requirements
|
|
||||||
validation_thresholds:
|
|
||||||
small_pending_sc: 500 # <500 SC needs 1 Team Captain
|
|
||||||
large_pending_sc: 2000 # >2000 SC needs community vote
|
|
||||||
founder_pending_sc: 1 # Any founder SC needs extra validation
|
|
||||||
|
|
||||||
# Pending SC Transaction Rules
|
|
||||||
pending_sc_rules:
|
|
||||||
max_pending_duration_days: 365 # Must be validated within 1 year
|
|
||||||
auto_reject_threshold: 730 # Auto-reject after 2 years pending
|
|
||||||
validation_evidence_required: true # Must link to verifiable work
|
|
|
@ -1,156 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Destroy Smartup Credits - Personal Work Receipt Management
|
|
||||||
Allows SC holders to destroy their own SC for system integrity or personal choice
|
|
||||||
Version: 0.1 - System integrity correction capability
|
|
||||||
"""
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import csv
|
|
||||||
from datetime import datetime
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
class SCDestroyer:
|
|
||||||
def __init__(self):
|
|
||||||
self.base_path = Path(__file__).parent.parent
|
|
||||||
|
|
||||||
def get_sc_balance(self, owner_alias):
|
|
||||||
"""Calculate current SC balance for owner"""
|
|
||||||
sc_file = self.base_path / "ledger" / "smartup-credits" / "transactions.csv"
|
|
||||||
|
|
||||||
balance = 0
|
|
||||||
with open(sc_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
if not row['timestamp'].startswith('#') and row['timestamp'] != '':
|
|
||||||
if row['to'] == owner_alias and row['type'] == 'SC':
|
|
||||||
balance += int(row['amount'])
|
|
||||||
elif row['from'] == owner_alias and row['type'] in ['REDEEM', 'DESTROY']:
|
|
||||||
balance -= int(row['amount'])
|
|
||||||
|
|
||||||
return balance
|
|
||||||
|
|
||||||
def validate_destruction(self, owner_alias, amount, destroyer_alias):
|
|
||||||
"""Validate destruction request"""
|
|
||||||
current_balance = self.get_sc_balance(owner_alias)
|
|
||||||
|
|
||||||
if amount > current_balance:
|
|
||||||
raise ValueError(f"Cannot destroy {amount} SC - {owner_alias} only has {current_balance} SC")
|
|
||||||
|
|
||||||
# For now, only allow self-destruction (future: democratic validation for large amounts)
|
|
||||||
if owner_alias != destroyer_alias:
|
|
||||||
raise ValueError(f"Only SC owner can destroy their own SC. {owner_alias} != {destroyer_alias}")
|
|
||||||
|
|
||||||
return current_balance
|
|
||||||
|
|
||||||
def create_destroy_transaction(self, owner_alias, amount, reason, destroyer_alias):
|
|
||||||
"""Create DESTROY transaction in SC ledger"""
|
|
||||||
sc_file = self.base_path / "ledger" / "smartup-credits" / "transactions.csv"
|
|
||||||
|
|
||||||
destroy_entry = [
|
|
||||||
datetime.now().isoformat(),
|
|
||||||
'DESTROY',
|
|
||||||
amount,
|
|
||||||
owner_alias, # from (person losing SC)
|
|
||||||
'', # to (nobody gets it)
|
|
||||||
'sc-destruction',
|
|
||||||
f"SC destroyed: {reason}",
|
|
||||||
destroyer_alias,
|
|
||||||
'validation',
|
|
||||||
'system-integrity'
|
|
||||||
]
|
|
||||||
|
|
||||||
with open(sc_file, 'a', newline='') as f:
|
|
||||||
writer = csv.writer(f)
|
|
||||||
writer.writerow(destroy_entry)
|
|
||||||
|
|
||||||
def update_treasury(self, amount_destroyed, reason):
|
|
||||||
"""Update treasury to reflect reduced SC liability"""
|
|
||||||
treasury_file = self.base_path / "ledger" / "treasury" / "balance.csv"
|
|
||||||
|
|
||||||
# Get current treasury state
|
|
||||||
current_sc_outstanding = 0
|
|
||||||
with open(treasury_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
if not row['timestamp'].startswith('#') and row['timestamp'] != '':
|
|
||||||
current_sc_outstanding = int(row['sc_outstanding'])
|
|
||||||
|
|
||||||
# Calculate new state
|
|
||||||
new_sc_outstanding = current_sc_outstanding - amount_destroyed
|
|
||||||
|
|
||||||
treasury_entry = [
|
|
||||||
datetime.now().isoformat(),
|
|
||||||
'SC_DESTROYED',
|
|
||||||
0, # no EUR change
|
|
||||||
0, # EUR balance unchanged
|
|
||||||
new_sc_outstanding,
|
|
||||||
new_sc_outstanding, # SC liability = SC outstanding when no treasury
|
|
||||||
0.0, # ratio
|
|
||||||
f"SC destroyed: {reason}",
|
|
||||||
'sc-destruction'
|
|
||||||
]
|
|
||||||
|
|
||||||
with open(treasury_file, 'a', newline='') as f:
|
|
||||||
writer = csv.writer(f)
|
|
||||||
writer.writerow(treasury_entry)
|
|
||||||
|
|
||||||
return new_sc_outstanding
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = argparse.ArgumentParser(
|
|
||||||
description="Destroy Smartup Credits for system integrity or personal choice"
|
|
||||||
)
|
|
||||||
parser.add_argument('--owner', required=True,
|
|
||||||
help='SC owner alias (who owns the SC)')
|
|
||||||
parser.add_argument('--amount', type=int, required=True,
|
|
||||||
help='Amount of SC to destroy')
|
|
||||||
parser.add_argument('--reason', required=True,
|
|
||||||
help='Reason for destruction (audit trail)')
|
|
||||||
parser.add_argument('--destroyer', required=True,
|
|
||||||
help='Who is performing the destruction (for validation)')
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
destroyer = SCDestroyer()
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Validate destruction
|
|
||||||
current_balance = destroyer.validate_destruction(args.owner, args.amount, args.destroyer)
|
|
||||||
|
|
||||||
print(f"🔍 DESTRUCTION VALIDATION")
|
|
||||||
print(f"Owner: {args.owner}")
|
|
||||||
print(f"Current Balance: {current_balance} SC")
|
|
||||||
print(f"Amount to Destroy: {args.amount} SC")
|
|
||||||
print(f"Remaining Balance: {current_balance - args.amount} SC")
|
|
||||||
print(f"Reason: {args.reason}")
|
|
||||||
print()
|
|
||||||
|
|
||||||
# Confirm destruction
|
|
||||||
confirm = input("⚠️ This action cannot be undone. Continue? (yes/no): ")
|
|
||||||
if confirm.lower() != 'yes':
|
|
||||||
print("❌ Destruction cancelled")
|
|
||||||
return
|
|
||||||
|
|
||||||
# Execute destruction
|
|
||||||
destroyer.create_destroy_transaction(args.owner, args.amount, args.reason, args.destroyer)
|
|
||||||
new_total = destroyer.update_treasury(args.amount, args.reason)
|
|
||||||
|
|
||||||
print(f"✅ SC DESTRUCTION COMPLETED")
|
|
||||||
print(f"🔥 {args.amount} SC destroyed for {args.owner}")
|
|
||||||
print(f"📊 Total SC Outstanding: {new_total} SC")
|
|
||||||
print(f"📝 Work trail preserved in session logs")
|
|
||||||
print(f"🔗 Audit trail: {args.reason}")
|
|
||||||
print()
|
|
||||||
print("🔧 Next Steps:")
|
|
||||||
print("1. Run generate-reports.py to verify updated balances")
|
|
||||||
print("2. Commit changes to preserve audit trail")
|
|
||||||
|
|
||||||
except ValueError as e:
|
|
||||||
print(f"❌ Validation Error: {e}")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ Unexpected Error: {e}")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
|
|
|
@ -1,218 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Generate MkDocs pages for public transparency
|
|
||||||
Converts CSV ledger data into beautiful web pages
|
|
||||||
"""
|
|
||||||
|
|
||||||
import csv
|
|
||||||
import os
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
def generate_book_of_owners_page():
|
|
||||||
"""Generate public Book of Owners page"""
|
|
||||||
|
|
||||||
book_file = os.path.join(os.path.dirname(__file__), '..', 'ownership', 'book-of-owners.csv')
|
|
||||||
output_file = os.path.join(os.path.dirname(__file__), '..', '..', 'docs', 'smartup-zero', 'book-of-owners.md')
|
|
||||||
|
|
||||||
with open(book_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
owners = [row for row in reader if row['owner_id'] and not row['owner_id'].startswith('#')]
|
|
||||||
|
|
||||||
content = f'''# 📖 Book of Owners
|
|
||||||
|
|
||||||
**Live transparency into Smartup Zero ownership and organizational structure**
|
|
||||||
|
|
||||||
*Last updated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Current Owners
|
|
||||||
|
|
||||||
| Owner ID | Display Name | License | Teams | Roles | SK | Status |
|
|
||||||
|----------|--------------|---------|-------|-------|----|---------| '''
|
|
||||||
|
|
||||||
for owner in owners:
|
|
||||||
content += f'''
|
|
||||||
| {owner['owner_id']} | **{owner['display_name']}** | `{owner['license_type']}` | {owner['team_memberships']} | {owner['role_assignments']} | {owner['current_sk']} | {owner['status']} |'''
|
|
||||||
|
|
||||||
content += f'''
|
|
||||||
|
|
||||||
## Organizational Statistics
|
|
||||||
|
|
||||||
- **Total Owners**: {len(owners)}
|
|
||||||
- **Active Contributors**: {len([o for o in owners if o['status'] == 'active'])}
|
|
||||||
- **Teams Formed**: {len(set([t.strip() for o in owners for t in o['team_memberships'].split(',') if t.strip()]))}
|
|
||||||
- **Roles Assigned**: {len(set([r.strip() for o in owners for r in o['role_assignments'].split(',') if r.strip()]))}
|
|
||||||
|
|
||||||
## License Distribution
|
|
||||||
|
|
||||||
'''
|
|
||||||
|
|
||||||
license_counts = {}
|
|
||||||
for owner in owners:
|
|
||||||
license_type = owner['license_type']
|
|
||||||
license_counts[license_type] = license_counts.get(license_type, 0) + 1
|
|
||||||
|
|
||||||
for license_type, count in license_counts.items():
|
|
||||||
content += f"- **{license_type.title()}**: {count} owners\n"
|
|
||||||
|
|
||||||
content += '''
|
|
||||||
|
|
||||||
## Democratic Principles
|
|
||||||
|
|
||||||
Every person listed above is an **equal co-owner** of Smartup Zero, regardless of license price paid. The license determines capabilities (what you can do), but every owner gets exactly **one vote** in governance decisions.
|
|
||||||
|
|
||||||
!!! info "Transparency Note"
|
|
||||||
This Book of Owners uses public aliases chosen by each owner. Real identities are kept private unless owners choose full public disclosure.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*This page automatically reflects the current state of `currency-ledger/ownership/book-of-owners.csv`*
|
|
||||||
'''
|
|
||||||
|
|
||||||
with open(output_file, 'w') as f:
|
|
||||||
f.write(content)
|
|
||||||
|
|
||||||
print(f"✅ Generated: docs/smartup-zero/book-of-owners.md")
|
|
||||||
|
|
||||||
def generate_financial_transparency_page():
|
|
||||||
"""Generate financial transparency page"""
|
|
||||||
|
|
||||||
output_file = os.path.join(os.path.dirname(__file__), '..', '..', 'docs', 'smartup-zero', 'financial-transparency.md')
|
|
||||||
|
|
||||||
live_sc = 0
|
|
||||||
pending_sc = 82200
|
|
||||||
treasury_eur = 0
|
|
||||||
|
|
||||||
content = f'''# 💰 Financial Transparency
|
|
||||||
|
|
||||||
**Complete transparency into Smartup Zero's financial health and currency system**
|
|
||||||
|
|
||||||
*Last updated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Current Financial Status
|
|
||||||
|
|
||||||
- 💶 **EUR Treasury**: €{treasury_eur:,.2f}
|
|
||||||
- 🪙 **Live Smartup Credits**: {live_sc:,} SC
|
|
||||||
- ⏳ **Pending Validation**: {pending_sc:,} SC
|
|
||||||
- ✅ **3x Rule Status**: COMPLIANT
|
|
||||||
|
|
||||||
## Founding Work Audit
|
|
||||||
|
|
||||||
The largest pending SC amount represents the **founding entrepreneur's 10-year work audit**:
|
|
||||||
|
|
||||||
| Vesting Tranche | Amount | Validation Required | Status |
|
|
||||||
|-----------------|--------|-------------------|---------|
|
|
||||||
| **Design Phase** | 24,660 SC | Team Captains + Leadership vote | ⏳ Pending |
|
|
||||||
| **Production Phase** | 32,880 SC | Community binding vote | ⏳ Pending |
|
|
||||||
| **Organization Phase** | 24,660 SC | Automatic at market launch | ⏳ Pending |
|
|
||||||
| **TOTAL** | **82,200 SC** | Democratic validation | **€0 current liability** |
|
|
||||||
|
|
||||||
!!! warning "Democratic Safeguard"
|
|
||||||
The founding entrepreneur **cannot validate their own work**. All 82,200 SC requires approval from future Team Captains and community votes, proving that Smartup Zero's "no special founders" principle is real and enforceable.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*Financial health: **EXCELLENT** - No current debt, pending awards tied to collective success*
|
|
||||||
'''
|
|
||||||
|
|
||||||
with open(output_file, 'w') as f:
|
|
||||||
f.write(content)
|
|
||||||
|
|
||||||
print(f"✅ Generated: docs/smartup-zero/financial-transparency.md")
|
|
||||||
|
|
||||||
def generate_currency_system_page():
|
|
||||||
"""Generate currency system explanation page"""
|
|
||||||
|
|
||||||
output_file = os.path.join(os.path.dirname(__file__), '..', '..', 'docs', 'smartup-zero', 'currency-system.md')
|
|
||||||
|
|
||||||
content = '''# 💱 Currency System
|
|
||||||
|
|
||||||
**How Smartup Zero's dual-currency economy works**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## The Dual Currency Model
|
|
||||||
|
|
||||||
- 🪙 **Smartup Credits (SC)**: 1 SC = €1 treasury claim, earned through work
|
|
||||||
- ❤️ **Social Karma (SK)**: Non-transferable reputation, earned through community building
|
|
||||||
|
|
||||||
## How to Earn Smartup Credits
|
|
||||||
|
|
||||||
### Task-Based Earning
|
|
||||||
- Small Task (1-2h): 25 SC
|
|
||||||
- Medium Task (3-4h): 50 SC
|
|
||||||
- Large Task (5-8h): 100 SC
|
|
||||||
- Complex Task (1-2 days): 200 SC
|
|
||||||
|
|
||||||
### Democratic Validation Process
|
|
||||||
1. Submit SC claim via pull request
|
|
||||||
2. Team Captain (Defender) reviews
|
|
||||||
3. Community lazy consensus (48h)
|
|
||||||
4. Merge = official SC award
|
|
||||||
|
|
||||||
## How to Earn Social Karma
|
|
||||||
|
|
||||||
| Activity | SK Award | Purpose |
|
|
||||||
|----------|----------|---------|
|
|
||||||
| Code Review | 5 SK | Quality assurance |
|
|
||||||
| Mentoring | 10 SK | Knowledge transfer |
|
|
||||||
| Documentation | 15 SK | Community resource |
|
|
||||||
| Governance | 20 SK | Democratic participation |
|
|
||||||
| Conflict Resolution | 25 SK | Community harmony |
|
|
||||||
|
|
||||||
### SK Privilege Thresholds
|
|
||||||
- **50 SK**: Can propose in General Forum
|
|
||||||
- **100 SK**: Eligible for Team Captain roles
|
|
||||||
- **200 SK**: Can lead mission objectives
|
|
||||||
- **500 SK**: Join Leadership Team + enhanced voting weight (max 1.5x)
|
|
||||||
|
|
||||||
## Treasury Management
|
|
||||||
|
|
||||||
### The 3x Rule
|
|
||||||
**Outstanding SC ≤ 3x EUR Treasury Balance**
|
|
||||||
|
|
||||||
This mathematical rule prevents SC inflation and ensures redemption capacity.
|
|
||||||
|
|
||||||
**Example**: €10,000 treasury → Maximum 30,000 SC outstanding
|
|
||||||
|
|
||||||
### License Integration
|
|
||||||
|
|
||||||
| License | SC Earning | SK Earning | Max Daily |
|
|
||||||
|---------|------------|------------|-----------|
|
|
||||||
| Campaign | ❌ | ✅ | 25 SK |
|
|
||||||
| Watch | ❌ | ✅ | 50 SK |
|
|
||||||
| Work | ✅ | ✅ | 500 SC + 100 SK |
|
|
||||||
| Organizational | ✅ | ✅ | 500 SC + 100 SK |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**The result**: A currency system that rewards both individual contribution and collective success, with full democratic accountability and mathematical integrity.
|
|
||||||
'''
|
|
||||||
|
|
||||||
with open(output_file, 'w') as f:
|
|
||||||
f.write(content)
|
|
||||||
|
|
||||||
print(f"✅ Generated: docs/smartup-zero/currency-system.md")
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""Generate all public transparency pages"""
|
|
||||||
print("🌐 GENERATING PUBLIC TRANSPARENCY PAGES")
|
|
||||||
print("=" * 45)
|
|
||||||
|
|
||||||
# Create docs/smartup-zero directory if it doesn't exist
|
|
||||||
smartup_zero_dir = os.path.join(os.path.dirname(__file__), '..', '..', 'docs', 'smartup-zero')
|
|
||||||
os.makedirs(smartup_zero_dir, exist_ok=True)
|
|
||||||
|
|
||||||
generate_book_of_owners_page()
|
|
||||||
generate_financial_transparency_page()
|
|
||||||
generate_currency_system_page()
|
|
||||||
|
|
||||||
print("\n✅ All transparency pages generated!")
|
|
||||||
print("📝 Files created in docs/smartup-zero/ directory")
|
|
||||||
print("🌐 Will be visible on timeline0.org when committed")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1,299 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Generate MkDocs pages for public transparency
|
|
||||||
Converts CSV ledger data into beautiful web pages - WORKING VERSION
|
|
||||||
"""
|
|
||||||
|
|
||||||
import csv
|
|
||||||
import os
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
def parse_financial_data():
|
|
||||||
"""Parse actual financial data from CSV files"""
|
|
||||||
base_path = os.path.join(os.path.dirname(__file__), '..')
|
|
||||||
|
|
||||||
# Parse live SC from transactions
|
|
||||||
live_sc = 0
|
|
||||||
sc_file = os.path.join(base_path, 'ledger', 'smartup-credits', 'transactions.csv')
|
|
||||||
try:
|
|
||||||
with open(sc_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
if not row['timestamp'].startswith('#') and row['timestamp']:
|
|
||||||
if row['type'] == 'SC':
|
|
||||||
live_sc += int(row['amount'])
|
|
||||||
elif row['type'] in ['REDEEM', 'DESTROY']:
|
|
||||||
live_sc -= int(row['amount'])
|
|
||||||
except FileNotFoundError:
|
|
||||||
live_sc = 0
|
|
||||||
|
|
||||||
# Parse treasury balance
|
|
||||||
treasury_eur = 0
|
|
||||||
treasury_file = os.path.join(base_path, 'ledger', 'treasury', 'balance.csv')
|
|
||||||
try:
|
|
||||||
with open(treasury_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
if not row['timestamp'].startswith('#') and row['timestamp']:
|
|
||||||
treasury_eur = float(row['total_eur_balance'])
|
|
||||||
except FileNotFoundError:
|
|
||||||
treasury_eur = 0
|
|
||||||
|
|
||||||
# Parse pending SC
|
|
||||||
pending_sc = 0
|
|
||||||
pending_file = os.path.join(base_path, 'ledger', 'pending-sc', 'transactions.csv')
|
|
||||||
try:
|
|
||||||
with open(pending_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
if not row['timestamp'].startswith('#') and row['timestamp']:
|
|
||||||
if row['status'] == 'PENDING_VALIDATION':
|
|
||||||
pending_sc += int(row['amount'])
|
|
||||||
except FileNotFoundError:
|
|
||||||
pending_sc = 0
|
|
||||||
|
|
||||||
return live_sc, treasury_eur, pending_sc
|
|
||||||
|
|
||||||
def generate_book_of_owners_page():
|
|
||||||
"""Generate public Book of Owners page"""
|
|
||||||
|
|
||||||
book_file = os.path.join(os.path.dirname(__file__), '..', 'ownership', 'book-of-owners.csv')
|
|
||||||
output_file = os.path.join(os.path.dirname(__file__), '..', '..', 'docs', 'smartup-zero', 'book-of-owners.md')
|
|
||||||
|
|
||||||
with open(book_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
owners = [row for row in reader if row['owner_id'] and not row['owner_id'].startswith('#')]
|
|
||||||
|
|
||||||
content = f'''# 📖 Book of Owners
|
|
||||||
|
|
||||||
**Live transparency into Smartup Zero ownership and organizational structure**
|
|
||||||
|
|
||||||
*Last updated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Current Owners
|
|
||||||
|
|
||||||
| Owner ID | Display Name | License | Teams | Roles | SK | Status |
|
|
||||||
|----------|--------------|---------|-------|-------|----|---------| '''
|
|
||||||
|
|
||||||
for owner in owners:
|
|
||||||
content += f'''
|
|
||||||
| {owner['owner_id']} | **{owner['display_name']}** | `{owner['license_type']}` | {owner['team_memberships']} | {owner['role_assignments']} | {owner['current_sk']} | {owner['status']} |'''
|
|
||||||
|
|
||||||
content += f'''
|
|
||||||
|
|
||||||
## Organizational Statistics
|
|
||||||
|
|
||||||
- **Total Owners**: {len(owners)}
|
|
||||||
- **Active Contributors**: {len([o for o in owners if o['status'] == 'active'])}
|
|
||||||
- **Teams Formed**: {len(set([t.strip() for o in owners for t in o['team_memberships'].split(',') if t.strip()]))}
|
|
||||||
- **Roles Assigned**: {len(set([r.strip() for o in owners for r in o['role_assignments'].split(',') if r.strip()]))}
|
|
||||||
|
|
||||||
## License Distribution
|
|
||||||
|
|
||||||
'''
|
|
||||||
|
|
||||||
license_counts = {}
|
|
||||||
for owner in owners:
|
|
||||||
license_type = owner['license_type']
|
|
||||||
license_counts[license_type] = license_counts.get(license_type, 0) + 1
|
|
||||||
|
|
||||||
for license_type, count in license_counts.items():
|
|
||||||
content += f"- **{license_type.title()}**: {count} owners\n"
|
|
||||||
|
|
||||||
content += '''
|
|
||||||
|
|
||||||
## Democratic Principles
|
|
||||||
|
|
||||||
Every person listed above is an **equal co-owner** of Smartup Zero, regardless of license price paid. The license determines capabilities (what you can do), but every owner gets exactly **one vote** in governance decisions.
|
|
||||||
|
|
||||||
!!! info "Transparency Note"
|
|
||||||
This Book of Owners uses public aliases chosen by each owner. Real identities are kept private unless owners choose full public disclosure.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*This page automatically reflects the current state of `currency-ledger/ownership/book-of-owners.csv`*
|
|
||||||
'''
|
|
||||||
|
|
||||||
with open(output_file, 'w') as f:
|
|
||||||
f.write(content)
|
|
||||||
|
|
||||||
print(f"✅ Generated: docs/smartup-zero/book-of-owners.md")
|
|
||||||
|
|
||||||
def generate_financial_transparency_page():
|
|
||||||
"""Generate financial transparency page with REAL DATA"""
|
|
||||||
|
|
||||||
output_file = os.path.join(os.path.dirname(__file__), '..', '..', 'docs', 'smartup-zero', 'financial-transparency.md')
|
|
||||||
|
|
||||||
# Parse actual financial data
|
|
||||||
live_sc, treasury_eur, pending_sc = parse_financial_data()
|
|
||||||
|
|
||||||
# Calculate 3x rule status
|
|
||||||
if treasury_eur > 0:
|
|
||||||
ratio = live_sc / (treasury_eur * 3)
|
|
||||||
if ratio <= 1:
|
|
||||||
rule_status = f"✅ COMPLIANT ({ratio:.1%} of limit)"
|
|
||||||
else:
|
|
||||||
rule_status = f"❌ VIOLATION ({ratio:.1%} of limit)"
|
|
||||||
else:
|
|
||||||
if live_sc > 0:
|
|
||||||
rule_status = "⚠️ PENDING (SC outstanding but no treasury funding yet)"
|
|
||||||
else:
|
|
||||||
rule_status = "✅ COMPLIANT (no SC outstanding)"
|
|
||||||
|
|
||||||
content = f'''# 💰 Financial Transparency
|
|
||||||
|
|
||||||
**Complete transparency into Smartup Zero's financial health and currency system**
|
|
||||||
|
|
||||||
*Last updated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Current Financial Status
|
|
||||||
|
|
||||||
- 💶 **EUR Treasury**: €{treasury_eur:,.2f}
|
|
||||||
- 🪙 **Live Smartup Credits**: {live_sc:,} SC
|
|
||||||
- ⏳ **Pending Validation**: {pending_sc:,} SC
|
|
||||||
- 📊 **3x Rule Status**: {rule_status}
|
|
||||||
|
|
||||||
## Live SC Activity
|
|
||||||
|
|
||||||
Current outstanding SC represents **earned value through completed work**:<br>
|
|
||||||
- Task-based collaborative work following effort-based assessment<br>
|
|
||||||
- Democratic validation through Team Captain approval<br>
|
|
||||||
- Complete audit trail in session logs and transaction records<br>
|
|
||||||
|
|
||||||
## Founding Work Audit
|
|
||||||
|
|
||||||
The largest pending SC amount represents the **founding entrepreneur's 10-year work audit**:
|
|
||||||
|
|
||||||
| Vesting Tranche | Amount | Validation Required | Status |
|
|
||||||
|-----------------|--------|-------------------|---------|
|
|
||||||
| **Design Phase** | 24,660 SC | Team Captains + Leadership vote | ⏳ Pending |
|
|
||||||
| **Production Phase** | 32,880 SC | Community binding vote | ⏳ Pending |
|
|
||||||
| **Organization Phase** | 24,660 SC | Automatic at market launch | ⏳ Pending |
|
|
||||||
| **TOTAL** | **82,200 SC** | Democratic validation | **Awaiting community growth** |
|
|
||||||
|
|
||||||
!!! warning "Democratic Safeguard"
|
|
||||||
The founding entrepreneur **cannot validate their own work**. All 82,200 SC requires approval from future Team Captains and community votes, proving that Smartup Zero's "no special founders" principle is real and enforceable.
|
|
||||||
|
|
||||||
## Treasury Health
|
|
||||||
|
|
||||||
**Financial Health**: {'EXCELLENT' if live_sc <= 1000 else 'GOOD' if live_sc <= 10000 else 'NEEDS_FUNDING'}
|
|
||||||
|
|
||||||
- SC holders earning value through effort-based work
|
|
||||||
- {'Treasury funding available for SC redemption' if treasury_eur > 0 else 'Treasury funding needed for SC redemption capability'}
|
|
||||||
- All transactions public and auditable in git history
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*All financial data automatically updates from live CSV ledger files*
|
|
||||||
'''
|
|
||||||
|
|
||||||
with open(output_file, 'w') as f:
|
|
||||||
f.write(content)
|
|
||||||
|
|
||||||
print(f"✅ Generated: docs/smartup-zero/financial-transparency.md")
|
|
||||||
|
|
||||||
def generate_currency_system_page():
|
|
||||||
"""Generate currency system explanation page"""
|
|
||||||
|
|
||||||
output_file = os.path.join(os.path.dirname(__file__), '..', '..', 'docs', 'smartup-zero', 'currency-system.md')
|
|
||||||
|
|
||||||
content = '''# 💱 Currency System
|
|
||||||
|
|
||||||
**How Smartup Zero's dual-currency economy works**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## The Dual Currency Model
|
|
||||||
|
|
||||||
- 🪙 **Smartup Credits (SC)**: 1 SC = €1 treasury claim, earned through work
|
|
||||||
- ❤️ **Social Karma (SK)**: Non-transferable reputation, earned through community building
|
|
||||||
|
|
||||||
## How to Earn Smartup Credits
|
|
||||||
|
|
||||||
### Task-Based Earning (Effort Assessment Model)
|
|
||||||
- Small Task (1-2h): 25 SC base budget
|
|
||||||
- Medium Task (3-4h): 50 SC base budget
|
|
||||||
- Large Task (5-8h): 100 SC base budget
|
|
||||||
- Complex Task (1-2 days): 200 SC base budget
|
|
||||||
|
|
||||||
**Actual SC earned based on effort quality assessment (60-100% of budget)**
|
|
||||||
|
|
||||||
### ADM Triangle Collaboration
|
|
||||||
- **Attacker (Senior)**: 90% of SC award, mentors junior
|
|
||||||
- **Defender (Junior)**: 10% of SC award, learns through participation
|
|
||||||
- **Midfielder (Bot)**: Handles coordination and documentation
|
|
||||||
|
|
||||||
### Democratic Validation Process
|
|
||||||
1. Complete collaborative work session
|
|
||||||
2. Mission Leader assesses effort quality
|
|
||||||
3. Pending SC created for Team Captain review
|
|
||||||
4. Community lazy consensus (48h)
|
|
||||||
5. Official SC award through existing validation system
|
|
||||||
|
|
||||||
## How to Earn Social Karma
|
|
||||||
|
|
||||||
| Activity | SK Award | Purpose |
|
|
||||||
|----------|----------|---------|
|
|
||||||
| Code Review | 5 SK | Quality assurance |
|
|
||||||
| Mentoring | 10 SK | Knowledge transfer |
|
|
||||||
| Documentation | 15 SK | Community resource |
|
|
||||||
| Governance | 20 SK | Democratic participation |
|
|
||||||
| Conflict Resolution | 25 SK | Community harmony |
|
|
||||||
|
|
||||||
### SK Privilege Thresholds
|
|
||||||
- **50 SK**: Can propose in General Forum
|
|
||||||
- **100 SK**: Eligible for Team Captain roles
|
|
||||||
- **200 SK**: Can lead mission objectives
|
|
||||||
- **500 SK**: Join Leadership Team + enhanced voting weight (max 1.5x)
|
|
||||||
|
|
||||||
## Treasury Management
|
|
||||||
|
|
||||||
### The 3x Rule
|
|
||||||
**Outstanding SC ≤ 3x EUR Treasury Balance**
|
|
||||||
|
|
||||||
This mathematical rule prevents SC inflation and ensures redemption capacity.
|
|
||||||
|
|
||||||
**Example**: €10,000 treasury → Maximum 30,000 SC outstanding
|
|
||||||
|
|
||||||
### License Integration
|
|
||||||
|
|
||||||
| License | SC Earning | SK Earning | Max Daily |
|
|
||||||
|---------|------------|------------|-----------|
|
|
||||||
| Campaign | ❌ | ✅ | 25 SK |
|
|
||||||
| Watch | ❌ | ✅ | 50 SK |
|
|
||||||
| Work | ✅ | ✅ | 500 SC + 100 SK |
|
|
||||||
| Organizational | ✅ | ✅ | 500 SC + 100 SK |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**The result**: A currency system that rewards both individual contribution and collective success, with full democratic accountability and mathematical integrity.
|
|
||||||
'''
|
|
||||||
|
|
||||||
with open(output_file, 'w') as f:
|
|
||||||
f.write(content)
|
|
||||||
|
|
||||||
print(f"✅ Generated: docs/smartup-zero/currency-system.md")
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""Generate all public transparency pages"""
|
|
||||||
print("🌐 GENERATING PUBLIC TRANSPARENCY PAGES")
|
|
||||||
print("=" * 45)
|
|
||||||
|
|
||||||
# Create docs/smartup-zero directory if it doesn't exist
|
|
||||||
smartup_zero_dir = os.path.join(os.path.dirname(__file__), '..', '..', 'docs', 'smartup-zero')
|
|
||||||
os.makedirs(smartup_zero_dir, exist_ok=True)
|
|
||||||
|
|
||||||
generate_book_of_owners_page()
|
|
||||||
generate_financial_transparency_page()
|
|
||||||
generate_currency_system_page()
|
|
||||||
|
|
||||||
print("\n✅ All transparency pages generated!")
|
|
||||||
print("📝 Files created in docs/smartup-zero/ directory")
|
|
||||||
print("🌐 Will be visible on timeline0.org when committed")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1,81 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Currency Ledger Report Generator - Enhanced Working Version
|
|
||||||
"""
|
|
||||||
|
|
||||||
import csv
|
|
||||||
from datetime import datetime
|
|
||||||
import os
|
|
||||||
from collections import defaultdict
|
|
||||||
|
|
||||||
def generate_pending_sc_summary():
|
|
||||||
"""Generate pending SC summary report"""
|
|
||||||
print("⏳ PENDING SC SUMMARY REPORT")
|
|
||||||
print("=" * 32)
|
|
||||||
|
|
||||||
ledger_file = os.path.join(os.path.dirname(__file__), '..', 'ledger', 'pending-sc', 'transactions.csv')
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(ledger_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
|
|
||||||
pending_by_tranche = defaultdict(int)
|
|
||||||
total_pending = 0
|
|
||||||
|
|
||||||
for row in reader:
|
|
||||||
# Skip comment lines
|
|
||||||
if not row.get('timestamp') or row.get('timestamp').startswith('#'):
|
|
||||||
continue
|
|
||||||
|
|
||||||
if row.get('type') == 'PENDING_SC':
|
|
||||||
amount = int(row.get('amount', 0))
|
|
||||||
tranche = row.get('vesting_tranche', 'unknown')
|
|
||||||
|
|
||||||
pending_by_tranche[tranche] += amount
|
|
||||||
total_pending += amount
|
|
||||||
|
|
||||||
print(f"Total Pending SC: {total_pending:,}")
|
|
||||||
|
|
||||||
if pending_by_tranche:
|
|
||||||
print("\n📊 BY VESTING TRANCHE:")
|
|
||||||
for tranche, amount in sorted(pending_by_tranche.items()):
|
|
||||||
print(f" {tranche}: {amount:,} SC")
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
print("📝 No pending SC transactions found")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ Error generating pending SC report: {e}")
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""Generate all reports"""
|
|
||||||
print("📈 SMARTUP ZERO FINANCIAL REPORTS")
|
|
||||||
print(f"Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
|
||||||
print("=" * 50)
|
|
||||||
|
|
||||||
print("📊 SMARTUP CREDITS SUMMARY")
|
|
||||||
print("=" * 30)
|
|
||||||
print("Total SC Minted: 0")
|
|
||||||
print("Total SC Redeemed: 0")
|
|
||||||
print("SC Outstanding: 0")
|
|
||||||
print("📝 No live SC transactions yet")
|
|
||||||
|
|
||||||
print()
|
|
||||||
generate_pending_sc_summary()
|
|
||||||
|
|
||||||
print("\n💰 TREASURY HEALTH REPORT")
|
|
||||||
print("=" * 30)
|
|
||||||
print("💶 EUR Treasury: €0.00")
|
|
||||||
print("🪙 SC Outstanding: 0 SC")
|
|
||||||
print("💸 SC Liability: €0.00")
|
|
||||||
print("✅ 3x Rule: COMPLIANT (no live SC outstanding)")
|
|
||||||
|
|
||||||
print("\n📊 FINANCIAL HEALTH: EXCELLENT")
|
|
||||||
print(" • No current debt or obligations")
|
|
||||||
print(" • Pending SC awaiting democratic validation")
|
|
||||||
print(" • Founder compensation tied to collective success")
|
|
||||||
|
|
||||||
print("\n" + "=" * 50)
|
|
||||||
print("💡 All ledger data is public and auditable in git history")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1,223 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Currency Ledger Report Generator
|
|
||||||
Creates summary reports for community transparency
|
|
||||||
"""
|
|
||||||
|
|
||||||
import csv
|
|
||||||
import yaml
|
|
||||||
from datetime import datetime
|
|
||||||
import os
|
|
||||||
from collections import defaultdict
|
|
||||||
|
|
||||||
def generate_sc_summary():
|
|
||||||
"""Generate SC summary report"""
|
|
||||||
print("📊 SMARTUP CREDITS SUMMARY REPORT")
|
|
||||||
print("=" * 40)
|
|
||||||
|
|
||||||
ledger_file = os.path.join(os.path.dirname(__file__), '..', 'ledger', 'smartup-credits', 'transactions.csv')
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(ledger_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
|
|
||||||
user_balances = defaultdict(int)
|
|
||||||
total_minted = 0
|
|
||||||
total_redeemed = 0
|
|
||||||
transaction_count = 0
|
|
||||||
|
|
||||||
for row in reader:
|
|
||||||
if row['type'] == 'SC':
|
|
||||||
amount = int(row['amount'])
|
|
||||||
user_balances[row['to']] += amount
|
|
||||||
total_minted += amount
|
|
||||||
transaction_count += 1
|
|
||||||
elif row['type'] == 'REDEEM':
|
|
||||||
amount = int(row['amount'])
|
|
||||||
user_balances[row['from']] -= amount
|
|
||||||
total_redeemed += amount
|
|
||||||
transaction_count += 1
|
|
||||||
|
|
||||||
print(f"Total SC Minted: {total_minted}")
|
|
||||||
print(f"Total SC Redeemed: {total_redeemed}")
|
|
||||||
print(f"SC Outstanding: {total_minted - total_redeemed}")
|
|
||||||
print(f"Total Transactions: {transaction_count}")
|
|
||||||
print(f"Active Contributors: {len([u for u in user_balances if user_balances[u] > 0])}")
|
|
||||||
|
|
||||||
# Top contributors
|
|
||||||
if user_balances:
|
|
||||||
print("\n🏆 TOP SC EARNERS:")
|
|
||||||
sorted_users = sorted(user_balances.items(), key=lambda x: x[1], reverse=True)
|
|
||||||
for i, (user, balance) in enumerate(sorted_users[:5]):
|
|
||||||
if balance > 0:
|
|
||||||
print(f"{i+1}. {user}: {balance} SC")
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
print("❌ No SC transactions found")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ Error generating SC report: {e}")
|
|
||||||
|
|
||||||
def generate_treasury_report():
|
|
||||||
"""Generate treasury health report"""
|
|
||||||
print("\n💰 TREASURY HEALTH REPORT")
|
|
||||||
print("=" * 30)
|
|
||||||
|
|
||||||
treasury_file = os.path.join(os.path.dirname(__file__), '..', 'ledger', 'treasury', 'balance.csv')
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(treasury_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
rows = list(reader)
|
|
||||||
|
|
||||||
if rows:
|
|
||||||
latest = rows[-1]
|
|
||||||
eur_balance = float(latest['total_eur_balance'])
|
|
||||||
sc_outstanding = int(latest['sc_outstanding'])
|
|
||||||
sc_liability = float(latest['sc_liability_eur'])
|
|
||||||
|
|
||||||
print(f"💶 EUR Treasury: €{eur_balance:,.2f}")
|
|
||||||
print(f"🪙 SC Outstanding: {sc_outstanding:,} SC")
|
|
||||||
print(f"💸 SC Liability: €{sc_liability:,.2f}")
|
|
||||||
|
|
||||||
if eur_balance > 0:
|
|
||||||
coverage_ratio = eur_balance / sc_liability if sc_liability > 0 else float('inf')
|
|
||||||
print(f"📊 Coverage Ratio: {coverage_ratio:.2f}x")
|
|
||||||
|
|
||||||
if coverage_ratio >= 1.0:
|
|
||||||
print("✅ Full SC redemption possible")
|
|
||||||
else:
|
|
||||||
redemption_capacity = int(eur_balance)
|
|
||||||
print(f"⚠️ Partial redemption: €{redemption_capacity:,} available")
|
|
||||||
|
|
||||||
# 3x rule check
|
|
||||||
max_allowed_sc = eur_balance * 3
|
|
||||||
print(f"🛡️ 3x Rule: {sc_outstanding:,} / {max_allowed_sc:,.0f} SC allowed")
|
|
||||||
|
|
||||||
if sc_outstanding <= max_allowed_sc:
|
|
||||||
print("✅ 3x Rule: COMPLIANT")
|
|
||||||
else:
|
|
||||||
print("🚨 3x Rule: VIOLATION")
|
|
||||||
|
|
||||||
else:
|
|
||||||
print("⚠️ Treasury initialized but no balance records")
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
print("❌ No treasury records found")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ Error generating treasury report: {e}")
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""Generate all reports"""
|
|
||||||
print("📈 SMARTUP ZERO FINANCIAL REPORTS")
|
|
||||||
print(f"Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
|
||||||
print("=" * 50)
|
|
||||||
|
|
||||||
generate_sc_summary()
|
|
||||||
generate_treasury_report()
|
|
||||||
|
|
||||||
print("\n" + "=" * 50)
|
|
||||||
print("💡 All ledger data is public and auditable in git history")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
|
|
||||||
def generate_pending_sc_summary():
|
|
||||||
"""Generate pending SC summary report"""
|
|
||||||
print("\n⏳ PENDING SC SUMMARY REPORT")
|
|
||||||
print("=" * 32)
|
|
||||||
|
|
||||||
ledger_file = os.path.join(os.path.dirname(__file__), '..', 'ledger', 'pending-sc', 'transactions.csv')
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(ledger_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
|
|
||||||
pending_by_tranche = defaultdict(int)
|
|
||||||
pending_by_status = defaultdict(int)
|
|
||||||
total_pending = 0
|
|
||||||
|
|
||||||
for row in reader:
|
|
||||||
if row['type'] == 'PENDING_SC':
|
|
||||||
amount = int(row['amount'])
|
|
||||||
pending_by_tranche[row['vesting_tranche']] += amount
|
|
||||||
pending_by_status[row['status']] += amount
|
|
||||||
total_pending += amount
|
|
||||||
|
|
||||||
print(f"Total Pending SC: {total_pending}")
|
|
||||||
|
|
||||||
if pending_by_tranche:
|
|
||||||
print("\n📊 BY VESTING TRANCHE:")
|
|
||||||
for tranche, amount in pending_by_tranche.items():
|
|
||||||
print(f" {tranche}: {amount} SC")
|
|
||||||
|
|
||||||
if pending_by_status:
|
|
||||||
print("\n📋 BY STATUS:")
|
|
||||||
for status, amount in pending_by_status.items():
|
|
||||||
print(f" {status}: {amount} SC")
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
print("📝 No pending SC transactions found")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ Error generating pending SC report: {e}")
|
|
||||||
|
|
||||||
# Add call to generate_pending_sc_summary() in main() function
|
|
||||||
|
|
||||||
def generate_comprehensive_financial_report():
|
|
||||||
"""Enhanced financial report showing pending vs live SC"""
|
|
||||||
print("\n💼 COMPREHENSIVE FINANCIAL REPORT")
|
|
||||||
print("=" * 38)
|
|
||||||
|
|
||||||
# Get live SC (from main ledger)
|
|
||||||
live_sc = 0
|
|
||||||
try:
|
|
||||||
with open(os.path.join(os.path.dirname(__file__), '..', 'ledger', 'smartup-credits', 'transactions.csv'), 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
if row.get('type') == 'SC':
|
|
||||||
live_sc += int(row.get('amount', 0))
|
|
||||||
except: pass
|
|
||||||
|
|
||||||
# Get pending SC
|
|
||||||
pending_sc = 0
|
|
||||||
try:
|
|
||||||
with open(os.path.join(os.path.dirname(__file__), '..', 'ledger', 'pending-sc', 'transactions.csv'), 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
if row.get('type') == 'PENDING_SC' and row.get('status') != 'REJECTED':
|
|
||||||
pending_sc += int(row.get('amount', 0))
|
|
||||||
except: pass
|
|
||||||
|
|
||||||
# Get treasury balance
|
|
||||||
treasury_eur = 0
|
|
||||||
try:
|
|
||||||
with open(os.path.join(os.path.dirname(__file__), '..', 'ledger', 'treasury', 'balance.csv'), 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
rows = list(reader)
|
|
||||||
if rows:
|
|
||||||
treasury_eur = float(rows[-1].get('total_eur_balance', 0))
|
|
||||||
except: pass
|
|
||||||
|
|
||||||
print(f"💶 EUR Treasury: €{treasury_eur:,.2f}")
|
|
||||||
print(f"🪙 Live SC Outstanding: {live_sc:,} SC (€{live_sc:,.2f} liability)")
|
|
||||||
print(f"⏳ Pending SC: {pending_sc:,} SC (€{pending_sc:,.2f} contingent)")
|
|
||||||
print(f"📊 Total Potential: €{live_sc + pending_sc:,.2f}")
|
|
||||||
|
|
||||||
if treasury_eur > 0 and live_sc > 0:
|
|
||||||
coverage = treasury_eur / live_sc
|
|
||||||
print(f"🛡️ Coverage Ratio: {coverage:.2f}x (live SC only)")
|
|
||||||
|
|
||||||
# 3x rule check (only for live SC)
|
|
||||||
max_allowed = treasury_eur * 3
|
|
||||||
if live_sc <= max_allowed:
|
|
||||||
print("✅ 3x Rule: COMPLIANT")
|
|
||||||
else:
|
|
||||||
print("🚨 3x Rule: VIOLATION")
|
|
||||||
else:
|
|
||||||
print("✅ 3x Rule: COMPLIANT (no live SC outstanding)")
|
|
||||||
|
|
||||||
print(f"\n💡 Financial Health: Excellent")
|
|
||||||
print(f" • Real liability: €{live_sc:,.2f}")
|
|
||||||
print(f" • Contingent awards pending validation: €{pending_sc:,.2f}")
|
|
||||||
print(f" • Treasury covers: {('100%+ of obligations' if treasury_eur >= live_sc else 'building toward full coverage')}")
|
|
||||||
|
|
||||||
# Replace the old treasury report with this comprehensive one
|
|
|
@ -1,151 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Currency Ledger Report Generator - Working Version with Real Data Parsing
|
|
||||||
"""
|
|
||||||
|
|
||||||
import csv
|
|
||||||
from datetime import datetime
|
|
||||||
import os
|
|
||||||
from collections import defaultdict
|
|
||||||
|
|
||||||
def parse_sc_transactions():
|
|
||||||
"""Parse live SC transactions and calculate totals"""
|
|
||||||
ledger_file = os.path.join(os.path.dirname(__file__), '..', 'ledger', 'smartup-credits', 'transactions.csv')
|
|
||||||
|
|
||||||
total_minted = 0
|
|
||||||
total_redeemed = 0
|
|
||||||
transactions = []
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(ledger_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
# Skip comment lines and empty rows
|
|
||||||
if not row['timestamp'].startswith('#') and row['timestamp'] != '':
|
|
||||||
transactions.append(row)
|
|
||||||
amount = int(row['amount'])
|
|
||||||
if row['type'] == 'SC':
|
|
||||||
total_minted += amount
|
|
||||||
elif row['type'] == 'REDEEM':
|
|
||||||
total_redeemed += amount
|
|
||||||
except FileNotFoundError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
return total_minted, total_redeemed, transactions
|
|
||||||
|
|
||||||
def parse_treasury_balance():
|
|
||||||
"""Parse treasury balance and get latest state"""
|
|
||||||
ledger_file = os.path.join(os.path.dirname(__file__), '..', 'ledger', 'treasury', 'balance.csv')
|
|
||||||
|
|
||||||
latest_balance = {
|
|
||||||
'total_eur_balance': 0,
|
|
||||||
'sc_outstanding': 0,
|
|
||||||
'sc_liability_eur': 0
|
|
||||||
}
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(ledger_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
# Skip comment lines and get latest entry
|
|
||||||
if not row['timestamp'].startswith('#') and row['timestamp'] != '':
|
|
||||||
latest_balance = {
|
|
||||||
'total_eur_balance': float(row['total_eur_balance']),
|
|
||||||
'sc_outstanding': int(row['sc_outstanding']),
|
|
||||||
'sc_liability_eur': float(row['sc_liability_eur'])
|
|
||||||
}
|
|
||||||
except FileNotFoundError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
return latest_balance
|
|
||||||
|
|
||||||
def generate_pending_sc_summary():
|
|
||||||
"""Generate pending SC summary report"""
|
|
||||||
print("⏳ PENDING SC SUMMARY REPORT")
|
|
||||||
print("=" * 32)
|
|
||||||
|
|
||||||
ledger_file = os.path.join(os.path.dirname(__file__), '..', 'ledger', 'pending-sc', 'transactions.csv')
|
|
||||||
|
|
||||||
total_pending = 0
|
|
||||||
by_tranche = defaultdict(int)
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(ledger_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
if not row['timestamp'].startswith('#') and row['timestamp'] != '':
|
|
||||||
amount = int(row['amount'])
|
|
||||||
total_pending += amount
|
|
||||||
tranche = row['vesting_tranche'] or 'immediate'
|
|
||||||
by_tranche[tranche] += amount
|
|
||||||
|
|
||||||
print(f"Total Pending SC: {total_pending:,}")
|
|
||||||
|
|
||||||
if by_tranche:
|
|
||||||
print(f"\n📊 BY VESTING TRANCHE:")
|
|
||||||
for tranche, amount in by_tranche.items():
|
|
||||||
print(f" {tranche}: {amount:,} SC")
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
print("📝 No pending SC transactions")
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""Generate comprehensive financial report"""
|
|
||||||
|
|
||||||
print("📈 SMARTUP ZERO FINANCIAL REPORTS")
|
|
||||||
print(f"Generated: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
|
|
||||||
print("=" * 50)
|
|
||||||
|
|
||||||
# Parse live SC data
|
|
||||||
total_minted, total_redeemed, transactions = parse_sc_transactions()
|
|
||||||
sc_outstanding = total_minted - total_redeemed
|
|
||||||
|
|
||||||
print("📊 SMARTUP CREDITS SUMMARY")
|
|
||||||
print("=" * 30)
|
|
||||||
print(f"Total SC Minted: {total_minted:,}")
|
|
||||||
print(f"Total SC Redeemed: {total_redeemed:,}")
|
|
||||||
print(f"SC Outstanding: {sc_outstanding:,}")
|
|
||||||
|
|
||||||
if transactions:
|
|
||||||
print(f"\n📝 RECENT TRANSACTIONS:")
|
|
||||||
for tx in transactions[-3:]: # Show last 3
|
|
||||||
print(f" {tx['timestamp'][:10]} | {tx['amount']} SC → {tx['to']} | {tx['reference']}")
|
|
||||||
else:
|
|
||||||
print("📝 No live SC transactions yet")
|
|
||||||
|
|
||||||
print()
|
|
||||||
generate_pending_sc_summary()
|
|
||||||
|
|
||||||
# Parse treasury data
|
|
||||||
treasury = parse_treasury_balance()
|
|
||||||
|
|
||||||
print("\n💰 TREASURY HEALTH REPORT")
|
|
||||||
print("=" * 30)
|
|
||||||
print(f"💶 EUR Treasury: €{treasury['total_eur_balance']:.2f}")
|
|
||||||
print(f"🪙 SC Outstanding: {treasury['sc_outstanding']:,} SC")
|
|
||||||
print(f"💸 SC Liability: €{treasury['sc_liability_eur']:.2f}")
|
|
||||||
|
|
||||||
# Calculate 3x rule compliance
|
|
||||||
if treasury['total_eur_balance'] == 0:
|
|
||||||
if treasury['sc_outstanding'] == 0:
|
|
||||||
print("✅ 3x Rule: COMPLIANT (no live SC outstanding)")
|
|
||||||
else:
|
|
||||||
print("⚠️ 3x Rule: PENDING (SC outstanding but no treasury funding yet)")
|
|
||||||
else:
|
|
||||||
ratio = treasury['sc_outstanding'] / (treasury['total_eur_balance'] * 3)
|
|
||||||
if ratio <= 1:
|
|
||||||
print(f"✅ 3x Rule: COMPLIANT ({ratio:.1%} of limit)")
|
|
||||||
else:
|
|
||||||
print(f"❌ 3x Rule: VIOLATION ({ratio:.1%} of limit)")
|
|
||||||
|
|
||||||
# Financial health assessment
|
|
||||||
print(f"\n📊 FINANCIAL HEALTH: {'EXCELLENT' if treasury['sc_outstanding'] <= 1000 else 'GOOD' if treasury['sc_outstanding'] <= 10000 else 'NEEDS_FUNDING'}")
|
|
||||||
if treasury['total_eur_balance'] == 0 and treasury['sc_outstanding'] > 0:
|
|
||||||
print(" • SC holders earning value through effort-based work")
|
|
||||||
print(" • Treasury funding needed for SC redemption capability")
|
|
||||||
|
|
||||||
print("\n" + "=" * 50)
|
|
||||||
print("💡 All ledger data is public and auditable in git history")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1,43 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Initialize the founding entrepreneur in Book of Owners
|
|
||||||
This creates the first owner record for Robbert
|
|
||||||
"""
|
|
||||||
|
|
||||||
import csv
|
|
||||||
from datetime import datetime
|
|
||||||
import os
|
|
||||||
|
|
||||||
def initialize_founder():
|
|
||||||
"""Add the founding entrepreneur to Book of Owners"""
|
|
||||||
|
|
||||||
base_path = os.path.join(os.path.dirname(__file__), '..')
|
|
||||||
timestamp = datetime.now().isoformat() + 'Z'
|
|
||||||
|
|
||||||
# Create identity mapping (PRIVATE - not committed)
|
|
||||||
identity_file = os.path.join(base_path, 'ownership', 'identity-mapping.csv')
|
|
||||||
with open(identity_file, 'w', newline='') as f:
|
|
||||||
writer = csv.writer(f)
|
|
||||||
writer.writerow(['owner_id', 'real_name', 'email', 'display_name', 'privacy_level', 'created_date'])
|
|
||||||
writer.writerow(['001', 'Robbert Schep', 'robbert@timeline0.org', 'robbert_founder', 'alias_only', timestamp])
|
|
||||||
|
|
||||||
# Create license transaction record
|
|
||||||
transactions_file = os.path.join(base_path, 'ownership', 'license-transactions.csv')
|
|
||||||
with open(transactions_file, 'w', newline='') as f:
|
|
||||||
writer = csv.writer(f)
|
|
||||||
writer.writerow(['timestamp', 'owner_id', 'transaction_type', 'from_license', 'to_license', 'payment_eur', 'upgrade_reason', 'reference', 'approver'])
|
|
||||||
writer.writerow([timestamp, '001', 'FOUNDER', '', 'work', 0, 'founding_entrepreneur', 'system-init', 'smartup-zero-launch'])
|
|
||||||
|
|
||||||
# Update Book of Owners (PUBLIC)
|
|
||||||
book_file = os.path.join(base_path, 'ownership', 'book-of-owners.csv')
|
|
||||||
with open(book_file, 'w', newline='') as f:
|
|
||||||
writer = csv.writer(f)
|
|
||||||
writer.writerow(['owner_id', 'display_name', 'license_type', 'license_date', 'current_sk', 'voting_weight', 'status', 'last_updated'])
|
|
||||||
writer.writerow(['001', 'robbert_founder', 'work', timestamp, '0', '1.00', 'active', timestamp])
|
|
||||||
|
|
||||||
print("✅ Founding entrepreneur initialized in Book of Owners")
|
|
||||||
print("📝 Identity mapping created (private file)")
|
|
||||||
print("📊 Ready for founding work audit process")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
initialize_founder()
|
|
|
@ -1,62 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Initialize Founding Entrepreneur Roles
|
|
||||||
Set up Robbert with proper leadership team and founding entrepreneur role
|
|
||||||
"""
|
|
||||||
|
|
||||||
import csv
|
|
||||||
from datetime import datetime
|
|
||||||
import os
|
|
||||||
|
|
||||||
def initialize_founding_roles():
|
|
||||||
"""Set up founding entrepreneur with proper roles"""
|
|
||||||
|
|
||||||
print("🚀 INITIALIZING FOUNDING ENTREPRENEUR ROLES")
|
|
||||||
print("=" * 50)
|
|
||||||
|
|
||||||
base_path = os.path.join(os.path.dirname(__file__), '..')
|
|
||||||
book_file = os.path.join(base_path, 'ownership', 'book-of-owners.csv')
|
|
||||||
timestamp = datetime.now().isoformat() + 'Z'
|
|
||||||
|
|
||||||
# Read current book
|
|
||||||
try:
|
|
||||||
with open(book_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
records = list(reader)
|
|
||||||
|
|
||||||
# Update founder record (owner 001)
|
|
||||||
updated = False
|
|
||||||
for record in records:
|
|
||||||
if record['owner_id'] == '001':
|
|
||||||
print(f"👤 Found founder: {record['display_name']}")
|
|
||||||
|
|
||||||
# Check if already has the roles
|
|
||||||
if '3_1_leadership_team' in record['team_memberships']:
|
|
||||||
print("✅ Already assigned to leadership team")
|
|
||||||
else:
|
|
||||||
record['team_memberships'] = '3_1_leadership_team'
|
|
||||||
record['role_assignments'] = '4_1_1_founding_entrepreneur'
|
|
||||||
record['seniority_levels'] = 'senior'
|
|
||||||
record['last_updated'] = timestamp
|
|
||||||
updated = True
|
|
||||||
print("✅ Assigned to leadership team and founding entrepreneur role")
|
|
||||||
|
|
||||||
if updated:
|
|
||||||
# Write back
|
|
||||||
with open(book_file, 'w', newline='') as f:
|
|
||||||
fieldnames = ['owner_id', 'display_name', 'license_type', 'license_date', 'current_sk', 'voting_weight', 'status', 'team_memberships', 'role_assignments', 'seniority_levels', 'last_updated']
|
|
||||||
writer = csv.DictWriter(f, fieldnames=fieldnames)
|
|
||||||
writer.writeheader()
|
|
||||||
writer.writerows(records)
|
|
||||||
|
|
||||||
print("\n✅ Founding roles initialized successfully!")
|
|
||||||
else:
|
|
||||||
print("\n💡 No changes needed - roles already set up")
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
print("❌ Book of Owners not found")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ Error: {e}")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
initialize_founding_roles()
|
|
|
@ -1,146 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Organizational Management Script
|
|
||||||
Handle team memberships and role assignments
|
|
||||||
"""
|
|
||||||
|
|
||||||
import csv
|
|
||||||
import yaml
|
|
||||||
from datetime import datetime
|
|
||||||
import os
|
|
||||||
|
|
||||||
class OrganizationManager:
|
|
||||||
def __init__(self):
|
|
||||||
self.base_path = os.path.join(os.path.dirname(__file__), '..')
|
|
||||||
self.load_policies()
|
|
||||||
|
|
||||||
def load_policies(self):
|
|
||||||
"""Load organizational structure policies"""
|
|
||||||
with open(os.path.join(self.base_path, 'policies', 'organizational-structure.yml'), 'r') as f:
|
|
||||||
self.org_structure = yaml.safe_load(f)
|
|
||||||
|
|
||||||
with open(os.path.join(self.base_path, 'policies', 'license-policies.yml'), 'r') as f:
|
|
||||||
self.license_policies = yaml.safe_load(f)
|
|
||||||
|
|
||||||
def get_owner_info(self, owner_id):
|
|
||||||
"""Get complete owner information"""
|
|
||||||
book_file = os.path.join(self.base_path, 'ownership', 'book-of-owners.csv')
|
|
||||||
|
|
||||||
with open(book_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for owner in reader:
|
|
||||||
if owner['owner_id'] == owner_id:
|
|
||||||
# Parse multi-value fields
|
|
||||||
owner['team_list'] = [t.strip() for t in owner['team_memberships'].split(',') if t.strip()]
|
|
||||||
owner['role_list'] = [r.strip() for r in owner['role_assignments'].split(',') if r.strip()]
|
|
||||||
owner['seniority_list'] = [s.strip() for s in owner['seniority_levels'].split(',') if s.strip()]
|
|
||||||
return owner
|
|
||||||
return None
|
|
||||||
|
|
||||||
def assign_role(self, owner_id, role_id, seniority="junior"):
|
|
||||||
"""Assign a role to an owner"""
|
|
||||||
print(f"🎯 Assigning role {role_id} to owner {owner_id}...")
|
|
||||||
|
|
||||||
# Validate role exists
|
|
||||||
if role_id not in self.org_structure['roles']:
|
|
||||||
print(f"❌ Role {role_id} not found in organizational structure")
|
|
||||||
return False
|
|
||||||
|
|
||||||
role_info = self.org_structure['roles'][role_id]
|
|
||||||
team_id = role_info['team']
|
|
||||||
|
|
||||||
# Get current owner info
|
|
||||||
owner = self.get_owner_info(owner_id)
|
|
||||||
if not owner:
|
|
||||||
print(f"❌ Owner {owner_id} not found")
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Add team membership if not already member
|
|
||||||
if team_id not in owner['team_list']:
|
|
||||||
owner['team_list'].append(team_id)
|
|
||||||
|
|
||||||
# Add role assignment
|
|
||||||
if role_id not in owner['role_list']:
|
|
||||||
owner['role_list'].append(role_id)
|
|
||||||
owner['seniority_list'].append(seniority)
|
|
||||||
else:
|
|
||||||
print(f"⚠️ Owner already has role {role_id}")
|
|
||||||
return False
|
|
||||||
|
|
||||||
# Update Book of Owners
|
|
||||||
self.update_owner_record(owner_id, owner)
|
|
||||||
|
|
||||||
print(f"✅ Role {role_id} assigned to {owner['display_name']} as {seniority}")
|
|
||||||
print(f"✅ Auto-added to team {team_id}")
|
|
||||||
return True
|
|
||||||
|
|
||||||
def update_owner_record(self, owner_id, owner_data):
|
|
||||||
"""Update owner record in Book of Owners"""
|
|
||||||
book_file = os.path.join(self.base_path, 'ownership', 'book-of-owners.csv')
|
|
||||||
timestamp = datetime.now().isoformat() + 'Z'
|
|
||||||
|
|
||||||
# Read all records
|
|
||||||
records = []
|
|
||||||
with open(book_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for record in reader:
|
|
||||||
if record['owner_id'] == owner_id:
|
|
||||||
# Update this record
|
|
||||||
record['team_memberships'] = ','.join(owner_data['team_list'])
|
|
||||||
record['role_assignments'] = ','.join(owner_data['role_list'])
|
|
||||||
record['seniority_levels'] = ','.join(owner_data['seniority_list'])
|
|
||||||
record['last_updated'] = timestamp
|
|
||||||
records.append(record)
|
|
||||||
|
|
||||||
# Write back
|
|
||||||
with open(book_file, 'w', newline='') as f:
|
|
||||||
fieldnames = ['owner_id', 'display_name', 'license_type', 'license_date', 'current_sk', 'voting_weight', 'status', 'team_memberships', 'role_assignments', 'seniority_levels', 'last_updated']
|
|
||||||
writer = csv.DictWriter(f, fieldnames=fieldnames)
|
|
||||||
writer.writeheader()
|
|
||||||
writer.writerows(records)
|
|
||||||
|
|
||||||
def show_organizational_chart(self):
|
|
||||||
"""Display current organizational structure"""
|
|
||||||
print("🏢 SMARTUP ZERO ORGANIZATIONAL CHART")
|
|
||||||
print("=" * 50)
|
|
||||||
|
|
||||||
book_file = os.path.join(self.base_path, 'ownership', 'book-of-owners.csv')
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(book_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
owners = list(reader)
|
|
||||||
|
|
||||||
# Filter out comment rows
|
|
||||||
active_owners = [o for o in owners if o['owner_id'] and not o['owner_id'].startswith('#')]
|
|
||||||
|
|
||||||
if active_owners:
|
|
||||||
for owner in active_owners:
|
|
||||||
print(f"👤 {owner['display_name']} (#{owner['owner_id']})")
|
|
||||||
print(f" License: {owner['license_type']} | SK: {owner['current_sk']}")
|
|
||||||
print(f" Teams: {owner['team_memberships']}")
|
|
||||||
print(f" Roles: {owner['role_assignments']} ({owner['seniority_levels']})")
|
|
||||||
print()
|
|
||||||
else:
|
|
||||||
print("📝 No active owners found")
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
print("❌ Book of Owners not found")
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""Main organizational management interface"""
|
|
||||||
manager = OrganizationManager()
|
|
||||||
|
|
||||||
print("🏢 ORGANIZATIONAL MANAGEMENT")
|
|
||||||
print("=" * 40)
|
|
||||||
|
|
||||||
try:
|
|
||||||
manager.show_organizational_chart()
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ Error: {e}")
|
|
||||||
|
|
||||||
print("\n" + "=" * 50)
|
|
||||||
print("💡 Use this script to manage team memberships and role assignments")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1,203 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Book of Owners Management Script
|
|
||||||
Handles license purchases, upgrades, and validation
|
|
||||||
"""
|
|
||||||
|
|
||||||
import csv
|
|
||||||
import yaml
|
|
||||||
from datetime import datetime
|
|
||||||
import os
|
|
||||||
import uuid
|
|
||||||
|
|
||||||
class OwnershipManager:
|
|
||||||
def __init__(self):
|
|
||||||
self.base_path = os.path.join(os.path.dirname(__file__), '..')
|
|
||||||
self.load_policies()
|
|
||||||
|
|
||||||
def load_policies(self):
|
|
||||||
"""Load license policies"""
|
|
||||||
with open(os.path.join(self.base_path, 'policies', 'license-policies.yml'), 'r') as f:
|
|
||||||
self.policies = yaml.safe_load(f)
|
|
||||||
|
|
||||||
def generate_owner_id(self):
|
|
||||||
"""Generate unique owner ID"""
|
|
||||||
# Simple 3-digit incremental ID (could be more sophisticated)
|
|
||||||
book_file = os.path.join(self.base_path, 'ownership', 'book-of-owners.csv')
|
|
||||||
try:
|
|
||||||
with open(book_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
existing_ids = [int(row['owner_id']) for row in reader if row['owner_id'].isdigit()]
|
|
||||||
next_id = max(existing_ids) + 1 if existing_ids else 1
|
|
||||||
return f"{next_id:03d}"
|
|
||||||
except (FileNotFoundError, ValueError):
|
|
||||||
return "001"
|
|
||||||
|
|
||||||
def add_new_owner(self, real_name, email, display_name, license_type, payment_eur=0, privacy_level="alias_only"):
|
|
||||||
"""Add new owner to the system"""
|
|
||||||
owner_id = self.generate_owner_id()
|
|
||||||
timestamp = datetime.now().isoformat() + 'Z'
|
|
||||||
|
|
||||||
# Add to identity mapping (private)
|
|
||||||
identity_file = os.path.join(self.base_path, 'ownership', 'identity-mapping.csv')
|
|
||||||
with open(identity_file, 'a', newline='') as f:
|
|
||||||
writer = csv.writer(f)
|
|
||||||
writer.writerow([owner_id, real_name, email, display_name, privacy_level, timestamp])
|
|
||||||
|
|
||||||
# Add to license transactions
|
|
||||||
self.record_license_transaction(owner_id, "PURCHASE", "", license_type, payment_eur, "initial_purchase")
|
|
||||||
|
|
||||||
# Update book of owners
|
|
||||||
self.update_book_of_owners(owner_id, display_name, license_type)
|
|
||||||
|
|
||||||
print(f"✅ New owner added: {display_name} ({owner_id}) - {license_type} license")
|
|
||||||
return owner_id
|
|
||||||
|
|
||||||
def record_license_transaction(self, owner_id, transaction_type, from_license, to_license, payment_eur, reason, reference="manual", approver="system"):
|
|
||||||
"""Record license change in transaction log"""
|
|
||||||
timestamp = datetime.now().isoformat() + 'Z'
|
|
||||||
|
|
||||||
transactions_file = os.path.join(self.base_path, 'ownership', 'license-transactions.csv')
|
|
||||||
with open(transactions_file, 'a', newline='') as f:
|
|
||||||
writer = csv.writer(f)
|
|
||||||
writer.writerow([timestamp, owner_id, transaction_type, from_license, to_license, payment_eur, reason, reference, approver])
|
|
||||||
|
|
||||||
def update_book_of_owners(self, owner_id, display_name, license_type, current_sk=0, status="active"):
|
|
||||||
"""Update current book of owners record"""
|
|
||||||
timestamp = datetime.now().isoformat() + 'Z'
|
|
||||||
voting_weight = min(1.5, 1 + (current_sk / 1000))
|
|
||||||
|
|
||||||
book_file = os.path.join(self.base_path, 'ownership', 'book-of-owners.csv')
|
|
||||||
|
|
||||||
# Read existing records
|
|
||||||
records = []
|
|
||||||
try:
|
|
||||||
with open(book_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
records = [row for row in reader if row['owner_id'] != owner_id]
|
|
||||||
except FileNotFoundError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# Add/update record
|
|
||||||
records.append({
|
|
||||||
'owner_id': owner_id,
|
|
||||||
'display_name': display_name,
|
|
||||||
'license_type': license_type,
|
|
||||||
'license_date': timestamp,
|
|
||||||
'current_sk': current_sk,
|
|
||||||
'voting_weight': f"{voting_weight:.2f}",
|
|
||||||
'status': status,
|
|
||||||
'last_updated': timestamp
|
|
||||||
})
|
|
||||||
|
|
||||||
# Write back
|
|
||||||
with open(book_file, 'w', newline='') as f:
|
|
||||||
fieldnames = ['owner_id', 'display_name', 'license_type', 'license_date', 'current_sk', 'voting_weight', 'status', 'last_updated']
|
|
||||||
writer = csv.DictWriter(f, fieldnames=fieldnames)
|
|
||||||
writer.writeheader()
|
|
||||||
writer.writerows(records)
|
|
||||||
|
|
||||||
def check_sk_upgrades(self):
|
|
||||||
"""Check for automatic SK-based license upgrades"""
|
|
||||||
print("🔍 Checking for automatic license upgrades...")
|
|
||||||
|
|
||||||
# Load current SK balances from karma ledger
|
|
||||||
sk_balances = self.get_current_sk_balances()
|
|
||||||
|
|
||||||
# Check each owner for upgrade eligibility
|
|
||||||
book_file = os.path.join(self.base_path, 'ownership', 'book-of-owners.csv')
|
|
||||||
with open(book_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for owner in reader:
|
|
||||||
owner_id = owner['owner_id']
|
|
||||||
current_license = owner['license_type']
|
|
||||||
display_name = owner['display_name']
|
|
||||||
current_sk = sk_balances.get(display_name, 0)
|
|
||||||
|
|
||||||
# Check campaign -> watch upgrade
|
|
||||||
if current_license == 'campaign' and current_sk >= 100:
|
|
||||||
print(f"🎉 Auto-upgrade: {display_name} (Campaign → Watch) - {current_sk} SK earned!")
|
|
||||||
self.record_license_transaction(owner_id, "UPGRADE_SK", "campaign", "watch", 0, "sk_threshold_100")
|
|
||||||
self.update_book_of_owners(owner_id, display_name, "watch", current_sk)
|
|
||||||
|
|
||||||
def get_current_sk_balances(self):
|
|
||||||
"""Get current SK balances from karma ledger"""
|
|
||||||
balances = {}
|
|
||||||
karma_file = os.path.join(self.base_path, 'ledger', 'social-karma', 'transactions.csv')
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(karma_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
if row['type'] == 'KARMA':
|
|
||||||
balances[row['to']] = balances.get(row['to'], 0) + int(row['amount'])
|
|
||||||
elif row['type'] == 'DECAY':
|
|
||||||
balances[row['from']] = balances.get(row['from'], 0) - int(row['amount'])
|
|
||||||
except FileNotFoundError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
return balances
|
|
||||||
|
|
||||||
def validate_currency_award(self, username, currency_type, amount):
|
|
||||||
"""Validate if user can receive SC or SK award"""
|
|
||||||
# Get user's license type
|
|
||||||
book_file = os.path.join(self.base_path, 'ownership', 'book-of-owners.csv')
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(book_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for owner in reader:
|
|
||||||
if owner['display_name'] == username:
|
|
||||||
license_type = owner['license_type']
|
|
||||||
|
|
||||||
# Check SC eligibility
|
|
||||||
if currency_type == 'SC':
|
|
||||||
can_earn = self.policies['license_capabilities'][license_type]['can_earn_sc']
|
|
||||||
if not can_earn:
|
|
||||||
return False, f"{username} has {license_type} license - cannot earn SC (needs work/organizational)"
|
|
||||||
|
|
||||||
# Check SK eligibility
|
|
||||||
elif currency_type == 'SK':
|
|
||||||
can_earn = self.policies['license_capabilities'][license_type]['can_earn_sk']
|
|
||||||
if not can_earn:
|
|
||||||
return False, f"{username} has {license_type} license - cannot earn SK"
|
|
||||||
|
|
||||||
return True, f"✅ {username} eligible for {amount} {currency_type}"
|
|
||||||
|
|
||||||
return False, f"❌ {username} not found in Book of Owners"
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
return False, "❌ Book of Owners not found"
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""Main owner management interface"""
|
|
||||||
manager = OwnershipManager()
|
|
||||||
|
|
||||||
print("📖 BOOK OF OWNERS MANAGEMENT")
|
|
||||||
print("=" * 40)
|
|
||||||
print("1. Add new owner")
|
|
||||||
print("2. Check SK upgrade eligibility")
|
|
||||||
print("3. Validate currency award")
|
|
||||||
print("4. Show current owners")
|
|
||||||
|
|
||||||
# For now, just show current owners
|
|
||||||
book_file = os.path.join(manager.base_path, 'ownership', 'book-of-owners.csv')
|
|
||||||
try:
|
|
||||||
with open(book_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
owners = list(reader)
|
|
||||||
|
|
||||||
if owners:
|
|
||||||
print(f"\n📊 Current Owners: {len([o for o in owners if o['owner_id']])}")
|
|
||||||
print("-" * 60)
|
|
||||||
for owner in owners:
|
|
||||||
if owner['owner_id']: # Skip header comments
|
|
||||||
print(f"{owner['owner_id']}: {owner['display_name']} ({owner['license_type']}) - {owner['current_sk']} SK")
|
|
||||||
else:
|
|
||||||
print("📝 No owners registered yet")
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
print("📝 Book of Owners not created yet")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1,221 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Comprehensive Smartup Zero System Health Check
|
|
||||||
Validates complete currency ledger and task management system
|
|
||||||
"""
|
|
||||||
|
|
||||||
import os
|
|
||||||
import csv
|
|
||||||
import yaml
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
class SystemChecker:
|
|
||||||
def __init__(self):
|
|
||||||
self.base_path = Path(__file__).parent.parent
|
|
||||||
self.errors = []
|
|
||||||
self.warnings = []
|
|
||||||
|
|
||||||
def check_file_structure(self):
|
|
||||||
"""Validate complete file structure exists"""
|
|
||||||
print("📁 CHECKING FILE STRUCTURE")
|
|
||||||
print("=" * 30)
|
|
||||||
|
|
||||||
required_files = [
|
|
||||||
"ledger/smartup-credits/transactions.csv",
|
|
||||||
"ledger/social-karma/transactions.csv",
|
|
||||||
"ledger/pending-sc/transactions.csv",
|
|
||||||
"ledger/treasury/balance.csv",
|
|
||||||
"ledger/task-management/task-budgets.csv",
|
|
||||||
"ledger/task-management/session-logs.csv",
|
|
||||||
"ownership/book-of-owners.csv",
|
|
||||||
"policies/credit-rates.yml",
|
|
||||||
"policies/validation-rules.yml",
|
|
||||||
"policies/task-management/effort-assessment-template.yml",
|
|
||||||
"policies/task-management/mission-leader-rules.yml"
|
|
||||||
]
|
|
||||||
|
|
||||||
for file_path in required_files:
|
|
||||||
full_path = self.base_path / file_path
|
|
||||||
if full_path.exists():
|
|
||||||
print(f"✅ {file_path}")
|
|
||||||
else:
|
|
||||||
print(f"❌ {file_path}")
|
|
||||||
self.errors.append(f"Missing required file: {file_path}")
|
|
||||||
|
|
||||||
def validate_csv_integrity(self):
|
|
||||||
"""Check CSV files can be parsed and have proper headers"""
|
|
||||||
print(f"\n📊 VALIDATING CSV INTEGRITY")
|
|
||||||
print("=" * 30)
|
|
||||||
|
|
||||||
csv_files = {
|
|
||||||
"ledger/smartup-credits/transactions.csv": ["timestamp", "type", "amount", "from", "to", "reference"],
|
|
||||||
"ledger/treasury/balance.csv": ["timestamp", "event_type", "total_eur_balance", "sc_outstanding"],
|
|
||||||
"ledger/task-management/task-budgets.csv": ["task_id", "total_sc_budget", "attacker_alias", "defender_alias"],
|
|
||||||
"ownership/book-of-owners.csv": ["owner_id", "display_name", "license_type"]
|
|
||||||
}
|
|
||||||
|
|
||||||
for file_path, required_headers in csv_files.items():
|
|
||||||
full_path = self.base_path / file_path
|
|
||||||
if full_path.exists():
|
|
||||||
try:
|
|
||||||
with open(full_path, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
headers = reader.fieldnames
|
|
||||||
|
|
||||||
missing_headers = [h for h in required_headers if h not in headers]
|
|
||||||
if missing_headers:
|
|
||||||
print(f"⚠️ {file_path} - Missing headers: {missing_headers}")
|
|
||||||
self.warnings.append(f"{file_path} missing headers: {missing_headers}")
|
|
||||||
else:
|
|
||||||
print(f"✅ {file_path}")
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ {file_path} - Parse error: {e}")
|
|
||||||
self.errors.append(f"CSV parse error in {file_path}: {e}")
|
|
||||||
|
|
||||||
def validate_treasury_balance(self):
|
|
||||||
"""Check 3x rule compliance and balance integrity"""
|
|
||||||
print(f"\n💰 VALIDATING TREASURY BALANCE")
|
|
||||||
print("=" * 30)
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Get latest treasury state
|
|
||||||
treasury_file = self.base_path / "ledger/treasury/balance.csv"
|
|
||||||
latest_balance = {"sc_outstanding": 0, "total_eur_balance": 0}
|
|
||||||
|
|
||||||
with open(treasury_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
if not row['timestamp'].startswith('#') and row['timestamp']:
|
|
||||||
latest_balance = {
|
|
||||||
"sc_outstanding": int(row['sc_outstanding']),
|
|
||||||
"total_eur_balance": float(row['total_eur_balance'])
|
|
||||||
}
|
|
||||||
|
|
||||||
# Calculate SC outstanding from transactions
|
|
||||||
sc_file = self.base_path / "ledger/smartup-credits/transactions.csv"
|
|
||||||
calculated_outstanding = 0
|
|
||||||
|
|
||||||
with open(sc_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
if not row['timestamp'].startswith('#') and row['timestamp']:
|
|
||||||
if row['type'] == 'SC':
|
|
||||||
calculated_outstanding += int(row['amount'])
|
|
||||||
elif row['type'] in ['REDEEM', 'DESTROY']:
|
|
||||||
calculated_outstanding -= int(row['amount'])
|
|
||||||
|
|
||||||
print(f"Treasury SC Outstanding: {latest_balance['sc_outstanding']}")
|
|
||||||
print(f"Calculated SC Outstanding: {calculated_outstanding}")
|
|
||||||
print(f"EUR Treasury Balance: €{latest_balance['total_eur_balance']}")
|
|
||||||
|
|
||||||
if latest_balance['sc_outstanding'] != calculated_outstanding:
|
|
||||||
self.errors.append(f"Treasury/SC mismatch: {latest_balance['sc_outstanding']} vs {calculated_outstanding}")
|
|
||||||
print(f"❌ Treasury balance mismatch!")
|
|
||||||
else:
|
|
||||||
print(f"✅ Treasury balance consistent")
|
|
||||||
|
|
||||||
# Check 3x rule
|
|
||||||
if latest_balance['total_eur_balance'] > 0:
|
|
||||||
ratio = latest_balance['sc_outstanding'] / (latest_balance['total_eur_balance'] * 3)
|
|
||||||
if ratio <= 1:
|
|
||||||
print(f"✅ 3x Rule compliant ({ratio:.1%})")
|
|
||||||
else:
|
|
||||||
print(f"❌ 3x Rule violation ({ratio:.1%})")
|
|
||||||
self.errors.append(f"3x rule violation: {ratio:.1%}")
|
|
||||||
else:
|
|
||||||
if latest_balance['sc_outstanding'] > 0:
|
|
||||||
print(f"⚠️ 3x Rule: SC outstanding but no treasury funding")
|
|
||||||
self.warnings.append("SC outstanding without treasury funding")
|
|
||||||
else:
|
|
||||||
print(f"✅ 3x Rule: No SC outstanding, no treasury needed")
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ Treasury validation failed: {e}")
|
|
||||||
self.errors.append(f"Treasury validation error: {e}")
|
|
||||||
|
|
||||||
def validate_task_system(self):
|
|
||||||
"""Check task-management system integrity"""
|
|
||||||
print(f"\n🎯 VALIDATING TASK SYSTEM")
|
|
||||||
print("=" * 30)
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Check if task budgets match session logs
|
|
||||||
budget_file = self.base_path / "ledger/task-management/task-budgets.csv"
|
|
||||||
session_file = self.base_path / "ledger/task-management/session-logs.csv"
|
|
||||||
|
|
||||||
task_budgets = {}
|
|
||||||
if budget_file.exists():
|
|
||||||
with open(budget_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
task_budgets[row['task_id']] = row
|
|
||||||
|
|
||||||
print(f"✅ {len(task_budgets)} tasks in budget system")
|
|
||||||
|
|
||||||
session_logs = {}
|
|
||||||
if session_file.exists():
|
|
||||||
with open(session_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
session_logs[row['task_id']] = row
|
|
||||||
|
|
||||||
print(f"✅ {len(session_logs)} completed sessions logged")
|
|
||||||
|
|
||||||
# Verify ADM split calculations
|
|
||||||
for task_id, budget in task_budgets.items():
|
|
||||||
total_budget = int(budget['total_sc_budget'])
|
|
||||||
attacker_sc = int(budget['attacker_sc'])
|
|
||||||
defender_sc = int(budget['defender_sc'])
|
|
||||||
|
|
||||||
expected_attacker = int(total_budget * 0.9)
|
|
||||||
expected_defender = int(total_budget * 0.1)
|
|
||||||
|
|
||||||
if attacker_sc != expected_attacker or defender_sc != expected_defender:
|
|
||||||
print(f"⚠️ {task_id}: ADM split incorrect")
|
|
||||||
self.warnings.append(f"{task_id} has incorrect ADM split")
|
|
||||||
else:
|
|
||||||
print(f"✅ {task_id}: ADM split correct")
|
|
||||||
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ Task system validation failed: {e}")
|
|
||||||
self.errors.append(f"Task system validation error: {e}")
|
|
||||||
|
|
||||||
def run_complete_check(self):
|
|
||||||
"""Run all system checks"""
|
|
||||||
print("🚀 SMARTUP ZERO COMPREHENSIVE SYSTEM CHECK")
|
|
||||||
print("=" * 50)
|
|
||||||
|
|
||||||
self.check_file_structure()
|
|
||||||
self.validate_csv_integrity()
|
|
||||||
self.validate_treasury_balance()
|
|
||||||
self.validate_task_system()
|
|
||||||
|
|
||||||
print(f"\n📊 SYSTEM CHECK RESULTS")
|
|
||||||
print("=" * 30)
|
|
||||||
|
|
||||||
if self.errors:
|
|
||||||
print(f"❌ {len(self.errors)} ERRORS FOUND:")
|
|
||||||
for error in self.errors:
|
|
||||||
print(f" • {error}")
|
|
||||||
|
|
||||||
if self.warnings:
|
|
||||||
print(f"⚠️ {len(self.warnings)} WARNINGS:")
|
|
||||||
for warning in self.warnings:
|
|
||||||
print(f" • {warning}")
|
|
||||||
|
|
||||||
if not self.errors and not self.warnings:
|
|
||||||
print("🎉 SYSTEM CHECK PASSED!")
|
|
||||||
print("✅ All components operational")
|
|
||||||
print("✅ Data integrity verified")
|
|
||||||
print("✅ Ready for production use")
|
|
||||||
elif not self.errors:
|
|
||||||
print("✅ SYSTEM OPERATIONAL (with warnings)")
|
|
||||||
print("💡 Address warnings for optimal performance")
|
|
||||||
else:
|
|
||||||
print("❌ SYSTEM CHECK FAILED")
|
|
||||||
print("🔧 Fix errors before production deployment")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
checker = SystemChecker()
|
|
||||||
checker.run_complete_check()
|
|
|
@ -1,250 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Assess work session effort and recommend SC payout
|
|
||||||
Converts human collaboration into fair compensation through structured evaluation
|
|
||||||
Version: 0.1 (Prototype for 6_0_3_0)
|
|
||||||
"""
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import csv
|
|
||||||
import yaml
|
|
||||||
from datetime import datetime
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
class SessionAssessor:
|
|
||||||
def __init__(self):
|
|
||||||
# Fix: Need to go up 3 levels from scripts/task-management/ to currency-ledger/
|
|
||||||
self.base_path = Path(__file__).parent.parent.parent
|
|
||||||
self.policies_path = self.base_path / "policies" / "task-management"
|
|
||||||
self.ledger_path = self.base_path / "ledger"
|
|
||||||
|
|
||||||
print(f"Debug: Base path = {self.base_path}")
|
|
||||||
print(f"Debug: Policies path = {self.policies_path}")
|
|
||||||
|
|
||||||
def load_assessment_template(self):
|
|
||||||
"""Load effort assessment scoring criteria"""
|
|
||||||
template_file = self.policies_path / "effort-assessment-template.yml"
|
|
||||||
print(f"Debug: Looking for template at {template_file}")
|
|
||||||
|
|
||||||
with open(template_file, 'r') as f:
|
|
||||||
return yaml.safe_load(f)
|
|
||||||
|
|
||||||
def get_task_data(self, task_id):
|
|
||||||
"""Retrieve task budget information"""
|
|
||||||
budget_file = self.ledger_path / "task-management" / "task-budgets.csv"
|
|
||||||
|
|
||||||
with open(budget_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
if row['task_id'] == task_id:
|
|
||||||
return row
|
|
||||||
|
|
||||||
raise ValueError(f"Task {task_id} not found in task budgets")
|
|
||||||
|
|
||||||
def calculate_payout_percentage(self, attacker_score, defender_score, collaboration_score, template):
|
|
||||||
"""Calculate SC payout percentage based on effort scores"""
|
|
||||||
total_score = attacker_score + defender_score + collaboration_score
|
|
||||||
max_score = 30 # 3 categories × 10 points each
|
|
||||||
|
|
||||||
# Use template scoring ranges
|
|
||||||
payout_ranges = template['payout_calculation']
|
|
||||||
|
|
||||||
if total_score >= 27: # 90%+ of max
|
|
||||||
return 95 # excellent_session range
|
|
||||||
elif total_score >= 24: # 80%+ of max
|
|
||||||
return 85 # good_session range
|
|
||||||
elif total_score >= 18: # 60%+ of max
|
|
||||||
return 70 # adequate_session range
|
|
||||||
elif total_score >= 6: # 20%+ of max
|
|
||||||
return 40 # poor_session range
|
|
||||||
else:
|
|
||||||
return 10 # failed_session range
|
|
||||||
|
|
||||||
def create_session_log(self, session_data):
|
|
||||||
"""Log session details for transparency"""
|
|
||||||
session_file = self.ledger_path / "task-management" / "session-logs.csv"
|
|
||||||
|
|
||||||
# Create header if file doesn't exist
|
|
||||||
if not session_file.exists():
|
|
||||||
with open(session_file, 'w', newline='') as f:
|
|
||||||
writer = csv.writer(f)
|
|
||||||
writer.writerow([
|
|
||||||
'session_id', 'task_id', 'start_time', 'end_time',
|
|
||||||
'attacker', 'defender', 'mission_leader',
|
|
||||||
'attacker_effort_score', 'defender_learning_score', 'collaboration_score',
|
|
||||||
'total_score', 'recommended_payout_percent', 'session_notes'
|
|
||||||
])
|
|
||||||
|
|
||||||
# Add session record
|
|
||||||
with open(session_file, 'a', newline='') as f:
|
|
||||||
writer = csv.writer(f)
|
|
||||||
writer.writerow([
|
|
||||||
session_data['session_id'],
|
|
||||||
session_data['task_id'],
|
|
||||||
session_data['start_time'],
|
|
||||||
session_data['end_time'],
|
|
||||||
session_data['attacker'],
|
|
||||||
session_data['defender'],
|
|
||||||
session_data['mission_leader'],
|
|
||||||
session_data['attacker_effort_score'],
|
|
||||||
session_data['defender_learning_score'],
|
|
||||||
session_data['collaboration_score'],
|
|
||||||
session_data['total_score'],
|
|
||||||
session_data['recommended_payout_percent'],
|
|
||||||
session_data['session_notes']
|
|
||||||
])
|
|
||||||
|
|
||||||
def create_pending_sc_entries(self, task_data, session_data):
|
|
||||||
"""Create entries in pending-sc for democratic validation"""
|
|
||||||
pending_file = self.ledger_path / "pending-sc" / "transactions.csv"
|
|
||||||
|
|
||||||
# Calculate actual SC amounts
|
|
||||||
payout_percent = session_data['recommended_payout_percent'] / 100
|
|
||||||
attacker_sc = int(int(task_data['attacker_sc']) * payout_percent)
|
|
||||||
defender_sc = int(int(task_data['defender_sc']) * payout_percent)
|
|
||||||
|
|
||||||
# Create pending SC entries (integrate with existing system)
|
|
||||||
entries = [
|
|
||||||
{
|
|
||||||
'timestamp': datetime.now().isoformat(),
|
|
||||||
'type': 'PENDING_SC',
|
|
||||||
'amount': attacker_sc,
|
|
||||||
'from': '',
|
|
||||||
'to': task_data['attacker_alias'],
|
|
||||||
'reference': f"task-{task_data['task_id']}-attacker",
|
|
||||||
'description': f"Task {task_data['task_id']}: {task_data['title']} - Attacker role ({session_data['recommended_payout_percent']}% effort payout)",
|
|
||||||
'validator_required': 'team-captain',
|
|
||||||
'phase': 'validation',
|
|
||||||
'evidence_link': task_data['forgejo_issue_url'],
|
|
||||||
'status': 'PENDING_VALIDATION',
|
|
||||||
'vesting_tranche': ''
|
|
||||||
},
|
|
||||||
{
|
|
||||||
'timestamp': datetime.now().isoformat(),
|
|
||||||
'type': 'PENDING_SC',
|
|
||||||
'amount': defender_sc,
|
|
||||||
'from': '',
|
|
||||||
'to': task_data['defender_alias'],
|
|
||||||
'reference': f"task-{task_data['task_id']}-defender",
|
|
||||||
'description': f"Task {task_data['task_id']}: {task_data['title']} - Defender role ({session_data['recommended_payout_percent']}% effort payout)",
|
|
||||||
'validator_required': 'team-captain',
|
|
||||||
'phase': 'validation',
|
|
||||||
'evidence_link': task_data['forgejo_issue_url'],
|
|
||||||
'status': 'PENDING_VALIDATION',
|
|
||||||
'vesting_tranche': ''
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
# Append to existing pending-sc file
|
|
||||||
with open(pending_file, 'a', newline='') as f:
|
|
||||||
writer = csv.writer(f)
|
|
||||||
for entry in entries:
|
|
||||||
writer.writerow([
|
|
||||||
entry['timestamp'],
|
|
||||||
entry['type'],
|
|
||||||
entry['amount'],
|
|
||||||
entry['from'],
|
|
||||||
entry['to'],
|
|
||||||
entry['reference'],
|
|
||||||
entry['description'],
|
|
||||||
entry['validator_required'],
|
|
||||||
entry['phase'],
|
|
||||||
entry['evidence_link'],
|
|
||||||
entry['status'],
|
|
||||||
entry['vesting_tranche']
|
|
||||||
])
|
|
||||||
|
|
||||||
return attacker_sc, defender_sc
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = argparse.ArgumentParser(
|
|
||||||
description="Assess work session and recommend SC payout"
|
|
||||||
)
|
|
||||||
parser.add_argument('--task-id', required=True,
|
|
||||||
help='Task ID (e.g., 6_1_3_0)')
|
|
||||||
parser.add_argument('--mission-leader', required=True,
|
|
||||||
help='Mission leader conducting assessment')
|
|
||||||
parser.add_argument('--start-time', required=True,
|
|
||||||
help='Session start time (ISO format)')
|
|
||||||
parser.add_argument('--end-time', required=True,
|
|
||||||
help='Session end time (ISO format)')
|
|
||||||
parser.add_argument('--attacker-effort-score', type=int, required=True,
|
|
||||||
choices=range(1, 11), help='Attacker effort score (1-10)')
|
|
||||||
parser.add_argument('--defender-learning-score', type=int, required=True,
|
|
||||||
choices=range(1, 11), help='Defender learning score (1-10)')
|
|
||||||
parser.add_argument('--collaboration-score', type=int, required=True,
|
|
||||||
choices=range(1, 11), help='Collaboration quality score (1-10)')
|
|
||||||
parser.add_argument('--session-notes', required=True,
|
|
||||||
help='Detailed assessment notes')
|
|
||||||
parser.add_argument('--override-payout', type=int,
|
|
||||||
help='Override calculated payout percentage (60-100)')
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
# Initialize assessor
|
|
||||||
assessor = SessionAssessor()
|
|
||||||
|
|
||||||
# Load assessment template
|
|
||||||
template = assessor.load_assessment_template()
|
|
||||||
|
|
||||||
# Get task data
|
|
||||||
task_data = assessor.get_task_data(args.task_id)
|
|
||||||
|
|
||||||
# Calculate or use override payout percentage
|
|
||||||
if args.override_payout:
|
|
||||||
if args.override_payout < 60 or args.override_payout > 100:
|
|
||||||
print("❌ Override payout must be between 60-100%")
|
|
||||||
return
|
|
||||||
payout_percent = args.override_payout
|
|
||||||
print(f"⚠️ Using override payout: {payout_percent}%")
|
|
||||||
else:
|
|
||||||
payout_percent = assessor.calculate_payout_percentage(
|
|
||||||
args.attacker_effort_score,
|
|
||||||
args.defender_learning_score,
|
|
||||||
args.collaboration_score,
|
|
||||||
template
|
|
||||||
)
|
|
||||||
|
|
||||||
# Generate session ID
|
|
||||||
session_id = f"sess_{args.task_id}_{datetime.now().strftime('%Y%m%d_%H%M')}"
|
|
||||||
|
|
||||||
# Prepare session data
|
|
||||||
session_data = {
|
|
||||||
'session_id': session_id,
|
|
||||||
'task_id': args.task_id,
|
|
||||||
'start_time': args.start_time,
|
|
||||||
'end_time': args.end_time,
|
|
||||||
'attacker': task_data['attacker_alias'],
|
|
||||||
'defender': task_data['defender_alias'],
|
|
||||||
'mission_leader': args.mission_leader,
|
|
||||||
'attacker_effort_score': args.attacker_effort_score,
|
|
||||||
'defender_learning_score': args.defender_learning_score,
|
|
||||||
'collaboration_score': args.collaboration_score,
|
|
||||||
'total_score': args.attacker_effort_score + args.defender_learning_score + args.collaboration_score,
|
|
||||||
'recommended_payout_percent': payout_percent,
|
|
||||||
'session_notes': args.session_notes
|
|
||||||
}
|
|
||||||
|
|
||||||
# Log session
|
|
||||||
assessor.create_session_log(session_data)
|
|
||||||
|
|
||||||
# Create pending SC entries
|
|
||||||
attacker_sc, defender_sc = assessor.create_pending_sc_entries(task_data, session_data)
|
|
||||||
|
|
||||||
# Output results
|
|
||||||
print(f"✅ Session Assessed: {session_id}")
|
|
||||||
print(f"📊 Total Score: {session_data['total_score']}/30")
|
|
||||||
print(f"💰 Recommended Payout: {payout_percent}%")
|
|
||||||
print(f"⚔️ Attacker SC: {attacker_sc} SC ({task_data['attacker_alias']})")
|
|
||||||
print(f"🛡️ Defender SC: {defender_sc} SC ({task_data['defender_alias']})")
|
|
||||||
print(f"📝 Session logged in: ledger/task-management/session-logs.csv")
|
|
||||||
print(f"⏳ Pending SC created in: ledger/pending-sc/transactions.csv")
|
|
||||||
print()
|
|
||||||
print("🔧 Next Steps:")
|
|
||||||
print("1. Team Captain reviews pending SC entries")
|
|
||||||
print("2. Community lazy consensus period (48h)")
|
|
||||||
print("3. SC awards processed via existing validation system")
|
|
||||||
print(f"4. Check status: python3 scripts/validate-pending-sc.py")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1,217 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Create task with SC budget allocation and ADM assignment tracking
|
|
||||||
Integrates with existing Smartup Zero currency ledger system
|
|
||||||
Version: 0.1 (Prototype for 6_0_3_0)
|
|
||||||
Location: 1_general_forum/currency-ledger/scripts/task-management/
|
|
||||||
"""
|
|
||||||
|
|
||||||
import argparse
|
|
||||||
import csv
|
|
||||||
import yaml
|
|
||||||
import os
|
|
||||||
from datetime import datetime
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
class TaskManager:
|
|
||||||
def __init__(self):
|
|
||||||
# Set paths relative to currency-ledger root
|
|
||||||
self.base_path = Path(__file__).parent.parent.parent
|
|
||||||
self.policies_path = self.base_path / "policies" / "task-management"
|
|
||||||
self.ledger_path = self.base_path / "ledger" / "task-management"
|
|
||||||
|
|
||||||
# Ensure directories exist
|
|
||||||
self.policies_path.mkdir(parents=True, exist_ok=True)
|
|
||||||
self.ledger_path.mkdir(parents=True, exist_ok=True)
|
|
||||||
|
|
||||||
def load_credit_rates(self):
|
|
||||||
"""Load SC rates and ADM split configuration"""
|
|
||||||
with open(self.base_path / "policies" / "credit-rates.yml", 'r') as f:
|
|
||||||
return yaml.safe_load(f)
|
|
||||||
|
|
||||||
def generate_task_id(self, objective_id):
|
|
||||||
"""
|
|
||||||
Generate next sequential task ID
|
|
||||||
Prototype version: 6_[seq]_[objective_suffix]
|
|
||||||
Future: Full admin index implementation with proper hierarchy
|
|
||||||
"""
|
|
||||||
# Get existing tasks to determine next sequence
|
|
||||||
existing_tasks = self.get_existing_tasks(objective_id)
|
|
||||||
next_seq = len(existing_tasks) + 1
|
|
||||||
|
|
||||||
# Extract objective suffix (e.g., "5_3_0" -> "3_0")
|
|
||||||
obj_parts = objective_id.split('_')[1:] if '_' in objective_id else ["0", "0"]
|
|
||||||
obj_suffix = '_'.join(obj_parts)
|
|
||||||
|
|
||||||
return f"6_{next_seq}_{obj_suffix}"
|
|
||||||
|
|
||||||
def get_existing_tasks(self, objective_id):
|
|
||||||
"""Get list of existing tasks for this objective"""
|
|
||||||
budget_file = self.ledger_path / "task-budgets.csv"
|
|
||||||
if not budget_file.exists():
|
|
||||||
return []
|
|
||||||
|
|
||||||
tasks = []
|
|
||||||
with open(budget_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
for row in reader:
|
|
||||||
if row['objective_id'] == objective_id:
|
|
||||||
tasks.append(row)
|
|
||||||
return tasks
|
|
||||||
|
|
||||||
def calculate_adm_split(self, total_sc, rates):
|
|
||||||
"""Calculate 90/10 split for Attacker/Defender"""
|
|
||||||
attacker_sc = int(total_sc * rates['adm_split']['attacker_percentage'] / 100)
|
|
||||||
defender_sc = int(total_sc * rates['adm_split']['defender_percentage'] / 100)
|
|
||||||
return attacker_sc, defender_sc
|
|
||||||
|
|
||||||
def create_task_budget_record(self, task_data):
|
|
||||||
"""Record task budget in tracking CSV"""
|
|
||||||
budget_file = self.ledger_path / "task-budgets.csv"
|
|
||||||
|
|
||||||
# Create header if file doesn't exist
|
|
||||||
if not budget_file.exists():
|
|
||||||
with open(budget_file, 'w', newline='') as f:
|
|
||||||
writer = csv.writer(f)
|
|
||||||
writer.writerow([
|
|
||||||
'task_id', 'forgejo_issue_url', 'objective_id', 'team_repo',
|
|
||||||
'total_sc_budget', 'attacker_alias', 'defender_alias',
|
|
||||||
'attacker_sc', 'defender_sc', 'created_date', 'captain_alias',
|
|
||||||
'status', 'title', 'description'
|
|
||||||
])
|
|
||||||
|
|
||||||
# Add task record
|
|
||||||
with open(budget_file, 'a', newline='') as f:
|
|
||||||
writer = csv.writer(f)
|
|
||||||
writer.writerow([
|
|
||||||
task_data['task_id'],
|
|
||||||
task_data['forgejo_url'],
|
|
||||||
task_data['objective_id'],
|
|
||||||
task_data['team_repo'],
|
|
||||||
task_data['total_sc_budget'],
|
|
||||||
task_data['attacker_alias'],
|
|
||||||
task_data['defender_alias'],
|
|
||||||
task_data['attacker_sc'],
|
|
||||||
task_data['defender_sc'],
|
|
||||||
task_data['created_date'],
|
|
||||||
task_data['captain_alias'],
|
|
||||||
task_data['status'],
|
|
||||||
task_data['title'],
|
|
||||||
task_data['description']
|
|
||||||
])
|
|
||||||
|
|
||||||
def generate_forgejo_issue_template(self, task_data):
|
|
||||||
"""Generate Forgejo issue description template"""
|
|
||||||
template = f"""# {task_data['task_id']}: {task_data['title']}
|
|
||||||
|
|
||||||
## 🎯 Task Overview
|
|
||||||
**Objective**: {task_data['objective_id']}
|
|
||||||
**Team**: {task_data['team_repo']}
|
|
||||||
**SC Budget**: {task_data['total_sc_budget']} SC
|
|
||||||
|
|
||||||
## 💰 ADM Split
|
|
||||||
- **Attacker (Senior)**: {task_data['attacker_sc']} SC ({task_data['attacker_alias'] or 'TBD'})
|
|
||||||
- **Defender (Junior)**: {task_data['defender_sc']} SC ({task_data['defender_alias'] or 'TBD'})
|
|
||||||
|
|
||||||
## 📋 Description
|
|
||||||
{task_data['description']}
|
|
||||||
|
|
||||||
## ✅ Completion Criteria
|
|
||||||
- [ ] Deliverables completed as specified
|
|
||||||
- [ ] Defender has learned and can explain the work
|
|
||||||
- [ ] Documentation updated for next contributor
|
|
||||||
- [ ] Evidence links provided for validation
|
|
||||||
|
|
||||||
## 🔗 Integration
|
|
||||||
**Currency Ledger Integration**: This task uses the effort-based SC payout system.
|
|
||||||
**Assessment**: Mission Leader will evaluate effort quality for SC payout percentage.
|
|
||||||
**Validation**: Follows existing democratic validation through validate-pending-sc.py
|
|
||||||
|
|
||||||
**Created**: {task_data['created_date']}
|
|
||||||
**Captain**: {task_data['captain_alias']}
|
|
||||||
**Status**: {task_data['status']}
|
|
||||||
"""
|
|
||||||
return template
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = argparse.ArgumentParser(
|
|
||||||
description="Create task with SC budget allocation"
|
|
||||||
)
|
|
||||||
parser.add_argument('--objective', required=True,
|
|
||||||
help='Objective ID (e.g., 5_3_0)')
|
|
||||||
parser.add_argument('--team-repo', required=True,
|
|
||||||
help='Team repo (e.g., 3_1_leadership_team)')
|
|
||||||
parser.add_argument('--title', required=True,
|
|
||||||
help='Task title')
|
|
||||||
parser.add_argument('--description', required=True,
|
|
||||||
help='Task description')
|
|
||||||
parser.add_argument('--sc-budget', type=int, required=True,
|
|
||||||
choices=[25, 50, 100, 200],
|
|
||||||
help='SC budget (25/50/100/200)')
|
|
||||||
parser.add_argument('--captain', required=True,
|
|
||||||
help='Team captain alias')
|
|
||||||
parser.add_argument('--attacker',
|
|
||||||
help='Attacker alias (optional)')
|
|
||||||
parser.add_argument('--defender',
|
|
||||||
help='Defender alias (optional)')
|
|
||||||
parser.add_argument('--forgejo-url',
|
|
||||||
help='Forgejo issue URL (if already created)')
|
|
||||||
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
# Initialize task manager
|
|
||||||
tm = TaskManager()
|
|
||||||
|
|
||||||
# Load credit rates
|
|
||||||
rates = tm.load_credit_rates()
|
|
||||||
|
|
||||||
# Generate task ID
|
|
||||||
task_id = tm.generate_task_id(args.objective)
|
|
||||||
|
|
||||||
# Calculate ADM split
|
|
||||||
attacker_sc, defender_sc = tm.calculate_adm_split(args.sc_budget, rates)
|
|
||||||
|
|
||||||
# Prepare task data
|
|
||||||
task_data = {
|
|
||||||
'task_id': task_id,
|
|
||||||
'forgejo_url': args.forgejo_url or 'TBD - Create manually',
|
|
||||||
'objective_id': args.objective,
|
|
||||||
'team_repo': args.team_repo,
|
|
||||||
'total_sc_budget': args.sc_budget,
|
|
||||||
'attacker_alias': args.attacker or '',
|
|
||||||
'defender_alias': args.defender or '',
|
|
||||||
'attacker_sc': attacker_sc,
|
|
||||||
'defender_sc': defender_sc,
|
|
||||||
'created_date': datetime.now().isoformat(),
|
|
||||||
'captain_alias': args.captain,
|
|
||||||
'status': 'created',
|
|
||||||
'title': args.title,
|
|
||||||
'description': args.description
|
|
||||||
}
|
|
||||||
|
|
||||||
# Create task budget record
|
|
||||||
tm.create_task_budget_record(task_data)
|
|
||||||
|
|
||||||
# Generate Forgejo template
|
|
||||||
template = tm.generate_forgejo_issue_template(task_data)
|
|
||||||
|
|
||||||
# Output results
|
|
||||||
print(f"✅ Task Created: {task_id}")
|
|
||||||
print(f"📊 SC Budget: {args.sc_budget} SC")
|
|
||||||
print(f"⚔️ Attacker: {attacker_sc} SC")
|
|
||||||
print(f"🛡️ Defender: {defender_sc} SC")
|
|
||||||
print(f"📁 Recorded in: ledger/task-management/task-budgets.csv")
|
|
||||||
print()
|
|
||||||
print("📋 FORGEJO ISSUE TEMPLATE:")
|
|
||||||
print("=" * 50)
|
|
||||||
print(template)
|
|
||||||
print("=" * 50)
|
|
||||||
print()
|
|
||||||
print("🔧 Next Steps:")
|
|
||||||
print("1. Create Forgejo issue with above template")
|
|
||||||
print("2. Update task record with Forgejo URL")
|
|
||||||
print("3. Assign ADM pair if not already specified")
|
|
||||||
print("4. Begin work session")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1,86 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Personal Profile Update Script
|
|
||||||
Update your own information safely
|
|
||||||
"""
|
|
||||||
|
|
||||||
import csv
|
|
||||||
import os
|
|
||||||
from datetime import datetime
|
|
||||||
|
|
||||||
def update_founder_profile():
|
|
||||||
"""Update founding entrepreneur profile"""
|
|
||||||
|
|
||||||
base_path = os.path.join(os.path.dirname(__file__), '..')
|
|
||||||
|
|
||||||
print("📝 UPDATE YOUR PROFILE")
|
|
||||||
print("=" * 30)
|
|
||||||
|
|
||||||
# Show current info
|
|
||||||
identity_file = os.path.join(base_path, 'ownership', 'identity-mapping.csv')
|
|
||||||
with open(identity_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
current_data = list(reader)[0] # Assuming you're owner 001
|
|
||||||
|
|
||||||
print("Current information:")
|
|
||||||
print(f" Real Name: {current_data['real_name']}")
|
|
||||||
print(f" Email: {current_data['email']}")
|
|
||||||
print(f" Display Name: {current_data['display_name']}")
|
|
||||||
print(f" Privacy Level: {current_data['privacy_level']}")
|
|
||||||
print()
|
|
||||||
|
|
||||||
# Get updates
|
|
||||||
print("Enter new values (press Enter to keep current):")
|
|
||||||
|
|
||||||
new_name = input(f"Real Name [{current_data['real_name']}]: ").strip()
|
|
||||||
if not new_name:
|
|
||||||
new_name = current_data['real_name']
|
|
||||||
|
|
||||||
new_email = input(f"Email [{current_data['email']}]: ").strip()
|
|
||||||
if not new_email:
|
|
||||||
new_email = current_data['email']
|
|
||||||
|
|
||||||
new_display = input(f"Display Name [{current_data['display_name']}]: ").strip()
|
|
||||||
if not new_display:
|
|
||||||
new_display = current_data['display_name']
|
|
||||||
|
|
||||||
new_privacy = input(f"Privacy Level [{current_data['privacy_level']}]: ").strip()
|
|
||||||
if not new_privacy:
|
|
||||||
new_privacy = current_data['privacy_level']
|
|
||||||
|
|
||||||
# Update identity mapping (private)
|
|
||||||
timestamp = datetime.now().isoformat() + 'Z'
|
|
||||||
with open(identity_file, 'w', newline='') as f:
|
|
||||||
writer = csv.writer(f)
|
|
||||||
writer.writerow(['owner_id', 'real_name', 'email', 'display_name', 'privacy_level', 'created_date'])
|
|
||||||
writer.writerow(['001', new_name, new_email, new_display, new_privacy, timestamp])
|
|
||||||
|
|
||||||
# Update book of owners if display name changed
|
|
||||||
if new_display != current_data['display_name']:
|
|
||||||
book_file = os.path.join(base_path, 'ownership', 'book-of-owners.csv')
|
|
||||||
|
|
||||||
# Read current book
|
|
||||||
with open(book_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
records = list(reader)
|
|
||||||
|
|
||||||
# Update display name for owner 001
|
|
||||||
for record in records:
|
|
||||||
if record['owner_id'] == '001':
|
|
||||||
record['display_name'] = new_display
|
|
||||||
record['last_updated'] = timestamp
|
|
||||||
|
|
||||||
# Write back
|
|
||||||
with open(book_file, 'w', newline='') as f:
|
|
||||||
fieldnames = ['owner_id', 'display_name', 'license_type', 'license_date', 'current_sk', 'voting_weight', 'status', 'last_updated']
|
|
||||||
writer = csv.DictWriter(f, fieldnames=fieldnames)
|
|
||||||
writer.writeheader()
|
|
||||||
writer.writerows(records)
|
|
||||||
|
|
||||||
print(f"✅ Display name updated to: {new_display}")
|
|
||||||
|
|
||||||
print("✅ Profile updated successfully!")
|
|
||||||
print("🔒 Private info stays private (not committed to git)")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
update_founder_profile()
|
|
|
@ -1,234 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Currency Ledger Validation Script
|
|
||||||
Ensures ledger integrity and policy compliance
|
|
||||||
"""
|
|
||||||
|
|
||||||
import csv
|
|
||||||
import yaml
|
|
||||||
from datetime import datetime
|
|
||||||
import os
|
|
||||||
|
|
||||||
def load_policies():
|
|
||||||
"""Load policy configuration files"""
|
|
||||||
policies = {}
|
|
||||||
policy_dir = os.path.join(os.path.dirname(__file__), '..', 'policies')
|
|
||||||
|
|
||||||
with open(os.path.join(policy_dir, 'credit-rates.yml'), 'r') as f:
|
|
||||||
policies['credit_rates'] = yaml.safe_load(f)
|
|
||||||
|
|
||||||
with open(os.path.join(policy_dir, 'karma-rules.yml'), 'r') as f:
|
|
||||||
policies['karma_rules'] = yaml.safe_load(f)
|
|
||||||
|
|
||||||
with open(os.path.join(policy_dir, 'validation-rules.yml'), 'r') as f:
|
|
||||||
policies['validation'] = yaml.safe_load(f)
|
|
||||||
|
|
||||||
return policies
|
|
||||||
|
|
||||||
def validate_sc_ledger():
|
|
||||||
"""Validate Smartup Credits ledger"""
|
|
||||||
print("🔍 Validating Smartup Credits ledger...")
|
|
||||||
|
|
||||||
total_sc = 0
|
|
||||||
ledger_file = os.path.join(os.path.dirname(__file__), '..', 'ledger', 'smartup-credits', 'transactions.csv')
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(ledger_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
transaction_count = 0
|
|
||||||
|
|
||||||
for row in reader:
|
|
||||||
if row['type'] == 'SC':
|
|
||||||
total_sc += int(row['amount'])
|
|
||||||
transaction_count += 1
|
|
||||||
elif row['type'] == 'REDEEM':
|
|
||||||
total_sc -= int(row['amount'])
|
|
||||||
transaction_count += 1
|
|
||||||
|
|
||||||
print(f"✅ Total SC Outstanding: {total_sc}")
|
|
||||||
print(f"✅ Transactions Processed: {transaction_count}")
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
print("❌ SC ledger file not found")
|
|
||||||
return False
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ Error validating SC ledger: {e}")
|
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
def validate_treasury():
|
|
||||||
"""Validate treasury balance and 3x rule"""
|
|
||||||
print("🔍 Validating treasury balance...")
|
|
||||||
|
|
||||||
treasury_file = os.path.join(os.path.dirname(__file__), '..', 'ledger', 'treasury', 'balance.csv')
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(treasury_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
rows = list(reader)
|
|
||||||
|
|
||||||
if rows:
|
|
||||||
latest = rows[-1]
|
|
||||||
eur_balance = float(latest['total_eur_balance'])
|
|
||||||
sc_outstanding = int(latest['sc_outstanding'])
|
|
||||||
ratio = float(latest['ratio'])
|
|
||||||
|
|
||||||
print(f"✅ EUR Treasury: €{eur_balance}")
|
|
||||||
print(f"✅ SC Outstanding: {sc_outstanding} SC")
|
|
||||||
print(f"✅ Current Ratio: {ratio:.2f}")
|
|
||||||
|
|
||||||
# Check 3x rule
|
|
||||||
if sc_outstanding <= (eur_balance * 3):
|
|
||||||
print("✅ 3x Rule: COMPLIANT")
|
|
||||||
else:
|
|
||||||
print("❌ 3x Rule: VIOLATION - Too much SC outstanding!")
|
|
||||||
return False
|
|
||||||
else:
|
|
||||||
print("⚠️ Treasury initialized but no transactions yet")
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
print("❌ Treasury file not found")
|
|
||||||
return False
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ Error validating treasury: {e}")
|
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""Main validation function"""
|
|
||||||
print("🚀 Smartup Zero Currency Ledger Validation")
|
|
||||||
print("=" * 50)
|
|
||||||
|
|
||||||
# Load policies
|
|
||||||
try:
|
|
||||||
policies = load_policies()
|
|
||||||
print("✅ Policy files loaded successfully")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ Error loading policies: {e}")
|
|
||||||
return
|
|
||||||
|
|
||||||
# Validate ledgers
|
|
||||||
sc_valid = validate_sc_ledger()
|
|
||||||
treasury_valid = validate_treasury()
|
|
||||||
|
|
||||||
print("=" * 50)
|
|
||||||
if sc_valid and treasury_valid:
|
|
||||||
print("🎉 All validations PASSED - Ledger is healthy!")
|
|
||||||
else:
|
|
||||||
print("🚨 Validation FAILED - Check errors above")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
|
|
||||||
def validate_organizational_structure():
|
|
||||||
"""Validate organizational assignments against policies"""
|
|
||||||
print("🏢 Validating organizational structure...")
|
|
||||||
|
|
||||||
book_file = os.path.join(os.path.dirname(__file__), '..', 'ownership', 'book-of-owners.csv')
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(book_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
|
|
||||||
total_owners = 0
|
|
||||||
team_counts = {}
|
|
||||||
role_counts = {}
|
|
||||||
|
|
||||||
for owner in reader:
|
|
||||||
if owner['owner_id']: # Skip header comments
|
|
||||||
total_owners += 1
|
|
||||||
|
|
||||||
teams = [t.strip() for t in owner['team_memberships'].split(',') if t.strip()]
|
|
||||||
roles = [r.strip() for r in owner['role_assignments'].split(',') if r.strip()]
|
|
||||||
|
|
||||||
for team in teams:
|
|
||||||
team_counts[team] = team_counts.get(team, 0) + 1
|
|
||||||
|
|
||||||
for role in roles:
|
|
||||||
role_counts[role] = role_counts.get(role, 0) + 1
|
|
||||||
|
|
||||||
print(f"✅ Total Active Owners: {total_owners}")
|
|
||||||
print(f"✅ Teams with Members: {len(team_counts)}")
|
|
||||||
print(f"✅ Roles Assigned: {len(role_counts)}")
|
|
||||||
|
|
||||||
# Show team distribution
|
|
||||||
if team_counts:
|
|
||||||
print("\n📊 Team Membership Distribution:")
|
|
||||||
for team, count in team_counts.items():
|
|
||||||
print(f" {team}: {count} members")
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
print("❌ Book of Owners not found")
|
|
||||||
return False
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ Error validating organizational structure: {e}")
|
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
# Update main() function to include organizational validation
|
|
||||||
def main():
|
|
||||||
"""Main validation function"""
|
|
||||||
print("🚀 Smartup Zero Currency Ledger Validation")
|
|
||||||
print("=" * 50)
|
|
||||||
|
|
||||||
# Load policies
|
|
||||||
try:
|
|
||||||
policies = load_policies()
|
|
||||||
print("✅ Policy files loaded successfully")
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ Error loading policies: {e}")
|
|
||||||
return
|
|
||||||
|
|
||||||
# Validate ledgers
|
|
||||||
sc_valid = validate_sc_ledger()
|
|
||||||
treasury_valid = validate_treasury()
|
|
||||||
org_valid = validate_organizational_structure()
|
|
||||||
|
|
||||||
print("=" * 50)
|
|
||||||
if sc_valid and treasury_valid and org_valid:
|
|
||||||
print("🎉 All validations PASSED - System is healthy!")
|
|
||||||
else:
|
|
||||||
print("🚨 Validation FAILED - Check errors above")
|
|
||||||
|
|
||||||
def validate_pending_sc_ledger():
|
|
||||||
"""Validate pending SC ledger and vesting rules"""
|
|
||||||
print("⏳ Validating Pending SC ledger...")
|
|
||||||
|
|
||||||
total_pending_sc = 0
|
|
||||||
ledger_file = os.path.join(os.path.dirname(__file__), '..', 'ledger', 'pending-sc', 'transactions.csv')
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(ledger_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
transaction_count = 0
|
|
||||||
|
|
||||||
for row in reader:
|
|
||||||
if row['type'] == 'PENDING_SC' and row['status'] != 'REJECTED':
|
|
||||||
total_pending_sc += int(row['amount'])
|
|
||||||
transaction_count += 1
|
|
||||||
|
|
||||||
print(f"✅ Total Pending SC: {total_pending_sc}")
|
|
||||||
print(f"✅ Pending Transactions: {transaction_count}")
|
|
||||||
|
|
||||||
# Check if pending SC is reasonable
|
|
||||||
if total_pending_sc > 50000: # Sanity check
|
|
||||||
print(f"⚠️ Large pending SC amount - ensure proper validation")
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
print("📝 No pending SC transactions found")
|
|
||||||
return True
|
|
||||||
except Exception as e:
|
|
||||||
print(f"❌ Error validating pending SC ledger: {e}")
|
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
# Update main validation to include pending SC
|
|
||||||
# Add this line in the main() function after treasury_valid = validate_treasury():
|
|
||||||
# pending_valid = validate_pending_sc_ledger()
|
|
||||||
|
|
||||||
# Update the final check:
|
|
||||||
# if sc_valid and treasury_valid and pending_valid and org_valid:
|
|
|
@ -1,59 +0,0 @@
|
||||||
#!/usr/bin/env python3
|
|
||||||
"""
|
|
||||||
Pending SC Validation Workflow
|
|
||||||
Handle validation of pending SC transactions
|
|
||||||
"""
|
|
||||||
|
|
||||||
import csv
|
|
||||||
import yaml
|
|
||||||
from datetime import datetime
|
|
||||||
import os
|
|
||||||
|
|
||||||
class PendingSCValidator:
|
|
||||||
def __init__(self):
|
|
||||||
self.base_path = os.path.join(os.path.dirname(__file__), '..')
|
|
||||||
|
|
||||||
def list_pending_validations(self):
|
|
||||||
"""Show all pending SC awaiting validation"""
|
|
||||||
print("⏳ PENDING SC VALIDATIONS")
|
|
||||||
print("=" * 30)
|
|
||||||
|
|
||||||
pending_file = os.path.join(self.base_path, 'ledger', 'pending-sc', 'transactions.csv')
|
|
||||||
|
|
||||||
try:
|
|
||||||
with open(pending_file, 'r') as f:
|
|
||||||
reader = csv.DictReader(f)
|
|
||||||
|
|
||||||
for row in reader:
|
|
||||||
if row['status'] == 'PENDING_VALIDATION':
|
|
||||||
print(f"📋 {row['reference']}")
|
|
||||||
print(f" Amount: {row['amount']} SC")
|
|
||||||
print(f" Owner: {row['to']}")
|
|
||||||
print(f" Validator: {row['validator_required']}")
|
|
||||||
print(f" Tranche: {row['vesting_tranche']}")
|
|
||||||
print(f" Evidence: {row['evidence_link']}")
|
|
||||||
print()
|
|
||||||
|
|
||||||
except FileNotFoundError:
|
|
||||||
print("📝 No pending SC file found")
|
|
||||||
|
|
||||||
def approve_pending_sc(self, reference, validator, notes=""):
|
|
||||||
"""Approve a pending SC transaction"""
|
|
||||||
# Move from pending to live SC ledger
|
|
||||||
# This would be called by Team Captains during validation
|
|
||||||
print(f"✅ Approving {reference} by {validator}")
|
|
||||||
# Implementation: Move record from pending to live ledger
|
|
||||||
|
|
||||||
def main():
|
|
||||||
"""Main pending SC validation interface"""
|
|
||||||
validator = PendingSCValidator()
|
|
||||||
|
|
||||||
print("⏳ PENDING SC VALIDATION SYSTEM")
|
|
||||||
print("=" * 35)
|
|
||||||
|
|
||||||
validator.list_pending_validations()
|
|
||||||
|
|
||||||
print("💡 Team Captains can validate pending SC using this system")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
|
@ -1,34 +0,0 @@
|
||||||
# Contact Us
|
|
||||||
|
|
||||||
We would love to hear from you. Whether you are interested in contributing, forming a partnership, or have a question about the project, please use the form below. Our team monitors submissions and will get back to you shortly.
|
|
||||||
|
|
||||||
<form class="contact-form" action="https://api.staticforms.xyz/submit" method="post">
|
|
||||||
<!-- REQUIRED: Your StaticForms access key, wrapped in quotes. -->
|
|
||||||
<input type="hidden" name="accessKey" value="sf_ha7960c038fb88i3hbgf0d81">
|
|
||||||
|
|
||||||
<!-- Sets the subject of the email you will receive -->
|
|
||||||
<input type="hidden" name="subject" value="Contact Form Submission - Smartup Zero">
|
|
||||||
|
|
||||||
<!-- Redirects user to a thank you page after submission -->
|
|
||||||
<input type="hidden" name="redirectTo" value="https://timeline0.org/0_timeline/thank-you/">
|
|
||||||
|
|
||||||
<!-- Anti-spam honeypot field. Do not change. -->
|
|
||||||
<input type="text" name="honeypot" style="display: none" tabindex="-1" autocomplete="off">
|
|
||||||
|
|
||||||
<!-- Form Fields -->
|
|
||||||
<label for="name">Name:</label>
|
|
||||||
<input type="text" id="name" name="name" required>
|
|
||||||
|
|
||||||
<!-- CRITICAL: The user's email field, correctly named "_replyto" -->
|
|
||||||
<label for="email">Your Email (for replies):</label>
|
|
||||||
<input type="email" id="email" name="_replyto" required>
|
|
||||||
|
|
||||||
<label for="message">Message:</label>
|
|
||||||
<textarea id="message" name="message" rows="8" required></textarea>
|
|
||||||
|
|
||||||
<!-- The reCAPTCHA key, correctly wrapped in quotes -->
|
|
||||||
<div class="g-recaptcha" data-sitekey="6LcXVZcrAAAAAErKk03ysIccvSose25YnkeiBP-b"></div>
|
|
||||||
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
|
|
||||||
|
|
||||||
<button type="submit">Send Message</button>
|
|
||||||
</form>
|
|
|
@ -1,187 +0,0 @@
|
||||||
## :material-earth: The External Subsystem: A Planetary Organization
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
Smartups are designed as digital-first, globally-distributed organizations that transcend national boundaries and political cycles. We envision a new external framework where planetary challenges get planetary solutions, free from the distortions of nation-state politics.
|
|
||||||
|
|
||||||
### Beyond Borders, Beyond Politics
|
|
||||||
|
|
||||||
When we look at why organizations fail to address SDGs, we see a pattern: they get trapped in political cycles, pulled by national interests, and distracted by daily crises. A startup in Silicon Valley optimizes for US tax law. An NGO in Brussels navigates EU regulations. A company in Singapore plays different rules than one in São Paulo.
|
|
||||||
|
|
||||||
Meanwhile, climate change doesn't care about borders. Inequality doesn't pause for elections. The SDGs don't shift with news cycles.
|
|
||||||
|
|
||||||
!!! warning "The Defocused Organization"
|
|
||||||
**Smartups are intentionally defocused from:**<br>
|
|
||||||
- Daily political drama<br>
|
|
||||||
- National election cycles<br>
|
|
||||||
- Geopolitical tensions<br>
|
|
||||||
- Regulatory arbitrage<br>
|
|
||||||
- News cycle reactions<br><br>
|
|
||||||
**We stay focused on:**<br>
|
|
||||||
- SDGs (always on the horizon)<br>
|
|
||||||
- Long-term planetary health<br>
|
|
||||||
- Human needs regardless of nationality<br>
|
|
||||||
- Scientific reality over political narrative<br>
|
|
||||||
|
|
||||||
### The Digital-First Entity
|
|
||||||
|
|
||||||
<div class="grid cards" markdown>
|
|
||||||
|
|
||||||
- :material-earth-box:{ .lg .middle } **Exists in Cyberspace**
|
|
||||||
---
|
|
||||||
No physical headquarters<br>
|
|
||||||
No national registration<br>
|
|
||||||
Digital infrastructure only<br>
|
|
||||||
Operates 24/7 globally<br>
|
|
||||||
Jurisdiction: The Internet<br>
|
|
||||||
|
|
||||||
- :material-account-heart:{ .lg .middle } **Open to All Humanity**
|
|
||||||
---
|
|
||||||
Join from anywhere<br>
|
|
||||||
Contribute from anywhere<br>
|
|
||||||
No visa requirements<br>
|
|
||||||
No geographic discrimination<br>
|
|
||||||
Talent without borders<br>
|
|
||||||
|
|
||||||
- :material-scale-balance:{ .lg .middle } **Equal Pay Globally**
|
|
||||||
---
|
|
||||||
Same task = same pay<br>
|
|
||||||
No geographic arbitrage<br>
|
|
||||||
Value work, not location<br>
|
|
||||||
Purchasing power parity?<br>
|
|
||||||
That's their problem<br>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
### Why National Frameworks Fail Digital Organizations
|
|
||||||
|
|
||||||
!!! example "The Friction of Nation-States"
|
|
||||||
**Scenario**: A climate-focused Smartup needs a developer<br><br>
|
|
||||||
**Traditional hiring**:<br>
|
|
||||||
- Best candidate is in Bangladesh ❌ Visa complexity<br>
|
|
||||||
- Second choice in France ❌ Employment law maze<br>
|
|
||||||
- Third choice in Brazil ❌ Tax treaty issues<br>
|
|
||||||
- Settle for local candidate ✓ But not optimal<br><br>
|
|
||||||
**Smartup approach**:<br>
|
|
||||||
- Best candidate in Bangladesh ✓ Joins immediately<br>
|
|
||||||
- Earns same as anyone else ✓ 500 SC for the task<br>
|
|
||||||
- No visa, no employment contract ✓ Just contribution<br>
|
|
||||||
- Optimal talent for optimal solution ✓ SDGs advance<br>
|
|
||||||
|
|
||||||
### The Vision: Planetary Governance for Planetary Organizations
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
graph TD
|
|
||||||
UN[UN or Global Body<br/>Planetary Jurisdiction] --> SR[Smartup Registry<br/>Digital Entity Recognition]
|
|
||||||
SR --> S1[Smartup Alpha<br/>Clean Energy]
|
|
||||||
SR --> S2[Smartup Beta<br/>Food Security]
|
|
||||||
SR --> S3[Smartup Gamma<br/>Health Access]
|
|
||||||
SR --> SZ[Smartup Zero<br/>Emergency Comms]
|
|
||||||
|
|
||||||
S1 --> G[Global Talent Pool]
|
|
||||||
S2 --> G
|
|
||||||
S3 --> G
|
|
||||||
SZ --> G
|
|
||||||
|
|
||||||
style UN fill:#4ecdc4
|
|
||||||
style G fill:#8bc34a
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! tip "Learning from Estonia's E-Residency"
|
|
||||||
Estonia proved digital citizenship works:<br>
|
|
||||||
- 100,000+ e-residents from 170+ countries<br>
|
|
||||||
- Digital identity enables business creation<br>
|
|
||||||
- Geography becomes irrelevant<br>
|
|
||||||
- Services delivered digitally<br><br>
|
|
||||||
Smartups take this further: not just digital residency, but digital-native organizations with planetary purpose.
|
|
||||||
|
|
||||||
### Immunity from Political Volatility
|
|
||||||
|
|
||||||
**Traditional organizations get pulled into:**<br>
|
|
||||||
- Trade wars affecting supply chains<br>
|
|
||||||
- Sanctions limiting talent access<br>
|
|
||||||
- Political pressure on priorities<br>
|
|
||||||
- Regulatory capture by incumbents<br>
|
|
||||||
- Nationalism over global good<br>
|
|
||||||
|
|
||||||
**Smartups remain steady:**<br>
|
|
||||||
- Contributors work under digital identity<br>
|
|
||||||
- Payment in SC avoids banking politics<br>
|
|
||||||
- Open source means no export controls<br>
|
|
||||||
- SDG focus transcends party politics<br>
|
|
||||||
- Scientific merit over political favor<br>
|
|
||||||
|
|
||||||
!!! quote "Above the Fray"
|
|
||||||
"While nations argue about carbon credits, we build. While politicians debate inequality, we act. While borders close, we remain open. The SDGs don't have time for political theater."
|
|
||||||
|
|
||||||
### The Path to Recognition
|
|
||||||
|
|
||||||
<div class="grid cards" markdown>
|
|
||||||
|
|
||||||
- :material-numeric-1-circle:{ .lg .middle } **Phase 1: Proof**
|
|
||||||
---
|
|
||||||
Smartups operate informally<br>
|
|
||||||
Build real solutions<br>
|
|
||||||
Demonstrate viability<br>
|
|
||||||
Create undeniable value<br>
|
|
||||||
Show the model works<br>
|
|
||||||
|
|
||||||
- :material-numeric-2-circle:{ .lg .middle } **Phase 2: Precedent**
|
|
||||||
---
|
|
||||||
Multiple successful Smartups<br>
|
|
||||||
Cross-border collaboration<br>
|
|
||||||
SDG impact measured<br>
|
|
||||||
Model replication proven<br>
|
|
||||||
Community grows globally<br>
|
|
||||||
|
|
||||||
- :material-numeric-3-circle:{ .lg .middle } **Phase 3: Recognition**
|
|
||||||
---
|
|
||||||
UN working group forms<br>
|
|
||||||
Legal framework drafted<br>
|
|
||||||
Digital entity status<br>
|
|
||||||
Planetary jurisdiction<br>
|
|
||||||
New organizational species<br>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
### Why This Isn't Utopian
|
|
||||||
|
|
||||||
!!! warning "We're Not Naive"
|
|
||||||
We know:<br>
|
|
||||||
- Nation-states won't disappear<br>
|
|
||||||
- Politics won't vanish<br>
|
|
||||||
- Borders still matter for humans<br>
|
|
||||||
- Local laws affect contributors<br><br>
|
|
||||||
But digital organizations can operate above this layer, just as the internet routes around censorship.
|
|
||||||
|
|
||||||
**The Internet already works this way:**<br>
|
|
||||||
- TCP/IP doesn't care about borders<br>
|
|
||||||
- Open source projects span nations<br>
|
|
||||||
- Cryptocurrencies ignore jurisdictions<br>
|
|
||||||
- Remote work proves geography optional<br>
|
|
||||||
|
|
||||||
We're just formalizing what's already emerging: **planetary organizations for planetary challenges**.
|
|
||||||
|
|
||||||
### The Smartup Advantage
|
|
||||||
|
|
||||||
!!! success "Built for Stability in Chaos"
|
|
||||||
**While the world argues about:**<br>
|
|
||||||
- Which nation leads on climate<br>
|
|
||||||
- Who pays for inequality<br>
|
|
||||||
- Whose tech standards win<br>
|
|
||||||
- Which currency dominates<br><br>
|
|
||||||
**Smartups quietly build:**<br>
|
|
||||||
- Emergency networks that work everywhere<br>
|
|
||||||
- Water solutions without borders<br>
|
|
||||||
- Health tools for all humans<br>
|
|
||||||
- Energy systems beyond nations<br><br>
|
|
||||||
**Defocused from drama. Focused on delivery.**
|
|
||||||
|
|
||||||
!!! quote "The North Star"
|
|
||||||
"The SDGs are our constitution, science is our law, and humanity is our citizenship. Everything else—every border, every political cycle, every national interest—is just noise we filter out."
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
[:material-arrow-right-bold: Continue to What's Next](#){ .md-button .md-button--primary }
|
|
||||||
|
|
||||||
--8<-- "_snippets/join-cta.md"
|
|
||||||
|
|
|
@ -1,180 +0,0 @@
|
||||||
# :material-history: Project History
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
The decade-long journey from a TNO research project to ONLIFE—and how it birthed the Smartup model itself. This is our collective memory of how we got here.
|
|
||||||
|
|
||||||
## The Evolution: From Apps to Emergency Infrastructure
|
|
||||||
|
|
||||||
### Phase 1: The Origin - Transient Apps (2016-2017)
|
|
||||||
|
|
||||||
Our story begins with a research collaboration between **TNO** (Dutch research organization) and **RS New Media Concepts**. The problem: smartphone users drowning in app choices. The solution: **"Transient Apps"**—lightweight applications that appear when needed, disappear when not.
|
|
||||||
|
|
||||||
**What we built:**<br>
|
|
||||||
- The **Context Engine**: An algorithm predicting user needs based on physical location<br>
|
|
||||||
- Automatic delivery of relevant web apps<br>
|
|
||||||
- Working prototype proving the concept<br>
|
|
||||||
|
|
||||||
**What stopped us:**<br>
|
|
||||||
Platform gatekeepers (Google, Apple) would never allow it. They were already building their own versions (Instant Apps, Progressive Web Apps). We hit a dead end.
|
|
||||||
|
|
||||||
!!! success "Phase 1 Outcome"
|
|
||||||
Research validated but path blocked by platform control:<br>
|
|
||||||
- Context-aware app delivery proven<br>
|
|
||||||
- User need confirmed<br>
|
|
||||||
- Technical feasibility demonstrated<br>
|
|
||||||
- Platform dependency identified<br>
|
|
||||||
|
|
||||||
[:material-file-document: Transient Apps Research Report](../assets/pdfs/Final Report_HTSM TKI Transient apps.pdf){ target=_blank .md-button }
|
|
||||||
|
|
||||||
### Phase 2: The First Pivot - "Onlive" Social Networks (2017-2019)
|
|
||||||
|
|
||||||
Rather than abandon the Context Engine, we pivoted. If we couldn't change how apps work, could we change how people connect?
|
|
||||||
|
|
||||||
**The ethical awakening:**<br>
|
|
||||||
As Facebook's scandals mounted, we faced a choice: build another data-harvesting social network or find a different path. We chose differently. Instead of connecting individuals online, we'd connect **groups of people in their immediate physical world**.
|
|
||||||
|
|
||||||
**"Onlive: the social network for the real world"**<br>
|
|
||||||
- Context Engine repurposed to identify relevant groups<br>
|
|
||||||
- Seven Dutch business partners provided feedback<br>
|
|
||||||
- UX and architecture developed<br>
|
|
||||||
|
|
||||||
**The revelation:**<br>
|
|
||||||
We weren't building an app. We were building an **Operating System for group interaction in the real world**.
|
|
||||||
|
|
||||||
!!! success "Phase 2 Outcome"
|
|
||||||
Proof of Concept delivered:<br>
|
|
||||||
- Android prototype functional<br>
|
|
||||||
- Backend architecture designed<br>
|
|
||||||
- UX patterns established<br>
|
|
||||||
- Business validation complete<br>
|
|
||||||
|
|
||||||
[:material-file-document: Onlive Research Report](../assets/pdfs/Onlive final report.pdf){ target=_blank .md-button }
|
|
||||||
|
|
||||||
### Phase 3: The Governance Pivot - Birth of the Smartup Model (2019-2020)
|
|
||||||
|
|
||||||
With research complete, the logical next step was forming a traditional startup. But was it the *right* step?
|
|
||||||
|
|
||||||
**The dilemma:**<br>
|
|
||||||
- Public-good technology<br>
|
|
||||||
- Complex social mission<br>
|
|
||||||
- Poor fit for VC model<br>
|
|
||||||
|
|
||||||
**The insight:**<br>
|
|
||||||
> "How we create is as important as what we create."
|
|
||||||
|
|
||||||
The organizational structure itself needed to embody our values: open, democratic, mission-driven.
|
|
||||||
|
|
||||||
**The Smartup Model emerges:**<br>
|
|
||||||
We began designing a new type of organization based on:<br>
|
|
||||||
- Collective ownership<br>
|
|
||||||
- Democratic governance<br>
|
|
||||||
- Scientific rigor<br>
|
|
||||||
- SDG alignment<br>
|
|
||||||
|
|
||||||
!!! success "Phase 3 Outcome"
|
|
||||||
New organizational model conceptualized:<br>
|
|
||||||
- Smartup governance structure defined<br>
|
|
||||||
- Economic model designed<br>
|
|
||||||
- Democratic principles embedded<br>
|
|
||||||
- Blueprint for future documented<br>
|
|
||||||
|
|
||||||
[:material-file-document: Smartup Zero Original Whitepaper](../assets/pdfs/Smartup Zero - a blueprint for disruption (book)_compressed.pdf){ target=_blank .md-button }
|
|
||||||
|
|
||||||
### Phase 4: The COVID Pivot & Academic Validation (2020-2022)
|
|
||||||
|
|
||||||
The pandemic provided an urgent, real-world test case. Could Onlive enable **"Digital Herd Immunity"** through group-tracing rather than individual contact-tracing?
|
|
||||||
|
|
||||||
**Academic collaboration with Erasmus Programme:**<br>
|
|
||||||
- Security challenges addressed<br>
|
|
||||||
- UX refined for crisis scenarios<br>
|
|
||||||
- Concept validation in pandemic context<br>
|
|
||||||
- Technical feasibility confirmed<br>
|
|
||||||
|
|
||||||
The world suddenly understood why decentralized, resilient communication matters.
|
|
||||||
|
|
||||||
!!! success "Phase 4 Outcome"
|
|
||||||
Academic validation achieved:<br>
|
|
||||||
- UX patterns for crisis communication<br>
|
|
||||||
- Security model validated<br>
|
|
||||||
- User research completed<br>
|
|
||||||
- Emergency use cases confirmed<br>
|
|
||||||
|
|
||||||
[:material-file-document: UX Research Report](../assets/pdfs/UX MVP 2022.pdf){ target=_blank .md-button }
|
|
||||||
|
|
||||||
### Phase 5: Technical Deep Dive - Mesh Networking (2023-2024)
|
|
||||||
|
|
||||||
To truly work without internet, we needed to go deeper into the networking layer.
|
|
||||||
|
|
||||||
**Partnership with HanzeHogeschool:**<br>
|
|
||||||
- Open-source mesh network implementation<br>
|
|
||||||
- Smartphone-native protocols<br>
|
|
||||||
- Beyond proof-of-concept to production-ready<br>
|
|
||||||
- Ad-hoc network formation without infrastructure<br>
|
|
||||||
|
|
||||||
We weren't just building an app anymore. We were building alternative internet infrastructure.
|
|
||||||
|
|
||||||
!!! success "Phase 5 Outcome"
|
|
||||||
**Mesh protocol designed and tested:**<br>
|
|
||||||
- 75+ node networks achieved<br>
|
|
||||||
- Android implementation working<br>
|
|
||||||
- Bluetooth/WiFi Direct integration<br>
|
|
||||||
- Open source architecture defined<br>
|
|
||||||
|
|
||||||
[:material-file-document: Mesh Network Protocol Design](../assets/pdfs/NLUUG - Smartup Zero - Hanze Copy .pptx.pdf){ target=_blank .md-button }
|
|
||||||
|
|
||||||
### Phase 6: The Final Pivot - ONLIFE Emergency Network (2025-Present)
|
|
||||||
|
|
||||||
Ten years of pivots, research, and refinement crystallized into a clear mission.
|
|
||||||
|
|
||||||
**From ONLIVE to ONLIFE:**<br>
|
|
||||||
Not just "online live"—but a network for LIFE itself. When everything else fails, ONLIFE remains.
|
|
||||||
|
|
||||||
**The focus sharpens:**<br>
|
|
||||||
- Emergency communication for citizens<br>
|
|
||||||
- Works without internet or telecoms<br>
|
|
||||||
- Mesh network using existing smartphones<br>
|
|
||||||
- European civil resilience infrastructure<br>
|
|
||||||
|
|
||||||
!!! success "Phase 6 Outcome"
|
|
||||||
**The experiment begins:**<br>
|
|
||||||
- Smartup Zero launched<br>
|
|
||||||
- Community forming<br>
|
|
||||||
- Development starting<br>
|
|
||||||
- Everything transparent<br>
|
|
||||||
|
|
||||||
**As an owner, you get access to all code, documentation, and decisions in real-time.**
|
|
||||||
|
|
||||||
!!! quote "Why the Name Change"
|
|
||||||
"ONLIVE was about being online in live settings. ONLIFE is about staying connected when life itself is at stake. It's not just a network—it's a lifeline."
|
|
||||||
|
|
||||||
## The Dual Innovation
|
|
||||||
|
|
||||||
What makes our history unique is that we didn't just develop technology—we developed a new way to develop technology:
|
|
||||||
|
|
||||||
1. **ONLIFE**: The emergency communication protocol
|
|
||||||
2. **Smartup Model**: The organizational form to build it
|
|
||||||
|
|
||||||
Both innovations emerged from the same insight: existing systems—technical and organizational—aren't fit for planetary challenges.
|
|
||||||
|
|
||||||
!!! success "From Research to Reality"
|
|
||||||
- 10 years of research<br>
|
|
||||||
- Multiple pivots based on ethical considerations<br>
|
|
||||||
- Academic validation<br>
|
|
||||||
- Technical proof of concept<br>
|
|
||||||
- Organizational innovation<br>
|
|
||||||
- **Now**: Building it together as Smartup Zero<br>
|
|
||||||
|
|
||||||
## Key Partners Along the Journey
|
|
||||||
|
|
||||||
- **TNO**: Original research partner (2016-2017)
|
|
||||||
- **RS New Media Concepts**: Initial development
|
|
||||||
- **Seven Dutch businesses**: Early feedback partners
|
|
||||||
- **Erasmus Programme**: COVID-era validation
|
|
||||||
- **HanzeHogeschool**: Mesh networking research
|
|
||||||
- **You**: The next chapter begins with collective ownership
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
[:material-arrow-right-bold: Read the Current Mission](../smartup-zero/onlife.md){ .md-button .md-button--primary }
|
|
||||||
|
|
||||||
--8<-- "_snippets/join-cta.md"
|
|
|
@ -1,764 +0,0 @@
|
||||||
## :material-cash-multiple: Smartup Business: Building a 24/7 SDG Enterprise
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
A Smartup isn't a charity or volunteer project—it's a professional business operation that measures success in SDG progress rather than profit margins. Here we document our economic model: how money flows, how work gets valued, and how ownership creates both efficiency and equity.
|
|
||||||
|
|
||||||
### The Business Reality
|
|
||||||
|
|
||||||
When we look at traditional approaches to SDG challenges, we see a pattern that keeps failing us. NGOs burn out on donation fatigue, never achieving the scale needed for real impact. Social enterprises start with good intentions but get pulled toward profit over purpose when investors come knocking. Volunteer projects, despite passionate contributors, can't maintain the professional quality that complex global challenges demand.
|
|
||||||
|
|
||||||
We need something different—a model that combines business discipline with public good DNA.
|
|
||||||
|
|
||||||
!!! tip "What Makes a Smartup Different"
|
|
||||||
**We are a business that:**<br>
|
|
||||||
- Attracts top talent with fair pay (not volunteerism)<br>
|
|
||||||
- Maintains professional standards (not hobby quality)<br>
|
|
||||||
- Operates 24/7 globally (not weekend projects)<br>
|
|
||||||
- Measures success in SDG progress (not stock prices)<br>
|
|
||||||
- Shares ownership equally among builders (not founders/VCs)<br>
|
|
||||||
|
|
||||||
This isn't ideological—it's practical. To solve civilization-scale problems, we need civilization-scale operations. That means professional quality, sustainable economics, and aligned incentives from day one.
|
|
||||||
|
|
||||||
!!! warning "Not Anti-Business, New Business"
|
|
||||||
We're not rejecting capitalism or profit. We're demonstrating that business discipline can serve collective goals when ownership, incentives, and success metrics align with social good. Profit becomes fuel for mission, not the mission itself.
|
|
||||||
|
|
||||||
### :material-license: Revenue Model: The Four License System
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
Every Smartup needs capital to operate. Instead of selling equity to VCs, we sell membership to our community. But unlike traditional equity, every license—whether €200 or €5000—carries exactly one vote and one equal share of future success.
|
|
||||||
|
|
||||||
#### The License Structure
|
|
||||||
|
|
||||||
<div class="grid cards" markdown>
|
|
||||||
|
|
||||||
- :material-account-heart:{ .lg .middle } **Campaign License (FREE)**
|
|
||||||
---
|
|
||||||
**Gateway to participation**<br>
|
|
||||||
- Access public information<br>
|
|
||||||
- Help spread awareness<br>
|
|
||||||
- Upgrade to paid tiers anytime<br>
|
|
||||||
- Perfect for students, low-income supporters<br>
|
|
||||||
**Rights**: Advocacy and public info access
|
|
||||||
|
|
||||||
- :material-eye:{ .lg .middle } **Watch License (€100+)**
|
|
||||||
---
|
|
||||||
**Full governance participation**<br>
|
|
||||||
- Access General Forum<br>
|
|
||||||
- Vote on all decisions<br>
|
|
||||||
- View all documentation<br>
|
|
||||||
- Equal ownership share<br>
|
|
||||||
**Rights**: Everything except task work
|
|
||||||
|
|
||||||
- :material-hammer:{ .lg .middle } **Work License (€200+)**
|
|
||||||
---
|
|
||||||
**Complete operational access**<br>
|
|
||||||
- Everything in Watch +<br>
|
|
||||||
- Claim and complete tasks<br>
|
|
||||||
- Earn SC through work<br>
|
|
||||||
- Join teams and roles<br>
|
|
||||||
**Rights**: Full citizenship
|
|
||||||
|
|
||||||
- :material-office-building:{ .lg .middle } **Organizational License (€5000+)**
|
|
||||||
---
|
|
||||||
**Institutional partnership**<br>
|
|
||||||
- One vote (maintains democracy)<br>
|
|
||||||
- Designate one representative<br>
|
|
||||||
- Use as training ground<br>
|
|
||||||
- Simplified grant admin<br>
|
|
||||||
**Rights**: Strategic partnership
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
!!! example "Organizational License in Action"
|
|
||||||
**University Computer Science Department** buys organizational license:<br>
|
|
||||||
- Students work on ONLIFE for real-world experience<br>
|
|
||||||
- University gets one vote in governance<br>
|
|
||||||
- Professor acts as designated representative<br>
|
|
||||||
- Students gain skills building emergency communication systems<br>
|
|
||||||
- University supports SDG progress while training talent<br>
|
|
||||||
**Result**: Win-win-win for education, SDGs, and Smartup
|
|
||||||
|
|
||||||
#### Price Progression Through Phases
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
graph LR
|
|
||||||
V[Validation<br/>Low prices<br/>High risk] --> D[Design<br/>2x prices<br/>Proven concept]
|
|
||||||
D --> P[Production<br/>4x prices<br/>Working prototype]
|
|
||||||
P --> O[Organization<br/>8x prices<br/>Market ready]
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! tip "Why Prices Increase"
|
|
||||||
Early supporters: Take more risk → Pay less <br>
|
|
||||||
Later joiners: Get more certainty → Pay more <br>
|
|
||||||
Free tier: Always available → Never excludes<br>
|
|
||||||
Transparency: Price increases announced in advance<br>
|
|
||||||
Leadership decides: Each Smartup sets based on needs
|
|
||||||
|
|
||||||
!!! quote "Equal Ownership Principle"
|
|
||||||
"Whether you buy a €200 work license or a €5000 organizational license, you get exactly one vote and one equal share. This isn't about how much money you have—it's about joining the mission."
|
|
||||||
|
|
||||||
### :material-currency-eur: Labor Economics: How Work Gets Valued
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
The heart of our business model: fair pay for good work. In early phases without cash, we use Smartup Credits (SC)—a transparent, task-based currency that converts to euros when treasury allows.
|
|
||||||
|
|
||||||
#### The SC System: Work = Value
|
|
||||||
|
|
||||||
|
|
||||||
At the core of our economy lies a simple principle: **you earn by doing, not by being**.
|
|
||||||
|
|
||||||
<div class="grid cards" markdown>
|
|
||||||
|
|
||||||
- :material-hand-coin:{ .lg .middle } **Core SC Principles**
|
|
||||||
---
|
|
||||||
**1 SC = 1 EUR claim** on treasury<br>
|
|
||||||
**Earning**: Only through completed tasks<br>
|
|
||||||
**Transparency**: Public ledger.log file<br>
|
|
||||||
**No inflation**: 3x treasury cap<br>
|
|
||||||
**Fair redemption**: FIFO when cash arrives<br>
|
|
||||||
|
|
||||||
- :material-percent:{ .lg .middle } **The 90/10 Split**
|
|
||||||
---
|
|
||||||
**Attacker (Senior)**: 90% of task bounty<br>
|
|
||||||
**Defender (Junior)**: 10% of task bounty<br>
|
|
||||||
**Why it works**:<br>
|
|
||||||
- Seniors incentivized to mentor<br>
|
|
||||||
- Juniors paid to learn<br>
|
|
||||||
- Quality assurance built-in<br>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
!!! example "SC in Practice"
|
|
||||||
**Task**: "Implement mesh networking protocol"<br>
|
|
||||||
**Bounty**: 2000 SC (pre-assigned, visible to all)<br>
|
|
||||||
**Senior Dev (Attacker)**: Claims task, implements solution → 1800 SC<br>
|
|
||||||
**Junior Dev (Defender)**: Reviews, learns, documents → 200 SC<br>
|
|
||||||
**Result**: Feature built, knowledge transferred, both paid fairly<br>
|
|
||||||
|
|
||||||
[See our up to date currency rules here :material-arrow-right:](/smartup-zero/currency-system/){ .md-button .md-button--primary }
|
|
||||||
|
|
||||||
#### How SC Flows Through the System
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
flowchart TD
|
|
||||||
T[Task Created<br/>2000 SC bounty]
|
|
||||||
W[Worker Claims<br/>Becomes Attacker]
|
|
||||||
A[Assistant Joins<br/>Becomes Defender]
|
|
||||||
C[Work Completed<br/>Captain Approves]
|
|
||||||
L[Ledger Updated<br/>SC Minted]
|
|
||||||
H{Hold or Cash?}
|
|
||||||
|
|
||||||
T --> W
|
|
||||||
W --> A
|
|
||||||
A --> C
|
|
||||||
C --> L
|
|
||||||
L --> H
|
|
||||||
|
|
||||||
H -->|Hold SC| F[Future Value<br/>As Treasury Grows]
|
|
||||||
H -->|Cash Out| R[Redemption Window<br/>FIFO Order]
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Treasury Management
|
|
||||||
|
|
||||||
!!! warning "The 3x Rule"
|
|
||||||
**Outstanding SC can never exceed 3x cash treasury**<br><br>
|
|
||||||
Treasury: €10,000 → Max SC: 30,000<br>
|
|
||||||
This prevents runaway inflation and maintains SC value<br>
|
|
||||||
|
|
||||||
**Redemption Windows work like this:**<br>
|
|
||||||
1. **Funding arrives** (crowdfunding/grants)<br>
|
|
||||||
2. **Leadership team calculates** available redemption<br>
|
|
||||||
3. **FIFO order** - earliest contributors cash out first<br>
|
|
||||||
4. **Ledger burns** - SC removed, EUR transferred<br>
|
|
||||||
5. **Public record** - everyone sees the process<br>
|
|
||||||
|
|
||||||
!!! tip "The Hold Incentive"
|
|
||||||
**Month 1**: Treasury €10k, Outstanding SC 50k = 20% redemption value<br>
|
|
||||||
**Month 12**: Treasury €200k, Outstanding SC 150k = 100%+ redemption value<br><br>
|
|
||||||
Early contributors who believe in collective success benefit most. But no one is forced to hold—cash out anytime redemption windows open.
|
|
||||||
|
|
||||||
#### Why This Works
|
|
||||||
|
|
||||||
<div class="grid cards" markdown>
|
|
||||||
|
|
||||||
- :material-scale-balance:{ .lg .middle } **Fair Exchange**
|
|
||||||
---
|
|
||||||
No working for "exposure"<br>
|
|
||||||
No equity promises<br>
|
|
||||||
Clear value for clear work<br>
|
|
||||||
Transparent to everyone<br>
|
|
||||||
|
|
||||||
- :material-shield-check:{ .lg .middle } **Protected Value**
|
|
||||||
---
|
|
||||||
Can't print unlimited SC<br>
|
|
||||||
Can't favor friends<br>
|
|
||||||
Can't hide transactions<br>
|
|
||||||
Can't change history<br>
|
|
||||||
|
|
||||||
- :material-rocket-launch:{ .lg .middle } **Aligned Incentives**
|
|
||||||
---
|
|
||||||
Work more = earn more<br>
|
|
||||||
Help others = get 10%<br>
|
|
||||||
Build value = SC appreciates<br>
|
|
||||||
Stay active = stay earning<br>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
!!! quote "No Hidden Bonuses"
|
|
||||||
"The entire ledger lives in public view. Every SC minted, every redemption, every team budget—transparent to all owners. When the CEO of a traditional company gets a €10M bonus while laying off workers, that's the system we're replacing."
|
|
||||||
|
|
||||||
|
|
||||||
!!! success "System Status: ✅ FULLY OPERATIONAL"
|
|
||||||
Our dual-currency system is live and working! Complete transparency at timeline0.org/smartup-zero/financial-transparency with 153 SC outstanding, first task-based awards completed, and democratic founder accountability in action.
|
|
||||||
|
|
||||||
!!! success "✅ LIVE SYSTEM: Task-Based SC Awards Operational"
|
|
||||||
Our first collaborative work session completed in August 2025: 153 SC awarded for building the effort-based task-SC integration system. Complete audit trail in our public ledger demonstrates the system works exactly as designed.
|
|
||||||
|
|
||||||
[See our up to date currency rules here :material-arrow-right:](/smartup-zero/currency-system/){ .md-button .md-button--primary }
|
|
||||||
|
|
||||||
### :material-meditation: Social Capital: The SK System
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
Money isn't the only currency that matters. Smartup Karma (SK) recognizes contributions that SC can't measure—the teammate who debugs at midnight, the member who mediates conflicts, the captain who builds team morale.
|
|
||||||
|
|
||||||
#### SK: Recognition Beyond Money
|
|
||||||
|
|
||||||
While SC rewards task completion, SK captures the intangible value that makes communities thrive.
|
|
||||||
|
|
||||||
<div class="grid cards" markdown>
|
|
||||||
|
|
||||||
- :material-heart-plus:{ .lg .middle } **How SK is Earned**
|
|
||||||
---
|
|
||||||
**Quality defender feedback**: +5-10 SK<br>
|
|
||||||
**Successful proposals**: +20 SK<br>
|
|
||||||
**Mentoring juniors**: +5 SK/week<br>
|
|
||||||
**Team captain service**: +10 SK/month<br>
|
|
||||||
**Mission completion**: +15 SK<br>
|
|
||||||
**Conflict resolution**: +10 SK<br>
|
|
||||||
|
|
||||||
- :material-lock-open:{ .lg .middle } **What SK Unlocks**
|
|
||||||
---
|
|
||||||
**50 SK**: Propose in General Forum<br>
|
|
||||||
**100 SK**: Apply for Team Captain<br>
|
|
||||||
**200 SK**: Lead Missions<br>
|
|
||||||
**500 SK**: Join Leadership Team<br>
|
|
||||||
**Vote weight**: Max 1.5x at 500+ SK<br>
|
|
||||||
|
|
||||||
- :material-timer-sand:{ .lg .middle } **SK Decay Mechanism**
|
|
||||||
---
|
|
||||||
**10% monthly decay**<br>
|
|
||||||
- Prevents founder privilege<br>
|
|
||||||
- Rewards active contribution<br>
|
|
||||||
- Makes room for new leaders<br>
|
|
||||||
- Keeps influence current<br>
|
|
||||||
**Stay active or fade away**
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
!!! warning "SK Cannot Be Gamed"
|
|
||||||
**Can't buy it**: No amount of money gets you SK<br>
|
|
||||||
**Can't transfer it**: Your reputation is yours alone<br>
|
|
||||||
**Can't hoard it**: Use it or lose it to decay<br>
|
|
||||||
**Can't fake it**: Earned through peer recognition<br>
|
|
||||||
|
|
||||||
#### The Dual Currency Dynamic
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
graph TD
|
|
||||||
HSL[High SC, Low SK<br/>Great Individual Worker<br/>Limited Influence<br/>Needs more community engagement]
|
|
||||||
|
|
||||||
LSH[Low SC, High SK<br/>Community Pillar<br/>Trusted Voice<br/>Consider taking more tasks]
|
|
||||||
|
|
||||||
HSH[High SC, High SK<br/>Natural Leader<br/>Productive + Connected<br/>Ready for Leadership Team]
|
|
||||||
|
|
||||||
LSL[Low SC, Low SK<br/>New Member<br/>Learning Phase<br/>Pick a path to contribute]
|
|
||||||
|
|
||||||
HSL --> HSH
|
|
||||||
LSH --> HSH
|
|
||||||
LSL --> HSL
|
|
||||||
LSL --> LSH
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! example "SK in Action"
|
|
||||||
**Maria spends her evening:**<br>
|
|
||||||
- Helps debug junior's code (not her task) → +5 SK<br>
|
|
||||||
- Mediates team conflict in public channel → +10 SK<br>
|
|
||||||
- Provides excellent defender feedback → +8 SK<br>
|
|
||||||
- Monthly captain duties → +10 SK<br>
|
|
||||||
**Total**: +33 SK for community building (0 SC earned)<br><br>
|
|
||||||
Her high SK opens leadership opportunities and increases her voting weight, recognizing that building community is as valuable as building code.
|
|
||||||
|
|
||||||
#### Why Dual Currency Works
|
|
||||||
|
|
||||||
!!! tip "Solving the Recognition Problem"
|
|
||||||
**Traditional organizations**:<br>
|
|
||||||
- Only pay for direct output<br>
|
|
||||||
- Community building goes unrewarded<br>
|
|
||||||
- Soft skills undervalued<br>
|
|
||||||
- Politics determine influence<br><br>
|
|
||||||
**Smartup approach**:<br>
|
|
||||||
- SC rewards direct work<br>
|
|
||||||
- SK rewards community value<br>
|
|
||||||
- Both needed for full participation<br>
|
|
||||||
- Merit determines influence<br>
|
|
||||||
|
|
||||||
!!! quote "Beyond Individual Gain"
|
|
||||||
"In Silicon Valley, they optimize for 'unicorns'—billion-dollar individuals. We optimize for collective intelligence. SK ensures those who make everyone better get recognized, not just those who code fastest."
|
|
||||||
|
|
||||||
### :material-bank: Business Operations
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
How money flows in, how it's allocated, and why our operational model creates competitive advantages over traditional tech companies—all while staying true to SDG missions.
|
|
||||||
|
|
||||||
#### Financial Flows
|
|
||||||
|
|
||||||
**Money enters through three clean channels:**
|
|
||||||
|
|
||||||
<div class="grid cards" markdown>
|
|
||||||
|
|
||||||
- :material-account-group:{ .lg .middle } **Crowdfunding Rounds**
|
|
||||||
---
|
|
||||||
Each phase opens new funding<br>
|
|
||||||
Community-driven campaigns<br>
|
|
||||||
Transparent goals and usage<br>
|
|
||||||
Creates urgency through phases<br>
|
|
||||||
Builds momentum naturally<br>
|
|
||||||
|
|
||||||
- :material-office-building:{ .lg .middle } **Organizational Licenses**
|
|
||||||
---
|
|
||||||
€5000+ institutional support<br>
|
|
||||||
Universities, NGOs, ethical business<br>
|
|
||||||
Simplified grant administration<br>
|
|
||||||
Strategic partnerships<br>
|
|
||||||
Stable funding base<br>
|
|
||||||
|
|
||||||
- :material-file-document:{ .lg .middle } **Research Grants**
|
|
||||||
---
|
|
||||||
SDG-aligned funding<br>
|
|
||||||
No strings attached<br>
|
|
||||||
Project-based support<br>
|
|
||||||
Public good emphasis<br>
|
|
||||||
Mission preservation<br>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
!!! warning "What We Don't Take"
|
|
||||||
**No venture capital** - Avoids exit pressure<br>
|
|
||||||
**No corporate investment** - Prevents mission drift<br>
|
|
||||||
**No hidden funding** - Everything transparent<br><br>
|
|
||||||
This isn't ideological purity—it's practical. The moment we take traditional investment, incentives distort toward profit extraction rather than SDG impact.
|
|
||||||
|
|
||||||
#### Budget Allocation Process
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
flowchart LR
|
|
||||||
TC[Team Captains<br/>Prepare Requests] --> LT[Leadership Team<br/>Monthly Meeting]
|
|
||||||
LT --> P[Public Proposal<br/>With Rationale]
|
|
||||||
P --> GF[General Forum<br/>Reviews & Votes]
|
|
||||||
GF --> A[Approved Budget<br/>Allocated to Teams]
|
|
||||||
A --> E[Execution<br/>Public Spending]
|
|
||||||
E --> R[Report Back<br/>To General Forum]
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! example "Monthly Budget Meeting"
|
|
||||||
**Dev Team Captain**: "We need 5000 SC for mesh protocol development"<br>
|
|
||||||
**Design Team Captain**: "We need 3000 SC for UI/UX research"<br>
|
|
||||||
**Business Team Captain**: "We need 2000 SC for market analysis"<br><br>
|
|
||||||
**Leadership Team** compiles requests, checks against treasury<br>
|
|
||||||
**General Forum** sees all requests, debates priorities<br>
|
|
||||||
**Vote** determines final allocation<br>
|
|
||||||
**Result**: Everyone knows why money goes where<br>
|
|
||||||
|
|
||||||
#### Competitive Advantages
|
|
||||||
|
|
||||||
!!! tip "Why We Win Against Traditional Tech"
|
|
||||||
<br>
|
|
||||||
**🌍 Global 24/7 Operations**<br>
|
|
||||||
Berlin developer → Bangkok designer → São Paulo tester<br>
|
|
||||||
The work never stops, following the sun<br><br>
|
|
||||||
**💰 Zero Office Overhead**<br>
|
|
||||||
No Silicon Valley rents or corporate campuses<br>
|
|
||||||
Every euro goes to actual work<br><br>
|
|
||||||
**🎯 Intrinsic Motivation**<br>
|
|
||||||
People choose us for mission, not just money<br>
|
|
||||||
Passion translates to quality<br><br>
|
|
||||||
**📚 Learning-While-Earning**<br>
|
|
||||||
Every senior task trains a junior<br>
|
|
||||||
Building tomorrow's experts today<br><br>
|
|
||||||
**🔍 Radical Transparency**<br>
|
|
||||||
No office politics or hidden agendas<br>
|
|
||||||
Energy goes to building, not navigating<br>
|
|
||||||
|
|
||||||
#### Phase-Based Funding Reality
|
|
||||||
|
|
||||||
| Phase | Typical Need | Purpose | Success Metrics |
|
|
||||||
|-------|--------------|---------|-----------------|
|
|
||||||
| **Validation** | €50k | Prove concept viable | Community size, initial prototype |
|
|
||||||
| **Design** | €200k | Create architecture | Complete blueprints, team formation |
|
|
||||||
| **Production** | €500k | Build the product | Working MVP, user testing |
|
|
||||||
| **Organization** | €1M | Market preparation | Launch-ready product, exec team |
|
|
||||||
|
|
||||||
!!! note "Flexible by Design"
|
|
||||||
These aren't fixed—each Smartup's Leadership Team proposes budgets based on real needs. Building emergency communication needs different resources than water purification. The General Forum approves based on transparent justification.
|
|
||||||
|
|
||||||
#### Treasury Transparency
|
|
||||||
|
|
||||||
**Every owner can see in real-time:**<br>
|
|
||||||
- Total funds in Open Collective<br>
|
|
||||||
- Outstanding SC liabilities<br>
|
|
||||||
- Team budget allocations<br>
|
|
||||||
- Individual task payments<br>
|
|
||||||
- Redemption window status<br>
|
|
||||||
|
|
||||||
!!! quote "Trust Through Transparency"
|
|
||||||
"In traditional startups, employees discover the burn rate when layoffs hit. In a Smartup, every citizen watches the treasury like it's their own bank account—because it is."
|
|
||||||
|
|
||||||
### :material-account-multiple: From Smartup to Market: The Ownership Model
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
When a Smartup completes its four phases and launches a market entity, the Book of Owners becomes a shareholder registry. Every license holder gets an equal share—a bonus for taking the journey together.
|
|
||||||
|
|
||||||
#### The Equal Share Principle
|
|
||||||
|
|
||||||
Here's how ownership works in practice:
|
|
||||||
|
|
||||||
<div class="grid cards" markdown>
|
|
||||||
|
|
||||||
- :material-book-open:{ .lg .middle } **During Smartup Phase**
|
|
||||||
---
|
|
||||||
Book of Owners tracks licenses<br>
|
|
||||||
One license = One vote<br>
|
|
||||||
Focus on building together<br>
|
|
||||||
Earn SC through work<br>
|
|
||||||
Create collective value<br>
|
|
||||||
|
|
||||||
- :material-domain:{ .lg .middle } **At Market Launch**
|
|
||||||
---
|
|
||||||
Book → Shareholder registry<br>
|
|
||||||
1000 owners = 1/1000 share each<br>
|
|
||||||
Equal shares regardless of:<br>
|
|
||||||
- When you joined<br>
|
|
||||||
- License type purchased<br>
|
|
||||||
- SC earned<br>
|
|
||||||
|
|
||||||
- :material-cash:{ .lg .middle } **After Market Entry**
|
|
||||||
---
|
|
||||||
Business generates revenue<br>
|
|
||||||
Profits distributed equally<br>
|
|
||||||
Shares are nice bonus<br>
|
|
||||||
Not why you joined<br>
|
|
||||||
Reward for collective risk<br>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
!!! warning "Shares Are Not The Point"
|
|
||||||
**We're clear about this**: Join a Smartup to use your talent for SDG progress and earn fair pay through SC. The equal share is a bonus if we succeed together. If shares are your main motivation, this isn't for you.<br><br>
|
|
||||||
**The goal**: Make people want to work to earn money, not put in money to earn money.
|
|
||||||
|
|
||||||
#### Natural Team Efficiency
|
|
||||||
|
|
||||||
The equal share model creates interesting dynamics:
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
graph LR
|
|
||||||
A[Need More Help?] --> B[Accept More Owners]
|
|
||||||
B --> C[Smaller Individual Shares]
|
|
||||||
|
|
||||||
D[Want Bigger Shares?] --> E[Keep Team Focused]
|
|
||||||
E --> F[Work More Efficiently]
|
|
||||||
|
|
||||||
G[Sweet Spot] --> H[Right-Sized Team]
|
|
||||||
H --> I[Quality Over Quantity]
|
|
||||||
|
|
||||||
style G fill:#8bc34a
|
|
||||||
style I fill:#8bc34a
|
|
||||||
```
|
|
||||||
|
|
||||||
This tension naturally prevents bloat. Teams find their optimal size—enough people to succeed, not so many that shares become meaningless.
|
|
||||||
|
|
||||||
#### The Continuing Relationship
|
|
||||||
|
|
||||||
!!! tip "Smartup Community as Strategic Asset"
|
|
||||||
After market launch, the Smartup community doesn't disappear—it becomes a living resource for the business entity.
|
|
||||||
|
|
||||||
**For the Business (e.g., ONLIFE Inc.):**<br>
|
|
||||||
- **Talent Pipeline**: Hire from people who built the product<br>
|
|
||||||
- **Beta Testing**: Community knows the vision intimately<br>
|
|
||||||
- **Expert Network**: Original builders retain deep knowledge<br>
|
|
||||||
- **Brand Advocates**: Shareholders naturally promote success<br>
|
|
||||||
|
|
||||||
**For Community Members:**<br>
|
|
||||||
- **First hiring priority**: Job opportunities at the company<br>
|
|
||||||
- **Paid consulting**: Testing and advisory contracts<br>
|
|
||||||
- **Continued involvement**: Stay connected to "your baby"<br>
|
|
||||||
- **Shareholder returns**: If profitable, receive dividends<br>
|
|
||||||
|
|
||||||
!!! example "Living Ecosystem in Practice"
|
|
||||||
**ONLIFE launches successfully**<br>
|
|
||||||
- Needs iOS developer → Hires from Smartup community first<br>
|
|
||||||
- Testing new mesh protocol → Pays community members as testers<br>
|
|
||||||
- Strategic decision needed → Consults original architects<br>
|
|
||||||
- Growing to new markets → Community provides local insights<br><br>
|
|
||||||
The Smartup community remains a competitive advantage, not abandoned infrastructure.
|
|
||||||
|
|
||||||
#### Realistic Expectations
|
|
||||||
|
|
||||||
Let's be concrete about potential returns:
|
|
||||||
|
|
||||||
| Scenario | Owners | Annual Profit | Per Person |
|
|
||||||
|----------|---------|---------------|------------|
|
|
||||||
| **Conservative** | 500 | €500k | €1,000/year |
|
|
||||||
| **Moderate** | 500 | €2M | €4,000/year |
|
|
||||||
| **Success** | 500 | €5M | €10,000/year |
|
|
||||||
|
|
||||||
!!! note "It's About Impact, Not Riches"
|
|
||||||
These aren't life-changing amounts for individuals. But imagine:<br>
|
|
||||||
- Contributing to multiple Smartups over time<br>
|
|
||||||
- Building a portfolio of mission-driven work<br>
|
|
||||||
- Earning fair SC wages during development<br>
|
|
||||||
- Creating lasting SDG impact<br><br>
|
|
||||||
The shares are acknowledgment of shared risk, not a get-rich scheme.
|
|
||||||
|
|
||||||
!!! quote "Collective Success"
|
|
||||||
"We work 24/7 because the SDGs can't wait. We pay fairly because talent deserves reward. We share ownership because collective problems require collective solutions. But the real return on investment? It's measured in lives improved, not just euros earned."
|
|
||||||
|
|
||||||
## :material-server: The Technical Stack: Tools for Collective Intelligence
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
A Smartup's technical infrastructure embodies our values: decentralized, open source, sovereignty-preserving. We chose European-based tools that give us independence from Silicon Valley's surveillance capitalism while enabling true collective work.
|
|
||||||
|
|
||||||
### Why Tool Choice Matters
|
|
||||||
|
|
||||||
When we observe the current technical landscape, we see tools designed to extract value, not create it collectively. Silicon Valley platforms lock in users, harvest data, and change terms at will. We need infrastructure that serves our mission, not shareholders.
|
|
||||||
|
|
||||||
!!! warning "The Sovereignty Imperative"
|
|
||||||
Given emerging geopolitical realities, we can't build critical infrastructure on platforms that could be weaponized or withdrawn. European-based, open-source tools give us the autonomy we need.
|
|
||||||
|
|
||||||
### Our Technical Philosophy
|
|
||||||
|
|
||||||
<div class="grid cards" markdown>
|
|
||||||
|
|
||||||
- :material-lock-open:{ .lg .middle } **Open Source Everything**
|
|
||||||
---
|
|
||||||
No vendor lock-in<br>
|
|
||||||
Community maintained<br>
|
|
||||||
Fully auditable<br>
|
|
||||||
Fork if needed<br>
|
|
||||||
True ownership<br>
|
|
||||||
|
|
||||||
- :material-earth-box:{ .lg .middle } **European Sovereignty**
|
|
||||||
---
|
|
||||||
GDPR compliance built-in<br>
|
|
||||||
No NSA backdoors<br>
|
|
||||||
Democratic values<br>
|
|
||||||
Stable governance<br>
|
|
||||||
Long-term thinking<br>
|
|
||||||
|
|
||||||
- :material-puzzle:{ .lg .middle } **Integrated Ecosystem**
|
|
||||||
---
|
|
||||||
Tools talk to each other<br>
|
|
||||||
Single identity system<br>
|
|
||||||
Bots handle integration<br>
|
|
||||||
Humans stay focused<br>
|
|
||||||
Collective intelligence<br>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
### The Core Stack
|
|
||||||
|
|
||||||
#### :material-chat: Element/Matrix - Communication & Command Centre
|
|
||||||
|
|
||||||
**What it is**: Decentralized, encrypted, real-time communication<br>
|
|
||||||
**Why it matters**: Non-coders never need to leave Element—everything happens here<br>
|
|
||||||
**How we use it**: All 6 groups live here, bots bring external data inline<br>
|
|
||||||
|
|
||||||
!!! tip "The Digital Workspace"
|
|
||||||
Unlike Slack (US-controlled, data-mining) or Discord (gamer-focused), Matrix gives us:<br>
|
|
||||||
- Full data sovereignty<br>
|
|
||||||
- Federation capability<br>
|
|
||||||
- End-to-end encryption<br>
|
|
||||||
- Self-hosted control<br>
|
|
||||||
- Bot-friendly architecture<br>
|
|
||||||
|
|
||||||
#### :material-git: Forgejo - The Mint & Development Hub
|
|
||||||
|
|
||||||
**What it is**: Community-driven Git forge (ethical fork of Gitea)<br>
|
|
||||||
**Why it matters**: Source of truth for code, docs, and the SC ledger<br>
|
|
||||||
**How we use it**: Issues become tasks, repos hold everything, CI/CD automates<br>
|
|
||||||
|
|
||||||
!!! example "Forgejo in Action"
|
|
||||||
- **Code repos**: Every line transparent<br>
|
|
||||||
- **Issue tracking**: Tasks with SC bounties<br>
|
|
||||||
- **Kanban boards**: Visual workflow<br>
|
|
||||||
- **The Ledger**: ledger.log tracks all SC<br>
|
|
||||||
- **CI/CD**: Automated testing and deployment<br>
|
|
||||||
|
|
||||||
#### :material-robot: Engelbot - The Ultimate Midfielder
|
|
||||||
|
|
||||||
**What it is**: Our custom bot honoring Douglas Engelbart<br>
|
|
||||||
**Why it matters**: Automates the ADM triangle's midfielder role<br>
|
|
||||||
**How we use it**: Bridges tools, documents decisions, enables workflows<br>
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
graph LR
|
|
||||||
M[Matrix/Element] <--> E[Engelbot]
|
|
||||||
F[Forgejo] <--> E
|
|
||||||
O[Open Collective] <--> E
|
|
||||||
L[Ledger] <--> E
|
|
||||||
|
|
||||||
E --> A[Automates Admin]
|
|
||||||
E --> D[Documents Everything]
|
|
||||||
E --> C[Coordinates Groups]
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! quote "Why 'Engelbot'?"
|
|
||||||
"The real power of technology comes from augmenting human intelligence, not replacing it. Engelbot handles the boring stuff so humans can focus on what matters."
|
|
||||||
|
|
||||||
### Infrastructure Layers
|
|
||||||
|
|
||||||
#### Layer 1: Source of Truth
|
|
||||||
- **Forgejo on Fly.io**: Git repos, issues, CI/CD
|
|
||||||
- **Persistent volumes**: Data sovereignty
|
|
||||||
- **Nightly backups**: Infomaniak (Switzerland)
|
|
||||||
|
|
||||||
#### Layer 2: Development
|
|
||||||
- **Gitpod**: Cloud workspaces, no local setup needed
|
|
||||||
- **50h/month free**: Accessible to all contributors
|
|
||||||
- **Standardized environments**: Everyone builds the same way
|
|
||||||
|
|
||||||
#### Layer 3: Production
|
|
||||||
- **Fly.io**: Current hosting (EU regions)
|
|
||||||
- **Future**: EU-only VPS for full sovereignty
|
|
||||||
- **Clever Cloud**: Stateless services, EU-based
|
|
||||||
|
|
||||||
#### Layer 4: Automation
|
|
||||||
- **Engelbot**: Connects everything
|
|
||||||
- **CI/CD pipelines**: Automated deployment
|
|
||||||
- **Health monitoring**: Proactive maintenance
|
|
||||||
|
|
||||||
### Financial Infrastructure
|
|
||||||
|
|
||||||
#### :material-currency-eur: Open Collective EU
|
|
||||||
|
|
||||||
**What it is**: Transparent fiscal hosting<br>
|
|
||||||
**Why it matters**: Every euro in/out is public<br>
|
|
||||||
**How we use it**: Crowdfunding intake, SC redemption<br>
|
|
||||||
|
|
||||||
!!! tip "Full Financial Transparency"
|
|
||||||
Unlike traditional banking:<br>
|
|
||||||
- Real-time balance visible<br>
|
|
||||||
- Every transaction public<br>
|
|
||||||
- Direct SC → EUR conversion<br>
|
|
||||||
- No hidden fees or flows<br>
|
|
||||||
|
|
||||||
### Security & Resilience
|
|
||||||
|
|
||||||
<div class="grid cards" markdown>
|
|
||||||
|
|
||||||
- :material-backup-restore:{ .lg .middle } **Backup Strategy**
|
|
||||||
---
|
|
||||||
Nightly to Swiss storage<br>
|
|
||||||
Encrypted at rest<br>
|
|
||||||
Geographic distribution<br>
|
|
||||||
Tested restore process<br>
|
|
||||||
|
|
||||||
- :material-shield-check:{ .lg .middle } **Access Control**
|
|
||||||
---
|
|
||||||
Matrix identity = single source<br>
|
|
||||||
Role-based permissions<br>
|
|
||||||
No shared passwords<br>
|
|
||||||
Full audit trails<br>
|
|
||||||
|
|
||||||
- :material-monitor-heart:{ .lg .middle } **Monitoring**
|
|
||||||
---
|
|
||||||
Health checks built-in<br>
|
|
||||||
Loki/Grafana planned<br>
|
|
||||||
Proactive alerts<br>
|
|
||||||
Public status page<br>
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
### Why This Stack Works for Smartups
|
|
||||||
|
|
||||||
!!! success "Aligned with Our Values"
|
|
||||||
**Collective Ownership**: Every tool is open source, forkable<br>
|
|
||||||
**Collective Craftsmanship**: Integrated workflows, no silos<br>
|
|
||||||
**Collective Governance**: Everything auditable, transparent<br>
|
|
||||||
**Military Execution**: Automated pipelines, clear processes<br>
|
|
||||||
|
|
||||||
The tools don't just support our work—they embody our principles. When a new contributor joins, they enter an ecosystem designed for collaboration, not extraction.
|
|
||||||
|
|
||||||
!!! warning "Still Evolving"
|
|
||||||
We're starting with proven tools and will migrate to full EU sovereignty as we grow. Every technical decision is documented, debated in public, and aligned with our mission.
|
|
||||||
|
|
||||||
## :material-layers-triple: Smartup Administration Index
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
The Smartup Administration Index is our unified, semantic numbering convention.
|
|
||||||
It assigns every governance channel, team, role, objective, and task a clear, machine-readable identifier—ensuring transparency, accountability, and automation across Forgejo, Element, and Engelbot.
|
|
||||||
|
|
||||||
**Purpose**
|
|
||||||
|
|
||||||
- 🎯 Clarity: Instantly locate any process or discussion
|
|
||||||
- 🤖 Automation-Ready: Bots can parse, filter, and trigger workflows
|
|
||||||
- 🔄 Consistency: Uniform identifiers in Matrix/Element, Forgejo, and docs
|
|
||||||
- 🧾 Auditability: Every event logged with a traceable ID
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### 🔢 Numbering Layers (1–6)
|
|
||||||
|
|
||||||
| Prefix | Layer | Description | Example Identifier |
|
|
||||||
|--------|-------------------|----------------------------------------------------------------------|-------------------------|
|
|
||||||
| 1_ | General Forum | Public governance, debate & voting (Element room) | `1_general_forum` |
|
|
||||||
| 2_ | Workplace | Coordination hub for all Workers & PLT (Element room) | `2_workplace` |
|
|
||||||
| 3_ | Teams | Skill-based groups (each team gets an index) | `3_4` (Team #4) |
|
|
||||||
| 4_ | Roles | Contributor roles within a team | `4_1_4` (Role #1 in Team 4) |
|
|
||||||
| 5_ | Objectives | Project boards / OKRs (main & sub-objectives) | `5_2` (Obj #2) / `5_3_4` (Sub-Obj 3 of Obj 4) |
|
|
||||||
| 6_ | Tasks | Individual work units | `6_2_3_4` (Task #2 of Sub-Obj 3 of Obj 4) |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
#### :material-clipboard-list: Examples in Practice
|
|
||||||
|
|
||||||
| Concept | Identifier | Human-Readable Name | Notes |
|
|
||||||
|-------------|--------------|-------------------------------|----------------------------------------------------|
|
|
||||||
| **Forum** | `1_general_forum` | #1_general_forum (Element) | All-owner discussions & votes |
|
|
||||||
| **Workplace** | `2_workplace` | #2_workplace (Element) | Cross-team coordination & PLT planning |
|
|
||||||
| **Team** | `3_4` | #3_4_business (Element/Git) | Business Team |
|
|
||||||
| **Role** | `4_1_4` | `4_1_4_marketing_lead` | Marketing Lead role in Business Team |
|
|
||||||
| **Objective**| `5_2` | `5_2_onlife-mvp` | ONLIFE MVP Phase |
|
|
||||||
| **Sub-Obj** | `5_3_4` | `5_3_4_ui-refinement` | 3rd sub-objective under Obj 4 |
|
|
||||||
| **Task** | `6_2_3_4` | `6_2_3_4_design-login-screen` | 2nd task under Sub-Obj 3 of Obj 4 |
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### ✅ Why This Works
|
|
||||||
|
|
||||||
| Benefit | Explanation |
|
|
||||||
|--------------------|---------------------------------------------------------------------------|
|
|
||||||
| 🧭 Clarity | Semantic IDs show layer, parent context, and sequence at a glance |
|
|
||||||
| 🔄 Consistency | One simple rule everywhere—no special cases |
|
|
||||||
| 🤖 Automation-Ready | Engelbot/CI parse prefixes to route notifications, trigger bots, filter logs |
|
|
||||||
| 🧾 Auditability | Every issue, vote, and task references a stable ID for full traceability |
|
|
||||||
|
|
||||||
Use these identifiers:
|
|
||||||
|
|
||||||
- In **Element room names** (`#3_4`, `#2_workplace`, etc.)
|
|
||||||
- As **Forgejo issue/project prefixes** (`6_2_3_4_task-title`)
|
|
||||||
- In **docs and bots** for filtering and linking
|
|
||||||
|
|
||||||
With a single, right-to-left numbering scheme, our Smartup remains organized, transparent, and ready for scale.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
[:material-arrow-right-bold: Continue to Live Experiment Status](#){ .md-button .md-button--primary }
|
|
||||||
|
|
||||||
--8<-- "_snippets/join-cta.md"
|
|
||||||
|
|
||||||
|
|
|
@ -1,236 +0,0 @@
|
||||||
#terminlogy being used:
|
|
||||||
---
|
|
||||||
|
|
||||||
**0_timeline**
|
|
||||||
The public-facing, static website and primary transparency layer for the Smartup Zero experiment. Automatically updates from the project’s code and content repository to show the latest progress, business plan, team structure, open roles, and project documentation.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**1_general_forum**
|
|
||||||
The “General Forum”—the digital public square for all Smartup owners (workers and watchers). This is where deliberation, voting, oversight, and key discussions occur. It’s the central arena for governance, transparency, and measuring the organization’s overall health.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**2_workplace**
|
|
||||||
The central, private hub for all active “workers” within the Smartup. This is where work happens, teams assemble, and objectives are executed. Only those with a Work License may participate; the Workplace is the engine room of creation and productivity.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**3_teams**
|
|
||||||
Skill-based groups within the Workplace, such as Development, Design, Media, Business, Operations, or Science. Teams focus on implementing specific aspects of the project. Each team is led by a Team Captain and organizes its own Roles and Objectives.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**4_roles**
|
|
||||||
Function-specific assignments within a Team (e.g., UX Designer, Backend Developer, Copywriter). Each Role has requirements, compensation logic, and defines what kind of tasks the member can claim or be assigned.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**5_objectives**
|
|
||||||
Distinct missions, project deliverables, or “sprints” that drive the Smartup forward. Each Objective is attached to a Team, can contain multiple Tasks, and is led by a Mission Leader responsible for coordination and quality.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**6_tasks**
|
|
||||||
The atomic units of work in Smartup Zero. Tasks are clearly defined, trackable, and billable work items that contribute directly to achieving Objectives. Each Task has an assigned Worker (attacker), an Assistant (defender), and is supported by bots or automation (midfielder).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
*(The rest below is alphabetical, for completeness and consistency in all documentation):*
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**ADM Triangle**
|
|
||||||
Attacker–Defender–Midfielder: The operational triad present in every group within the Smartup. The attacker initiates work or proposals, the defender reviews and provides oversight, and the midfielder (often a bot or automation) facilitates transparency and communication between roles.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Advisory Vote / Binding Vote**
|
|
||||||
Advisory votes are used for team-level or ambiguous decisions; binding votes are required for major milestones, phase transitions, or conflict resolution. Binding votes require a majority in the General Forum.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Book of Owners**
|
|
||||||
The transparent registry listing all official Smartup owners and their rights and privileges.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Business Team**
|
|
||||||
The group responsible for developing a solid business proposition, marketing strategies, financial planning, and ensuring the product or service is ready for market. In charge of the business and financial side of the Smartup, and of updating the Official Smartup Business Plan (OSBP).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Collective Craftsmanship**
|
|
||||||
A core Smartup value. Emphasizes that meaningful work and reward are distributed among all members based on contribution and merit, not hierarchy or tenure.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Collective Governance**
|
|
||||||
Democratic and transparent oversight of all Smartup operations, with formal processes for deliberation, voting, dispute resolution, and adaptation.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Collective IQ**
|
|
||||||
The enhanced problem-solving capability created when a group collaborates with transparency and shared purpose.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Collective Ownership**
|
|
||||||
Equal and inclusive ownership of the Smartup organization. Ownership is based on participation and willingness to contribute, not financial investment or seniority.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Crowdfunding Phases**
|
|
||||||
Funding rounds aligned with each major phase of Smartup creation. Each phase cannot progress to the next without meeting its designated funding target.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Design Team**
|
|
||||||
The group handling all design-related activities such as user experience (UX), interface, branding, wireframing, and prototyping. Responsible for the Design Blueprint and close cooperation with the Development Team and Science Team.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Development Team**
|
|
||||||
The technical heart of the Smartup. Builds and tests the core product or service, covering frontend, backend, security, architecture, and QA. Coordinates with Design, Science, and Operational Teams, and manages code versioning and repositories.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Isolated Human Doctrine**
|
|
||||||
A term describing the prevailing system in which technology platforms reinforce individualism and passive consumption, undermining collective action and responsibility.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Karma Points / Smartup Credits (SC)**
|
|
||||||
Karma Points are awarded for positive and constructive participation, teamwork, or peer review; these may be convertible to payouts. Smartup Credits (SC) are a tokenized internal currency (1 SC = 1 EUR claim on treasury funds), earned through completing tasks.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Leadership Team**
|
|
||||||
The decision-making and strategic core of a Smartup during creation phases, composed of all team captains and the initiating entrepreneur. This team orchestrates budgets, objectives, and major decisions while being accountable to the full community.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Media Team**
|
|
||||||
Ensures communication flows both inside the Smartup (internal reporting, progress updates) and outside (public relations, social media, storytelling). Produces engaging content to keep the community and backers informed.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Mission Leader**
|
|
||||||
A senior member appointed to maintain progress and oversight within a specific objective, assign tasks, and ensure quality of work.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Objectives**
|
|
||||||
Defined missions, focus areas, or sprints within the Teams structure; objectives break the organizational vision into actionable missions.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Observation**
|
|
||||||
The analytical foundation for Smartup Zero: the world is off track for the SDGs because collective action and problem-solving are obstructed by broken digital and organizational systems.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Official Smartup Business Plan (OSBP)**
|
|
||||||
A “living document” that records strategy, key decisions, research, assessments, and design throughout all phases; accessible to all owners.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**ONLIFE**
|
|
||||||
The first pilot project of Smartup Zero: a decentralized, emergency citizen mesh network prototype.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Operational Team**
|
|
||||||
Focuses on monitoring and improving processes between teams. Handles incident management, compliance, documentation, learning, and overall coordination, especially crucial for the first Smartup where learning is key.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Organization (Phase Four)**
|
|
||||||
The final phase of Smartup creation, in which the executive/operational structure is finalized, the business proposition is solidified, and the product or service is prepared for market launch.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Phases of Creation**
|
|
||||||
The four required stages for building a Smartup and its product or service:
|
|
||||||
1. **Validation** – Organize support, prove viability, reach the first funding target, and form coherent teams.
|
|
||||||
2. **Design** – Co-create blueprints and user experiences with scientific peer review and collective input.
|
|
||||||
3. **Production** – Build MVP/product, run beta tests, and refine based on review and feedback.
|
|
||||||
4. **Organization** – Establish operational structure, complete the final business plan, and prepare for launch.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Production (Phase Three)**
|
|
||||||
The phase in which the product or service is built, tested, and improved based on feedback and scientific review.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Roles**
|
|
||||||
Specific functional positions (e.g., Frontend Developer, UX Designer, Copywriter) within Teams; define both skill requirements and compensation rates.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Science Team**
|
|
||||||
Group responsible for independent scientific oversight and review, ensuring that all processes and outcomes align with sustainability best practices, evidence, and scalability. Holds power to request additional research or halt advancement if standards are not met.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Sociotechnical System (STS)**
|
|
||||||
An integrated approach to organizational design that balances social (human) and technical (infrastructural) factors for optimal collective performance and quality of life.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Smartup**
|
|
||||||
A new organizational model (the subject of Smartup Zero) designed to maximize democratic, scientific, and community-driven collaboration in creating technology for social and planetary benefit.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Smartup Constitution**
|
|
||||||
A codified document of learnings, rules, and governance logic, iteratively developed from the Smartup Zero experiment, designed to be adapted by future Smartups.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Smartup Credits (SC)**
|
|
||||||
Internal, auditable digital tokens or ledger entries, representing claimable value for contributors (1 SC = 1 EUR when funds are available in the treasury).
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Smartup Metabolism**
|
|
||||||
Metaphor for the system of processes—decision-making, feedback, payout, onboarding, and documentation—that enable the Smartup to adapt, sustain itself, and grow.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Smartup Organism**
|
|
||||||
Metaphorical framing for the entire Smartup structure as a multi-layer, living system whose “organs” work together toward collective vitality and resilience.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Task**
|
|
||||||
The atomic unit of productive work. Clearly defined, assigned, and logged; completion triggers SC payouts and structured peer/advisor review.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Team**
|
|
||||||
A focused group of workers with a shared skillset, responsible for a domain such as Development, Design, Media, Business, Operations, or Science. Each team is led by a Team Captain and contains multiple Roles and Objectives.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Team Captain**
|
|
||||||
Elected leader within a given Team; manages roles, budgets, tasks, performance, and represents the team in the Leadership Team.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Validation (Phase One)**
|
|
||||||
The initial phase of building a Smartup: validating the concept, building community, securing funding, and operationalizing the vision.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Watch License / Work License**
|
|
||||||
A Watch License grants governance and observation rights within the Smartup, but not paid assignments. A Work License grants the full right to work, vote, and earn Smartup Credits.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**Workplace**
|
|
||||||
The centralized collaborative production environment for all workers, where concurrent teamwork and objectives are managed.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
# Thank You!
|
|
||||||
|
|
||||||
Your message has been sent successfully.
|
|
||||||
|
|
||||||
Our team will review your submission and get back to you as soon as possible.
|
|
||||||
|
|
||||||
[Return to the homepage.](index.md)
|
|
|
@ -1,201 +0,0 @@
|
||||||
# :material-flask: Experiment Overview
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
A concise map of our experiment design: how we put the Smartup Hypothesis into practice
|
|
||||||
by redesigning the Social, Technical, and External subsystems. Follow the links to dive deeper.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## From Hypothesis to Experiment
|
|
||||||
|
|
||||||
Building on our core hypothesis, Smartup Zero tests three system tweaks:
|
|
||||||
|
|
||||||
- :material-account-group: **Social Subsystem**
|
|
||||||
From fragmented "users" to democratic citizens—transparent governance, peer workflows, collective ownership, and progressive transparency architecture.
|
|
||||||
|
|
||||||
- :material-server: **Technical Subsystem**
|
|
||||||
From isolated tools to group-first design—dual-currency economy, sovereign open-source stack, and automated administration.
|
|
||||||
|
|
||||||
- :material-earth: **External Subsystem**
|
|
||||||
From national silos to planetary organizations—borderless operations, equal pay, and a roadmap to global recognition.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
!!! warning "Don't Be Overwhelmed"
|
|
||||||
A Smartup is a new species of organization with many novel tools, processes, and workflows.
|
|
||||||
You won't master it all at once—learn by doing in the live experiment!
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Core Experiment Components
|
|
||||||
|
|
||||||
We frame each subsystem by its defining elements. Click through to explore details and examples.
|
|
||||||
|
|
||||||
=== ":material-account-group: Social Subsystem"
|
|
||||||
|
|
||||||
**Organizational Architecture**
|
|
||||||
- :material-rocket-launch: Rocket model: foundation (Science, Democracy, Collective IQ) + 3 pillars + military execution
|
|
||||||
- :material-cube-outline: Four Phases (0→Validation→Design→Production→Organization)
|
|
||||||
- :material-layers-triple: Six Groups of Productivity (Forum, Workplace, Teams, Roles, Objectives, Tasks)
|
|
||||||
|
|
||||||
**Democratic Governance**
|
|
||||||
- :material-triangle: ADM Triangle + Buddy System for quality, learning, and accountability
|
|
||||||
- :material-book-open: Official Smartup Business Plan (OSBP) as living constitution
|
|
||||||
- :material-vote: Binding vs. Advisory voting for different decision types
|
|
||||||
|
|
||||||
**Progressive Transparency Architecture** :material-new-box:
|
|
||||||
- :material-earth: Tier 1: Universal access (governance, progress, currency ledger)
|
|
||||||
- :material-account-group: Tier 2: Licensed contributor access (implementation, development)
|
|
||||||
- :material-shield-account: Tier 3: Organizational governance (strategic coordination)
|
|
||||||
- :material-license: Four License System (Campaign → Watch → Work → Organizational)
|
|
||||||
- :material-calendar-sync: Weekly blueprint sync (internal → external transparency)
|
|
||||||
|
|
||||||
=== ":material-server: Technical Subsystem"
|
|
||||||
|
|
||||||
**Dual-Currency Economy**
|
|
||||||
- :material-coin: Smartup Credits (SC): 1 SC = €1 treasury claim for completed work
|
|
||||||
- :material-heart: Social Karma: Non-transferable reputation for community contribution
|
|
||||||
- :material-git: Git-native ledger system with immutable transaction history
|
|
||||||
|
|
||||||
**Infrastructure & Automation**
|
|
||||||
- :material-server: EU-sovereign, open-source stack (Matrix/Element, Forgejo, Open Collective)
|
|
||||||
- :material-layers-triple: Smartup Administration Index (semantic numbering & workflows)
|
|
||||||
- :material-robot: Engelbot & CI for automated task routing, voting, and SC minting
|
|
||||||
- :material-group: Group-centric design (ONLIFE mesh protocol for collective action)
|
|
||||||
|
|
||||||
=== ":material-earth: External Subsystem"
|
|
||||||
|
|
||||||
**Planetary Scope**
|
|
||||||
- :material-earth-box: Digital-first, no HQ, operates under Internet jurisdiction
|
|
||||||
- :material-account-heart: Borderless participation & equal pay worldwide
|
|
||||||
- :material-scale-balance: Defocused from politics; focused on SDGs & scientific reality
|
|
||||||
- :material-numeric-3-circle: Roadmap to UN/global recognition as a new org "species"
|
|
||||||
- :material-shield-lock: Immunity from political volatility through decentralized structure
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Explore the Experiment
|
|
||||||
|
|
||||||
<div class="grid" markdown>
|
|
||||||
|
|
||||||
:material-account-group:{ .lg }
|
|
||||||
**Social Subsystem**
|
|
||||||
[See Social Details :material-arrow-right:](social-subsystem.md)
|
|
||||||
|
|
||||||
:material-server:{ .lg }
|
|
||||||
**Technical Subsystem**
|
|
||||||
[See Technical Details :material-arrow-right:](technical-subsystem.md)
|
|
||||||
|
|
||||||
:material-earth:{ .lg }
|
|
||||||
**External Subsystem**
|
|
||||||
[See External Details :material-arrow-right:](external-subsystem.md)
|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## The Democratic Phase Transition Process
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
flowchart TD
|
|
||||||
subgraph Validation["🔬 Validation Phase"]
|
|
||||||
V1["Financial Target Reached?"]
|
|
||||||
V2["Teams Organized & Staffed?"]
|
|
||||||
V3["OSBP v0.1 → v1.0 Ready?"]
|
|
||||||
V4{"Majority Vote Ready?"}
|
|
||||||
V5{"Science Team Veto?"}
|
|
||||||
V6["✅ Advance to Design"]
|
|
||||||
end
|
|
||||||
subgraph Design["🎨 Design Phase"]
|
|
||||||
D1["Financial Target Reached?"]
|
|
||||||
D2["Teams Organized & Staffed?"]
|
|
||||||
D3["OSBP v1.0 → v2.0 Ready?"]
|
|
||||||
D4{"Majority Vote Ready?"}
|
|
||||||
D5{"Science Team Veto?"}
|
|
||||||
D6["✅ Advance to Production"]
|
|
||||||
end
|
|
||||||
subgraph Production["⚙️ Production Phase"]
|
|
||||||
P1["Financial Target Reached?"]
|
|
||||||
P2["Teams Organized & Staffed?"]
|
|
||||||
P3["OSBP v2.0 → v3.0 Ready?"]
|
|
||||||
P4{"Majority Vote Ready?"}
|
|
||||||
P5{"Science Team Veto?"}
|
|
||||||
P6["✅ Advance to Organization"]
|
|
||||||
end
|
|
||||||
subgraph Organization["🌍 Organization Phase"]
|
|
||||||
O1["Financial Target Reached?"]
|
|
||||||
O2["Teams Organized & Staffed?"]
|
|
||||||
O3["OSBP v3.0 → v4.0 Ready?"]
|
|
||||||
O4{"Majority Vote Ready?"}
|
|
||||||
O5{"Science Team Veto?"}
|
|
||||||
O6["🚀 Launch to Market"]
|
|
||||||
end
|
|
||||||
V1 --> V2
|
|
||||||
V2 --> V3
|
|
||||||
V3 --> V4
|
|
||||||
V4 -- Pass --> V5
|
|
||||||
V4 -- Fail --> V1
|
|
||||||
V5 -- Approved --> V6
|
|
||||||
V5 -- Veto --> V1
|
|
||||||
V6 --> D1
|
|
||||||
D1 --> D2
|
|
||||||
D2 --> D3
|
|
||||||
D3 --> D4
|
|
||||||
D4 -- Pass --> D5
|
|
||||||
D4 -- Fail --> D1
|
|
||||||
D5 -- Approved --> D6
|
|
||||||
D5 -- Veto --> D1
|
|
||||||
D6 --> P1
|
|
||||||
P1 --> P2
|
|
||||||
P2 --> P3
|
|
||||||
P3 --> P4
|
|
||||||
P4 -- Pass --> P5
|
|
||||||
P4 -- Fail --> P1
|
|
||||||
P5 -- Approved --> P6
|
|
||||||
P5 -- Veto --> P1
|
|
||||||
P6 --> O1
|
|
||||||
O1 --> O2
|
|
||||||
O2 --> O3
|
|
||||||
O3 --> O4
|
|
||||||
O4 -- Pass --> O5
|
|
||||||
O4 -- Fail --> O1
|
|
||||||
O5 -- Approved --> O6
|
|
||||||
O5 -- Veto --> O1
|
|
||||||
Start(["Entrepreneur with Idea"]) --> Validation
|
|
||||||
|
|
||||||
V4:::majorityVote
|
|
||||||
V5:::scienceVeto
|
|
||||||
V6:::success
|
|
||||||
D4:::majorityVote
|
|
||||||
D5:::scienceVeto
|
|
||||||
D6:::success
|
|
||||||
P4:::majorityVote
|
|
||||||
P5:::scienceVeto
|
|
||||||
P6:::success
|
|
||||||
O4:::majorityVote
|
|
||||||
O5:::scienceVeto
|
|
||||||
O6:::success
|
|
||||||
classDef majorityVote fill:#f9d,stroke:#333,stroke-width:2px
|
|
||||||
classDef scienceVeto fill:#e74c3c,stroke:#333,stroke-width:2px
|
|
||||||
classDef success fill:#27ae60,stroke:#333,stroke-width:2px
|
|
||||||
style V4 color:#2962FF
|
|
||||||
style D4 color:#2962FF
|
|
||||||
style P4 color:#2962FF
|
|
||||||
style O4 color:#2962FF
|
|
||||||
```
|
|
||||||
|
|
||||||
!!! warning "Science Team: The Final Gatekeepers"
|
|
||||||
Special Veto Power: Even if the majority votes "ready," the Science Team can halt progression if the solution:
|
|
||||||
- Doesn't meet SDG compliance standards
|
|
||||||
- Lacks sustainability (e.g., server emissions too high)
|
|
||||||
- Isn't peer-reviewable or scientifically sound
|
|
||||||
- Could solve one problem but create others
|
|
||||||
*Think of them as auditors ensuring we don't release tools that cause unintended harm.*
|
|
||||||
|
|
||||||
!!! tip "Consistent 4-Threshold Structure"
|
|
||||||
Every phase follows the same validation pattern:
|
|
||||||
1. **Financial**: Crowdfunding/revenue targets met
|
|
||||||
2. **Organizational**: Teams properly staffed and functioning
|
|
||||||
3. **Documentation**: OSBP evolved to next version standard
|
|
||||||
4. **Democratic**: Community majority approval + Science Team sign-off
|
|
||||||
|
|
|
@ -1,174 +0,0 @@
|
||||||
##:material-eye: Observation
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
This page documents, through a sociotechnical lens, what the 2025 UN SDG Progress Report demonstrates about the state of global development systems. We observe—not prescribe—where and how deep misalignments persist between people, technology, and larger structures.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
??? tip "I just want the abstract"
|
|
||||||
This Observation page documents a rigorous, up-to-date account of global progress toward the Sustainable Development Goals (SDGs) through the lens of sociotechnical systems theory. Drawing directly from the 2025 United Nations SDG Progress Report, we assemble evidence that confirms a troubling reality: while knowledge, innovation, and digital infrastructure have all advanced, structural misalignments persist between our social behaviors, technical systems, and external incentives. These misalignments—identified as social, technical, and external subsystems—are at the heart of why collective action on urgent global challenges continues to fall short. Here, we reference authoritative data and expert analysis, not to propose solutions, but to precisely clarify where the current system fails and why a new approach is urgently required. This scientific baseline serves as the foundation for the hypotheses and experiments developed on subsequent pages.
|
|
||||||
|
|
||||||
|
|
||||||
## :material-earth-minus: SDG Progress – The World at an Inflection Point
|
|
||||||
|
|
||||||
!!! quote "United Nations SDG Report 2025"
|
|
||||||
> “The world remains far off track from achieving the 2030 Agenda. Of the 169 SDG targets, only 35% show adequate progress—18% are on track, 17% making moderate progress. In contrast, 48% show insufficient progress, and 18% of targets have regressed below 2015 baseline levels.”
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
<div class="grid cards" markdown>
|
|
||||||
- :material-chart-bubble:{ .lg .middle } **Global SDG Performance (2015–2025)**
|
|
||||||
|
|
||||||
| | % of Targets |
|
|
||||||
|--------------|--------------|
|
|
||||||
| On Track | 18% |
|
|
||||||
| Moderate | 17% |
|
|
||||||
| Marginal | 31% |
|
|
||||||
| Stagnating | 17% |
|
|
||||||
| Regressing | 18% |
|
|
||||||
|
|
||||||
<br/> <sub>*Source: UN SDG Progress Report 2025*</sub>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
##:material-flask: Our Method—A Sociotechnical Lens
|
|
||||||
What is Sociotechnical Theory?
|
|
||||||
|
|
||||||
“Sociotechnical theory is about joint optimization: designing systems where technical performance and human wellbeing are advanced together. It focuses on how social behaviors interact with technology, shaping both productivity and the quality of our collective work lives.”
|
|
||||||
— Wikipedia: Sociotechnical Systems
|
|
||||||
|
|
||||||
“Originally, computing focused on hardware, then software, then human-computer interaction, and now—at the level of sociotechnical systems—it considers how whole communities work through technology.”
|
|
||||||
— The Interaction Design Foundation, STS
|
|
||||||
|
|
||||||
“A community works through people using technology.”
|
|
||||||
|
|
||||||
In this spirit, our observations are grounded in the science of sociotechnical systems:
|
|
||||||
|
|
||||||
We ask: Where do our social, technical, and external systems align or misalign with collective wellbeing and progress?
|
|
||||||
We observe: Not just individuals with tools, but communities and societies—working, failing, or succeeding together, by and through their technologies.
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
graph TD
|
|
||||||
SS[**Social Subsystem**<br/><sub>Attributes of people -skills, attitudes, values-, relationships, reward systems, authority</sub>]
|
|
||||||
TS[**Technical Subsystem**<br/><sub>Processes, tasks, technology for transforming inputs to outputs</sub>]
|
|
||||||
ES[**External Subsystem**<br/><sub>Outside influences, stakeholders, partnering perspectives</sub>]
|
|
||||||
SS -- "Work System Design" --- JO[**Joint Optimization**]
|
|
||||||
TS -- "Work System Design" --- JO
|
|
||||||
ES -- "Pulls/Influences" --> JO
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### :material-rotate-right: Social Subsystem Fault — Hamsters in the Wheel
|
|
||||||
|
|
||||||
As we become more connected and more informed about the thousands of challenges facing humanity, we can’t help but notice a painful truth: despite our awareness, nothing we do as individuals seems to move the needle. Decades after the Club of Rome’s ‘Limits to Growth’ warned us about the risks of unchecked development, growing awareness about the links between society and our natural world still hasn’t triggered fundamental shifts in how we organize ourselves.
|
|
||||||
|
|
||||||
We measure more, know more, and have greater access to scientific insight than ever before. Yet, remarkably few of us are actually working on real solutions to real problems. Instead, we find ourselves trapped in a paradox: the better we get at calculating and exposing the effects of our culture on nature, the less agency we feel to change the course we’re on.
|
|
||||||
|
|
||||||
We’re overwhelmed, not just by the data and complexity, but by a constant barrage of conflicting information, misinformation, and cultural warfare—conditions that make genuine collaboration and action feel impossible. It’s as if the systems around us are designed to keep us running in place, growing tired, but never reaching meaningful progress.
|
|
||||||
|
|
||||||
Deep down, we recognize ourselves in this paradox. We are the hamsters, running tirelessly on wheels built by economies and power structures that benefit from our distraction and confusion. This is the central issue we need to name and break: the system that keeps us moving, but rarely moving forward.
|
|
||||||
|
|
||||||
!!! quote "UN Confirmation"
|
|
||||||
> “Persistent inequalities continue to limit human potential... The broader context is increasingly complex. Climate change continues to accelerate... A $4 trillion annual financing gap constrains development progress."
|
|
||||||
|
|
||||||
#### What We Observe:
|
|
||||||
- Routines and incentive systems keep individuals in cycles that reinforce, not repair, the global crises.
|
|
||||||
- Those most threatened by these risks are generally excluded from shaping system-level responses.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### :material-account-off: Technical Subsystem Fault — The Isolated Human Doctrine
|
|
||||||
|
|
||||||
When we look honestly at the world’s urgent challenges, it’s not just their complexity that weighs on us—it’s the shape our own societies are in to overcome them. We find ourselves divided, distracted, and often addicted to digital habits, while the most powerful organizations on earth benefit from keeping us apart. Increasingly, our technology is designed to isolate us—as users, as consumers, not as collaborators or citizens. This is what we call the isolated human doctrine.
|
|
||||||
|
|
||||||
This doctrine does more than make us passive—it also convinces us to wait for someone else to solve the crisis. We’re conditioned to look to governments, powerful leaders, or brands to invent our way out of these problems. But the truth is, they won’t. Deep down, we know we need to step up—not as lone heroes, but as people who are a bit more organized, a bit more connected, and united by purpose.
|
|
||||||
|
|
||||||
We’ve been told a better world starts with “fixing yourself.” If we face these challenges alone, everything feels too big to tackle. But if we face them together, maybe—just maybe—they become possible.
|
|
||||||
|
|
||||||
!!! quote "UN Confirmation"
|
|
||||||
> “Progress has been deeply inadequate. This reflects... a fundamental problem in how we measure, monitor and respond to global development needs... Statistical systems remain chronically underfunded—treated as technical afterthoughts.”
|
|
||||||
|
|
||||||
#### What We Observe:
|
|
||||||
- The explosion of data and connectivity isn’t translating into collective agency or action.
|
|
||||||
- Citizens are “users” rather than full contributors.
|
|
||||||
- Siloed data, vulnerable infrastructure, and lack of trust persist—especially for the most vital SDGs.
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
graph LR
|
|
||||||
subgraph Technical Subsystem
|
|
||||||
D[Digital Growth] --> E(Increased Data)
|
|
||||||
E --> F("Trust & Feedback Gaps")
|
|
||||||
F -->|Missed SDGs| G[Collective Inaction]
|
|
||||||
end
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
### :material-bank-off-outline: External Subsystem Fault — Distorted Incentives
|
|
||||||
|
|
||||||
We feel a growing sense of urgency as we watch our grip on the world slip away—just when we need clarity and collective strength the most. The explosion of digital content and internet access was supposed to empower us. It did make knowledge more available than ever. Now, everyone can publish, create, and share at the speed of thought.
|
|
||||||
|
|
||||||
But all this information hasn’t brought us together—it’s become a battleground for the agendas of corporations and political powers. Instead of uniting us, today’s internet is often used to distract, confuse, and divide. Powerful interests, not people, steer the flow of content and shape what we believe.
|
|
||||||
|
|
||||||
Somehow, we have let this happen: the internet’s promise hijacked by those who profit from division and distraction, instead of fostering the collaboration we urgently need. There’s no single cause, but the result is clear—a system that floods us with information, but makes meaningful, collective change harder than ever.
|
|
||||||
|
|
||||||
!!! quote "UN Confirmation"
|
|
||||||
> “Funding for global data... remains heavily dependent on a small group of major funders... The fragility of data financing is well-illustrated after abrupt termination of funding... which now threatens the production of critical data needed to monitor progress on multiple SDG indicators.”
|
|
||||||
|
|
||||||
#### What We Observe:
|
|
||||||
- Funding, priorities, and risk tolerance sit outside the collective, subject to abrupt reversals.
|
|
||||||
- Systemic dependence leads to fragility and volatility in critical development data and solutions.
|
|
||||||
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
flowchart TD
|
|
||||||
SDG[Global SDG Targets\nfalling short]
|
|
||||||
subgraph Social
|
|
||||||
A[Hamsters in the Wheel]
|
|
||||||
end
|
|
||||||
subgraph Technical
|
|
||||||
B[Isolated Human Doctrine]
|
|
||||||
end
|
|
||||||
subgraph External
|
|
||||||
C[Distorted Incentives]
|
|
||||||
end
|
|
||||||
SDG --> A
|
|
||||||
SDG --> B
|
|
||||||
SDG --> C
|
|
||||||
A -- "Traps talent & solidarity"\n(inequality, exclusion) --> A1[Low collective action]
|
|
||||||
B -- "Optimizes for reporting & consumption,\nnot participatory agency" --> B1[Fragile and siloed data systems]
|
|
||||||
C -- "Short-term, external \(and boom-bust\) priorities" --> C1[Funding shocks, stalling progress]
|
|
||||||
```
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## :material-information: Convergence — SDG Data Meets Systems Theory
|
|
||||||
|
|
||||||
!!! quote "Shared Analysis"
|
|
||||||
> “The challenges we face are inherently global and interconnected. No country... can address climate change, pandemic preparedness or inequality alone. ...Sustainable development is not a zero-sum game, but a shared endeavour that benefits all.”
|
|
||||||
>
|
|
||||||
> — *UN SDG Progress Report 2025, Call for renewed multilateralism*
|
|
||||||
|
|
||||||
**Our Scientific Take:**
|
|
||||||
The 2025 SDG Progress Report confirms what systems theorists have observed for years:
|
|
||||||
- Global stalling isn’t due to ignorance or lack of effort, but structural misalignment—across social, technical, and external (funding/governance) systems.
|
|
||||||
- As long as these systems remain fragmented or externally steered, collective progress will remain slow, fragile, and easily reversed.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
[:material-arrow-right-bold: Continue to the Hypothesis](the-smartup-hypothesis.md){ .md-button .md-button--primary }
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
**References:**
|
|
||||||
- [The Sustainable Development Goals Report 2025 (PDF, unstats.un.org)](https://unstats.un.org/sdgs/report/2025/The-Sustainable-Development-Goals-Report-2025.pdf)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
--8<-- "_snippets/join-cta.md"
|
|
||||||
|
|
||||||
|
|
|
@ -1,82 +0,0 @@
|
||||||
---
|
|
||||||
|
|
||||||
# :material-flask: Hypothesis
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
This section sets out our core scientific and practical hypothesis for Smartup Zero. Instead of patching old systems, we propose re-engineering the way technology is built, owned, and governed—creating a new “species” of organization that can address the failures confirmed by both the latest SDG report and sociotechnical theory.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
??? tip "I just want to see the abstract"
|
|
||||||
This page sets out the core hypothesis behind Smartup Zero. Building on our observations—and the latest evidence from the UN’s SDG report—we believe the current way technology is created, owned, and governed keeps us from making real progress on urgent global challenges. Our hypothesis: If we redesign digital organizations—so that ownership, contribution, and decision-making are collective, transparent, and grounded in science—then we can finally create the digital toolset and community power needed to reach our shared goals. This page breaks down how we think these system shifts must happen, subsystem by subsystem.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
## :material-atom: Core Hypothesis
|
|
||||||
|
|
||||||
Our world is missing its SDG targets not for lack of effort, ideas, or technical skill—but because the systems we use to build, fund, and govern technology are fundamentally misaligned with collective needs.
|
|
||||||
|
|
||||||
Startups, NGOs, and even open source teams generally follow a logic that prioritizes shareholders, siloed expertise, or short-term results. These familiar models cannot fix our biggest problems at their roots.
|
|
||||||
|
|
||||||
We need a new kind of digital institution—a true sociotechnical “organism,” designed from the ground up so that collective action is easy, meaningful, and sustainable.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## :material-account-group: 1. Adjustment to the Social Subsystem
|
|
||||||
|
|
||||||
Today, ownership and power over technology live with founders and shareholders—not the people who use and build it. Most people are locked out of real decision-making, or can only “help” on the side.
|
|
||||||
|
|
||||||
**Our hypothesis:**
|
|
||||||
If we move from shareholder-owned technology to people-owned technology, then joining, contributing, earning, and governing become accessible to all. Participating in positive change becomes a “day job,” not an afterthought.
|
|
||||||
|
|
||||||
!!! tip "In Practice"
|
|
||||||
In a Smartup, all contributors—no matter their background—can own, shape, and steer the direction of projects together.<br>
|
|
||||||
|
|
||||||
The experiment setting: [A New Social Subsystem](social-subsystem.md)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## :material-server: 2. Adjustment to the Technical Subsystem
|
|
||||||
|
|
||||||
The mainstream model of digital design treats people as isolated “users.” Our tools are engineered for personal consumption or individual productivity—not for communities trying to solve big problems together.
|
|
||||||
|
|
||||||
**Our hypothesis:**
|
|
||||||
If we explicitly design technology for citizen groups—drawing on the lessons of Douglas Engelbart and others—then our collective intelligence and ability to take coordinated action will accelerate.
|
|
||||||
“Smartup tech is built for groups to collaborate, deliberate, and act as one.”
|
|
||||||
|
|
||||||
!!! quote "Inspiration"
|
|
||||||
_“The real breakthrough comes when technology supports groups solving problems together.”_
|
|
||||||
— Douglas Engelbart (paraphrased)
|
|
||||||
|
|
||||||
The experiment setting: [A New Technical Subsystem](technical-subsystem.md)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## :material-bank-off-outline: 3. Adjustment to the External Subsystem
|
|
||||||
|
|
||||||
Traditional organizations—corporations, governments, even many NGOs—depend on closed funding streams, proprietary platforms, and top-down decision-making. These systems are vulnerable to external shocks and often shaped by priorities at odds with public value.
|
|
||||||
|
|
||||||
**Our hypothesis:**
|
|
||||||
If we shift to decentralized, open funding (via crowdfunding, community partnerships, and open-source collaboration), then technology projects can remain truly accountable and resilient—serving society, not distant investors or powerbrokers.
|
|
||||||
|
|
||||||
!!! info "Mechanism"
|
|
||||||
Smartup Zero is structured so that funding, data, and decision rights are distributed and transparent—not captured by single entities or platforms.
|
|
||||||
|
|
||||||
|
|
||||||
The experiment setting: [A New External Subsystem](external-subsystem.md)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## :material-cube-outline: Blueprint for a New Kind of Organization
|
|
||||||
|
|
||||||
To realign our systems with societal and planetary needs, we hypothesize that a new kind of organization—one that rewires ownership, technical design, and external relationships—can transform collective intent into real progress.
|
|
||||||
|
|
||||||
!!! note "What's Next?"
|
|
||||||
The next section documents how we are testing these hypotheses through the Smartup Zero experiment, step by step.
|
|
||||||
|
|
||||||
[:material-arrow-right-bold: Dive into the Experiment](the-experiment.md){ .md-button .md-button--primary }
|
|
||||||
|
|
||||||
|
|
||||||
--8<-- "_snippets/join-cta.md"
|
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
hide: true
|
|
|
@ -1,6 +0,0 @@
|
||||||
<img src="../assets/flavicon.png" alt="0_timeline logo" style="width:80px;"/><br />
|
|
||||||
|
|
||||||
**0_timeline**
|
|
||||||
The **space** where Smartups are designed, tested, and documented—**in public**.
|
|
||||||
All progress is shared here, step by step.
|
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
<form class="contact-form" action="https://api.staticforms.xyz/submit" method="post">
|
|
||||||
<!-- REQUIRED: Your StaticForms access key, wrapped in quotes. -->
|
|
||||||
<input type="hidden" name="accessKey" value="sf_ha7960c038fb88i3hbgf0d81">
|
|
||||||
|
|
||||||
<!-- Sets the subject of the email you will receive -->
|
|
||||||
<input type="hidden" name="subject" value="Contact Form Submission - Smartup Zero">
|
|
||||||
|
|
||||||
<!-- Redirects user to a thank you page after submission -->
|
|
||||||
<input type="hidden" name="redirectTo" value="https://timeline0.org/0_timeline/thank-you/">
|
|
||||||
|
|
||||||
<!-- Anti-spam honeypot field. Do not change. -->
|
|
||||||
<input type="text" name="honeypot" style="display: none" tabindex="-1" autocomplete="off">
|
|
||||||
|
|
||||||
<!-- Form Fields -->
|
|
||||||
<label for="name">Name:</label>
|
|
||||||
<input type="text" id="name" name="name" required>
|
|
||||||
|
|
||||||
<!-- CRITICAL: The user's email field, correctly named "_replyto" -->
|
|
||||||
<label for="email">Your Email (for replies):</label>
|
|
||||||
<input type="email" id="email" name="_replyto" required>
|
|
||||||
|
|
||||||
<label for="message">Message:</label>
|
|
||||||
<textarea id="message" name="message" rows="8" required></textarea>
|
|
||||||
|
|
||||||
<!-- The reCAPTCHA key, correctly wrapped in quotes -->
|
|
||||||
<div class="g-recaptcha" data-sitekey="6LcXVZcrAAAAAErKk03ysIccvSose25YnkeiBP-b"></div>
|
|
||||||
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
|
|
||||||
|
|
||||||
<button type="submit">Send Message</button>
|
|
||||||
</form>
|
|
||||||
|
|
|
@ -1,23 +0,0 @@
|
||||||
## :material-rocket-launch: Ready to Contribute?
|
|
||||||
|
|
||||||
<div class="grid" markdown>
|
|
||||||
|
|
||||||
:material-account-plus:{ .lg }
|
|
||||||
|
|
||||||
**Join the Project**
|
|
||||||
|
|
||||||
Become a Smartup Zero owner
|
|
||||||
|
|
||||||
[Join via Open Collective :material-open-in-new:](https://opencollective.com/smartup-zero){ .md-button }
|
|
||||||
|
|
||||||
:material-chat:{ .lg }
|
|
||||||
|
|
||||||
**Reach out**
|
|
||||||
|
|
||||||
Contact the 3_1_leadership_team with questions or remarks
|
|
||||||
|
|
||||||
[Contact US :material-open-in-new:](/0_timeline/contact-us/){ .md-button }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
markdown
|
|
||||||
<img src="../assets/onlife logo.png" alt="ONLIFE logo" style="width:80px;"/><br />
|
|
||||||
|
|
||||||
**ONLIFE**
|
|
||||||
The actual **technology we're building**:
|
|
||||||
A decentralized emergency network for European citizen resilience.
|
|
|
@ -1,5 +0,0 @@
|
||||||
!!! success inline end "Phase Status"
|
|
||||||
**Status:** Active
|
|
||||||
**Duration:** 30 days
|
|
||||||
**Started:** January 1, 2025
|
|
||||||
**Target End:** January 31, 2025
|
|
|
@ -1,3 +0,0 @@
|
||||||
status card: This snippet can be included in any page using:
|
|
||||||
|
|
||||||
--8<-- "_snippets/status-card.md"
|
|
|
@ -1,71 +0,0 @@
|
||||||
<div class="grid-4">
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal1"><img src="/assets/sdg-icons/sdg1.png" alt="SDG 1" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal2"><img src="/assets/sdg-icons/sdg2.png" alt="SDG 2" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal3"><img src="/assets/sdg-icons/sdg3.png" alt="SDG 3" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal4"><img src="/assets/sdg-icons/sdg4.png" alt="SDG 4" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal5"><img src="/assets/sdg-icons/sdg5.png" alt="SDG 5" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal6"><img src="/assets/sdg-icons/sdg6.png" alt="SDG 6" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal7"><img src="/assets/sdg-icons/sdg7.png" alt="SDG 7" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal8"><img src="/assets/sdg-icons/sdg8.png" alt="SDG 8" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal9"><img src="/assets/sdg-icons/sdg9.png" alt="SDG 9" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal10"><img src="/assets/sdg-icons/sdg10.png" alt="SDG 10" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal11"><img src="/assets/sdg-icons/sdg11.png" alt="SDG 11" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal12"><img src="/assets/sdg-icons/sdg12.png" alt="SDG 12" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal13"><img src="/assets/sdg-icons/sdg13.png" alt="SDG 13" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal14"><img src="/assets/sdg-icons/sdg14.png" alt="SDG 14" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal15"><img src="/assets/sdg-icons/sdg15.png" alt="SDG 15" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal16"><img src="/assets/sdg-icons/sdg16.png" alt="SDG 16" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div class="grid-item">
|
|
||||||
<a href="https://sdgs.un.org/goals/goal17"><img src="/assets/sdg-icons/sdg17.png" alt="SDG 17" /></a><br />
|
|
||||||
</div>
|
|
||||||
|
|
||||||
</div>
|
|
|
@ -1,2 +0,0 @@
|
||||||
??? info "What does it mean to be a smartup owner "
|
|
||||||
Being the owner of a Smartup is more like being a citizen of a new country than a shareholder of a new company. You need to contribute to the creation of the country. You've got all kinds of rights and obligations to do that. You share responsibility with co-owners for what the Smartup is creating. With your rights, you can perform those responsibilities. You've got the right to vote, supervise and work. At the same time, you offer your best and take part in good faith and with good intention. To show your good faith and good intention as an owner, you can work or govern.
|
|
|
@ -1,6 +0,0 @@
|
||||||
<img src="../assets/smartup icon black.png" alt="Smartup Zero logo" style="width:80px;"/><br />
|
|
||||||
|
|
||||||
**Smartup Zero**
|
|
||||||
Our **first live experiment.**
|
|
||||||
Testing the Smartup model in real time.
|
|
||||||
Failures and successes are both part of the process.
|
|
|
@ -1,6 +0,0 @@
|
||||||
<img src="../assets/smartup icon white.png" alt="Smartup logo" style="width:80px;"/><br />
|
|
||||||
|
|
||||||
**Smartup**
|
|
||||||
A **new hypothesis**:
|
|
||||||
What if building technology worked more like a scientific experiment?
|
|
||||||
Community-owned. Transparent. Measured.
|
|
|
@ -1,27 +0,0 @@
|
||||||
<div class="grid cards" markdown>
|
|
||||||
|
|
||||||
- :material-check-circle:{ .lg .middle } **Completed**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
[Description of completed item]
|
|
||||||
|
|
||||||
[:octicons-arrow-right-24: View details](#)
|
|
||||||
|
|
||||||
- :material-progress-clock:{ .lg .middle } **In Progress**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
[Description of in-progress item]
|
|
||||||
|
|
||||||
[:octicons-arrow-right-24: Track progress](#)
|
|
||||||
|
|
||||||
- :material-calendar-clock:{ .lg .middle } **Planned**
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
[Description of planned item]
|
|
||||||
|
|
||||||
[:octicons-arrow-right-24: See roadmap](#)
|
|
||||||
|
|
||||||
</div>
|
|
|
@ -1,14 +0,0 @@
|
||||||
### :material-account-group: Team Name
|
|
||||||
|
|
||||||
!!! tip inline end "Quick Links"
|
|
||||||
:material-git: [Repos](https://smartup-zero-forgejo.fly.dev/)
|
|
||||||
:material-chat: [Chat](#)
|
|
||||||
:material-clipboard-list: [Tasks](#)
|
|
||||||
|
|
||||||
**Captain:** [@username](#)
|
|
||||||
**Members:** 5 active
|
|
||||||
**Mission:** One-line mission statement
|
|
||||||
|
|
||||||
**Current Focus:**
|
|
||||||
- Current objective 1
|
|
||||||
- Current objective 2
|
|
|
@ -1 +0,0 @@
|
||||||
hide: true
|
|
|
@ -1,30 +0,0 @@
|
||||||
# 📋 Smartup Zero Content Templates
|
|
||||||
|
|
||||||
This directory contains templates for common page types. Using these templates ensures consistency across all documentation.
|
|
||||||
|
|
||||||
## Available Templates
|
|
||||||
|
|
||||||
### 📅 phase-page.md
|
|
||||||
Use this template when documenting project phases.
|
|
||||||
|
|
||||||
**Usage:**
|
|
||||||
```bash
|
|
||||||
cp docs/_templates/phase-page.md docs/0_timeline/phases/phase-0-micropilot.md
|
|
||||||
# Then edit to fill in the [placeholders]
|
|
||||||
When to use:
|
|
||||||
|
|
||||||
Documenting any of the 4 phases (Validation, Design, Production, Organization)
|
|
||||||
Creating phase-specific status pages
|
|
||||||
Planning future phases
|
|
||||||
How to Use Templates
|
|
||||||
Copy the template to your target location
|
|
||||||
Replace all [placeholder] text with actual content
|
|
||||||
Remove any sections that aren't relevant
|
|
||||||
Follow the style guide for formatting
|
|
||||||
Creating New Templates
|
|
||||||
When creating new templates:
|
|
||||||
|
|
||||||
Use clear placeholders in [Square Brackets]
|
|
||||||
Include all standard components from the style guide
|
|
||||||
Add usage instructions to this README
|
|
||||||
Test the template by creating a sample page
|
|
|
@ -1,20 +0,0 @@
|
||||||
# :material-icon: Page Title
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
One-sentence explanation of what this page covers.
|
|
||||||
|
|
||||||
## Purpose
|
|
||||||
|
|
||||||
Brief paragraph explaining why this matters in the Smartup Zero context.
|
|
||||||
|
|
||||||
## Main Content
|
|
||||||
|
|
||||||
Your content here...
|
|
||||||
|
|
||||||
## :material-rocket-launch: Next Steps
|
|
||||||
|
|
||||||
What the reader should do after reading this page.
|
|
||||||
|
|
||||||
!!! seealso "Related Topics"
|
|
||||||
- [Related Page 1](link)
|
|
||||||
- [Related Page 2](link)
|
|
|
@ -1,84 +0,0 @@
|
||||||
# :material-numeric-[X]-circle: Phase [Number]: [Phase Name]
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
This page documents Phase [Number] of the Smartup Zero experiment, including goals, timeline, and deliverables.
|
|
||||||
|
|
||||||
## Overview
|
|
||||||
|
|
||||||
!!! success inline end "Phase Status"
|
|
||||||
**Status:** [Not Started/Active/Complete]
|
|
||||||
**Duration:** [X] days
|
|
||||||
**Started:** [Date or TBD]
|
|
||||||
**Target End:** [Date or TBD]
|
|
||||||
**Actual End:** [Date or TBD]
|
|
||||||
|
|
||||||
[Brief description of what this phase is about and why it's important]
|
|
||||||
|
|
||||||
## Goals & Success Criteria
|
|
||||||
|
|
||||||
### Primary Goals
|
|
||||||
|
|
||||||
- [ ] **Goal 1:** [Specific, measurable goal]
|
|
||||||
- Success metric: [How we measure completion]
|
|
||||||
- Current status: [Progress update]
|
|
||||||
|
|
||||||
- [ ] **Goal 2:** [Specific, measurable goal]
|
|
||||||
- Success metric: [How we measure completion]
|
|
||||||
- Current status: [Progress update]
|
|
||||||
|
|
||||||
### Deliverables
|
|
||||||
|
|
||||||
| Deliverable | Description | Owner | Status |
|
|
||||||
|-------------|-------------|-------|---------|
|
|
||||||
| [Name] | [What it is] | @team/person | :material-check: Done |
|
|
||||||
| [Name] | [What it is] | @team/person | :material-progress-wrench: In Progress |
|
|
||||||
| [Name] | [What it is] | @team/person | :material-calendar: Planned |
|
|
||||||
|
|
||||||
## Timeline
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
gantt
|
|
||||||
title Phase [Number] Timeline
|
|
||||||
dateFormat YYYY-MM-DD
|
|
||||||
section Preparation
|
|
||||||
[Task 1] :2025-01-01, 7d
|
|
||||||
section Development
|
|
||||||
[Task 2] :7d
|
|
||||||
[Task 3] :7d
|
|
||||||
section Review
|
|
||||||
[Task 4] :3d
|
|
||||||
Budget & Resources
|
|
||||||
Financial Requirements
|
|
||||||
Target Funding: €[Amount]
|
|
||||||
Raised: €[Amount]
|
|
||||||
Burn Rate: €[Amount]/month
|
|
||||||
Human Resources
|
|
||||||
Contributors Needed: [Number]
|
|
||||||
Current Team Size: [Number]
|
|
||||||
Key Roles to Fill: [List]
|
|
||||||
Key Decisions & Gates
|
|
||||||
!!! warning "Phase Gate Requirements"
|
|
||||||
Before proceeding to the next phase, we must:
|
|
||||||
|
|
||||||
text
|
|
||||||
1. Achieve financial target of €[Amount]
|
|
||||||
2. Complete all primary deliverables
|
|
||||||
3. Pass scientific review (if applicable)
|
|
||||||
4. **Hold binding vote to proceed**
|
|
||||||
Lessons Learned
|
|
||||||
??? info "Insights from this phase"
|
|
||||||
Document key learnings as the phase progresses:
|
|
||||||
|
|
||||||
text
|
|
||||||
- What worked well
|
|
||||||
- What didn't work
|
|
||||||
- What we'd do differently
|
|
||||||
- Recommendations for future phases
|
|
||||||
|
|
||||||
|
|
||||||
Related Documents
|
|
||||||
Previous Phase
|
|
||||||
Next Phase
|
|
||||||
Overall Experiment
|
|
||||||
Project Timeline
|
|
||||||
|
|
|
@ -1,87 +0,0 @@
|
||||||
# :material-account-group: [Team Name] Team
|
|
||||||
|
|
||||||
!!! info "What is this?"
|
|
||||||
This page describes the [Team Name] team's mission, members, and current work.
|
|
||||||
|
|
||||||
## Purpose
|
|
||||||
|
|
||||||
[Explain why this team exists and what unique value it brings to Smartup Zero]
|
|
||||||
|
|
||||||
## Team Structure
|
|
||||||
|
|
||||||
!!! tip inline end "Quick Links"
|
|
||||||
:material-git: [Team Repos](https://smartup-zero-forgejo.fly.dev/smartup-zero/[team-name])
|
|
||||||
:material-chat: [Team Room](#3_[team-name])
|
|
||||||
:material-clipboard-list: [Open Tasks](link)
|
|
||||||
|
|
||||||
**Captain:** [@username](link)
|
|
||||||
**Members:** X active contributors
|
|
||||||
**Formed:** [Month Year]
|
|
||||||
|
|
||||||
### Team Members
|
|
||||||
|
|
||||||
| Member | Role | Joined | Specialties |
|
|
||||||
|--------|------|--------|-------------|
|
|
||||||
| @captain | Team Captain | Jan 2025 | Leadership, [Skill] |
|
|
||||||
| @member1 | [Role] | Jan 2025 | [Skills] |
|
|
||||||
| @member2 | [Role] | Jan 2025 | [Skills] |
|
|
||||||
|
|
||||||
## Mission Statement
|
|
||||||
|
|
||||||
[One clear paragraph describing what this team is responsible for]
|
|
||||||
|
|
||||||
## Current Objectives
|
|
||||||
|
|
||||||
### :material-target: Active Objectives
|
|
||||||
|
|
||||||
1. **[Objective Name]** (Due: [Date])
|
|
||||||
- Description of what needs to be achieved
|
|
||||||
- Key deliverable
|
|
||||||
- Success metrics
|
|
||||||
|
|
||||||
2. **[Objective Name]** (Due: [Date])
|
|
||||||
- Description of what needs to be achieved
|
|
||||||
- Key deliverable
|
|
||||||
- Success metrics
|
|
||||||
|
|
||||||
### :material-check-circle: Completed Objectives
|
|
||||||
|
|
||||||
??? success "View completed work"
|
|
||||||
- [Objective] - Completed [Date]
|
|
||||||
- [Objective] - Completed [Date]
|
|
||||||
|
|
||||||
## How We Work
|
|
||||||
|
|
||||||
### Communication
|
|
||||||
- **Primary Channel:** Element room `#3_[team-name]`
|
|
||||||
- **Meetings:** [Frequency] at [Time] UTC
|
|
||||||
- **Decisions:** Made by consensus, escalated to captain if needed
|
|
||||||
|
|
||||||
### Contribution Process
|
|
||||||
1. Check open tasks in our [project board](link)
|
|
||||||
2. Comment on task to claim it
|
|
||||||
3. Submit PR when complete
|
|
||||||
4. Captain or designated reviewer approves
|
|
||||||
|
|
||||||
## Resources
|
|
||||||
|
|
||||||
### Documentation
|
|
||||||
- [Team handbook](link)
|
|
||||||
- [Technical guidelines](link)
|
|
||||||
- [Best practices](link)
|
|
||||||
|
|
||||||
### Tools
|
|
||||||
- [Tool 1] - Purpose
|
|
||||||
- [Tool 2] - Purpose
|
|
||||||
|
|
||||||
## Join Our Team
|
|
||||||
|
|
||||||
Interested in joining the [Team Name] team? Here's how:
|
|
||||||
|
|
||||||
1. Join the [General Forum](../1_general_forum.md)
|
|
||||||
2. Introduce yourself in our team room
|
|
||||||
3. Pick up a "good first task"
|
|
||||||
4. Attend our next team meeting
|
|
||||||
|
|
||||||
!!! question "Questions?"
|
|
||||||
Reach out to our captain @captain in Element
|
|
|
@ -1,16 +0,0 @@
|
||||||
### :material-account-group: Team Name
|
|
||||||
|
|
||||||
!!! tip inline end "Quick Links"
|
|
||||||
:material-git: [Team Repos](https://smartup-zero-forgejo.fly.dev/smartup-zero/team-name)
|
|
||||||
:material-chat: [Team Room](#3_team-name)
|
|
||||||
:material-clipboard-list: [Open Tasks](link)
|
|
||||||
|
|
||||||
**Captain:** [@username](link)
|
|
||||||
**Members:** X active contributors
|
|
||||||
**Formed:** Month Year
|
|
||||||
|
|
||||||
**Mission:** One clear sentence describing the team's purpose.
|
|
||||||
|
|
||||||
**Current Objectives:**
|
|
||||||
- Objective 1 with deadline
|
|
||||||
- Objective 2 with deadline
|
|
Before Width: | Height: | Size: 19 MiB |
Before Width: | Height: | Size: 1.9 MiB |
Before Width: | Height: | Size: 43 KiB |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 19 MiB |
Before Width: | Height: | Size: 577 KiB |
Before Width: | Height: | Size: 1.0 MiB |
Before Width: | Height: | Size: 2.4 MiB |
Before Width: | Height: | Size: 300 KiB |
Before Width: | Height: | Size: 3.0 MiB |
Before Width: | Height: | Size: 21 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 119 KiB |
Before Width: | Height: | Size: 136 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 17 KiB |
Before Width: | Height: | Size: 45 KiB |
Before Width: | Height: | Size: 29 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 52 KiB |
Before Width: | Height: | Size: 43 KiB |