{"id":45458,"name":"Home Energy Analysis Tool","description":"Provide an app that helps residential energy coaches or advocates, and some homeowners, estimate a home's heating requirements (heat load) and assess whether proposed heat pumps have sufficient heating capacity for the home.","url":"https://github.com/codeforboston/home-energy-analysis-tool","last_synced_at":"2026-04-27T17:03:09.420Z","repository":{"id":165663039,"uuid":"638919001","full_name":"codeforboston/home-energy-analysis-tool","owner":"codeforboston","description":"Calculator app improving state of art in heat pump sizing with Heat Smart Alliance coaches","archived":false,"fork":false,"pushed_at":"2026-03-11T00:11:26.000Z","size":83367,"stargazers_count":21,"open_issues_count":80,"forks_count":47,"subscribers_count":9,"default_branch":"main","last_synced_at":"2026-03-30T04:02:38.641Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://heat.heatsmartalliance.org","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codeforboston.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"custom":"https://www.codeforboston.org/donate/"}},"created_at":"2023-05-10T11:38:27.000Z","updated_at":"2026-03-24T21:36:48.000Z","dependencies_parsed_at":null,"dependency_job_id":"e6ad220c-2eb9-48e7-b8fe-0a663b4c2f66","html_url":"https://github.com/codeforboston/home-energy-analysis-tool","commit_stats":{"total_commits":178,"total_committers":28,"mean_commits":6.357142857142857,"dds":0.7078651685393258,"last_synced_commit":"73bf48685a4e6e920a27c3a1b0f9bd7975f051d8"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/codeforboston/home-energy-analysis-tool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeforboston%2Fhome-energy-analysis-tool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeforboston%2Fhome-energy-analysis-tool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeforboston%2Fhome-energy-analysis-tool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeforboston%2Fhome-energy-analysis-tool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codeforboston","download_url":"https://codeload.github.com/codeforboston/home-energy-analysis-tool/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeforboston%2Fhome-energy-analysis-tool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31264804,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-01T02:49:12.781Z","status":"ssl_error","status_checked_at":"2026-04-01T02:49:05.845Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"codeforboston","name":"Code for Boston","uuid":"2533182","kind":"organization","description":"Improving civic life and social good in Greater Boston.","email":"hello@codeforboston.org","website":"https://www.codeforboston.org","location":"Boston, MA","twitter":"codeforboston","company":null,"icon_url":"https://avatars.githubusercontent.com/u/2533182?v=4","repositories_count":119,"last_synced_at":"2024-04-15T11:18:18.984Z","metadata":{"has_sponsors_listing":false,"funding":{"custom":"https://www.codeforboston.org/donate/"}},"html_url":"https://github.com/codeforboston","funding_links":["https://www.codeforboston.org/donate/"],"total_stars":993,"followers":99,"following":0,"created_at":"2022-11-04T15:15:45.019Z","updated_at":"2024-04-15T11:19:09.060Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codeforboston","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codeforboston/repositories"},"packages":[],"commits":{"id":1355744,"full_name":"codeforboston/home-energy-analysis-tool","default_branch":"main","total_commits":326,"total_committers":39,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":8.35897435897436,"dds":0.8282208588957055,"past_year_total_commits":107,"past_year_total_committers":13,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":8.23076923076923,"past_year_dds":0.7102803738317758,"last_synced_at":"2026-04-23T15:07:27.608Z","last_synced_commit":"c61acb59c80796625794db1a7e9e9043366820ef","created_at":"2023-09-12T11:41:59.721Z","updated_at":"2026-04-23T15:03:39.297Z","committers":[{"name":"Thad Kerosky","email":"contact@thadk.net","login":"thadk","count":56},{"name":"Alan Pinkert","email":"alan.pinkert@gmail.com","login":"alanisaac","count":53},{"name":"AdamFinkle","email":"77808710+AdamFinkle","login":"AdamFinkle","count":45},{"name":"Ethan-Strominger","email":"32078396+ethanstrominger","login":"ethanstrominger","count":37},{"name":"mciethan","email":"emaclex@gmail.com","login":"mciethan","count":24},{"name":"Jonathan Kwan","email":"jkwan2011","login":"jkwan2011","count":13},{"name":"Harry Zhu","email":"harryzhu626@gmail.com","login":"harryzhu626","count":11},{"name":"Jeff Korenstein","email":"67333843+jkoren","login":"jkoren","count":10},{"name":"William Van Steen","email":"wvansteen","login":"wvansteen","count":8},{"name":"Erika Nesse","email":"erika.nesse@gmail.com","login":"erika-n","count":7},{"name":"eriksynn","email":"159293101+eriksynn","login":"eriksynn","count":6},{"name":"ZaimaGull","email":"ZaimaGull@Gmail.com","login":"ZaimaGull","count":5},{"name":"plocket","email":"52798256+plocket","login":"plocket","count":5},{"name":"K Fuquay","email":"kurt.m.fuquay@gmail.com","login":"kfuquay","count":4},{"name":"interianow","email":"29824849+interianow","login":"interianow","count":4},{"name":"Nate","email":"138620999+axiomizer","login":"axiomizer","count":4},{"name":"Chaoyi Jiang","email":"jiang.chao@northeastern.edu","login":"chaoyi09","count":3},{"name":"Derek McIntire","email":"77245762+derekvmcintire","login":"derekvmcintire","count":3},{"name":"Debajyoti Debnath","email":"ddebnath@purdue.edu","login":null,"count":2},{"name":"Devin Altobello","email":"130494366+daltobello","login":"daltobello","count":2},{"name":"stemgene","email":"35020077+stemgene","login":"stemgene","count":2},{"name":"Vlad Korolev","email":"vlad@v-lad.org","login":"vladistan","count":2},{"name":"dwindleduck","email":"119227220+dwindleduck","login":"dwindleduck","count":2},{"name":"nikulabs","email":"nikulabs@gmail.com","login":"nikulabs","count":2},{"name":"pravindransolutions","email":"181277558+pravindransolutions","login":"pravindransolutions","count":2},{"name":"thatoldplatitude","email":"99302073+thatoldplatitude","login":"thatoldplatitude","count":1},{"name":"chaoyi09","email":"“jiang.chao@northeastern.edu“","login":null,"count":1},{"name":"spghtti","email":"2266075+spghtti","login":"spghtti","count":1},{"name":"binamkayastha","email":"binamkayastha","login":"binamkayastha","count":1},{"name":"TBardini","email":"thiagobardini85@gmail.com","login":"thiagobardini","count":1},{"name":"Steve Breit","email":"60329513+stevebreit","login":"stevebreit","count":1},{"name":"Matthew Zagaja","email":"mzagaja","login":"mzagaja","count":1},{"name":"Kate Shea","email":"daishea@gmail.com","login":"kdshea","count":1},{"name":"Jacob Paris","email":"jacob@jacobparis.com","login":"jacobparis","count":1},{"name":"Ivy Wong","email":"ivywong","login":"ivywong","count":1},{"name":"Gavin Kimball","email":"125389424+Gkimbo","login":"Gkimbo","count":1},{"name":"Ethan Zhang","email":"33633355+SweetenedIcedTea","login":"SweetenedIcedTea","count":1},{"name":"Debajyoti Debnath","email":"92257044+debajyotid2","login":"debajyotid2","count":1},{"name":"Clayton Schneider","email":"53270992+clayton-schneider","login":"clayton-schneider","count":1}],"past_year_committers":[{"name":"Ethan-Strominger","email":"32078396+ethanstrominger","login":"ethanstrominger","count":31},{"name":"AdamFinkle","email":"77808710+AdamFinkle","login":"AdamFinkle","count":29},{"name":"Thad Kerosky","email":"contact@thadk.net","login":"thadk","count":16},{"name":"William Van Steen","email":"wvansteen","login":"wvansteen","count":8},{"name":"ZaimaGull","email":"ZaimaGull@Gmail.com","login":"ZaimaGull","count":5},{"name":"plocket","email":"52798256+plocket","login":"plocket","count":4},{"name":"interianow","email":"29824849+interianow","login":"interianow","count":4},{"name":"Chaoyi Jiang","email":"jiang.chao@northeastern.edu","login":"chaoyi09","count":3},{"name":"pravindransolutions","email":"181277558+pravindransolutions","login":"pravindransolutions","count":2},{"name":"nikulabs","email":"nikulabs@gmail.com","login":"nikulabs","count":2},{"name":"binamkayastha","email":"binamkayastha","login":"binamkayastha","count":1},{"name":"Ivy Wong","email":"ivywong","login":"ivywong","count":1},{"name":"chaoyi09","email":"“jiang.chao@northeastern.edu“","login":null,"count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeforboston%2Fhome-energy-analysis-tool/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-27T00:00:06.983Z","repositories_count":6219948,"commits_count":899625521,"contributors_count":34875422,"owners_count":1146174,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"codeforboston/home-energy-analysis-tool","html_url":"https://github.com/codeforboston/home-energy-analysis-tool","last_synced_at":"2026-04-22T03:03:27.804Z","status":null,"issues_count":256,"pull_requests_count":485,"avg_time_to_close_issue":8656000.092198582,"avg_time_to_close_pull_request":1148634.4269141532,"issues_closed_count":141,"pull_requests_closed_count":430,"pull_request_authors_count":43,"issue_authors_count":24,"avg_comments_per_issue":0.86328125,"avg_comments_per_pull_request":0.5773195876288659,"merged_pull_requests_count":329,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":115,"past_year_pull_requests_count":175,"past_year_avg_time_to_close_issue":1367487.690909091,"past_year_avg_time_to_close_pull_request":331879.42142857146,"past_year_issues_closed_count":55,"past_year_pull_requests_closed_count":140,"past_year_pull_request_authors_count":14,"past_year_issue_authors_count":9,"past_year_avg_comments_per_issue":0.43478260869565216,"past_year_avg_comments_per_pull_request":0.3142857142857143,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":102,"created_at":"2023-09-12T11:42:32.359Z","updated_at":"2026-04-22T03:03:27.804Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeforboston%2Fhome-energy-analysis-tool","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/codeforboston%2Fhome-energy-analysis-tool/issues","issue_labels_count":{"rules-engine":62,"user-experience":40,"good first issue":22,"heat-app-js":18,"question":15,"must have":9,"could have":9,"technical":7,"breakout":6,"enhancement":6,"documentation":6,"sub-issue":4,"heat-app":4,"build":3,"security":3,"should have":2,"close?":2,"bug":1,"on hold":1},"pull_request_labels_count":{"heat-app-js":7,"on hold":2,"do not merge":2,"rules-engine":1},"issue_author_associations_count":{"COLLABORATOR":208,"MEMBER":35,"CONTRIBUTOR":9,"NONE":4},"pull_request_author_associations_count":{"COLLABORATOR":319,"MEMBER":100,"CONTRIBUTOR":54,"NONE":12},"issue_authors":{"ethanstrominger":55,"AdamFinkle":53,"thadk":35,"jkwan2011":24,"alanisaac":15,"plocket":13,"stevebreit":11,"baipai":9,"debajyotid2":8,"pravindransolutions":5,"eriksynn":4,"interianow":4,"derekvmcintire":3,"mciethan":3,"jkoren":3,"dwindleduck":2,"axiomizer":2,"ZaimaGull":1,"zzzjwww":1,"Leopardfoot":1,"stemgene":1,"S7mitbarua":1,"thatoldplatitude":1,"clayton-schneider":1},"pull_request_authors":{"thadk":98,"AdamFinkle":96,"ethanstrominger":81,"alanisaac":52,"jkoren":18,"eriksynn":14,"thatoldplatitude":12,"interianow":10,"derekvmcintire":10,"kfuquay":8,"stemgene":8,"vladistan":8,"ZaimaGull":5,"plocket":5,"pravindransolutions":4,"Tcoding12":4,"mciethan":4,"axiomizer":4,"daltobello":4,"dwindleduck":3,"chaoyi09":3,"nikulabs":3,"clayton-schneider":2,"thomas-davis":2,"debajyotid2":2,"jacobparis":2,"SweetenedIcedTea":2,"mrmchughes":2,"erika-n":2,"ivywong":2,"thiagobardini":2,"wvansteen":2,"stevebreit":1,"terracottabucket":1,"Gkimbo":1,"JesusC-R":1,"mwellman17":1,"jkwan2011":1,"kdshea":1,"binamkayastha":1,"spghtti":1,"harryzhu626":1,"David-Egan":1},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-27T00:00:06.950Z","repositories_count":14433531,"issues_count":34434932,"pull_requests_count":112695585,"authors_count":11247083,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{"user-experience":25,"question":10,"must have":8,"could have":8,"technical":6,"documentation":5,"sub-issue":4,"rules-engine":3,"breakout":3,"security":3,"should have":2,"good first issue":2,"enhancement":2,"heat-app-js":1,"bug":1,"close?":1},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{"COLLABORATOR":98,"MEMBER":10,"CONTRIBUTOR":4,"NONE":1},"past_year_pull_request_author_associations_count":{"COLLABORATOR":117,"MEMBER":26,"CONTRIBUTOR":16,"NONE":3},"past_year_issue_authors":{"ethanstrominger":42,"AdamFinkle":37,"thadk":10,"stevebreit":7,"plocket":6,"pravindransolutions":5,"interianow":4,"dwindleduck":1,"ZaimaGull":1},"past_year_pull_request_authors":{"AdamFinkle":54,"ethanstrominger":47,"thadk":26,"interianow":10,"ZaimaGull":5,"pravindransolutions":4,"Tcoding12":4,"chaoyi09":3,"nikulabs":3,"plocket":2,"wvansteen":2,"binamkayastha":1,"mwellman17":1},"maintainers":[{"login":"ethanstrominger","count":136,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ethanstrominger"},{"login":"AdamFinkle","count":136,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/AdamFinkle"},{"login":"thadk","count":133,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/thadk"},{"login":"alanisaac","count":67,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/alanisaac"},{"login":"jkwan2011","count":25,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jkwan2011"},{"login":"jkoren","count":21,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/jkoren"},{"login":"eriksynn","count":18,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/eriksynn"},{"login":"plocket","count":18,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/plocket"},{"login":"thatoldplatitude","count":13,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/thatoldplatitude"},{"login":"stevebreit","count":12,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/stevebreit"},{"login":"debajyotid2","count":10,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/debajyotid2"},{"login":"baipai","count":9,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/baipai"},{"login":"pravindransolutions","count":9,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/pravindransolutions"},{"login":"vladistan","count":8,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/vladistan"},{"login":"mciethan","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mciethan"},{"login":"axiomizer","count":6,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/axiomizer"},{"login":"dwindleduck","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/dwindleduck"},{"login":"derekvmcintire","count":5,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/derekvmcintire"},{"login":"ZaimaGull","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ZaimaGull"},{"login":"nikulabs","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/nikulabs"},{"login":"clayton-schneider","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/clayton-schneider"},{"login":"chaoyi09","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/chaoyi09"},{"login":"thiagobardini","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/thiagobardini"},{"login":"mrmchughes","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mrmchughes"},{"login":"erika-n","count":2,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/erika-n"},{"login":"mwellman17","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mwellman17"},{"login":"Leopardfoot","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Leopardfoot"},{"login":"Gkimbo","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/Gkimbo"},{"login":"harryzhu626","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/harryzhu626"},{"login":"spghtti","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/spghtti"},{"login":"S7mitbarua","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/S7mitbarua"}],"active_maintainers":[{"login":"AdamFinkle","count":91,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/AdamFinkle"},{"login":"ethanstrominger","count":89,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ethanstrominger"},{"login":"thadk","count":36,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/thadk"},{"login":"pravindransolutions","count":9,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/pravindransolutions"},{"login":"plocket","count":8,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/plocket"},{"login":"stevebreit","count":7,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/stevebreit"},{"login":"chaoyi09","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/chaoyi09"},{"login":"nikulabs","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/nikulabs"},{"login":"ZaimaGull","count":3,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/ZaimaGull"},{"login":"dwindleduck","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/dwindleduck"},{"login":"mwellman17","count":1,"url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors/mwellman17"}]},"events":{"total":{"CreateEvent":142,"IssuesEvent":252,"WatchEvent":6,"DeleteEvent":140,"MemberEvent":3,"IssueCommentEvent":218,"PushEvent":448,"PullRequestReviewCommentEvent":59,"PullRequestReviewEvent":81,"PullRequestEvent":268,"ForkEvent":10},"last_year":{"CreateEvent":133,"IssuesEvent":230,"WatchEvent":6,"DeleteEvent":137,"MemberEvent":3,"IssueCommentEvent":203,"PushEvent":415,"PullRequestReviewEvent":61,"PullRequestReviewCommentEvent":40,"PullRequestEvent":245,"ForkEvent":8}},"keywords":[],"dependencies":[],"score":8.278682162970906,"created_at":"2023-09-12T07:52:09.494Z","updated_at":"2026-04-27T17:03:09.421Z","avatar_url":"https://github.com/codeforboston.png","language":"TypeScript","category":"Consumption","sub_category":"Buildings and Heating","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"**Goal**: Provide an app that helps residential energy coaches or advocates, and some homeowners, estimate a home's heating requirements (heat load) and assess whether proposed heat pumps have sufficient heating capacity for the home. The app will use information about the home including it's location, usual thermostat settings, and historical energy usage, provided by the resident, to calculate the heating requirements in BTUs/hr. Key outputs will include two graphs, one showing the heating requirement vs. outdoor temperature and another comparing the home with other homes based on floor area. In the future, this app may be extended to provide more information, such an estimate of electricity use by a heat pump, cost of heating with a heat pump vs. fossil fuel and other such features.\n\n**Users**: [Heatsmart Alliance coaches](https://heatsmartalliance.org/about-our-volunteer-coaches/), energy coaches with other affiliations, and users of the CfB [sibling project](https://github.com/codeforboston/urban-league-heat-pump-accelerator).\n\n**Original method**: An Excel spreadsheet with formulas that perform the calculations. Inputs to the existing spreadsheet include historic energy usage, typical thermostat settings, and temperature data from a weather station close to the home. More info on this existing spreadsheet and a link to request a download are available from the HeatSmart Alliance at [this link](https://heatsmartalliance.org/coaching-tools/heat-load-analysis/).\n\n## Teams\n\n### UI/UX and/or Design\n\nThis team will work with the other teams to match the interface and necessary research together. Original figma is available here (https://www.figma.com/design/qaxsZ6TW7gjQdUGjuPypZ5/heat-tool-design---new-one-?node-id=2080-12489\u0026p=f)\n\n### JavaScript\n\nThis team will plan and build the user interface. React and Remix in [Epic Stack](https://github.com/epicweb-dev/epic-stack). Uses Pyodide to run python code on frontend.\nIt will also get information from the weather station API that the rules engine can use for its calculations. In the future, it may work on permissions and persistence of household data[README.md](/heat-stack/public/pyodide-env/README.md).\n\n### Rules Engine\n\nRules engine provides reading, validation and calculations for heat data that are read from the 2 gas companies National Grid and Eversource. https://docs.google.com/document/d/1-CAsHL1WhCPQW8iXA_XXgSUWHZsCKiTsPHOVz9eV0AE/edit?tab=t.0\n\nDefinitions:\n    \n    Balance point: Outdoor temperature beyond which no heating is required.\n    Inclusion code: winter=1|spring=0|summer=-1|fall=0( determines the months to be used for heat load calculations)\n    Thermostat set point: the temp in F at which the home is normally set.\n    setback_temperature: temp in F at which the home is set during  off hours.\n    setback_hours_per_day: average # of hours per day the home is at setback temp.\n    design_set_point: a standard internal temperature / thermostat it can be read for a county from helpers.py.\n    set point - different from the preferred set point of an individual homeowner.\n    avg_indoor_temp: average indoor temperature on a given day \n    `((24 - setback_hours_per_day) * thermostat_set_point + setback_hours_per_day * setback_temperature) / 24`\n    design_temp: an outside temperature that represents one of the coldest days of the year for the given location of a home.\n    ua: the heat transfer coefficient\n    hdd: heating degree days on a given day for a given home `(Balance Point-avg_indoor_temp)`.\n    dhw: heat used for non heating purposes.\n    maximun heat load: `(design_set_point - design_temp) * ua`\n\nDocumentation:\n        \n        - design_temp [README.md](/design_temp/README.md)\n\nCalculations:\n    \n    The data files for each home is used to calculate the heat load for the home irrespective of the fuel type used. The data is normalized to be fuel type agnostic and the intermediate bill that is generated converts temperature data and billing period inputs into internal classes used for heat loss calculations.\n\nValidations:\n\n    1.Validate the csv for the heating company National Gird/Eversource\n\nTests:\n\n    Tests for Engine:\n\n        - Generating intermediate bill\n        - Generating Normalized bill\n        - Calculate Non heating usage\n\n    Tests for Parser:\n\n        - Identify gas company\n        - Error of neither of the 2 Nation Grid/ Eversource\n\n\n### Auth\n\nRole based Authorization, used from epic stack. For further documentation refer to\nhttps://github.com/epicweb-dev/epic-stack/blob/main/docs/permissions.md?plain=1\n\n### Persistence\n\nThe epic stack has the default schemas in prisma.schema. The models specific to the project are placed after the default models in the same file. Migrations are run during the heat-stack setup. Updates to the model will create new migrations as necessary.\n\n### Deploy\n\nThe epic stack uses Fly.io for default deployment. This application works with it out of the box. The documentation is here https://github.com/epicweb-dev/epic-stack/blob/main/docs/deployment.md\n\n### Installation\n\nTo install the front end, see this [README.md](https://github.com/codeforboston/home-energy-analysis-tool/blob/main/heat-stack/README.md)\n\nTo install the rules engine, see this [README.md](https://github.com/codeforboston/home-energy-analysis-tool/blob/main/python/README.md)\n\n### Documentation\n\nFurther reading can be done here (https://drive.google.com/drive/folders/1z8dBfvQD78AAt7VI2z3J3YVubFNDpq-O)","funding_links":["https://www.codeforboston.org/donate/"],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["code-for-america","code-for-boston"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/45458","html_url":"https://ost.ecosyste.ms/projects/45458"}