diff --git a/app/globals.css b/app/globals.css index 57a89a9..b5788cb 100644 --- a/app/globals.css +++ b/app/globals.css @@ -4,30 +4,79 @@ @custom-variant dark (&:is(.dark *)); :root { - /* Mycelial palette - dark earth, organic warmth */ - --background: oklch(0.12 0.02 60); - --foreground: oklch(0.88 0.03 80); - --card: oklch(0.15 0.02 60); - --card-foreground: oklch(0.88 0.03 80); - --popover: oklch(0.14 0.02 60); - --popover-foreground: oklch(0.88 0.03 80); - --primary: oklch(0.72 0.12 85); - --primary-foreground: oklch(0.12 0.02 60); - --secondary: oklch(0.18 0.02 60); - --secondary-foreground: oklch(0.75 0.04 80); - --muted: oklch(0.22 0.02 60); - --muted-foreground: oklch(0.55 0.03 80); - --accent: oklch(0.65 0.10 140); - --accent-foreground: oklch(0.12 0.02 60); - --border: oklch(0.28 0.03 60); - --input: oklch(0.18 0.02 60); - --ring: oklch(0.72 0.12 85); - --radius: 0px; + --background: oklch(0.16 0.01 265); + --foreground: oklch(0.95 0.01 265); + --card: oklch(0.2 0.015 265); + --card-foreground: oklch(0.95 0.01 265); + --popover: oklch(0.2 0.015 265); + --popover-foreground: oklch(0.95 0.01 265); + --primary: oklch(0.7 0.15 265); + --primary-foreground: oklch(0.98 0.01 265); + --secondary: oklch(0.25 0.015 265); + --secondary-foreground: oklch(0.95 0.01 265); + --muted: oklch(0.25 0.015 265); + --muted-foreground: oklch(0.55 0.01 265); + --accent: oklch(0.65 0.18 185); + --accent-foreground: oklch(0.98 0.01 265); + --destructive: oklch(0.577 0.245 27.325); + --destructive-foreground: oklch(0.98 0.01 265); + --border: oklch(0.28 0.015 265); + --input: oklch(0.28 0.015 265); + --ring: oklch(0.7 0.15 265); + --chart-1: oklch(0.7 0.15 265); + --chart-2: oklch(0.65 0.18 185); + --chart-3: oklch(0.6 0.12 145); + --chart-4: oklch(0.75 0.16 285); + --chart-5: oklch(0.65 0.14 225); + --radius: 0.75rem; + --sidebar: oklch(0.985 0 0); + --sidebar-foreground: oklch(0.145 0 0); + --sidebar-primary: oklch(0.205 0 0); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.97 0 0); + --sidebar-accent-foreground: oklch(0.205 0 0); + --sidebar-border: oklch(0.922 0 0); + --sidebar-ring: oklch(0.708 0 0); +} + +.dark { + --background: oklch(0.145 0 0); + --foreground: oklch(0.985 0 0); + --card: oklch(0.145 0 0); + --card-foreground: oklch(0.985 0 0); + --popover: oklch(0.145 0 0); + --popover-foreground: oklch(0.985 0 0); + --primary: oklch(0.985 0 0); + --primary-foreground: oklch(0.205 0 0); + --secondary: oklch(0.269 0 0); + --secondary-foreground: oklch(0.985 0 0); + --muted: oklch(0.269 0 0); + --muted-foreground: oklch(0.708 0 0); + --accent: oklch(0.269 0 0); + --accent-foreground: oklch(0.985 0 0); + --destructive: oklch(0.396 0.141 25.723); + --destructive-foreground: oklch(0.637 0.237 25.331); + --border: oklch(0.269 0 0); + --input: oklch(0.269 0 0); + --ring: oklch(0.439 0 0); + --chart-1: oklch(0.488 0.243 264.376); + --chart-2: oklch(0.696 0.17 162.48); + --chart-3: oklch(0.769 0.188 70.08); + --chart-4: oklch(0.627 0.265 303.9); + --chart-5: oklch(0.645 0.246 16.439); + --sidebar: oklch(0.205 0 0); + --sidebar-foreground: oklch(0.985 0 0); + --sidebar-primary: oklch(0.488 0.243 264.376); + --sidebar-primary-foreground: oklch(0.985 0 0); + --sidebar-accent: oklch(0.269 0 0); + --sidebar-accent-foreground: oklch(0.985 0 0); + --sidebar-border: oklch(0.269 0 0); + --sidebar-ring: oklch(0.439 0 0); } @theme inline { - --font-sans: "Inter", system-ui, sans-serif; - --font-mono: "JetBrains Mono", monospace; + --font-sans: "Geist", "Geist Fallback"; + --font-mono: "Geist Mono", "Geist Mono Fallback"; --color-background: var(--background); --color-foreground: var(--foreground); --color-card: var(--card); @@ -42,56 +91,59 @@ --color-muted-foreground: var(--muted-foreground); --color-accent: var(--accent); --color-accent-foreground: var(--accent-foreground); + --color-destructive: var(--destructive); + --color-destructive-foreground: var(--destructive-foreground); --color-border: var(--border); --color-input: var(--input); --color-ring: var(--ring); - --radius-sm: 0; - --radius-md: 0; - --radius-lg: 0; + --color-chart-1: var(--chart-1); + --color-chart-2: var(--chart-2); + --color-chart-3: var(--chart-3); + --color-chart-4: var(--chart-4); + --color-chart-5: var(--chart-5); + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); + --color-sidebar: var(--sidebar); + --color-sidebar-foreground: var(--sidebar-foreground); + --color-sidebar-primary: var(--sidebar-primary); + --color-sidebar-primary-foreground: var(--sidebar-primary-foreground); + --color-sidebar-accent: var(--sidebar-accent); + --color-sidebar-accent-foreground: var(--sidebar-accent-foreground); + --color-sidebar-border: var(--sidebar-border); + --color-sidebar-ring: var(--sidebar-ring); } @layer base { * { - @apply border-border; + @apply border-border outline-ring/50; } - body { @apply bg-background text-foreground; - font-family: var(--font-sans); + cursor: none; + } + + a, + button { + cursor: none; } html { scroll-behavior: smooth; } +} - ::selection { - background: oklch(0.72 0.12 85 / 0.3); +@keyframes float { + 0%, + 100% { + transform: translateY(0px); + } + 50% { + transform: translateY(-20px); } } -/* Simple link style */ -a { - color: var(--primary); - text-decoration: none; - transition: opacity 0.15s; -} - -a:hover { - opacity: 0.7; -} - -/* Fade in */ -@keyframes fadeIn { - from { opacity: 0; } - to { opacity: 1; } -} - -.fade-in { - animation: fadeIn 0.8s ease-out forwards; -} - -/* Cursor blink */ -@keyframes blink { - 0%, 50% { opacity: 1; } - 51%, 100% { opacity: 0; } +.animate-float { + animation: float 6s ease-in-out infinite; } diff --git a/app/page.tsx b/app/page.tsx index 9190eec..17e5763 100644 --- a/app/page.tsx +++ b/app/page.tsx @@ -1,12 +1,20 @@ import { CursorEffect } from '@/components/cursor-effect' import { HeroSection } from '@/components/hero-section' +import { WorkSection } from '@/components/work-section' +import { AboutSection } from '@/components/about-section' +import { SkillsSection } from '@/components/skills-section' +import { ContactSection } from '@/components/contact-section' export default function Home() { return ( <> -
+
+ + + +
) diff --git a/components/about-section.tsx b/components/about-section.tsx index cabcd80..5b1ae6f 100644 --- a/components/about-section.tsx +++ b/components/about-section.tsx @@ -1,126 +1,61 @@ -"use client" - -const FOCUS_AREAS = [ - { - label: "Token Engineering", - description: "Designing sustainable crypto-economic systems", - items: ["Bonding Curves", "cadCAD Modeling", "Primary Issuance Markets"], - }, - { - label: "Governance", - description: "Mechanisms for collective decision-making", - items: ["Conviction Voting", "DAO Templates", "Ostrom Principles"], - }, - { - label: "Regenerative Economics", - description: "Beyond extractive growth models", - items: ["MycoFi", "Commons-based Systems", "Mutual Aid"], - }, -] - export function AboutSection() { return ( -
+
- {/* Section header */} -
- About -

- Background -

+
+

About Me

- {/* Main content card */} -
-
-

- I'm a token engineering researcher and systems designer exploring the - intersection of economics, ecology, and decentralized coordination. My work - focuses on creating tools and frameworks that enable communities to manage - shared resources sustainably and equitably. -

- -

- As a co-founder of the Commons Stack, - I've been instrumental in developing cyber-physical commons architectures - that translate Elinor Ostrom's principles into DAO templates. We build - customizable libraries of tools for communal management of public goods. -

- -

- Through MycoFi, I explore - mycoeconomics—economic systems inspired by fungal networks. By emulating - nature's evolutionary resource allocation algorithms, we can design - regenerative protocols built on cooperation rather than extraction. -

-
- - {/* Timeline markers */} -
-
-
- 2015 - Entered Web3 -
- - - -
-
- 2018 - Co-founded Commons Stack -
- - - -
-
- 2023 - Launched MycoFi -
- - - -
-
- now - Continuing to build... -
-
-
- - {/* Focus areas as a diagram */} -
- {FOCUS_AREAS.map((area, index) => ( -
-
-
-

{area.label}

-
-

- {area.description} -

-
    - {area.items.map((item) => ( -
  • - - {item} -
  • - ))} -
-
- ))} -
- - {/* Annotation */} -
-

- Just as bridges require engineering, our token economies need mathematical validation +

+

+ I'm a token engineering researcher and systems designer exploring the intersection of economics, ecology, + and decentralized coordination. My work focuses on creating tools and frameworks that enable communities to + manage shared resources sustainably and equitably—what I call "decent/ralised" systems.

+ +

+ As a co-founder of the Commons Stack, I've been instrumental in developing cyber-physical commons + architectures that translate Elinor Ostrom's principles into DAO templates. We're building customizable + libraries of tools for communal management of public goods, including innovations like Augmented Bonding + Curves and Conviction Voting—a novel continuous decision-making mechanism that addresses critical attack + vectors in traditional governance systems. +

+ +

+ Through the Bonding Curve Research Group, I research and develop Primary Issuance Markets that enable + dynamic token supply mechanisms. This work challenges the fixed supply paradigm dominant in Web3, offering + adaptive approaches that dampen volatility and generate sustainable revenue for token ecosystems. Our + research shows that tokens using primary issuance markets significantly outperform fixed-supply tokens in + price stability and risk-adjusted returns. +

+ +

+ My MycoFi research explores mycoeconomics—economic systems inspired by fungal networks. By emulating + nature's evolutionary resource allocation algorithms through mycelial intelligence, we can design + regenerative protocols built on cooperation, mutual aid, and permaculture currency principles rather than + extractive growth models. I authored book.mycofi.earth to share these insights. +

+ +

+ I'm passionate about open-source token engineering tools like cadCAD, which I helped open source at the 2019 + Token Engineering Global Gathering. Just as the Golden Gate Bridge required rigorous engineering, our token + economies need mathematical validation and simulation to serve as robust public infrastructure. +

+
+ +
+
+

8+

+

Years in Token Engineering

+
+
+

50+

+

Research Publications

+
+
+

+

Regenerative Impact

+
diff --git a/components/contact-section.tsx b/components/contact-section.tsx index 8b7ca3b..53055f3 100644 --- a/components/contact-section.tsx +++ b/components/contact-section.tsx @@ -1,122 +1,75 @@ -"use client" +import { Github, Mail } from "lucide-react" -const CONNECTIONS = [ - { - label: "Email", - value: "jeff@commonsstack.org", - href: "mailto:jeff@commonsstack.org", - }, +const socials = [ + { icon: Mail, label: "Email", href: "mailto:jeff@emmett.com" }, { + icon: () => ( + + + + ), label: "Bluesky", - value: "@jeffemmett", href: "https://bsky.app/profile/jeffemmett.bsky.social", }, { - label: "X/Twitter", - value: "@JeffEmmett", - href: "https://twitter.com/JeffEmmett", - }, - { + icon: () => ( + + + + ), label: "Medium", - value: "jeffemmett", href: "https://medium.com/@jeffemmett", }, -] - -const PROJECTS = [ { + icon: Github, label: "Commons Stack", href: "https://commonsstack.org", }, { + icon: () => ( + + + + ), label: "MycoFi", href: "https://mycofi.earth", }, - { - label: "Token Engineering", - href: "https://tokenengineering.net", - }, ] export function ContactSection() { return ( -
-
- {/* Section header */} -
- Connect -

- Get In Touch -

-

- Interested in token engineering, regenerative economics, or building - commons-based systems? Let's collaborate. +

+
+
+

Let's Connect

+

+ Interested in token engineering, regenerative economics, or building commons-based systems? Let's + collaborate.

- {/* Connection grid */} -
- {/* Direct contact */} -
-
-
-

Direct

-
-
- {CONNECTIONS.map((connection) => ( - - - {connection.label} - - - {connection.value} - - - ))} -
-
- - {/* Projects */} -
-
-
-

Projects

-
-
- {PROJECTS.map((project, index) => ( - - -
+
+ {socials.map((social) => { + const Icon = social.icon + return ( + + + {social.label} + + ) + })}
- {/* Footer */} -
-
-

- © {new Date().getFullYear()} Jeff Emmett -

-

- Building regenerative systems, one token at a time -

-
+
+

+ © 2025 Jeff Emmett. Built with Next.js & TailwindCSS +

diff --git a/components/cursor-effect.tsx b/components/cursor-effect.tsx index 52f3bf1..45ba3e9 100644 --- a/components/cursor-effect.tsx +++ b/components/cursor-effect.tsx @@ -1,132 +1,79 @@ 'use client' -import { useEffect, useRef } from 'react' - -// Matrix-style characters: katakana, numbers, symbols -const MATRIX_CHARS = 'アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン0123456789@#$%^&*(){}[]|;:<>?/\\~`' - -interface MatrixChar { - x: number - y: number - char: string - vx: number - vy: number - life: number - maxLife: number - size: number - rotation: number - rotationSpeed: number -} +import { useEffect, useState } from 'react' export function CursorEffect() { - const canvasRef = useRef(null) - const charsRef = useRef([]) - const frameRef = useRef(0) + const [position, setPosition] = useState({ x: 0, y: 0 }) + const [isHovering, setIsHovering] = useState(false) + const [trails, setTrails] = useState>([]) useEffect(() => { - const canvas = canvasRef.current - if (!canvas) return + let trailId = 0 - const ctx = canvas.getContext('2d') - if (!ctx) return + const handleMouseMove = (e: MouseEvent) => { + setPosition({ x: e.clientX, y: e.clientY }) + + // Add trail + const newTrail = { x: e.clientX, y: e.clientY, id: trailId++ } + setTrails(prev => [...prev.slice(-8), newTrail]) - const resize = () => { - canvas.width = window.innerWidth - canvas.height = window.innerHeight - } - resize() - window.addEventListener('resize', resize) - - const spawnChars = (x: number, y: number, count: number) => { - for (let i = 0; i < count; i++) { - const angle = (Math.PI * 2 * i) / count + (Math.random() - 0.5) * 0.5 - const speed = 2 + Math.random() * 4 - - charsRef.current.push({ - x, - y, - char: MATRIX_CHARS[Math.floor(Math.random() * MATRIX_CHARS.length)], - vx: Math.cos(angle) * speed, - vy: Math.sin(angle) * speed, - life: 1, - maxLife: 60 + Math.random() * 60, - size: 12 + Math.random() * 16, - rotation: Math.random() * Math.PI * 2, - rotationSpeed: (Math.random() - 0.5) * 0.2, - }) - } + // Check if hovering over interactive element + const target = e.target as HTMLElement + const isInteractive = target.closest('a, button, [role="button"]') + setIsHovering(!!isInteractive) } - const handleClick = (e: MouseEvent) => { - // Burst of matrix characters on click - spawnChars(e.clientX, e.clientY, 8 + Math.floor(Math.random() * 8)) - } - - window.addEventListener('click', handleClick) - - const animate = () => { - // Clear with slight fade for trails - ctx.fillStyle = 'rgba(18, 16, 14, 0.15)' - ctx.fillRect(0, 0, canvas.width, canvas.height) - - charsRef.current = charsRef.current.filter(char => { - // Update position - char.x += char.vx - char.y += char.vy - - // Gravity and friction - char.vy += 0.08 - char.vx *= 0.99 - char.vy *= 0.99 - - // Update rotation - char.rotation += char.rotationSpeed - - // Decay life - char.life -= 1 / char.maxLife - - // Draw character - if (char.life > 0) { - ctx.save() - ctx.translate(char.x, char.y) - ctx.rotate(char.rotation) - - const alpha = char.life * 0.9 - // Primary color (warm gold/amber matching the theme) - ctx.fillStyle = `rgba(200, 170, 120, ${alpha})` - ctx.font = `${char.size}px "JetBrains Mono", monospace` - ctx.textAlign = 'center' - ctx.textBaseline = 'middle' - ctx.fillText(char.char, 0, 0) - - // Glow effect - ctx.fillStyle = `rgba(200, 170, 120, ${alpha * 0.3})` - ctx.font = `${char.size * 1.1}px "JetBrains Mono", monospace` - ctx.fillText(char.char, 0, 0) - - ctx.restore() - } - - return char.life > 0 - }) - - frameRef.current = requestAnimationFrame(animate) - } - - frameRef.current = requestAnimationFrame(animate) - - return () => { - window.removeEventListener('resize', resize) - window.removeEventListener('click', handleClick) - cancelAnimationFrame(frameRef.current) - } + window.addEventListener('mousemove', handleMouseMove) + return () => window.removeEventListener('mousemove', handleMouseMove) }, []) return ( - + <> + {/* Main cursor */} +
+
+
+ + {/* Trail effect */} + {trails.map((trail, index) => ( +
+ ))} + + {/* Outer ring */} +
+ ) } diff --git a/components/hero-section.tsx b/components/hero-section.tsx index 7d4e24b..9263b9b 100644 --- a/components/hero-section.tsx +++ b/components/hero-section.tsx @@ -2,109 +2,78 @@ import { useEffect, useState } from "react" -const DOMAINS = [ - "mycoeconomics", - "psilocybernetics", - "post-capitalism", - "collective intelligence", - "regenerative systems", - "the undernet", -] - export function HeroSection() { - const [typedText, setTypedText] = useState("") - const [currentDomain, setCurrentDomain] = useState(0) - const [showCursor, setShowCursor] = useState(true) - - const fullText = DOMAINS[currentDomain] + const [mousePosition, setMousePosition] = useState({ x: 0, y: 0 }) useEffect(() => { - let charIndex = 0 - setTypedText("") + const handleMouseMove = (e: MouseEvent) => { + setMousePosition({ + x: (e.clientX / window.innerWidth - 0.5) * 20, + y: (e.clientY / window.innerHeight - 0.5) * 20, + }) + } - const typeInterval = setInterval(() => { - if (charIndex < fullText.length) { - setTypedText(fullText.slice(0, charIndex + 1)) - charIndex++ - } else { - clearInterval(typeInterval) - setTimeout(() => { - setCurrentDomain((prev) => (prev + 1) % DOMAINS.length) - }, 2500) - } - }, 70) - - return () => clearInterval(typeInterval) - }, [currentDomain, fullText]) - - useEffect(() => { - const cursorInterval = setInterval(() => { - setShowCursor((prev) => !prev) - }, 530) - return () => clearInterval(cursorInterval) + window.addEventListener("mousemove", handleMouseMove) + return () => window.removeEventListener("mousemove", handleMouseMove) }, []) return ( -
-
-

- Jeff Emmett -

+
+ {/* Animated background elements */} +
+
+
+
-

- Exploring{" "} - - {typedText} - | + {/* Content */} +

+
+ + {"{ Token Engineering & Regenerative Economics }"} +
+ +

Jeff Emmett

+ +

+ Token engineering researcher exploring bonding curves, Web3 economies, and mycoeconomics. Building tools for + regenerative communities and commons-based governance.

-

- Mycelial explorer of alternative economic potentialities. - Designing tools for coordination and collective flourishing. -

- - {/* Main project */} -
+
- MycoFi → + View Research +
-

- Mycelial design patterns for Web3 and beyond -

-
- - {/* Links */} - +
- {/* Social */} -
- + {/* Scroll indicator */} +
+
+
diff --git a/components/skills-section.tsx b/components/skills-section.tsx index 9e542c0..b4b0c66 100644 --- a/components/skills-section.tsx +++ b/components/skills-section.tsx @@ -1,134 +1,59 @@ -"use client" - -const SKILL_CATEGORIES = [ - { - name: "Systems Design", - skills: [ - { name: "Token Engineering", level: 95 }, - { name: "Mechanism Design", level: 90 }, - { name: "Agent-Based Modeling", level: 85 }, - { name: "Complex Systems", level: 80 }, - ], - }, - { - name: "Governance", - skills: [ - { name: "DAO Architecture", level: 90 }, - { name: "Voting Systems", level: 92 }, - { name: "Institutional Design", level: 85 }, - { name: "Commons Management", level: 88 }, - ], - }, - { - name: "Technical", - skills: [ - { name: "cadCAD / Python", level: 88 }, - { name: "Solidity", level: 70 }, - { name: "Data Analysis", level: 82 }, - { name: "Simulation", level: 85 }, - ], - }, -] - -function SkillBar({ level }: { level: number }) { - return ( -
-
-
- ) +const skills = { + "Token Engineering": [ + "Bonding Curves", + "cadCAD Modeling", + "Primary Issuance Markets", + "Dynamic Supply Tokens", + "Cryptoeconomics", + "Agent-Based Modeling", + ], + "DAO Tooling": [ + "Conviction Voting", + "Augmented Bonding Curves", + "Commons Stack", + "Governance Systems", + "Cyber-Physical Commons", + "Ostrom Compliance", + ], + "Research Areas": [ + "Regenerative Economics", + "Mycoeconomics", + "Complex Systems", + "Behavioral Economics", + "Token Design", + "Public Goods Funding", + ], + Technical: ["Python", "Solidity", "Simulation", "Data Analysis", "Systems Design", "Web3"], } export function SkillsSection() { return ( -
-
- {/* Section header */} -
- Expertise -

- Skills & Focus Areas -

-

- Interdisciplinary approach to building resilient token economies - and regenerative systems. +

+
+
+

Expertise & Focus Areas

+

+ Interdisciplinary approach to building resilient token economies and regenerative systems

- {/* Skills diagram */} -
- {SKILL_CATEGORIES.map((category, catIndex) => ( -
-
-
-

{category.name}

-
- -
- {category.skills.map((skill) => ( -
-
- {skill.name} - - {skill.level}% - -
- -
+
+ {Object.entries(skills).map(([category, items]) => ( +
+

{category}

+
+ {items.map((skill) => ( + + {skill} + ))}
))}
- - {/* Connection diagram between categories */} -
- - {/* Connection lines */} - - - {/* Nodes */} - - - - {/* Labels */} - - Design - - - Govern - - - Build - - -
- - {/* Annotation */} -
-

- Skills interconnect like mycelial networks—each node strengthens the whole -

-
) diff --git a/components/work-section.tsx b/components/work-section.tsx index 029d7d2..15b3f04 100644 --- a/components/work-section.tsx +++ b/components/work-section.tsx @@ -1,233 +1,93 @@ -"use client" +import { Card } from "@/components/ui/card" -import { useState } from "react" - -interface ResearchItem { - id: string - title: string - category: string - year: string - abstract: string - tags: string[] - link?: string - status: "published" | "working" | "ongoing" -} - -const RESEARCH_ITEMS: ResearchItem[] = [ +const projects = [ { - id: "bonding-curves", - title: "Bonding Curves: A Mathematical Primitive for Collective Intelligence", - category: "token_engineering", - year: "2019", - abstract: - "Exploration of automated market makers as coordination mechanisms for decentralized communities. Analysis of augmented bonding curves for sustainable funding of public goods.", - tags: ["AMM", "DeFi", "public goods", "cadCAD"], - link: "https://medium.com/commonsstack", - status: "published", + title: "Commons Stack", + description: + "Cyber-physical commons architecture translating Ostrom's principles into DAO templates. Building open-source, token engineered component libraries for communal management of public goods.", + tags: ["Token Engineering", "DAOs", "Ostrom Compliance", "Public Goods"], + image: "/commons-stack-dao-governance-blockchain.jpg", }, { - id: "conviction-voting", - title: "Conviction Voting: A Novel Continuous Decision Making Framework", - category: "governance", - year: "2020", - abstract: - "Time-weighted voting mechanism that allows preferences to accumulate over time, reducing plutocratic attack vectors and enabling more nuanced collective decision-making.", - tags: ["governance", "voting", "mechanism design"], - link: "https://blog.giveth.io/conviction-voting", - status: "published", + title: "Bonding Curve Research Group", + description: + "Research and development of Primary Issuance Markets enabling dynamic token supply. Challenging fixed supply paradigms with adaptive mechanisms that dampen volatility.", + tags: ["Bonding Curves", "cadCAD", "Token Economics", "DeFi"], + image: "/bonding-curve-token-economics-chart.jpg", }, { - id: "mycofi", - title: "MycoFi: Towards Mycelial Finance and Regenerative Economics", - category: "mycoeconomics", - year: "2023", - abstract: - "Framework for understanding economic systems through the lens of fungal networks. Proposes biomimetic approaches to resource allocation and value flow in decentralized systems.", - tags: ["biomimicry", "regenerative", "networks", "ecology"], - link: "https://mycofi.earth", - status: "ongoing", + title: "MycoFi & Mycoeconomics", + description: + "Economic systems inspired by fungal networks. Regenerative protocols built on cooperation, mutual aid, and permaculture currency principles. Author of book.mycofi.earth.", + tags: ["Regenerative Economics", "Biomimicry", "Permaculture", "Web3"], + image: "/mycelium-network-nature-fungal.jpg", }, { - id: "institutional-neuroplasticity", - title: "Institutional Neuroplasticity: Adaptive Governance for Complex Systems", - category: "governance", - year: "2024", - abstract: - "Applying principles of neural plasticity to institutional design. How organizations can maintain coherence while adapting to changing conditions through distributed learning.", - tags: ["institutions", "adaptation", "complexity"], - status: "working", + title: "Conviction Voting", + description: + "Novel continuous decision-making mechanism for DAO governance. Eliminates time-boxed voting attack vectors while increasing community participation and long-term alignment.", + tags: ["Governance", "Voting Systems", "Social Sensor Fusion", "cadCAD"], + image: "/conviction-voting-governance-dashboard.jpg", }, { - id: "zk-local-first", - title: "Zero-Knowledge Local-First: Privacy-Preserving Decentralized Coordination", - category: "cryptography", - year: "2025", - abstract: - "Architecture for local-first applications with ZK proofs for selective disclosure. Enabling community coordination without surveillance capitalism.", - tags: ["ZK", "privacy", "local-first", "p2p"], - status: "working", + title: "Augmented Bonding Curves", + description: + "Primary Issuance Markets that create economic boundaries for commons ecosystems. Enables continuous fundraising, algorithmic liquidity, and price volatility dampening.", + tags: ["Token Design", "AMMs", "Cryptoeconomics", "Funding Mechanisms"], + image: "/augmented-bonding-curve-economic-system.jpg", + }, + { + title: "Token Engineering Commons", + description: + "First field test of Commons Stack components. Outperformed other public goods tokens in risk-adjusted returns, demonstrating benefits of primary issuance markets.", + tags: ["DAO", "TEC", "Token Engineering", "Community Governance"], + image: "/token-engineering-community-collaborative.jpg", }, -] - -const CATEGORIES = [ - { id: "all", label: "All" }, - { id: "token_engineering", label: "Token Engineering" }, - { id: "governance", label: "Governance" }, - { id: "mycoeconomics", label: "Mycoeconomics" }, - { id: "cryptography", label: "Cryptography" }, ] export function WorkSection() { - const [activeCategory, setActiveCategory] = useState("all") - const [expandedItem, setExpandedItem] = useState(null) - - const filteredItems = - activeCategory === "all" - ? RESEARCH_ITEMS - : RESEARCH_ITEMS.filter((item) => item.category === activeCategory) - return ( -
-
- {/* Section header */} -
- Research -

- Working Papers & Publications -

-

- Exploring regenerative systems, token engineering, and collective intelligence - through research and open-source tooling. +

+
+
+

Research & Projects

+

+ Exploring token engineering, regenerative economics, and decentralized governance systems

- {/* Category filter */} -
- {CATEGORIES.map((cat) => ( - - ))} -
- - {/* Research items as diagram nodes */} -
- {filteredItems.map((item, index) => ( -
-
- setExpandedItem(expandedItem === item.id ? null : item.id) - } - > - {/* Header row */} -
- {/* Node indicator */} -
-
-
- - {/* Content */} -
-
- - {item.status} - - - {item.year} - -
-

- {item.title} -

-
- {item.tags.map((tag) => ( - - #{tag} - - ))} -
-
- - {/* Expand indicator */} - - - -
- - {/* Expanded content */} - {expandedItem === item.id && ( -
-

- {item.abstract} -

- {item.link && ( - e.stopPropagation()} - > - Read more → - - )} -
- )} +
+ {project.title}
-
+
+

+ {project.title} +

+

{project.description}

+
+ {project.tags.map((tag, tagIndex) => ( + + {tag} + + ))} +
+
+ ))}
- - {/* Annotation */} -
-

- Open access research for the commons -

-
) diff --git a/next-env.d.ts b/next-env.d.ts deleted file mode 100644 index 9edff1c..0000000 --- a/next-env.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -/// -/// -import "./.next/types/routes.d.ts"; - -// NOTE: This file should not be edited -// see https://nextjs.org/docs/app/api-reference/config/typescript for more information. diff --git a/tsconfig.json b/tsconfig.json index 48d6d82..4b2dc7b 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,10 +1,6 @@ { "compilerOptions": { - "lib": [ - "dom", - "dom.iterable", - "esnext" - ], + "lib": ["dom", "dom.iterable", "esnext"], "allowJs": true, "target": "ES6", "skipLibCheck": true, @@ -15,7 +11,7 @@ "moduleResolution": "bundler", "resolveJsonModule": true, "isolatedModules": true, - "jsx": "react-jsx", + "jsx": "preserve", "incremental": true, "plugins": [ { @@ -23,19 +19,9 @@ } ], "paths": { - "@/*": [ - "./*" - ] + "@/*": ["./*"] } }, - "include": [ - "next-env.d.ts", - "**/*.ts", - "**/*.tsx", - ".next/types/**/*.ts", - ".next/dev/types/**/*.ts" - ], - "exclude": [ - "node_modules" - ] + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] }