[{"data":1,"prerenderedAt":181},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fmockup-to-market-solargpt":30,"\u002Fblog\u002Fmockup-to-market-solargpt-surround":176},[4],{"title":5,"path":6,"stem":7,"children":8,"page":29},"Blog","\u002Fblog","blog",[9,13,17,21,25],{"title":10,"path":11,"stem":12},"From Mockup to Market: My End-to-End Product Design Process","\u002Fblog\u002Ffrom-mockup-to-market","blog\u002Ffrom-mockup-to-market",{"title":14,"path":15,"stem":16},"How I Built My Design System from Scratch","\u002Fblog\u002Fhow-i-built-my-own-design-system-from-scratch","blog\u002Fhow-i-built-my-own-design-system-from-scratch",{"title":18,"path":19,"stem":20},"From Mockup to Market: SolarGPT","\u002Fblog\u002Fmockup-to-market-solargpt","blog\u002Fmockup-to-market-solargpt",{"title":22,"path":23,"stem":24},"The Psychology of Color in UI Design","\u002Fblog\u002Fpsychology-of-color-in-ui-design","blog\u002Fpsychology-of-color-in-ui-design",{"title":26,"path":27,"stem":28},"The Case for Slow Design in a Fast-Paced Digital World","\u002Fblog\u002Fslow-design-in-fast-paced-digital-world","blog\u002Fslow-design-in-fast-paced-digital-world",false,{"id":31,"title":18,"author":32,"body":37,"date":167,"description":168,"extension":169,"image":170,"meta":171,"minRead":172,"navigation":173,"path":19,"seo":174,"stem":20,"__hash__":175},"blog\u002Fblog\u002Fmockup-to-market-solargpt.md",{"name":33,"avatar":34},"Admin",{"src":35,"alt":36},"\u002Fnysgpt-badge.png","NYSgpt",{"type":38,"value":39,"toc":161},"minimark",[40,44,47,52,55,58,61,78,81,85,88,96,128,139,149,152,158],[41,42,43],"p",{},"Building SolarGPT has reinforced something I already suspected: the hard part of an AI product isn't the model, it's the scaffolding around it. The data sources you trust, the questions you let users ask, the agent workflow that turns prose into SQL — those decisions compound. Get them right and the product performs well, very well. Get them wrong and it does not.",[41,45,46],{},"This is a walkthrough of how SolarGPT (solar.nysgpt.com) actually came together, including the dead ends.",[48,49,51],"h2",{"id":50},"phase-1-framing-the-product","Phase 1: Framing the Product",[41,53,54],{},"The temptation with anything energy-adjacent is to build everything: rooftop solar, wholesale markets, grid , etc., all wrapped into one. It was hard to resist that urge.",[41,56,57],{},"The correct approach turned out to be a singular focus on solar first.",[41,59,60],{},"Two question, two answers:",[62,63,64,72],"ul",{},[65,66,67,71],"li",{},[68,69,70],"strong",{},"\"Should I install solar on my roof?\""," — ROI, panel counts, capacity, carbon offset. For this question slow-moving, annual averages work.",[65,73,74,77],{},[68,75,76],{},"\"What is solar generation worth?\""," — Statewide? By county? By town? Zip code? To my neighborhood? My block? That's how far we drilled down.",[41,79,80],{},"We did this to empower collective action by endusers: a civic org., school district, municipality, if one mid-sized organization looks at it's rooftops the benefits are in the tens of millions.",[48,82,84],{"id":83},"phase-2-data-architecture","Phase 2: Data Architecture",[41,86,87],{},"Before any UI work, I spent real time mapping data sources to product questions. This is the part most people skip, and that's because it's a pain in the ass, but this is the part that determines whether the agent will give a useful answer.",[41,89,90,91,95],{},"The current Postgres setup (",[92,93,94],"code",{},"solargpt"," schema):",[62,97,98,104,110,116,122],{},[65,99,100,103],{},[68,101,102],{},"KPI views"," — pre-aggregated answers to the most common rooftop questions",[65,105,106,109],{},[68,107,108],{},"NREL 2024 tables"," — NREL's scenario-based long-run electricity values",[65,111,112,115],{},[68,113,114],{},"EIA 860 \u002F 861 \u002F 930"," — plant locations, service territories, hourly grid ops",[65,117,118,121],{},[68,119,120],{},"NYISO queue data"," — interconnection pipeline, parked for Phase 2",[65,123,124,127],{},[68,125,126],{},"Project Sunroof tables"," — county\u002Fcity\u002Fpostal\u002Ftract-level rooftop potential",[41,129,130,131,134,135,138],{},"A specific lesson that cost me a half-day: EIA's ",[92,132,133],{},"facility-fuel"," endpoint has generation time-series but no lat\u002Flon. The Plant file from EIA-860 has lat\u002Flon but no generation. To do anything map-shaped you have to join them on ",[92,136,137],{},"plant_code",". GridStatus does this; so now does SolarGpt.",[41,140,141,142],{},"Similarly for balancing authority polygons — county dissolution from EIA-861 service territory data technically works, but the DOE ArcGIS FeatureServer publishes the 71 BA polygons directly in WGS84 GeoJSON with no auth required. One query string and you're done: ",[143,144,148],"a",{"href":145,"rel":146},"https:\u002F\u002Farcgis.netl.doe.gov\u002Fserver\u002Frest\u002Fservices\u002FHosted\u002FControl__Areas\u002FFeatureServer\u002F0\u002Fquery?where=1%3D1&outFields=*&outSR=4326&f=geojson",[147],"nofollow","ArcGIS",[41,150,151],{},"That's a start. We'll disclose more on the AI Layer later, but for now I'd leave you with this:",[153,154,155],"blockquote",{},[41,156,157],{},"AI products live or die on the boring infrastructure underneath the chat box. The model is the easy part now. Picking the right data, shaping the right workflow, and saying no to the wrong scope — that's work.",[41,159,160],{},"More to come...",{"title":162,"searchDepth":163,"depth":163,"links":164},"",2,[165,166],{"id":50,"depth":163,"text":51},{"id":83,"depth":163,"text":84},"2026-05-13","A detailed breakdown of how I'm building SolarGPT — from data architecture decisions to agent workflows to spec-driven design — with the tradeoffs and course-corrections along the way.","md","\u002Fgea-regions.avif",{},8,true,{"title":18,"description":168},"gHb8hi78MYMLQybiZbtyEsHLY5GuEmQZowxwiGlx9DA",[177,179],{"title":14,"path":15,"stem":16,"description":178,"children":-1},"A practical guide to creating your own design system, from initial audit to implementation, and the lessons learned along the way.",{"title":22,"path":23,"stem":24,"description":180,"children":-1},"Exploring how strategic color choices can influence user behavior, evoke emotions, and enhance the overall user experience of digital products.",1778733315911]