2026-10-05 20:11:24 +00:00
<!doctype html>
< html lang = "en" >
< head >
2026-10-05 20:15:33 +00:00
< meta charset = "utf-8" >< meta name = "viewport" content = "width=device-width,initial-scale=1" >
< title > notplanned radar</ title >
< meta name = "description" content = "Deterministic radar for rejected demand in active open-source projects." >
2026-10-05 20:11:24 +00:00
< style >
2026-10-05 20:15:33 +00:00
: root { color-scheme : light dark ; --bg : #f3f1eb ; --fg : #111 ; --muted : #6c6961 ; --line : #cbc7bc ; --card : #faf8f2 ; --accent : #ff5a1f }
@ media ( prefers-color-scheme : dark ) {: root { --bg : #10100f ; --fg : #f2efe7 ; --muted : #a6a198 ; --line : #393732 ; --card : #171715 ; --accent : #ff7540 }}
* { box-sizing : border-box } body { margin : 0 ; background : var ( -- bg ); color : var ( -- fg ); font-family : ui-monospace , SFMono-Regular , Menlo , Monaco , Consolas , "Liberation Mono" , monospace } a { color : inherit }. wrap { width : min ( 1180 px , calc ( 100 % - 36 px )); margin : auto }
header { height : 76 px ; border-bottom : 1 px solid var ( -- line ); display : flex ; align-items : center ; justify-content : space-between }. brand { font-weight : 900 ; letter-spacing : -.05 em }. tiny { font-size : 11 px ; color : var ( -- muted )}
. hero { padding : 80 px 0 52 px ; display : grid ; grid-template-columns : 1.35 fr .65 fr ; gap : 42 px ; align-items : end } h1 { font-family : ui-sans-serif , system-ui , sans-serif ; font-size : clamp ( 50 px , 8 vw , 98 px ); line-height : .88 ; letter-spacing : -.075 em ; margin : 0 }. dek { font-family : ui-sans-serif , system-ui , sans-serif ; color : var ( -- muted ); font-size : 18 px ; line-height : 1.45 ; margin : 0 }
. stats { display : grid ; grid-template-columns : repeat ( 4 , 1 fr ); border : 1 px solid var ( -- line ); border-radius : 16 px ; overflow : hidden ; margin-bottom : 54 px }. stat { padding : 17 px 18 px ; border-right : 1 px solid var ( -- line )}. stat : last-child { border : 0 }. stat strong { display : block ; font-family : ui-sans-serif , system-ui , sans-serif ; font-size : 24 px }. stat span { font-size : 10 px ; text-transform : uppercase ; letter-spacing : .1 em ; color : var ( -- muted )}
. note { border-left : 3 px solid var ( -- accent ); padding : 0 0 0 16 px ; color : var ( -- muted ); font-size : 12 px ; line-height : 1.55 ; margin-bottom : 24 px }. grid { display : grid ; grid-template-columns : repeat ( 2 , minmax ( 0 , 1 fr )); gap : 14 px ; margin-bottom : 64 px }. card { display : flex ; flex-direction : column ; min-height : 255 px ; background : var ( -- card ); border : 1 px solid var ( -- line ); border-radius : 18 px ; padding : 21 px ; text-decoration : none ; transition : .12 s ease }. card : hover { transform : translateY ( -2 px ); border-color : var ( -- fg )}. topline { display : flex ; justify-content : space-between ; gap : 12 px ; margin-bottom : 20 px }. repo , . meta , . why { font-size : 11 px ; color : var ( -- muted )}. score { min-width : 34 px ; height : 34 px ; border : 1 px solid var ( -- accent ); border-radius : 50 % ; display : grid ; place-items : center ; color : var ( -- accent ); font-weight : 800 }. card h3 { font-family : ui-sans-serif , system-ui , sans-serif ; font-size : 22 px ; line-height : 1.08 ; letter-spacing : -.035 em ; margin : 0 0 8 px }. move { font-family : ui-sans-serif , system-ui , sans-serif ; font-size : 15 px ; line-height : 1.4 ; margin : 20 px 0 auto }. why { border-top : 1 px solid var ( -- line ); padding-top : 12 px ; margin-top : 18 px }. empty { border : 1 px dashed var ( -- line ); padding : 28 px ; border-radius : 16 px ; color : var ( -- muted )}
footer { border-top : 1 px solid var ( -- line ); padding : 24 px 0 36 px ; display : flex ; justify-content : space-between ; gap : 20 px ; color : var ( -- muted ); font-size : 11 px }
@ media ( max-width : 820px ) {. hero { grid-template-columns : 1 fr }. grid { grid-template-columns : 1 fr }. stats { grid-template-columns : 1 fr 1 fr }. stat : nth-child ( 2 ) { border-right : 0 }. stat : nth-child ( -n + 2 ) { border-bottom : 1 px solid var ( -- line )}}
@ media ( max-width : 520px ) {. stats { grid-template-columns : 1 fr }. stat { border-right : 0 !important ; border-bottom : 1 px solid var ( -- line ) !important }. stat : last-child { border-bottom : 0 !important }}
2026-10-05 20:11:24 +00:00
</ style >
</ head >
2026-10-05 20:15:33 +00:00
< body >< div class = "wrap" >
< header >< div class = "brand" > notplanned</ div >< div class = "tiny" > deterministic opportunity radar</ div ></ header >
< section class = "hero" >< h1 > rejected demand,< br > ranked.</ h1 >< p class = "dek" > No agent in the loop. GitHub issues go in; explicit rules score rejection, recency, engagement, repository activity, and externalizability; the highest-scoring candidates come out.</ p ></ section >
2026-10-05 20:11:24 +00:00
< section class = "stats" >
2026-10-05 20:15:33 +00:00
< div class = "stat" >< strong > __COUNT__</ strong >< span > candidates</ span ></ div >
< div class = "stat" >< strong > __REPOS__</ strong >< span > watched repos</ span ></ div >
< div class = "stat" >< strong > __THRESHOLD__</ strong >< span > minimum score</ span ></ div >
< div class = "stat" >< strong > __UPDATED__</ strong >< span > last run · UTC</ span ></ div >
2026-10-05 20:11:24 +00:00
</ section >
2026-10-05 20:15:33 +00:00
< div class = "note" > The score is intentionally mechanical, not “AI judgment.” It is a radar, not an oracle. Clicking a card goes to the source issue; the suggested product shape is selected by fixed keyword rules.</ div >
< section class = "grid" > __CARDS__</ section >
< footer >< span > notplanned · deterministic radar</ span >< span > refreshes every 6h</ span ></ footer >
</ div ></ body ></ html >