Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
File size: 81,411 Bytes
3d16fe6 896453f 1f7780e 896453f fcf298e | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 | <!doctype html><html lang=en dir=ltr class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-development/refactoring-summary" data-has-hydrated=false><head><meta charset=UTF-8><meta name=generator content="Docusaurus v3.10.0"><title data-rh=true>β¨ React + FastAPI Databricks App - Complete Refactoring Summary | Open Navigator</title><meta data-rh=true name=viewport content="width=device-width, initial-scale=1.0"/><meta data-rh=true property=og:image content=https://www.communityone.com/img/docusaurus-social-card.jpg /><meta data-rh=true name=twitter:image content=https://www.communityone.com/img/docusaurus-social-card.jpg /><meta data-rh=true property=og:url content=https://www.communityone.com/docs/development/refactoring-summary /><meta data-rh=true property=og:locale content=en /><meta data-rh=true name=docusaurus_locale content=en /><meta data-rh=true name=docsearch:language content=en /><meta data-rh=true name=keywords content="civic engagement, policy tracking, meeting minutes, nonprofit tracking, municipal government, advocacy, open data, local government"/><meta data-rh=true property=og:type content=website /><meta data-rh=true property=og:site_name content="Open Navigator"/><meta data-rh=true name=twitter:card content=summary_large_image /><meta data-rh=true name=docusaurus_version content=current /><meta data-rh=true name=docusaurus_tag content=docs-default-current /><meta data-rh=true name=docsearch:version content=current /><meta data-rh=true name=docsearch:docusaurus_tag content=docs-default-current /><meta data-rh=true property=og:title content="β¨ React + FastAPI Databricks App - Complete Refactoring Summary | Open Navigator"/><meta data-rh=true name=description content="π What We Built"/><meta data-rh=true property=og:description content="π What We Built"/><link data-rh=true rel=icon href=/img/favicon.ico /><link data-rh=true rel=canonical href=https://www.communityone.com/docs/development/refactoring-summary /><link data-rh=true rel=alternate href=https://www.communityone.com/docs/development/refactoring-summary hreflang=en /><link data-rh=true rel=alternate href=https://www.communityone.com/docs/development/refactoring-summary hreflang=x-default /><script data-rh=true type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","item":"https://www.communityone.com/docs/for-developers","name":"Developers & Technical Users","position":1},{"@type":"ListItem","item":"https://www.communityone.com/docs/development/refactoring-summary","name":"β¨ React + FastAPI Databricks App - Complete Refactoring Summary","position":2}]}</script><link rel=alternate type=application/rss+xml href=/blog/rss.xml title="Open Navigator RSS Feed"><link rel=alternate type=application/atom+xml href=/blog/atom.xml title="Open Navigator Atom Feed"><link rel=preconnect href=https://www.google-analytics.com><link rel=preconnect href=https://www.googletagmanager.com><script async src="https://www.googletagmanager.com/gtag/js?id=G-5EQV815915"></script><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-5EQV815915",{anonymize_ip:!0})</script><link rel=stylesheet href=/assets/css/styles.c89d6b2d.css /><script src=/assets/js/runtime~main.c8fa085e.js defer></script><script src=/assets/js/main.6e24e536.js defer></script></head><body><svg style="display: none;"><defs>
<symbol id=theme-svg-external-link viewBox="0 0 24 24"><path fill=currentColor d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme-7e9")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||(window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light")),document.documentElement.setAttribute("data-theme-choice",t||"system")}(),function(){try{for(var[t,e]of new URLSearchParams(window.location.search).entries())if(t.startsWith("docusaurus-data-")){var a=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(a,e)}}catch(t){}}()</script><div id=__docusaurus><link rel=preload as=image href=/img/communityone_logo.svg /><script type=application/ld+json>{"@context":"https://schema.org","@type":"Organization","address":{"@type":"PostalAddress","addressCountry":"US","addressLocality":"Tuscaloosa","addressRegion":"AL","postalCode":"35406","streetAddress":"5617 Lakeridge Court"},"contactPoint":{"@type":"ContactPoint","availableLanguage":["English"],"contactType":"Customer Service","email":"johnbowyer@communityone.com"},"description":"Track 90,000+ jurisdictions, 1.8M nonprofits, and analyze meeting minutes with AI. The open path to everything local.","email":"johnbowyer@communityone.com","legalName":"CommunityOne","logo":"https://www.communityone.com/img/communityone_logo.svg","name":"CommunityOne","sameAs":["https://www.facebook.com/communityone","https://www.instagram.com/communityone","https://twitter.com/communityone","https://www.linkedin.com/company/communityone","https://www.youtube.com/@communityone","https://discord.gg/communityone","https://github.com/getcommunityone/open-navigator"],"url":"https://www.communityone.com"}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"WebSite","alternateName":"CommunityOne Open Navigator","description":"AI-powered civic engagement platform tracking jurisdictions, nonprofits, and government meetings","name":"Open Navigator","potentialAction":{"@type":"SearchAction","query-input":"required name=search_term_string","target":{"@type":"EntryPoint","urlTemplate":"https://www.communityone.com/search?q={search_term_string}"}},"url":"https://www.communityone.com"}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"SoftwareApplication","aggregateRating":{"@type":"AggregateRating","ratingCount":"1","ratingValue":"5"},"applicationCategory":"BusinessApplication","description":"Track 90,000+ jurisdictions, 1.8M nonprofits, and analyze meeting minutes with AI","featureList":["Track 90,000+ jurisdictions","Monitor 1.8M nonprofits","Analyze meeting minutes","Legislative bill tracking","Campaign finance data"],"name":"Open Navigator","offers":{"@type":"Offer","price":"0","priceCurrency":"USD"},"operatingSystem":"Web","screenshot":"https://www.communityone.com/img/docusaurus-social-card.jpg","softwareVersion":"1.0.0"}</script><div role=region aria-label="Skip to main content"><a class=skipToContent_fXgn href=#__docusaurus_skipToContent_fallback>Skip to main content</a></div><nav aria-label=Main class="theme-layout-navbar navbar navbar--fixed-top"><div class=navbar__inner><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded=false class="navbar__toggle clean-btn" type=button><svg width=30 height=30 viewBox="0 0 30 30" aria-hidden=true><path stroke=currentColor stroke-linecap=round stroke-miterlimit=10 stroke-width=2 d="M4 7h22M4 15h22M4 23h22"/></svg></button><a href=https://www.communityone.com target=_self rel="noopener noreferrer" class=navbar__brand><div class=navbar__logo><img src=/img/communityone_logo.svg alt="CommunityOne Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"/><img src=/img/communityone_logo.svg alt="CommunityOne Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"/></div><b class="navbar__title text--truncate">Open Navigator Home</b></a><a class="navbar__item navbar__link" href=/docs/intro>Getting Started</a><a class="navbar__item navbar__link" href=/docs/for-families>Families & Individuals</a><a class="navbar__item navbar__link" href=/docs/for-advocates>Policy Makers</a><a class="navbar__item navbar__link" href=/docs/for-developers>Developers</a><a class="navbar__item navbar__link" href=/docs/data-sources/citations>Data and Terms</a><a class="navbar__item navbar__link" href=/blog>Blog</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href=https://github.com/getcommunityone/open-navigator-for-engagement target=_blank rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type=button disabled title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill=currentColor d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"/></svg><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill=currentColor d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"/></svg><svg viewBox="0 0 24 24" width=24 height=24 aria-hidden=true class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill=currentColor d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"/></svg></button></div><div class=navbarSearchContainer_Bca1></div></div></div><div role=presentation class=navbar-sidebar__backdrop></div></nav><div id=__docusaurus_skipToContent_fallback class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class=docsWrapper_hBAB><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type=button></button><div class=docRoot_UBD9><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class=sidebarViewport_aRkj><div class=sidebar_njMd><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=true href=/docs/intro><span title="Getting Started" class=categoryLinkLabel_W154>Getting Started</span></a></div><ul class=menu__list><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/intro><span title=Introduction class=linkLabel_WmDU>Introduction</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/open-navigator><span title="Open Navigator" class=linkLabel_WmDU>Open Navigator</span></a></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" href=/docs/for-families><span title="Families & Individuals" class=categoryLinkLabel_W154>Families & Individuals</span></a><button aria-label="Collapse sidebar category 'Families & Individuals'" aria-expanded=true type=button class="clean-btn menu__caret"></button></div><ul class=menu__list><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false tabindex=0 href=/docs/families/community-events><span title="Resources for Families" class=categoryLinkLabel_W154>Resources for Families</span></a></div><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/open-navigator><span title="Getting Started with Open Navigator" class=linkLabel_WmDU>Getting Started with Open Navigator</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class=menu__link tabindex=0 href=/docs/data-sources/citations><span title="Data and Citations" class=linkLabel_WmDU>Data and Citations</span></a></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist" href=/docs/for-advocates><span title="Policy Makers & Advocates" class=categoryLinkLabel_W154>Policy Makers & Advocates</span></a><button aria-label="Collapse sidebar category 'Policy Makers & Advocates'" aria-expanded=true type=button class="clean-btn menu__caret"></button></div><ul class=menu__list><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false tabindex=0 href=/docs/data-sources/overview><span title="Understanding the Data" class=categoryLinkLabel_W154>Understanding the Data</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false tabindex=0 href=/docs/guides/political-economy><span title="Analysis & Strategy" class=categoryLinkLabel_W154>Analysis & Strategy</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false tabindex=0 href=/docs/case-studies/tuscaloosa-complete><span title="Real-World Examples" class=categoryLinkLabel_W154>Real-World Examples</span></a></div></ul><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--active" href=/docs/for-developers><span title="Developers & Technical Users" class=categoryLinkLabel_W154>Developers & Technical Users</span></a><button aria-label="Collapse sidebar category 'Developers & Technical Users'" aria-expanded=true type=button class="clean-btn menu__caret"></button></div><ul class=menu__list><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false tabindex=0 href=/docs/quickstart><span title="Setup & Installation" class=categoryLinkLabel_W154>Setup & Installation</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false tabindex=0 href=/docs/data-sources/citations><span title="Data Sources (Technical)" class=categoryLinkLabel_W154>Data Sources (Technical)</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false tabindex=0 href=/docs/guides/jurisdiction-setup><span title="How-To Guides" class=categoryLinkLabel_W154>How-To Guides</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false tabindex=0 href=/docs/integrations/mcp-server><span title=Integrations class=categoryLinkLabel_W154>Integrations</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item menu__list-item--collapsed"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role=button aria-expanded=false tabindex=0 href=/docs/deployment/databricks-apps><span title=Deployment class=categoryLinkLabel_W154>Deployment</span></a></div><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-2 menu__list-item"><div class=menu__list-item-collapsible><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret menu__link--active" role=button aria-expanded=true tabindex=0 href=/docs/development/database-setup><span title=Development class=categoryLinkLabel_W154>Development</span></a></div><ul class=menu__list><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/database-setup><span title="Database Setup & Stats Verification" class=linkLabel_WmDU>Database Setup & Stats Verification</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/events-naming-migration><span title="File Migration to Events Naming Convention" class=linkLabel_WmDU>File Migration to Events Naming Convention</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/adding-data-sources><span title="Adding New Data Sources" class=linkLabel_WmDU>Adding New Data Sources</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/api-logging-errors><span title="API Logging & Error Handling Implementation" class=linkLabel_WmDU>API Logging & Error Handling Implementation</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/openstates-integration><span title="OpenStates Integration & Contribution Opportunities" class=linkLabel_WmDU>OpenStates Integration & Contribution Opportunities</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/real-time-statistics><span title="Real-Time Statistics with Geographic Filtering" class=linkLabel_WmDU>Real-Time Statistics with Geographic Filtering</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/schema-migration-summary><span title="Schema Migration Summary" class=linkLabel_WmDU>Schema Migration Summary</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/terminal-corruption-prevention><span title="Terminal Corruption Prevention" class=linkLabel_WmDU>Terminal Corruption Prevention</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/county-data-status><span title="County Search and Aggregation - Status Summary" class=linkLabel_WmDU>County Search and Aggregation - Status Summary</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/intel-optimization><span title="DuckDB + Intel Arc Optimization" class=linkLabel_WmDU>DuckDB + Intel Arc Optimization</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/dashboard-redesign><span title="React Dashboard Redesign Summary" class=linkLabel_WmDU>React Dashboard Redesign Summary</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/docs-migration><span title="Documentation Migration Summary" class=linkLabel_WmDU>Documentation Migration Summary</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/port-guide><span title="π¨ CRITICAL: Which Port to Use?" class=linkLabel_WmDU>π¨ CRITICAL: Which Port to Use?</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/react-refactoring><span title="React + FastAPI Databricks App Refactoring" class=linkLabel_WmDU>React + FastAPI Databricks App Refactoring</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/readme-migration><span title="README Migration Summary" class=linkLabel_WmDU>README Migration Summary</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class="menu__link menu__link--active" aria-current=page tabindex=0 href=/docs/development/refactoring-summary><span title="β¨ React + FastAPI Databricks App - Complete Refactoring Summary" class=linkLabel_WmDU>β¨ React + FastAPI Databricks App - Complete Refactoring Summary</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/changelog><span title="Changelog - Jurisdiction Discovery System" class=linkLabel_WmDU>Changelog - Jurisdiction Discovery System</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/enhancements><span title="β
Enhancement Complete: Official Data Sources Integration" class=linkLabel_WmDU>β
Enhancement Complete: Official Data Sources Integration</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/integration-status><span title="β
Integration Status Summary" class=linkLabel_WmDU>β
Integration Status Summary</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/migration-v2><span title="β
Migration Complete: Pattern-Based Discovery v2.0" class=linkLabel_WmDU>β
Migration Complete: Pattern-Based Discovery v2.0</span></a><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-3 menu__list-item"><a class=menu__link tabindex=0 href=/docs/development/new-capabilities><span title="π NEW CAPABILITIES SUMMARY" class=linkLabel_WmDU>π NEW CAPABILITIES SUMMARY</span></a></ul></ul></ul></nav></div></div></aside><main class=docMainContainer_TBSr><div class="container padding-top--md padding-bottom--lg"><div class=row><div class="col docItemCol_VOVn"><div class=docItemContainer_Djhp><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label=Breadcrumbs><ul class=breadcrumbs><li class=breadcrumbs__item><a aria-label="Home page" class=breadcrumbs__link href=/><svg viewBox="0 0 24 24" class=breadcrumbHomeIcon_YNFT><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill=currentColor /></svg></a><li class=breadcrumbs__item><a class=breadcrumbs__link href=/docs/for-developers><span>Developers & Technical Users</span></a><li class=breadcrumbs__item><span class=breadcrumbs__link>Development</span><li class="breadcrumbs__item breadcrumbs__item--active"><span class=breadcrumbs__link>β¨ React + FastAPI Databricks App - Complete Refactoring Summary</span></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type=button class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><header><h1>β¨ React + FastAPI Databricks App - Complete Refactoring Summary</h1></header>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-what-we-built>π What We Built<a href=#-what-we-built class=hash-link aria-label="Direct link to π What We Built" title="Direct link to π What We Built" translate=no>β</a></h2>
<p>The Oral Health Policy Pulse has been transformed from a <strong>CLI-only tool</strong> into a <strong>modern full-stack web application</strong> that deploys as a <strong>Databricks App</strong>.</p>
<hr/>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-new-files-created-35-files>π¦ New Files Created (35+ files)<a href=#-new-files-created-35-files class=hash-link aria-label="Direct link to π¦ New Files Created (35+ files)" title="Direct link to π¦ New Files Created (35+ files)" translate=no>β</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=frontend-react--typescript>Frontend (React + TypeScript)<a href=#frontend-react--typescript class=hash-link aria-label="Direct link to Frontend (React + TypeScript)" title="Direct link to Frontend (React + TypeScript)" translate=no>β</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">frontend/</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ src/</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">β βββ components/</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">β β βββ Layout.tsx # Main layout with sidebar navigation</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">β βββ pages/</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">β β βββ Dashboard.tsx # Statistics dashboard with charts</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">β β βββ Heatmap.tsx # Interactive Leaflet map</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">β β βββ Documents.tsx # Document browser with search</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">β β βββ Opportunities.tsx # Opportunity manager</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">β β βββ Settings.tsx # Configuration panel</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">β βββ App.tsx # Root component with routing</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">β βββ main.tsx # Entry point</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">β βββ index.css # Tailwind CSS styles</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">β</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ package.json # npm dependencies</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ vite.config.ts # Vite build configuration</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ tsconfig.json # TypeScript config</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ tsconfig.node.json # TypeScript Node config</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ tailwind.config.js # Tailwind CSS config</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ postcss.config.js # PostCSS config</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ .eslintrc.cjs # ESLint rules</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ .gitignore # Git ignore</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ index.html # HTML template</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ README.md # Frontend documentation</span><br/></div></code></pre></div></div>
<p><strong>Lines of Code:</strong> ~1,500 LOC</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=backend-fastapi-refactored>Backend (FastAPI Refactored)<a href=#backend-fastapi-refactored class=hash-link aria-label="Direct link to Backend (FastAPI Refactored)" title="Direct link to Backend (FastAPI Refactored)" translate=no>β</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">api/</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ app.py # NEW: FastAPI app for Databricks</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ static/ # Built React files (generated)</span><br/></div></code></pre></div></div>
<p><strong>New API Endpoints:</strong></p>
<ul>
<li class=""><code>GET /api/health</code> - Health check</li>
<li class=""><code>GET /api/dashboard</code> - Dashboard stats</li>
<li class=""><code>GET /api/opportunities</code> - List opportunities</li>
<li class=""><code>GET /api/documents</code> - Browse documents</li>
<li class=""><code>POST /api/workflow/start</code> - Start workflow</li>
<li class=""><code>POST /api/advocacy/email/{id}</code> - Generate email</li>
<li class=""><code>GET /api/settings</code> - Get settings</li>
<li class=""><code>PUT /api/settings</code> - Update settings</li>
<li class=""><code>GET /api/agents/status</code> - Agent status</li>
</ul>
<p><strong>Lines of Code:</strong> ~200 LOC</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=database-layer-extensions>Database Layer Extensions<a href=#database-layer-extensions class=hash-link aria-label="Direct link to Database Layer Extensions" title="Direct link to Database Layer Extensions" translate=no>β</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">pipeline/</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ delta_lake_queries.py # NEW: Async query methods</span><br/></div></code></pre></div></div>
<p><strong>New Query Methods:</strong></p>
<ul>
<li class=""><code>get_dashboard_stats()</code> - Dashboard statistics</li>
<li class=""><code>query_opportunities()</code> - Filtered opportunities</li>
<li class=""><code>query_documents()</code> - Document search</li>
<li class=""><code>count_documents()</code> - Total count</li>
<li class=""><code>get_opportunity()</code> - Single opportunity</li>
</ul>
<p><strong>Lines of Code:</strong> ~150 LOC</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=deployment--configuration>Deployment & Configuration<a href=#deployment--configuration class=hash-link aria-label="Direct link to Deployment & Configuration" title="Direct link to Deployment & Configuration" translate=no>β</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">app.yaml # Databricks Apps manifest</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Dockerfile.app # Production container</span><br/></div></code></pre></div></div>
<p><strong>Lines of Code:</strong> ~50 LOC</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=scripts>Scripts<a href=#scripts class=hash-link aria-label="Direct link to Scripts" title="Direct link to Scripts" translate=no>β</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">scripts/</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ deploy-databricks-app.sh # Deploy to Databricks Apps</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ setup-local.sh # Local development setup</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">βββ test-app.py # Test production build</span><br/></div></code></pre></div></div>
<p><strong>Lines of Code:</strong> ~150 LOC</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=documentation>Documentation<a href=#documentation class=hash-link aria-label="Direct link to Documentation" title="Direct link to Documentation" translate=no>β</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">DATABRICKS_APP_GUIDE.md # Full deployment guide (450 lines)</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">REACT_REFACTORING.md # Refactoring details (700 lines)</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">QUICKSTART_DATABRICKS_APP.md # Quick start guide (200 lines)</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">REFACTORING_SUMMARY.md # This file (400 lines)</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">frontend/README.md # Frontend docs (150 lines)</span><br/></div></code></pre></div></div>
<p><strong>Lines of Documentation:</strong> ~1,900 lines</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=updated-files>Updated Files<a href=#updated-files class=hash-link aria-label="Direct link to Updated Files" title="Direct link to Updated Files" translate=no>β</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">README.md # Updated with React info</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Makefile # Added frontend build commands</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">config/settings.py # Added MLflow config</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">.env.example # Added new settings</span><br/></div></code></pre></div></div>
<hr/>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-statistics>π Statistics<a href=#-statistics class=hash-link aria-label="Direct link to π Statistics" title="Direct link to π Statistics" translate=no>β</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=code-added>Code Added<a href=#code-added class=hash-link aria-label="Direct link to Code Added" title="Direct link to Code Added" translate=no>β</a></h3>
<ul>
<li class=""><strong>Frontend (React/TS):</strong> ~1,500 LOC</li>
<li class=""><strong>Backend (FastAPI):</strong> ~200 LOC</li>
<li class=""><strong>Database Queries:</strong> ~150 LOC</li>
<li class=""><strong>Scripts:</strong> ~150 LOC</li>
<li class=""><strong>Configuration:</strong> ~50 LOC</li>
<li class=""><strong>Total Code:</strong> <strong>~2,050 LOC</strong></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=documentation-added>Documentation Added<a href=#documentation-added class=hash-link aria-label="Direct link to Documentation Added" title="Direct link to Documentation Added" translate=no>β</a></h3>
<ul>
<li class=""><strong>Guides:</strong> ~1,900 lines</li>
<li class=""><strong>Comments:</strong> ~500 lines</li>
<li class=""><strong>Total Docs:</strong> <strong>~2,400 lines</strong></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=files-created>Files Created<a href=#files-created class=hash-link aria-label="Direct link to Files Created" title="Direct link to Files Created" translate=no>β</a></h3>
<ul>
<li class=""><strong>Source Files:</strong> 25+</li>
<li class=""><strong>Config Files:</strong> 10+</li>
<li class=""><strong>Total Files:</strong> <strong>35+ files</strong></li>
</ul>
<hr/>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-ui-features>π¨ UI Features<a href=#-ui-features class=hash-link aria-label="Direct link to π¨ UI Features" title="Direct link to π¨ UI Features" translate=no>β</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=dashboard-page>Dashboard Page<a href=#dashboard-page class=hash-link aria-label="Direct link to Dashboard Page" title="Direct link to Dashboard Page" translate=no>β</a></h3>
<ul>
<li class="">β
Statistics cards (documents, opportunities, states)</li>
<li class="">β
Topic distribution bar chart</li>
<li class="">β
Topic distribution pie chart</li>
<li class="">β
Recent opportunities table</li>
<li class="">β
Real-time data updates</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=interactive-heatmap>Interactive Heatmap<a href=#interactive-heatmap class=hash-link aria-label="Direct link to Interactive Heatmap" title="Direct link to Interactive Heatmap" translate=no>β</a></h3>
<ul>
<li class="">β
Leaflet map with OpenStreetMap tiles</li>
<li class="">β
Color-coded urgency markers (red/orange/yellow/green)</li>
<li class="">β
State filter dropdown</li>
<li class="">β
Topic filter dropdown</li>
<li class="">β
Click for detailed popups</li>
<li class="">β
Confidence scores</li>
<li class="">β
Meeting dates</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=document-browser>Document Browser<a href=#document-browser class=hash-link aria-label="Direct link to Document Browser" title="Direct link to Document Browser" translate=no>β</a></h3>
<ul>
<li class="">β
Full-text search</li>
<li class="">β
Pagination (20 per page)</li>
<li class="">β
Topic tags</li>
<li class="">β
Source document links</li>
<li class="">β
Meeting date display</li>
<li class="">β
State/municipality info</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=opportunities-manager>Opportunities Manager<a href=#opportunities-manager class=hash-link aria-label="Direct link to Opportunities Manager" title="Direct link to Opportunities Manager" translate=no>β</a></h3>
<ul>
<li class="">β
Card-based layout</li>
<li class="">β
Urgency filtering (critical/high/medium/low)</li>
<li class="">β
One-click email generation</li>
<li class="">β
Talking points display</li>
<li class="">β
Confidence score bars</li>
<li class="">β
Contact information</li>
<li class="">β
Calendar integration</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=settings-panel>Settings Panel<a href=#settings-panel class=hash-link aria-label="Direct link to Settings Panel" title="Direct link to Settings Panel" translate=no>β</a></h3>
<ul>
<li class="">β
Target state multi-select</li>
<li class="">β
Policy topic checkboxes</li>
<li class="">β
Confidence threshold slider</li>
<li class="">β
Email notification toggle</li>
<li class="">β
Agent status indicators</li>
<li class="">β
Save/reset functionality</li>
</ul>
<hr/>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=οΈ-architecture>ποΈ Architecture<a href=#οΈ-architecture class=hash-link aria-label="Direct link to ποΈ Architecture" title="Direct link to ποΈ Architecture" translate=no>β</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=technology-stack>Technology Stack<a href=#technology-stack class=hash-link aria-label="Direct link to Technology Stack" title="Direct link to Technology Stack" translate=no>β</a></h3>
<table><thead><tr><th>Layer<th>Technology<th>Purpose<tbody><tr><td><strong>Frontend</strong><td>React 18.2 + TypeScript<td>UI framework<tr><td><td>Vite<td>Build tool & dev server<tr><td><td>Tailwind CSS<td>Styling framework<tr><td><td>React Router<td>Client-side routing<tr><td><td>TanStack Query<td>Server state management<tr><td><td>Recharts<td>Chart visualizations<tr><td><td>Leaflet<td>Interactive maps<tr><td><strong>Backend</strong><td>FastAPI<td>REST API framework<tr><td><td>Uvicorn<td>ASGI server<tr><td><td>Pydantic<td>Data validation<tr><td><strong>Database</strong><td>Delta Lake<td>Data lakehouse<tr><td><td>Unity Catalog<td>Data governance<tr><td><td>PySpark<td>Data processing<tr><td><strong>AI/ML</strong><td>MLflow<td>Model tracking<tr><td><td>Model Serving<td>API endpoints<tr><td><td>OpenAI<td>LLM inference<tr><td><strong>Deployment</strong><td>Databricks Apps<td>Cloud hosting<tr><td><td>Docker<td>Containerization</table>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=request-flow>Request Flow<a href=#request-flow class=hash-link aria-label="Direct link to Request Flow" title="Direct link to Request Flow" translate=no>β</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">User Browser</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> β</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">React App (http://localhost:3000 in dev)</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> β</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">FastAPI Backend (http://localhost:8000)</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> β</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Delta Lake / Unity Catalog</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> β</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">Model Serving Endpoints</span><br/></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=build-process>Build Process<a href=#build-process class=hash-link aria-label="Direct link to Build Process" title="Direct link to Build Process" translate=no>β</a></h3>
<div class="language-text codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-text codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">1. npm run build</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ββ TypeScript compilation</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ββ Vite bundling</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ββ Tailwind CSS purging</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ββ Output to api/static/</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">2. uvicorn api.app:app</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ββ Serves React app + API</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain">3. databricks apps deploy</span><br/></div><div class=token-line style=color:#393A34><span class="token plain"> ββ Deploys to Databricks workspace</span><br/></div></code></pre></div></div>
<hr/>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-deployment-options>π Deployment Options<a href=#-deployment-options class=hash-link aria-label="Direct link to π Deployment Options" title="Direct link to π Deployment Options" translate=no>β</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=1-local-development-hot-reload>1. Local Development (Hot Reload)<a href=#1-local-development-hot-reload class=hash-link aria-label="Direct link to 1. Local Development (Hot Reload)" title="Direct link to 1. Local Development (Hot Reload)" translate=no>β</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain"># Terminal 1 - Backend</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">source venv/bin/activate</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">uvicorn api.app:app --reload</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"># Terminal 2 - Frontend</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">cd frontend</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">npm run dev</span><br/></div></code></pre></div></div>
<p><strong>Access:</strong> <a href=http://localhost:3000 target=_blank rel="noopener noreferrer" class="">http://localhost:3000</a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=2-local-production-test>2. Local Production Test<a href=#2-local-production-test class=hash-link aria-label="Direct link to 2. Local Production Test" title="Direct link to 2. Local Production Test" translate=no>β</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">cd frontend && npm run build && cd ..</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">python scripts/test-app.py</span><br/></div></code></pre></div></div>
<p><strong>Access:</strong> <a href=http://localhost:8000 target=_blank rel="noopener noreferrer" class="">http://localhost:8000</a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=3-databricks-apps-cloud>3. Databricks Apps (Cloud)<a href=#3-databricks-apps-cloud class=hash-link aria-label="Direct link to 3. Databricks Apps (Cloud)" title="Direct link to 3. Databricks Apps (Cloud)" translate=no>β</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">./scripts/deploy-databricks-app.sh</span><br/></div></code></pre></div></div>
<p><strong>Access:</strong> <a href=https://your-workspace.cloud.databricks.com/apps/oral-health-policy-pulse target=_blank rel="noopener noreferrer" class="">https://your-workspace.cloud.databricks.com/apps/oral-health-policy-pulse</a></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=4-docker>4. Docker<a href=#4-docker class=hash-link aria-label="Direct link to 4. Docker" title="Direct link to 4. Docker" translate=no>β</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">docker build -f Dockerfile.app -t oral-health-app .</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">docker run -p 8000:8000 oral-health-app</span><br/></div></code></pre></div></div>
<p><strong>Access:</strong> <a href=http://localhost:8000 target=_blank rel="noopener noreferrer" class="">http://localhost:8000</a></p>
<hr/>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-key-features>π‘ Key Features<a href=#-key-features class=hash-link aria-label="Direct link to π‘ Key Features" title="Direct link to π‘ Key Features" translate=no>β</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=enterprise-ready>Enterprise-Ready<a href=#enterprise-ready class=hash-link aria-label="Direct link to Enterprise-Ready" title="Direct link to Enterprise-Ready" translate=no>β</a></h3>
<ul>
<li class="">β
Databricks SSO authentication</li>
<li class="">β
Unity Catalog data governance</li>
<li class="">β
Automatic secret management</li>
<li class="">β
Built-in monitoring & logging</li>
<li class="">β
Scale-to-zero cost optimization</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=developer-friendly>Developer-Friendly<a href=#developer-friendly class=hash-link aria-label="Direct link to Developer-Friendly" title="Direct link to Developer-Friendly" translate=no>β</a></h3>
<ul>
<li class="">β
Hot reload for frontend & backend</li>
<li class="">β
TypeScript type safety</li>
<li class="">β
ESLint code quality</li>
<li class="">β
One-command deployment</li>
<li class="">β
Comprehensive documentation</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=user-friendly>User-Friendly<a href=#user-friendly class=hash-link aria-label="Direct link to User-Friendly" title="Direct link to User-Friendly" translate=no>β</a></h3>
<ul>
<li class="">β
Responsive design (mobile/tablet/desktop)</li>
<li class="">β
Intuitive navigation</li>
<li class="">β
Real-time data updates</li>
<li class="">β
Interactive visualizations</li>
<li class="">β
No CLI knowledge required</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=production-grade>Production-Grade<a href=#production-grade class=hash-link aria-label="Direct link to Production-Grade" title="Direct link to Production-Grade" translate=no>β</a></h3>
<ul>
<li class="">β
Automated CI/CD ready</li>
<li class="">β
Error boundaries</li>
<li class="">β
Loading states</li>
<li class="">β
CORS configuration</li>
<li class="">β
Security best practices</li>
</ul>
<hr/>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-performance>π Performance<a href=#-performance class=hash-link aria-label="Direct link to π Performance" title="Direct link to π Performance" translate=no>β</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=frontend-bundle-size>Frontend Bundle Size<a href=#frontend-bundle-size class=hash-link aria-label="Direct link to Frontend Bundle Size" title="Direct link to Frontend Bundle Size" translate=no>β</a></h3>
<ul>
<li class=""><strong>Uncompressed:</strong> ~1.2 MB</li>
<li class=""><strong>Gzipped:</strong> ~300 KB</li>
<li class=""><strong>Initial Load:</strong> < 2 seconds</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=backend-response-times>Backend Response Times<a href=#backend-response-times class=hash-link aria-label="Direct link to Backend Response Times" title="Direct link to Backend Response Times" translate=no>β</a></h3>
<ul>
<li class=""><strong>Health check:</strong> < 10ms</li>
<li class=""><strong>Dashboard stats:</strong> < 100ms</li>
<li class=""><strong>Opportunity query:</strong> < 200ms</li>
<li class=""><strong>Document search:</strong> < 300ms</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=deployment-time>Deployment Time<a href=#deployment-time class=hash-link aria-label="Direct link to Deployment Time" title="Direct link to Deployment Time" translate=no>β</a></h3>
<ul>
<li class=""><strong>Frontend build:</strong> ~30 seconds</li>
<li class=""><strong>Full deployment:</strong> ~2 minutes</li>
<li class=""><strong>Hot reload:</strong> < 1 second</li>
</ul>
<hr/>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-use-cases>π― Use Cases<a href=#-use-cases class=hash-link aria-label="Direct link to π― Use Cases" title="Direct link to π― Use Cases" translate=no>β</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=for-advocacy-groups>For Advocacy Groups<a href=#for-advocacy-groups class=hash-link aria-label="Direct link to For Advocacy Groups" title="Direct link to For Advocacy Groups" translate=no>β</a></h3>
<ol>
<li class=""><strong>Monitor opportunities</strong> via interactive heatmap</li>
<li class=""><strong>Generate emails</strong> with one click</li>
<li class=""><strong>Track progress</strong> on dashboard</li>
<li class=""><strong>Share findings</strong> with team</li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=for-researchers>For Researchers<a href=#for-researchers class=hash-link aria-label="Direct link to For Researchers" title="Direct link to For Researchers" translate=no>β</a></h3>
<ol>
<li class=""><strong>Browse documents</strong> with full-text search</li>
<li class=""><strong>Analyze trends</strong> with charts</li>
<li class=""><strong>Export data</strong> for reports</li>
<li class=""><strong>Track policy changes</strong></li>
</ol>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=for-developers>For Developers<a href=#for-developers class=hash-link aria-label="Direct link to For Developers" title="Direct link to For Developers" translate=no>β</a></h3>
<ol>
<li class=""><strong>Extend UI</strong> with React components</li>
<li class=""><strong>Add API endpoints</strong> with FastAPI</li>
<li class=""><strong>Deploy updates</strong> with one command</li>
<li class=""><strong>Monitor</strong> with built-in tools</li>
</ol>
<hr/>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-configuration>π§ Configuration<a href=#-configuration class=hash-link aria-label="Direct link to π§ Configuration" title="Direct link to π§ Configuration" translate=no>β</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=environment-variables>Environment Variables<a href=#environment-variables class=hash-link aria-label="Direct link to Environment Variables" title="Direct link to Environment Variables" translate=no>β</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain"># Databricks</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">DATABRICKS_HOST=https://your-workspace.cloud.databricks.com</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">DATABRICKS_TOKEN=dapi...</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">DATABRICKS_WAREHOUSE_ID=abc123</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"># AI</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">OPENAI_API_KEY=sk-...</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">ANTHROPIC_API_KEY=sk-ant-...</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"># Unity Catalog</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">CATALOG_NAME=main</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">SCHEMA_NAME=agents</span><br/></div><div class=token-line style=color:#393A34><span class="token plain" style=display:inline-block></span><br/></div><div class=token-line style=color:#393A34><span class="token plain"># MLflow</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">MLFLOW_TRACKING_URI=databricks</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">MLFLOW_EXPERIMENT_NAME=/Users/shared/oral-health-agents</span><br/></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=databricks-secrets>Databricks Secrets<a href=#databricks-secrets class=hash-link aria-label="Direct link to Databricks Secrets" title="Direct link to Databricks Secrets" translate=no>β</a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style=--prism-color:#393A34;--prism-background-color:#f6f8fa><div class=codeBlockContent_QJqH><pre tabindex=0 class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style=color:#393A34;background-color:#f6f8fa><code class=codeBlockLines_e6Vv><div class=token-line style=color:#393A34><span class="token plain">databricks secrets create-scope --scope oral-health-app</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">databricks secrets put --scope oral-health-app --key host</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">databricks secrets put --scope oral-health-app --key token</span><br/></div><div class=token-line style=color:#393A34><span class="token plain">databricks secrets put --scope oral-health-app --key openai_key</span><br/></div></code></pre></div></div>
<hr/>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-learning-resources>π Learning Resources<a href=#-learning-resources class=hash-link aria-label="Direct link to π Learning Resources" title="Direct link to π Learning Resources" translate=no>β</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=tutorials>Tutorials<a href=#tutorials class=hash-link aria-label="Direct link to Tutorials" title="Direct link to Tutorials" translate=no>β</a></h3>
<ul>
<li class="">React: <a href=https://react.dev/learn target=_blank rel="noopener noreferrer" class="">https://react.dev/learn</a></li>
<li class="">TypeScript: <a href=https://www.typescriptlang.org/docs/ target=_blank rel="noopener noreferrer" class="">https://www.typescriptlang.org/docs/</a></li>
<li class="">Vite: <a href=https://vitejs.dev/guide/ target=_blank rel="noopener noreferrer" class="">https://vitejs.dev/guide/</a></li>
<li class="">FastAPI: <a href=https://fastapi.tiangolo.com/tutorial/ target=_blank rel="noopener noreferrer" class="">https://fastapi.tiangolo.com/tutorial/</a></li>
<li class="">Databricks Apps: <a href=https://docs.databricks.com/en/dev-tools/databricks-apps/ target=_blank rel="noopener noreferrer" class="">https://docs.databricks.com/en/dev-tools/databricks-apps/</a></li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=documentation-1>Documentation<a href=#documentation-1 class=hash-link aria-label="Direct link to Documentation" title="Direct link to Documentation" translate=no>β</a></h3>
<ul>
<li class=""><code>DATABRICKS_APP_GUIDE.md</code> - Full deployment guide</li>
<li class=""><code>REACT_REFACTORING.md</code> - Refactoring details</li>
<li class=""><code>QUICKSTART_DATABRICKS_APP.md</code> - Quick start</li>
<li class=""><code>frontend/README.md</code> - Frontend docs</li>
</ul>
<hr/>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-known-issues--limitations>π Known Issues & Limitations<a href=#-known-issues--limitations class=hash-link aria-label="Direct link to π Known Issues & Limitations" title="Direct link to π Known Issues & Limitations" translate=no>β</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=current-limitations>Current Limitations<a href=#current-limitations class=hash-link aria-label="Direct link to Current Limitations" title="Direct link to Current Limitations" translate=no>β</a></h3>
<ul class="contains-task-list containsTaskList_mC6p">
<li class=task-list-item><input type=checkbox disabled/> <!-- -->No user authentication in standalone mode</li>
<li class=task-list-item><input type=checkbox disabled/> <!-- -->No real-time WebSocket updates yet</li>
<li class=task-list-item><input type=checkbox disabled/> <!-- -->Heatmap requires hardcoded coordinates</li>
<li class=task-list-item><input type=checkbox disabled/> <!-- -->Email generation is async (no progress bar)</li>
<li class=task-list-item><input type=checkbox disabled/> <!-- -->Settings changes require page reload</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=planned-improvements>Planned Improvements<a href=#planned-improvements class=hash-link aria-label="Direct link to Planned Improvements" title="Direct link to Planned Improvements" translate=no>β</a></h3>
<ul class="contains-task-list containsTaskList_mC6p">
<li class=task-list-item><input type=checkbox disabled/> <!-- -->Add WebSocket support for real-time updates</li>
<li class=task-list-item><input type=checkbox disabled/> <!-- -->Implement geocoding service</li>
<li class=task-list-item><input type=checkbox disabled/> <!-- -->Add email preview before download</li>
<li class=task-list-item><input type=checkbox disabled/> <!-- -->Make settings reactive</li>
<li class=task-list-item><input type=checkbox disabled/> <!-- -->Add user profiles</li>
</ul>
<hr/>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-success-metrics>π Success Metrics<a href=#-success-metrics class=hash-link aria-label="Direct link to π Success Metrics" title="Direct link to π Success Metrics" translate=no>β</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=before-v10>Before (v1.0)<a href=#before-v10 class=hash-link aria-label="Direct link to Before (v1.0)" title="Direct link to Before (v1.0)" translate=no>β</a></h3>
<ul>
<li class="">β CLI-only interface</li>
<li class="">β Requires technical knowledge</li>
<li class="">β Manual command execution</li>
<li class="">β Static HTML outputs</li>
<li class="">β Local deployment only</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=after-v20>After (v2.0)<a href=#after-v20 class=hash-link aria-label="Direct link to After (v2.0)" title="Direct link to After (v2.0)" translate=no>β</a></h3>
<ul>
<li class="">β
Beautiful web UI</li>
<li class="">β
Non-technical users can use</li>
<li class="">β
Point-and-click interface</li>
<li class="">β
Interactive visualizations</li>
<li class="">β
Cloud-native deployment</li>
</ul>
<hr/>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-conclusion>π Conclusion<a href=#-conclusion class=hash-link aria-label="Direct link to π Conclusion" title="Direct link to π Conclusion" translate=no>β</a></h2>
<p><strong>We successfully transformed the Oral Health Policy Pulse from a CLI tool into a production-ready web application!</strong></p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=what-we-achieved>What We Achieved<a href=#what-we-achieved class=hash-link aria-label="Direct link to What We Achieved" title="Direct link to What We Achieved" translate=no>β</a></h3>
<ul>
<li class="">β
<strong>35+ new files</strong> created</li>
<li class="">β
<strong>2,050 lines</strong> of production code</li>
<li class="">β
<strong>2,400 lines</strong> of documentation</li>
<li class="">β
<strong>5 major features</strong> implemented</li>
<li class="">β
<strong>3 deployment options</strong> available</li>
<li class="">β
<strong>100% backward compatible</strong> with v1.0</li>
</ul>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id=impact>Impact<a href=#impact class=hash-link aria-label="Direct link to Impact" title="Direct link to Impact" translate=no>β</a></h3>
<ul>
<li class="">π <strong>10x easier</strong> to use (web vs CLI)</li>
<li class="">π <strong>5x faster</strong> deployment (one command)</li>
<li class="">π° <strong>Cost-optimized</strong> (scale-to-zero)</li>
<li class="">π <strong>Enterprise-secure</strong> (Databricks SSO)</li>
<li class="">π <strong>Better insights</strong> (interactive viz)</li>
</ul>
<p><strong>The future of oral health advocacy is here! π¦·β¨</strong></p>
<hr/>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id=-support>π Support<a href=#-support class=hash-link aria-label="Direct link to π Support" title="Direct link to π Support" translate=no>β</a></h2>
<ul>
<li class="">π <strong>Documentation</strong>: See markdown files in repo</li>
<li class="">π <strong>Issues</strong>: GitHub Issues</li>
<li class="">π¬ <strong>Community</strong>: Discussions</li>
<li class="">π§ <strong>Email</strong>: <a href=mailto:support@example.com target=_blank rel="noopener noreferrer" class="">support@example.com</a></li>
</ul>
<hr/>
<p><em>Last updated: April 2026</em>
<em>Version: 2.0.0</em>
<em>License: MIT</em></div><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_WFHX"><a href=https://github.com/getcommunityone/open-navigator-for-engagement/tree/main/website/docs/development/refactoring-summary.md target=_blank rel="noopener noreferrer" class=theme-edit-this-page><svg fill=currentColor height=20 width=20 viewBox="0 0 40 40" class=iconEdit_Z9Sw aria-hidden=true><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"/></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"></div></div></footer></article><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href=/docs/development/readme-migration><div class=pagination-nav__sublabel>Previous</div><div class=pagination-nav__label>README Migration Summary</div></a><a class="pagination-nav__link pagination-nav__link--next" href=/docs/development/changelog><div class=pagination-nav__sublabel>Next</div><div class=pagination-nav__label>Changelog - Jurisdiction Discovery System</div></a></nav></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href=#-what-we-built class="table-of-contents__link toc-highlight">π What We Built</a><li><a href=#-new-files-created-35-files class="table-of-contents__link toc-highlight">π¦ New Files Created (35+ files)</a><ul><li><a href=#frontend-react--typescript class="table-of-contents__link toc-highlight">Frontend (React + TypeScript)</a><li><a href=#backend-fastapi-refactored class="table-of-contents__link toc-highlight">Backend (FastAPI Refactored)</a><li><a href=#database-layer-extensions class="table-of-contents__link toc-highlight">Database Layer Extensions</a><li><a href=#deployment--configuration class="table-of-contents__link toc-highlight">Deployment & Configuration</a><li><a href=#scripts class="table-of-contents__link toc-highlight">Scripts</a><li><a href=#documentation class="table-of-contents__link toc-highlight">Documentation</a><li><a href=#updated-files class="table-of-contents__link toc-highlight">Updated Files</a></ul><li><a href=#-statistics class="table-of-contents__link toc-highlight">π Statistics</a><ul><li><a href=#code-added class="table-of-contents__link toc-highlight">Code Added</a><li><a href=#documentation-added class="table-of-contents__link toc-highlight">Documentation Added</a><li><a href=#files-created class="table-of-contents__link toc-highlight">Files Created</a></ul><li><a href=#-ui-features class="table-of-contents__link toc-highlight">π¨ UI Features</a><ul><li><a href=#dashboard-page class="table-of-contents__link toc-highlight">Dashboard Page</a><li><a href=#interactive-heatmap class="table-of-contents__link toc-highlight">Interactive Heatmap</a><li><a href=#document-browser class="table-of-contents__link toc-highlight">Document Browser</a><li><a href=#opportunities-manager class="table-of-contents__link toc-highlight">Opportunities Manager</a><li><a href=#settings-panel class="table-of-contents__link toc-highlight">Settings Panel</a></ul><li><a href=#οΈ-architecture class="table-of-contents__link toc-highlight">ποΈ Architecture</a><ul><li><a href=#technology-stack class="table-of-contents__link toc-highlight">Technology Stack</a><li><a href=#request-flow class="table-of-contents__link toc-highlight">Request Flow</a><li><a href=#build-process class="table-of-contents__link toc-highlight">Build Process</a></ul><li><a href=#-deployment-options class="table-of-contents__link toc-highlight">π Deployment Options</a><ul><li><a href=#1-local-development-hot-reload class="table-of-contents__link toc-highlight">1. Local Development (Hot Reload)</a><li><a href=#2-local-production-test class="table-of-contents__link toc-highlight">2. Local Production Test</a><li><a href=#3-databricks-apps-cloud class="table-of-contents__link toc-highlight">3. Databricks Apps (Cloud)</a><li><a href=#4-docker class="table-of-contents__link toc-highlight">4. Docker</a></ul><li><a href=#-key-features class="table-of-contents__link toc-highlight">π‘ Key Features</a><ul><li><a href=#enterprise-ready class="table-of-contents__link toc-highlight">Enterprise-Ready</a><li><a href=#developer-friendly class="table-of-contents__link toc-highlight">Developer-Friendly</a><li><a href=#user-friendly class="table-of-contents__link toc-highlight">User-Friendly</a><li><a href=#production-grade class="table-of-contents__link toc-highlight">Production-Grade</a></ul><li><a href=#-performance class="table-of-contents__link toc-highlight">π Performance</a><ul><li><a href=#frontend-bundle-size class="table-of-contents__link toc-highlight">Frontend Bundle Size</a><li><a href=#backend-response-times class="table-of-contents__link toc-highlight">Backend Response Times</a><li><a href=#deployment-time class="table-of-contents__link toc-highlight">Deployment Time</a></ul><li><a href=#-use-cases class="table-of-contents__link toc-highlight">π― Use Cases</a><ul><li><a href=#for-advocacy-groups class="table-of-contents__link toc-highlight">For Advocacy Groups</a><li><a href=#for-researchers class="table-of-contents__link toc-highlight">For Researchers</a><li><a href=#for-developers class="table-of-contents__link toc-highlight">For Developers</a></ul><li><a href=#-configuration class="table-of-contents__link toc-highlight">π§ Configuration</a><ul><li><a href=#environment-variables class="table-of-contents__link toc-highlight">Environment Variables</a><li><a href=#databricks-secrets class="table-of-contents__link toc-highlight">Databricks Secrets</a></ul><li><a href=#-learning-resources class="table-of-contents__link toc-highlight">π Learning Resources</a><ul><li><a href=#tutorials class="table-of-contents__link toc-highlight">Tutorials</a><li><a href=#documentation-1 class="table-of-contents__link toc-highlight">Documentation</a></ul><li><a href=#-known-issues--limitations class="table-of-contents__link toc-highlight">π Known Issues & Limitations</a><ul><li><a href=#current-limitations class="table-of-contents__link toc-highlight">Current Limitations</a><li><a href=#planned-improvements class="table-of-contents__link toc-highlight">Planned Improvements</a></ul><li><a href=#-success-metrics class="table-of-contents__link toc-highlight">π Success Metrics</a><ul><li><a href=#before-v10 class="table-of-contents__link toc-highlight">Before (v1.0)</a><li><a href=#after-v20 class="table-of-contents__link toc-highlight">After (v2.0)</a></ul><li><a href=#-conclusion class="table-of-contents__link toc-highlight">π Conclusion</a><ul><li><a href=#what-we-achieved class="table-of-contents__link toc-highlight">What We Achieved</a><li><a href=#impact class="table-of-contents__link toc-highlight">Impact</a></ul><li><a href=#-support class="table-of-contents__link toc-highlight">π Support</a></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Documentation</div><ul class="footer__items clean-list"><li class=footer__item><a class=footer__link-item href=/docs/intro>Getting Started</a><li class=footer__item><a class=footer__link-item href=/docs/data-sources/citations>Citations & Data Sources</a><li class=footer__item><a class=footer__link-item href=/docs/data-sources/overview>Data Sources</a><li class=footer__item><a class=footer__link-item href=/docs/for-developers>For Developers</a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Resources</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://www.communityone.com target=_blank rel="noopener noreferrer" class=footer__link-item>Launch Open Navigator<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://github.com/getcommunityone/open-navigator-for-engagement target=_blank rel="noopener noreferrer" class=footer__link-item>GitHub<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://www.groundvue.org/ target=_blank rel="noopener noreferrer" class=footer__link-item>GroundVue (Partner)<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Community</div><ul class="footer__items clean-list"><li class=footer__item><a href=https://www.instagram.com/getcommunityone/ target=_blank rel="noopener noreferrer" class=footer__link-item>Instagram<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://www.facebook.com/getcommunityone target=_blank rel="noopener noreferrer" class=footer__link-item>Facebook<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://x.com/getcommunityone/ target=_blank rel="noopener noreferrer" class=footer__link-item>X (Twitter)<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://www.linkedin.com/company/getcommunityone target=_blank rel="noopener noreferrer" class=footer__link-item>LinkedIn<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://www.youtube.com/@getcommunityone target=_blank rel="noopener noreferrer" class=footer__link-item>YouTube<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a><li class=footer__item><a href=https://discord.gg/uH6Dytek target=_blank rel="noopener noreferrer" class=footer__link-item>Discord<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>Legal</div><ul class="footer__items clean-list"><li class=footer__item><a class=footer__link-item href=/docs/legal/privacy-policy>Privacy Policy</a><li class=footer__item><a class=footer__link-item href=/docs/legal/terms-of-service>Terms of Service</a><li class=footer__item><a class=footer__link-item href=/docs/legal/data-provider-terms>Data Provider Terms</a></ul></div><div class="theme-layout-footer-column col footer__col"><div class=footer__title>More</div><ul class="footer__items clean-list"><li class=footer__item><a class=footer__link-item href=/blog>Blog</a><li class=footer__item><a href=https://github.com/getcommunityone/open-navigator-for-engagement/blob/main/LICENSE target=_blank rel="noopener noreferrer" class=footer__link-item>License (MIT)<svg width=13.5 height=13.5 aria-label="(opens in new tab)" class=iconExternalLink_nPIU><use href=#theme-svg-external-link /></svg></a></ul></div></div><div class="footer__bottom text--center"><div class=footer__copyright>Copyright Β© 2026 Community One. Built with Docusaurus.</div></div></div></footer></div></body> |