Compare commits

..

7 Commits
dev ... main

Author SHA1 Message Date
Jeff Emmett 5e86a0678b fix: Remove @vercel/analytics import (package was already removed)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 09:44:47 -07:00
Jeff Emmett 79f4da7434 chore: Update lockfile after removing @vercel/analytics
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 09:43:43 -07:00
Jeff Emmett 24197d859a feat: Redirect /presentations to slides.jeffemmett.com
slides.jeffemmett.com is now the canonical home for presentations.
Server-side redirect via next.config.mjs + client-side fallback
preserving hash fragments. Hero button links directly to new domain.

Also: clean up v0/Vercel references from README and package.json.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 09:42:19 -07:00
Jeff Emmett c2147fd3dc feat: Switch presentations from FlipHTML5 to self-hosted flipbooks
Replace all 11 FlipHTML5 embed URLs with self-hosted StPageFlip
service at slides.jeffemmett.com. Zero external dependencies.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 03:36:29 -07:00
Jeff Emmett 9a07274a7b fix: Update Psilocybernetics deck to new FlipHTML5 document
Replaces phqos/pnlz with phqos/rzfn for the updated presentation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-13 00:25:46 -07:00
Jeff Emmett ab7bd076de feat: Add presentations page with shareable anchor links, new research images
- Add /presentations page with all 11 talks from canvas-website
- Each title is a clickable #hash anchor that copies shareable URL
- Auto-scrolls to hash target on page load
- Styled to match home page: cursor effect, animated blobs, tags, glass cards
- Replace 6 generic AI stock images with custom dark-theme illustrations
  matching the site's purple/teal color palette
- Add Presentations nav button to hero section
- Add sonner Toaster for copy-link toast notifications

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-12 22:10:02 -07:00
Jeff Emmett 874257a29b feat: Add earlier writings (WordPress) link to contact section
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-03 14:43:56 +00:00
15 changed files with 47 additions and 79 deletions

View File

@ -1,30 +1 @@
# Personal website redesign # Personal website redesign
*Automatically synced with your [v0.app](https://v0.app) deployments*
[![Deployed on Vercel](https://img.shields.io/badge/Deployed%20on-Vercel-black?style=for-the-badge&logo=vercel)](https://vercel.com/jeff-emmetts-projects/v0-personal-website-redesign)
[![Built with v0](https://img.shields.io/badge/Built%20with-v0.app-black?style=for-the-badge)](https://v0.app/chat/c8jGR8t3eSX)
## Overview
This repository will stay in sync with your deployed chats on [v0.app](https://v0.app).
Any changes you make to your deployed app will be automatically pushed to this repository from [v0.app](https://v0.app).
## Deployment
Your project is live at:
**[https://vercel.com/jeff-emmetts-projects/v0-personal-website-redesign](https://vercel.com/jeff-emmetts-projects/v0-personal-website-redesign)**
## Build your app
Continue building your app on:
**[https://v0.app/chat/c8jGR8t3eSX](https://v0.app/chat/c8jGR8t3eSX)**
## How It Works
1. Create and modify your project using [v0.app](https://v0.app)
2. Deploy your chats from the v0 interface
3. Changes are automatically pushed to this repository
4. Vercel deploys the latest version from this repository

View File

@ -1,7 +1,7 @@
import type React from "react" import type React from "react"
import type { Metadata } from "next" import type { Metadata } from "next"
import { Inter, Space_Mono } from "next/font/google" import { Inter, Space_Mono } from "next/font/google"
import { Analytics } from "@vercel/analytics/next" import { Toaster } from "sonner"
import "./globals.css" import "./globals.css"
const inter = Inter({ const inter = Inter({
@ -19,7 +19,6 @@ export const metadata: Metadata = {
title: "Jeff Emmett - Token Engineering & Regenerative Economics", title: "Jeff Emmett - Token Engineering & Regenerative Economics",
description: description:
"Token engineering researcher exploring bonding curves, Web3 economies, and mycoeconomics. Co-founder of Commons Stack and MycoFi.", "Token engineering researcher exploring bonding curves, Web3 economies, and mycoeconomics. Co-founder of Commons Stack and MycoFi.",
generator: "v0.app",
icons: { icons: {
icon: [ icon: [
{ {
@ -48,7 +47,7 @@ export default function RootLayout({
<html lang="en"> <html lang="en">
<body className={`${inter.variable} ${spaceMono.variable} font-sans antialiased`}> <body className={`${inter.variable} ${spaceMono.variable} font-sans antialiased`}>
{children} {children}
<Analytics /> <Toaster richColors position="bottom-center" />
</body> </body>
</html> </html>
) )

View File

@ -0,0 +1,15 @@
"use client"
import { useEffect } from "react"
export default function PresentationsRedirect() {
useEffect(() => {
window.location.replace(`https://slides.jeffemmett.com/${window.location.hash}`)
}, [])
return (
<div className="flex items-center justify-center min-h-screen bg-background text-muted-foreground">
<p>Redirecting to slides.jeffemmett.com...</p>
</div>
)
}

View File

@ -20,6 +20,15 @@ const socials = [
label: "Medium", label: "Medium",
href: "https://medium.com/@jeffemmett", href: "https://medium.com/@jeffemmett",
}, },
{
icon: () => (
<svg className="h-5 w-5" fill="currentColor" viewBox="0 0 24 24">
<path d="M16.074 2.398L4.066 14.406l-1.478 6.284a.5.5 0 00.602.602l6.284-1.478L21.482 7.806l-5.408-5.408zM3.5 22a.5.5 0 01-.354-.146.5.5 0 01-.146-.354L3.5 22zm15.56-15.56l-1.414 1.414-2.121-2.121 1.414-1.414 2.121 2.121z" />
</svg>
),
label: "Earlier Writings",
href: "https://thoughtsglapbaan.wordpress.com/",
},
{ {
icon: Github, icon: Github,
label: "Commons Stack", label: "Commons Stack",

View File

@ -62,6 +62,12 @@ export function HeroSection() {
<span className="relative z-10">View Research</span> <span className="relative z-10">View Research</span>
<div className="absolute inset-0 bg-accent opacity-0 group-hover:opacity-100 transition-opacity" /> <div className="absolute inset-0 bg-accent opacity-0 group-hover:opacity-100 transition-opacity" />
</a> </a>
<a
href="https://slides.jeffemmett.com"
className="px-8 py-4 bg-secondary text-secondary-foreground rounded-lg font-medium transition-all hover:scale-105 hover:bg-secondary/80"
>
Presentations
</a>
<a <a
href="#contact" href="#contact"
className="px-8 py-4 bg-secondary text-secondary-foreground rounded-lg font-medium transition-all hover:scale-105 hover:bg-secondary/80" className="px-8 py-4 bg-secondary text-secondary-foreground rounded-lg font-medium transition-all hover:scale-105 hover:bg-secondary/80"

View File

@ -6,42 +6,42 @@ const projects = [
description: 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.", "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"], tags: ["Token Engineering", "DAOs", "Ostrom Compliance", "Public Goods"],
image: "/commons-stack-dao-governance-blockchain.jpg", image: "/commons-stack.png",
}, },
{ {
title: "Bonding Curve Research Group", title: "Bonding Curve Research Group",
description: description:
"Research and development of Primary Issuance Markets enabling dynamic token supply. Challenging fixed supply paradigms with adaptive mechanisms that dampen volatility.", "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"], tags: ["Bonding Curves", "cadCAD", "Token Economics", "DeFi"],
image: "/bonding-curve-token-economics-chart.jpg", image: "/bonding-curves.png",
}, },
{ {
title: "MycoFi & Mycoeconomics", title: "MycoFi & Mycoeconomics",
description: description:
"Economic systems inspired by fungal networks. Regenerative protocols built on cooperation, mutual aid, and permaculture currency principles. Author of book.mycofi.earth.", "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"], tags: ["Regenerative Economics", "Biomimicry", "Permaculture", "Web3"],
image: "/mycelium-network-nature-fungal.jpg", image: "/mycofi-mycelium.png",
}, },
{ {
title: "Conviction Voting", title: "Conviction Voting",
description: description:
"Novel continuous decision-making mechanism for DAO governance. Eliminates time-boxed voting attack vectors while increasing community participation and long-term alignment.", "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"], tags: ["Governance", "Voting Systems", "Social Sensor Fusion", "cadCAD"],
image: "/conviction-voting-governance-dashboard.jpg", image: "/conviction-voting.png",
}, },
{ {
title: "Augmented Bonding Curves", title: "Augmented Bonding Curves",
description: description:
"Primary Issuance Markets that create economic boundaries for commons ecosystems. Enables continuous fundraising, algorithmic liquidity, and price volatility dampening.", "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"], tags: ["Token Design", "AMMs", "Cryptoeconomics", "Funding Mechanisms"],
image: "/augmented-bonding-curve-economic-system.jpg", image: "/augmented-bonding-curve.png",
}, },
{ {
title: "Token Engineering Commons", title: "Token Engineering Commons",
description: description:
"First field test of Commons Stack components. Outperformed other public goods tokens in risk-adjusted returns, demonstrating benefits of primary issuance markets.", "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"], tags: ["DAO", "TEC", "Token Engineering", "Community Governance"],
image: "/token-engineering-community-collaborative.jpg", image: "/token-engineering-commons.png",
}, },
] ]

View File

@ -9,12 +9,15 @@ const nextConfig = {
}, },
async redirects() { async redirects() {
return [ return [
// Redirect old canvas board URLs to new canvas subdomain
// jeffemmett.com/board/mycofi -> canvas.jeffemmett.com/mycofi
{ {
source: '/board/:path*', source: '/presentations',
destination: 'https://canvas.jeffemmett.com/:path*', destination: 'https://slides.jeffemmett.com',
permanent: true, // 308 redirect for SEO permanent: true,
},
{
source: '/presentations/:path*',
destination: 'https://slides.jeffemmett.com/:path*',
permanent: true,
}, },
] ]
}, },

View File

@ -37,7 +37,6 @@
"@radix-ui/react-toggle": "1.1.1", "@radix-ui/react-toggle": "1.1.1",
"@radix-ui/react-toggle-group": "1.1.1", "@radix-ui/react-toggle-group": "1.1.1",
"@radix-ui/react-tooltip": "1.1.6", "@radix-ui/react-tooltip": "1.1.6",
"@vercel/analytics": "latest",
"autoprefixer": "^10.4.20", "autoprefixer": "^10.4.20",
"class-variance-authority": "^0.7.1", "class-variance-authority": "^0.7.1",
"clsx": "^2.1.1", "clsx": "^2.1.1",
@ -70,4 +69,4 @@
"tw-animate-css": "1.3.3", "tw-animate-css": "1.3.3",
"typescript": "^5" "typescript": "^5"
} }
} }

View File

@ -92,9 +92,6 @@ importers:
'@radix-ui/react-tooltip': '@radix-ui/react-tooltip':
specifier: 1.1.6 specifier: 1.1.6
version: 1.1.6(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0) version: 1.1.6(@types/react-dom@19.0.0)(@types/react@19.0.0)(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
'@vercel/analytics':
specifier: latest
version: 1.6.1(next@16.0.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)
autoprefixer: autoprefixer:
specifier: ^10.4.20 specifier: ^10.4.20
version: 10.4.20(postcss@8.5.0) version: 10.4.20(postcss@8.5.0)
@ -1212,32 +1209,6 @@ packages:
'@types/react@19.0.0': '@types/react@19.0.0':
resolution: {integrity: sha512-MY3oPudxvMYyesqs/kW1Bh8y9VqSmf+tzqw3ae8a9DZW68pUe3zAdHeI1jc6iAysuRdACnVknHP8AhwD4/dxtg==} resolution: {integrity: sha512-MY3oPudxvMYyesqs/kW1Bh8y9VqSmf+tzqw3ae8a9DZW68pUe3zAdHeI1jc6iAysuRdACnVknHP8AhwD4/dxtg==}
'@vercel/analytics@1.6.1':
resolution: {integrity: sha512-oH9He/bEM+6oKlv3chWuOOcp8Y6fo6/PSro8hEkgCW3pu9/OiCXiUpRUogDh3Fs3LH2sosDrx8CxeOLBEE+afg==}
peerDependencies:
'@remix-run/react': ^2
'@sveltejs/kit': ^1 || ^2
next: '>= 13'
react: ^18 || ^19 || ^19.0.0-rc
svelte: '>= 4'
vue: ^3
vue-router: ^4
peerDependenciesMeta:
'@remix-run/react':
optional: true
'@sveltejs/kit':
optional: true
next:
optional: true
react:
optional: true
svelte:
optional: true
vue:
optional: true
vue-router:
optional: true
aria-hidden@1.2.6: aria-hidden@1.2.6:
resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -2740,11 +2711,6 @@ snapshots:
dependencies: dependencies:
csstype: 3.2.3 csstype: 3.2.3
'@vercel/analytics@1.6.1(next@16.0.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0))(react@19.2.0)':
optionalDependencies:
next: 16.0.3(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
react: 19.2.0
aria-hidden@1.2.6: aria-hidden@1.2.6:
dependencies: dependencies:
tslib: 2.8.1 tslib: 2.8.1

Binary file not shown.

After

Width:  |  Height:  |  Size: 559 KiB

BIN
public/bonding-curves.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 554 KiB

BIN
public/commons-stack.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 486 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 856 KiB

BIN
public/mycofi-mycelium.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 549 KiB