2026-10-04 06:06:17 +00:00
<!doctype html>
< html lang = "en" >
< head >
< meta charset = "utf-8" >< meta name = "viewport" content = "width=device-width,initial-scale=1" >< meta name = "theme-color" content = "#050505" >
2026-10-07 17:36:12 -07:00
< title > my.phast.app — your Phast app</ title >
2026-10-04 06:06:17 +00:00
< link rel = "preconnect" href = "https://fonts.googleapis.com" >< link rel = "preconnect" href = "https://fonts.gstatic.com" crossorigin >
< link href = "https://fonts.googleapis.com/css2?family=Bangers&family=DM+Mono:wght@400;500&family=Inter:wght@500;700;900&display=swap" rel = "stylesheet" >
< style >
: root { --bg : #050505 ; --panel : #0d0d0d ; --panel2 : #111 ; --ink : #f7f3e9 ; --muted : #7d7d78 ; --orange : #ff5a00 ; --line : #272727 ; --pad : clamp ( 20 px , 3.5 vw , 52 px )}
* { box-sizing : border-box } html , body { min-height : 100 % } body { margin : 0 ; background : var ( -- bg ); color : var ( -- ink ); font-family : Inter , system-ui , sans-serif } button , a , input { font : inherit ; color : inherit } a { text-decoration : none } button { cursor : pointer }
. page { min-height : 100 svh ; padding : var ( -- pad ); position : relative ; overflow : hidden }. page : before { content : "" ; position : fixed ; inset : 0 ; pointer-events : none ; background : repeating-linear-gradient ( 118 deg , transparent 0 110 px , rgba ( 255 , 90 , 0 , .035 ) 110 px 112 px , transparent 112 px 220 px )}. top { position : relative ; display : flex ; align-items : center ; justify-content : space-between ; gap : 20 px }. brand { font-family : Bangers , sans-serif ; color : var ( -- orange ); font-size : 30 px ; letter-spacing : .06 em }. topnote { font : 10 px "DM Mono" , monospace ; text-transform : uppercase ; letter-spacing : .1 em ; color : var ( -- muted )}
. hero { position : relative ; margin : clamp ( 70 px , 10 vh , 130 px ) 0 54 px ; display : grid ; grid-template-columns : minmax ( 0 , 1.2 fr ) minmax ( 300 px , .55 fr ); gap : clamp ( 32 px , 7 vw , 100 px ); align-items : end }. kicker , . label , . mono { font : 10 px "DM Mono" , monospace ; text-transform : uppercase ; letter-spacing : .11 em }. kicker { color : var ( -- orange ); margin : 0 0 10 px }. hero h1 { font-family : Bangers , sans-serif ; font-weight : 400 ; font-size : clamp ( 78 px , 12 vw , 170 px ); line-height : .75 ; letter-spacing : .02 em ; margin : 0 ; color : var ( -- orange ); text-shadow : 5 px 5 px 0 #1c1c1c ; transform : skewY ( -1 deg )}. hero h1 span { color : var ( -- ink ); display : block ; font-size : .43 em ; line-height : .95 ; margin-top : .2 em }. intro { border-top : 1 px solid var ( -- line ); padding-top : 18 px }. intro p { font-size : 17 px ; line-height : 1.5 ; margin : 0 0 20 px ; color : #d7d4cc }. intro strong { color : var ( -- orange )}
. connector { background : var ( -- orange ); color : #070707 ; padding : 16 px 18 px ; display : flex ; align-items : center ; justify-content : space-between ; gap : 20 px ; border : 0 ; width : 100 % ; font-weight : 900 ; text-transform : uppercase ; transform : skewX ( -6 deg ); transition : .14 s }. connector span { transform : skewX ( 6 deg )}. connector : hover { transform : skewX ( -6 deg ) translate ( 4 px , -3 px ); box-shadow : -7 px 7 px 0 #fff }. endpoint { margin-top : 11 px ; font : 10 px "DM Mono" , monospace ; color : var ( -- muted ); word-break : break-all }
. lane { position : relative ; border-top : 1 px solid var ( -- orange ); padding-top : 12 px }. lanehead { display : flex ; justify-content : space-between ; align-items : center ; margin-bottom : 14 px }. lanehead h2 { font-family : Bangers , sans-serif ; font-size : 32 px ; letter-spacing : .05 em ; margin : 0 }. lanehead span { color : var ( -- orange )}
. steps { display : grid ; grid-template-columns : repeat ( 3 , 1 fr ); gap : 1 px ; background : var ( -- line ); border : 1 px solid var ( -- line )}. step { background : var ( -- panel ); padding : 22 px ; min-height : 200 px ; position : relative ; overflow : hidden }. step : after { content : attr ( data - n ); position : absolute ; right : 6 px ; bottom : -34 px ; font-family : Bangers , sans-serif ; color : #171717 ; font-size : 125 px ; line-height : 1 }. step . label { color : var ( -- orange ); position : relative ; z-index : 1 }. step h3 { font-family : Bangers , sans-serif ; font-size : 36 px ; letter-spacing : .04 em ; margin : 13 px 0 8 px ; position : relative ; z-index : 1 }. step p { color : var ( -- muted ); font-size : 12 px ; line-height : 1.55 ; max-width : 30 ch ; position : relative ; z-index : 1 }. cmd { margin-top : 15 px ; border : 1 px solid #333 ; background : #080808 ; padding : 10 px 12 px ; font : 11 px "DM Mono" , monospace ; color : #bbb ; position : relative ; z-index : 1 }. cmd b { color : var ( -- orange ); font-weight : 500 }
. what { display : grid ; grid-template-columns : 1.15 fr .85 fr ; gap : 1 px ; background : var ( -- line ); border : 1 px solid var ( -- line ); margin-top : 26 px }. card { background : var ( -- panel2 ); padding : 22 px }. card h3 { font-family : Bangers , sans-serif ; letter-spacing : .04 em ; font-size : 30 px ; margin : 6 px 0 10 px }. card p { font-size : 12 px ; line-height : 1.6 ; color : var ( -- muted ); max-width : 60 ch }. belt { display : flex ; flex-wrap : wrap ; gap : 7 px ; margin-top : 14 px }. pill { border : 1 px solid #353535 ; padding : 7 px 9 px ; font : 9 px "DM Mono" , monospace ; text-transform : uppercase ; color : #aaa }. pill . hot { border-color : var ( -- orange ); color : var ( -- orange )}
. foot { display : flex ; justify-content : space-between ; gap : 20 px ; margin-top : 42 px ; padding-top : 13 px ; border-top : 1 px solid var ( -- line ); font : 9 px "DM Mono" , monospace ; text-transform : uppercase ; letter-spacing : .1 em ; color : #60605d }. foot b { color : var ( -- orange ); font-weight : 500 }. toast { position : fixed ; right : 24 px ; bottom : 24 px ; background : var ( -- orange ); color : #000 ; padding : 10 px 12 px ; font : 10 px "DM Mono" , monospace ; text-transform : uppercase ; opacity : 0 ; transform : translateY ( 8 px ); transition : .14 s }. toast . show { opacity : 1 ; transform : none }
@ media ( max-width : 850px ) {. hero { grid-template-columns : 1 fr }. steps { grid-template-columns : 1 fr }. step { min-height : 150 px }. what { grid-template-columns : 1 fr }. hero h1 { font-size : clamp ( 86 px , 23 vw , 140 px )}}@ media ( max-width : 500px ) {. topnote { display : none }. page { padding : 20 px }. hero { margin-top : 70 px }}
</ style >
</ head >
< body >
< main class = "page" >
2026-10-07 22:19:16 -07:00
< header class = "top" >< a class = "brand" href = "https://phast.app" > PHAST APP.</ a >< span class = "topnote" > MY PHAST APP // CONTROL MCP</ span ></ header >
2026-10-04 06:06:17 +00:00
< section class = "hero" >
< div >< p class = "kicker" > START HERE // ONE CONNECTION</ p >< h1 > YOUR MCP.< span > BUILT PHAST.</ span ></ h1 ></ div >
2026-10-07 22:19:16 -07:00
< div class = "intro" >< p > Add < strong > My Phast app</ strong > to your agent once. Then create personal MCPs, add tools, stream Prefab, and keep what works.</ p >< button class = "connector" id = "copy" >< span > COPY YOUR PHAST APP MCP</ span >< span > ↗</ span ></ button >< div class = "endpoint" > https://my.phast.app/mcp</ div ></ div >
2026-10-04 06:06:17 +00:00
</ section >
< section class = "lane" >
< div class = "lanehead" >< h2 > ZERO → PERSONAL MCP</ h2 >< span class = "mono" > CHAT IS THE SETUP UI</ span ></ div >
< div class = "steps" >
2026-10-07 22:19:16 -07:00
< article class = "step" data-n = "1" >< span class = "label" > 01 // CONNECT</ span >< h3 > ADD MY PHAST APP</ h3 >< p > Connect the management MCP in ChatGPT, Claude, Codex, or another MCP client. Authenticate once with Teahub.</ p >< div class = "cmd" >< b > MCP</ b > my.phast.app/mcp</ div ></ article >
< article class = "step" data-n = "2" >< span class = "label" > 02 // CREATE</ span >< h3 > TELL YOUR AGENT</ h3 >< p > No project wizard. Name it in chat. Wildcard DNS, TLS, home, and MCP are already waiting.</ p >< div class = "cmd" >< b > YOU</ b > create me a Phast app called sunday</ div ></ article >
< article class = "step" data-n = "3" >< span class = "label" > 03 // TUNE</ span >< h3 > BUILD THE BELT</ h3 >< p > Add providers, tools, and Prefab widgets. Your agent and your web home edit the same Phast app.</ p >< div class = "cmd" >< b > YOU</ b > add github + a PR widget</ div ></ article >
2026-10-04 06:06:17 +00:00
</ div >
</ section >
< section class = "what" >
< div class = "card" >< span class = "label" > WHAT YOU GET</ span >< h3 > YOURNAME.PHAST.APP</ h3 >< p > A fast personal web home for the human side of your composition. Widgets are saved views of the same capabilities your agent can use.</ p >< div class = "belt" >< span class = "pill hot" > / human home</ span >< span class = "pill" > Prefab widgets</ span >< span class = "pill" > edit by chat</ span ></ div ></ div >
< div class = "card" >< span class = "label" > TAKE IT ANYWHERE</ span >< h3 > /MCP</ h3 >< p > Your portable tool belt. Connect < b style = "color:var(--orange)" > yourname.phast.app/mcp</ b > to another agent without recollecting every tool.</ p >< div class = "belt" >< span class = "pill hot" > ChatGPT</ span >< span class = "pill" > Claude</ span >< span class = "pill" > Codex</ span >< span class = "pill" > whatever's next</ span ></ div ></ div >
</ section >
< footer class = "foot" >< span >< b > connect once // compose continuously</ b ></ span >< span > my.phast.app/mcp → *.phast.app/mcp</ span ></ footer >
</ main >
< div class = "toast" id = "toast" > MCP COPIED</ div >
< script >
const b = document . querySelector ( '#copy' ), t = document . querySelector ( '#toast' ); b . onclick = async ()=>{ try { await navigator . clipboard . writeText ( 'https://my.phast.app/mcp' ); t . textContent = 'MCP COPIED' } catch { t . textContent = 'my.phast.app/mcp' } t . classList . add ( 'show' ); setTimeout (()=> t . classList . remove ( 'show' ), 1200 )};
</ script >
2026-10-07 17:36:12 -07:00
</ body ></ html >