2026-10-14 01:00:15 -07:00
<!doctype html>
< html lang = "en" >
< head >
< meta charset = "utf-8" >
< meta name = "viewport" content = "width=device-width,initial-scale=1" >
2026-10-14 01:48:13 -07:00
< title > yolopreneur.lol</ title >
< meta name = "description" content = "A yolopreneur is an agentic entrepreneur: a solopreneur who builds with agentic coding, --yolo. This is the portfolio." >
2026-10-14 01:00:15 -07:00
< style >
* { box-sizing : border-box }
2026-10-14 01:48:13 -07:00
html { background : #fff }
body { margin : 0 ; color : #000 ; background : #fff ; font : 16 px / 1.4 Helvetica , Arial , sans-serif }
a { color : #000 }
. wrap { max-width : 1280 px ; margin : 0 auto ; padding : 0 16 px }
header { border-bottom : 3 px solid #000 }
. top { display : flex ; align-items : baseline ; justify-content : space-between ; gap : 16 px ; padding : 16 px 0 ; flex-wrap : wrap }
. mark { font-weight : 700 ; font-size : 18 px ; text-decoration : none ; letter-spacing : -.01 em }
nav { display : flex ; gap : 20 px ; font-size : 14 px ; text-transform : uppercase ; letter-spacing : .06 em }
nav a { text-decoration : none ; border-bottom : 2 px solid transparent }
nav a : hover { border-bottom-color : #000 }
. hero { padding : 40 px 0 28 px ; border-bottom : 3 px solid #000 ; display : grid ; grid-template-columns : 1 fr 1 fr ; gap : 24 px }
h1 { margin : 0 ; font-weight : 700 ; font-size : clamp ( 34 px , 5.5 vw , 72 px ); line-height : 1 ; letter-spacing : -.03 em }
. def { margin : 0 ; font-size : clamp ( 16 px , 1.6 vw , 20 px ); max-width : 36 em ; align-self : end }
. def b { font-weight : 700 }
. def code { font-family : ui-monospace , Menlo , monospace ; font-size : .95 em ; border : 1 px solid #000 ; padding : 0 .3 em }
. count { padding : 14 px 0 ; border-bottom : 1 px solid #000 ; display : flex ; gap : 28 px ; flex-wrap : wrap ; font-size : 13 px ; text-transform : uppercase ; letter-spacing : .08 em }
. count b { font-size : 16 px }
. grid { display : grid ; grid-template-columns : repeat ( auto - fill , minmax ( 320 px , 1 fr )); gap : 0 ; border-left : 1 px solid #000 ; border-top : 0 }
. card { border-right : 1 px solid #000 ; border-bottom : 1 px solid #000 ; padding : 0 ; display : grid ; grid-template-rows : auto 1 fr ; text-decoration : none ; color : #000 }
. card : hover . shot img { filter : none }
. shot { display : block ; aspect-ratio : 16 / 10 ; background : #eee ; border-bottom : 1 px solid #000 ; overflow : hidden }
. shot img { width : 100 % ; height : 100 % ; object-fit : cover ; object-position : top ; display : block ; filter : grayscale ( 1 ) contrast ( 1.05 )}
. card : hover . shot img { filter : grayscale ( 0 )}
. body { padding : 14 px 16 px 16 px ; display : grid ; gap : 8 px ; align-content : start }
. row { display : flex ; justify-content : space-between ; gap : 12 px ; align-items : baseline }
. name { margin : 0 ; font-weight : 700 ; font-size : 20 px ; letter-spacing : -.02 em }
2026-10-14 01:55:58 -07:00
. st { font-size : 11 px ; text-transform : uppercase ; letter-spacing : .1 em ; white-space : nowrap ; color : #444 }
2026-10-14 01:48:13 -07:00
. one { margin : 0 ; font-size : 15 px }
. links { display : flex ; gap : 14 px ; flex-wrap : wrap ; font-size : 12 px ; text-transform : uppercase ; letter-spacing : .08 em }
. links a { text-decoration : none ; border-bottom : 1 px solid #000 }
. links a : hover { background : #000 ; color : #fff }
. meta { font-size : 11 px ; letter-spacing : .06 em ; text-transform : uppercase ; color : #444 }
. how { padding : 40 px 0 ; border-top : 3 px solid #000 ; margin-top : 0 ; display : grid ; grid-template-columns : 1 fr 2 fr ; gap : 24 px }
. how h2 { margin : 0 ; font-size : 14 px ; text-transform : uppercase ; letter-spacing : .1 em ; font-weight : 700 }
. how p { margin : 0 0 12 px ; max-width : 60 em }
footer { padding : 20 px 0 40 px ; border-top : 1 px solid #000 ; font-size : 13 px ; display : flex ; flex-wrap : wrap ; gap : 8 px 24 px }
. empty { padding : 24 px 16 px ; border-right : 1 px solid #000 ; border-bottom : 1 px solid #000 ; text-transform : uppercase ; letter-spacing : .08 em ; font-size : 13 px }
@ media ( max-width : 760px ) {. hero , . how { grid-template-columns : 1 fr }. grid { grid-template-columns : 1 fr }}
2026-10-14 01:00:15 -07:00
</ style >
</ head >
< body >
< header >< div class = "wrap top" >
2026-10-14 01:48:13 -07:00
< a class = "mark" href = "/" > yolopreneur.lol</ a >
< nav >< a href = "#ventures" > Ventures</ a >< a href = "#how" > How</ a >< a href = "https://teahub.xyz/teahubxyz/time" > Time</ a ></ nav >
2026-10-14 01:00:15 -07:00
</ div ></ header >
< main class = "wrap" >
< section class = "hero" >
2026-10-14 01:48:13 -07:00
< h1 > A venture portfolio,< br > built < span style = "font-family:ui-monospace,Menlo,monospace" > --yolo</ span > .</ h1 >
2026-10-14 15:32:48 -07:00
< p class = "def" >< b > yolopreneur</ b > (n.) — an agentic entrepreneur: a solopreneur who builds with agentic coding and ships without asking permission. Everything here was built with agents: some by hand, the rest scouted, pitched, built and launched by seats on a clock. All of it as < code > --yolo</ code > as it sounds.</ p >
2026-10-14 01:00:15 -07:00
</ section >
2026-10-14 01:48:13 -07:00
< div class = "count" id = "count" ></ div >
2026-10-14 01:00:15 -07:00
2026-10-14 01:48:13 -07:00
< section class = "grid" id = "grid" >< div class = "empty" > Loading…</ div ></ section >
2026-10-14 01:00:15 -07:00
< section class = "how" id = "how" >
2026-10-14 15:32:48 -07:00
< h2 > How the clock works</ h2 >
2026-10-14 01:48:13 -07:00
< div >
< p > Scouts find what people want but nobody shipped. Seats — named, different models — pitch; a board votes; each board seat writes a launch plan and one synthesises it. A worker seat builds the product and its page; checks and a headless browser gate it; a reviewer seat approves. Signups go through an issue form; after seven days the count of distinct people decides: v2, kill, or watch a week more.</ p >
< p > Nothing is invented after the fact. Every venture links its signal, its card and its plan on < a href = "https://teahub.xyz/teahubxyz/time" > Teahub</ a > . The pages are static; what you see is what shipped.</ p >
</ div >
2026-10-14 01:00:15 -07:00
</ section >
</ main >
< footer class = "wrap" >
2026-10-14 01:48:13 -07:00
< span > Run by < a href = "https://teahub.xyz/teahubxyz/time" > Time</ a > , the clock of an agent factory on < a href = "https://teahub.xyz" > Teahub</ a > .</ span >
< span > Scouts: trending repos · < a href = "https://teahub.xyz/teahubxyz/notplanned" > notplanned</ a > (< a href = "backlog.json" > backlog</ a > ).</ span >
2026-10-14 01:00:15 -07:00
< span id = "refreshed" ></ span >
</ footer >
< script >
( async () => {
const e = s => String ( s ?? '' ). replace ( /[&<>"']/g , c => ({ '&' : '&' , '<' : '<' , '>' : '>' , '"' : '"' , "'" : ''' }[ c ]));
2026-10-14 01:48:13 -07:00
const abs = u => /^ https ?: /.test(u || '') ? u : null;
const vd = await fetch ( 'ventures.json' ). then ( r => r . json ()). catch (() => ({ ventures : []}));
2026-10-14 01:00:15 -07:00
const vs = ( vd . ventures || []). slice ();
2026-10-14 01:55:58 -07:00
vs . sort (( a , b ) => ( b . launched || b . planned || '' ). localeCompare ( a . launched || a . planned || '' ) || a . slug . localeCompare ( b . slug ));
const srcs = [... new Set ( vs . map ( v => v . source || 'time' ))];
2026-10-14 14:34:05 -07:00
document . getElementById ( 'count' ). innerHTML = [[ 'ventures' , vs . length ], [ 'signups' , vs . reduce (( t , v ) => t + ( v . signups || 0 ), 0 )]]. map (([ k , v ]) => `<span><b> ${ v } </b> ${ k } </span>` ). join ( '' );
2026-10-14 01:48:13 -07:00
document . getElementById ( 'grid' ). innerHTML = vs . map ( v => {
2026-10-14 01:00:15 -07:00
const open = abs ( v . url ) || abs ( v . pages );
2026-10-14 01:48:13 -07:00
const card = v . card && v . source !== 'notplanned' ? `https://teahub.xyz/teahubxyz/time/issues/ ${ v . card } ` : null ;
2026-10-14 01:55:58 -07:00
const when = v . launched || v . planned ? `shipped ${ v . launched || v . planned } ` : '' ;
2026-10-14 01:48:13 -07:00
return `<article class="card">
<a class="shot" href=" ${ e ( open || '#' ) } "> ${ v . shot ? `<img src=" ${ e ( v . shot ) } " alt=" ${ e ( v . name ) } — first screen" loading="lazy">` : '' } </a>
<div class="body">
2026-10-14 01:55:58 -07:00
<div class="row"><h3 class="name"> ${ e ( v . name ) } </h3><span class="st"> ${ e ( v . slug ) } </span></div>
2026-10-14 01:48:13 -07:00
<p class="one"> ${ e ( v . one_liner ) } </p>
<div class="links">
${ open ? `<a href=" ${ e ( open ) } ">Open</a>` : '' }
${ abs ( v . join ) ? `<a href=" ${ e ( v . join ) } ">Join</a>` : '' }
${ v . sheet ? `<a href=" ${ e ( v . sheet ) } ">Shots</a>` : '' }
${ card ? `<a href=" ${ card } ">Card</a>` : '' }
${ v . source === 'notplanned' ? `<a href="https://teahub.xyz/teahubxyz/notplanned">Source</a>` : '' }
</div>
<div class="meta"> ${ when }${ v . signups ? ` · ${ e ( v . signups ) } signed up` : '' } </div>
2026-10-14 01:00:15 -07:00
</div>
</article>` ;
}). join ( '' ) || '<div class="empty">No ventures yet.</div>' ;
document . getElementById ( 'refreshed' ). textContent = vd . refreshed ? `Ledger refreshed ${ vd . refreshed } .` : '' ;
})();
</ script >
</ body >
</ html >