final round of updates. Still need to stabalize first load for the map, having issues for sure; longer load time

This commit is contained in:
2025-07-06 00:43:10 -06:00
parent f4abfd31ff
commit fe976be878
61 changed files with 4767 additions and 758 deletions

View File

@@ -1003,6 +1003,8 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
@@ -1127,6 +1129,29 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
<li class="md-nav__item">
<a href="../config/map/" class="md-nav__link">
<span class="md-ellipsis">
Map
</span>
</a>
</li>
</ul>
</nav>

View File

@@ -111,7 +111,7 @@
<div data-md-component="skip">
<a href="#map" class="md-skip">
<a href="#map-build-guide" class="md-skip">
Skip to content
</a>
@@ -661,28 +661,64 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
</li>
<li class="md-nav__item">
<a href="#nocodb-table-setup" class="md-nav__link">
<a href="#quick-build-process" class="md-nav__link">
<span class="md-ellipsis">
NocoDB Table Setup
Quick Build Process
</span>
</a>
<nav class="md-nav" aria-label="NocoDB Table Setup">
<nav class="md-nav" aria-label="Quick Build Process">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#required-columns" class="md-nav__link">
<a href="#1-get-nocodb-api-token" class="md-nav__link">
<span class="md-ellipsis">
Required Columns
1. Get NocoDB API Token
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#recommended-columns" class="md-nav__link">
<a href="#2-configure-environment" class="md-nav__link">
<span class="md-ellipsis">
Recommended Columns
2. Configure Environment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#3-auto-create-database-structure" class="md-nav__link">
<span class="md-ellipsis">
3. Auto-Create Database Structure
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#4-get-table-urls" class="md-nav__link">
<span class="md-ellipsis">
4. Get Table URLs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#5-update-environment-with-urls" class="md-nav__link">
<span class="md-ellipsis">
5. Update Environment with URLs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#6-build-and-deploy" class="md-nav__link">
<span class="md-ellipsis">
6. Build and Deploy
</span>
</a>
@@ -694,51 +730,42 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
</li>
<li class="md-nav__item">
<a href="#login-sheet-setup" class="md-nav__link">
<a href="#verify-installation" class="md-nav__link">
<span class="md-ellipsis">
Login Sheet Setup
Verify Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#api-token-setup" class="md-nav__link">
<a href="#quick-start" class="md-nav__link">
<span class="md-ellipsis">
API Token Setup
Quick Start
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#6-finding-nocodb-ids" class="md-nav__link">
<a href="#maintenance-commands" class="md-nav__link">
<span class="md-ellipsis">
6. Finding NocoDB IDs
Maintenance Commands
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#environment-configuration" class="md-nav__link">
<span class="md-ellipsis">
Environment Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#running-the-application" class="md-nav__link">
<span class="md-ellipsis">
Running the Application
</span>
</a>
<nav class="md-nav" aria-label="Running the Application">
<nav class="md-nav" aria-label="Maintenance Commands">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#update-application" class="md-nav__link">
<span class="md-ellipsis">
Update Application
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#development-mode" class="md-nav__link">
<span class="md-ellipsis">
@@ -749,9 +776,9 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
</li>
<li class="md-nav__item">
<a href="#production-with-docker" class="md-nav__link">
<a href="#health-check" class="md-nav__link">
<span class="md-ellipsis">
Production with Docker
Health Check
</span>
</a>
@@ -763,36 +790,9 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
</li>
<li class="md-nav__item">
<a href="#first-run" class="md-nav__link">
<a href="#support" class="md-nav__link">
<span class="md-ellipsis">
First Run
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#maintenance" class="md-nav__link">
<span class="md-ellipsis">
Maintenance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#troubleshooting" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#security-recommendations" class="md-nav__link">
<span class="md-ellipsis">
Security Recommendations
Support
</span>
</a>
@@ -1194,6 +1194,8 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
@@ -1318,6 +1320,29 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
<li class="md-nav__item">
<a href="../../config/map/" class="md-nav__link">
<span class="md-ellipsis">
Map
</span>
</a>
</li>
</ul>
</nav>
@@ -1550,28 +1575,64 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
</li>
<li class="md-nav__item">
<a href="#nocodb-table-setup" class="md-nav__link">
<a href="#quick-build-process" class="md-nav__link">
<span class="md-ellipsis">
NocoDB Table Setup
Quick Build Process
</span>
</a>
<nav class="md-nav" aria-label="NocoDB Table Setup">
<nav class="md-nav" aria-label="Quick Build Process">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#required-columns" class="md-nav__link">
<a href="#1-get-nocodb-api-token" class="md-nav__link">
<span class="md-ellipsis">
Required Columns
1. Get NocoDB API Token
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#recommended-columns" class="md-nav__link">
<a href="#2-configure-environment" class="md-nav__link">
<span class="md-ellipsis">
Recommended Columns
2. Configure Environment
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#3-auto-create-database-structure" class="md-nav__link">
<span class="md-ellipsis">
3. Auto-Create Database Structure
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#4-get-table-urls" class="md-nav__link">
<span class="md-ellipsis">
4. Get Table URLs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#5-update-environment-with-urls" class="md-nav__link">
<span class="md-ellipsis">
5. Update Environment with URLs
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#6-build-and-deploy" class="md-nav__link">
<span class="md-ellipsis">
6. Build and Deploy
</span>
</a>
@@ -1583,51 +1644,42 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
</li>
<li class="md-nav__item">
<a href="#login-sheet-setup" class="md-nav__link">
<a href="#verify-installation" class="md-nav__link">
<span class="md-ellipsis">
Login Sheet Setup
Verify Installation
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#api-token-setup" class="md-nav__link">
<a href="#quick-start" class="md-nav__link">
<span class="md-ellipsis">
API Token Setup
Quick Start
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#6-finding-nocodb-ids" class="md-nav__link">
<a href="#maintenance-commands" class="md-nav__link">
<span class="md-ellipsis">
6. Finding NocoDB IDs
Maintenance Commands
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#environment-configuration" class="md-nav__link">
<span class="md-ellipsis">
Environment Configuration
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#running-the-application" class="md-nav__link">
<span class="md-ellipsis">
Running the Application
</span>
</a>
<nav class="md-nav" aria-label="Running the Application">
<nav class="md-nav" aria-label="Maintenance Commands">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#update-application" class="md-nav__link">
<span class="md-ellipsis">
Update Application
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#development-mode" class="md-nav__link">
<span class="md-ellipsis">
@@ -1638,9 +1690,9 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
</li>
<li class="md-nav__item">
<a href="#production-with-docker" class="md-nav__link">
<a href="#health-check" class="md-nav__link">
<span class="md-ellipsis">
Production with Docker
Health Check
</span>
</a>
@@ -1652,36 +1704,9 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
</li>
<li class="md-nav__item">
<a href="#first-run" class="md-nav__link">
<a href="#support" class="md-nav__link">
<span class="md-ellipsis">
First Run
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#maintenance" class="md-nav__link">
<span class="md-ellipsis">
Maintenance
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#troubleshooting" class="md-nav__link">
<span class="md-ellipsis">
Troubleshooting
</span>
</a>
</li>
<li class="md-nav__item">
<a href="#security-recommendations" class="md-nav__link">
<span class="md-ellipsis">
Security Recommendations
Support
</span>
</a>
@@ -1703,144 +1728,129 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
<h1 id="map">Map<a class="headerlink" href="#map" title="Permanent link">&para;</a></h1>
<p>Map is BNKops canvassing application. It is built from the ground up to serve our community (Edmonton). </p>
<h1 id="map-build-guide">Map Build Guide<a class="headerlink" href="#map-build-guide" title="Permanent link">&para;</a></h1>
<p>Map is BNKops canvassing application built for community organizing and door-to-door canvassing.</p>
<div class="admonition info">
<p class="admonition-title">Complete Configuration</p>
<p>For detailed configuration, usage instructions, and troubleshooting, see the <a href="../../config/map/">Map Configuration Guide</a>.</p>
</div>
<div class="admonition warning">
<p class="admonition-title">Clean NocoDB</p>
<p>Currently the way to get a good result is to ensure the target nocodb database is empty. You can do this by deleting all bases. The script should still work with other volumes however may insert tables into odd locations; still debugging. Again, see config if needing to do manually. </p>
</div>
<h2 id="prerequisites">Prerequisites<a class="headerlink" href="#prerequisites" title="Permanent link">&para;</a></h2>
<ul>
<li>Docker and Docker Compose installed</li>
<li>NocoDB instance with API access</li>
<li>Domain name (optional but recommended for production)</li>
</ul>
<h2 id="nocodb-table-setup">NocoDB Table Setup<a class="headerlink" href="#nocodb-table-setup" title="Permanent link">&para;</a></h2>
<h3 id="required-columns">Required Columns<a class="headerlink" href="#required-columns" title="Permanent link">&para;</a></h3>
<div class="admonition warning">
<p class="admonition-title">Case Sensitive</p>
<p>When entering in the required columns, make sure that you enter in exact information. Case sensitivity matters for mapping the values to the map itself. </p>
</div>
<p>Create a table in NocoDB with these required columns. The format here is the <code>Name of the column - column type - details</code>:</p>
<h2 id="quick-build-process">Quick Build Process<a class="headerlink" href="#quick-build-process" title="Permanent link">&para;</a></h2>
<h3 id="1-get-nocodb-api-token">1. Get NocoDB API Token<a class="headerlink" href="#1-get-nocodb-api-token" title="Permanent link">&para;</a></h3>
<ol>
<li><strong>Geo-Location</strong> (geo-data) - Format: "latitude;longitude"</li>
<li><strong>latitude</strong> (Decimal) - Precision: 10, Scale: 8</li>
<li><strong>longitude</strong> (Decimal) - Precision: 11, Scale: 8</li>
<li>Login to your NocoDB instance</li>
<li>Click user icon → <strong>Account Settings</strong><strong>API Tokens</strong></li>
<li>Create new token with read/write permissions</li>
<li>Copy the token for the next step</li>
</ol>
<h3 id="recommended-columns">Recommended Columns<a class="headerlink" href="#recommended-columns" title="Permanent link">&para;</a></h3>
<ul>
<li>First Name (Text)</li>
<li>Last Name (Text)</li>
<li>Email (Email)</li>
<li>Phone (Phone)</li>
<li>Unit Number (Text)</li>
<li>Address (LongText)</li>
<li>Support Level (Single Select) - Values (only enter numbers): </li>
<li>1 <code>Strong Support (Green)</code></li>
<li>2 <code>Moderate Support (Yellow)</code></li>
<li>3 <code>Low Support (Orange)</code></li>
<li>4 <code>No Support (Red)</code></li>
<li>Sign (Checkbox)</li>
<li>Sign Size (Single Select) - Values: Small, Medium, Large</li>
<li>Notes (LongText)</li>
</ul>
<h2 id="login-sheet-setup">Login Sheet Setup<a class="headerlink" href="#login-sheet-setup" title="Permanent link">&para;</a></h2>
<p>Create a separate table for authorized users with:
- Email (Email) - Primary column
- Name (Text) - Optional</p>
<h2 id="api-token-setup">API Token Setup<a class="headerlink" href="#api-token-setup" title="Permanent link">&para;</a></h2>
<ol>
<li>In NocoDB, click user icon → Account Settings</li>
<li>Go to "API Tokens" tab</li>
<li>Create new token with read/write permissions for both tables</li>
</ol>
<h2 id="6-finding-nocodb-ids">6. Finding NocoDB IDs<a class="headerlink" href="#6-finding-nocodb-ids" title="Permanent link">&para;</a></h2>
<ul>
<li><strong>Project and Table IDs</strong>: Use the full NocoDB view URL in <code>NOCODB_VIEW_URL</code></li>
<li><strong>Login Sheet ID</strong>: Use the full URL to your login sheet in <code>NOCODB_LOGIN_SHEET</code></li>
</ul>
<h2 id="environment-configuration">Environment Configuration<a class="headerlink" href="#environment-configuration" title="Permanent link">&para;</a></h2>
<div class="admonition note">
<p class="admonition-title">Config</p>
<p>The <code>./config.sh</code> should have created a new <code>.env</code> file. If <code>.env</code> file is present, and it has properly defined domain, skip to step 2</p>
</div>
<ol>
<li>Copy the example env file:</li>
</ol>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a>cp<span class="w"> </span>.env.example<span class="w"> </span>.env
<h3 id="2-configure-environment">2. Configure Environment<a class="headerlink" href="#2-configure-environment" title="Permanent link">&para;</a></h3>
<p>Edit the <code>.env</code> file in the <code>map/</code> directory:</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-0-1"><a id="__codelineno-0-1" name="__codelineno-0-1" href="#__codelineno-0-1"></a><span class="nb">cd</span><span class="w"> </span>map
</span></code></pre></div>
<ol>
<li>Edit .env with your NocoDB details:
<div class="language-text highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a>NOCODB_API_URL=https://your-nocodb-instance.com/api/v1
</span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>NOCODB_API_TOKEN=your-api-token-here
</span><span id="__span-1-3"><a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a>NOCODB_VIEW_URL=https://your-nocodb-instance.com/dashboard/#/nc/project-id/table-id
</span><span id="__span-1-4"><a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a>NOCODB_LOGIN_SHEET=https://your-nocodb-instance.com/dashboard/#/nc/project-id/login-sheet-id
</span><span id="__span-1-5"><a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a>
</span><span id="__span-1-6"><a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a># Server Configuration
</span><span id="__span-1-7"><a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a>PORT=3000
</span><span id="__span-1-8"><a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a>NODE_ENV=production
<p>Update your <code>.env</code> file with your NocoDB details, specifically the instance and api token:</p>
<div class="language-text highlight"><pre><span></span><code><span id="__span-1-1"><a id="__codelineno-1-1" name="__codelineno-1-1" href="#__codelineno-1-1"></a># NocoDB API Configuration
</span><span id="__span-1-2"><a id="__codelineno-1-2" name="__codelineno-1-2" href="#__codelineno-1-2"></a>NOCODB_API_URL=https://your-nocodb-instance.com/api/v1
</span><span id="__span-1-3"><a id="__codelineno-1-3" name="__codelineno-1-3" href="#__codelineno-1-3"></a>NOCODB_API_TOKEN=your-api-token-here
</span><span id="__span-1-4"><a id="__codelineno-1-4" name="__codelineno-1-4" href="#__codelineno-1-4"></a>
</span><span id="__span-1-5"><a id="__codelineno-1-5" name="__codelineno-1-5" href="#__codelineno-1-5"></a># These will be populated after running build-nocodb.sh
</span><span id="__span-1-6"><a id="__codelineno-1-6" name="__codelineno-1-6" href="#__codelineno-1-6"></a>NOCODB_VIEW_URL=
</span><span id="__span-1-7"><a id="__codelineno-1-7" name="__codelineno-1-7" href="#__codelineno-1-7"></a>NOCODB_LOGIN_SHEET=
</span><span id="__span-1-8"><a id="__codelineno-1-8" name="__codelineno-1-8" href="#__codelineno-1-8"></a>NOCODB_SETTINGS_SHEET=
</span><span id="__span-1-9"><a id="__codelineno-1-9" name="__codelineno-1-9" href="#__codelineno-1-9"></a>
</span><span id="__span-1-10"><a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a># Session Secret (generate with: openssl rand -hex 32)
</span><span id="__span-1-11"><a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a>SESSION_SECRET=your-secure-random-string
</span><span id="__span-1-12"><a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a>
</span><span id="__span-1-13"><a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a># Map Defaults
</span><span id="__span-1-14"><a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a>DEFAULT_LAT=53.5461
</span><span id="__span-1-15"><a id="__codelineno-1-15" name="__codelineno-1-15" href="#__codelineno-1-15"></a>DEFAULT_LNG=-113.4938
</span><span id="__span-1-16"><a id="__codelineno-1-16" name="__codelineno-1-16" href="#__codelineno-1-16"></a>DEFAULT_ZOOM=11
</span><span id="__span-1-17"><a id="__codelineno-1-17" name="__codelineno-1-17" href="#__codelineno-1-17"></a>
</span><span id="__span-1-18"><a id="__codelineno-1-18" name="__codelineno-1-18" href="#__codelineno-1-18"></a># Optional: Map Boundaries
</span><span id="__span-1-19"><a id="__codelineno-1-19" name="__codelineno-1-19" href="#__codelineno-1-19"></a># BOUND_NORTH=53.7
</span><span id="__span-1-20"><a id="__codelineno-1-20" name="__codelineno-1-20" href="#__codelineno-1-20"></a># BOUND_SOUTH=53.4
</span><span id="__span-1-21"><a id="__codelineno-1-21" name="__codelineno-1-21" href="#__codelineno-1-21"></a># BOUND_EAST=-113.3
</span><span id="__span-1-22"><a id="__codelineno-1-22" name="__codelineno-1-22" href="#__codelineno-1-22"></a># BOUND_WEST=-113.7
</span><span id="__span-1-23"><a id="__codelineno-1-23" name="__codelineno-1-23" href="#__codelineno-1-23"></a>
</span><span id="__span-1-24"><a id="__codelineno-1-24" name="__codelineno-1-24" href="#__codelineno-1-24"></a># Domain Settings (for cookies)
</span><span id="__span-1-25"><a id="__codelineno-1-25" name="__codelineno-1-25" href="#__codelineno-1-25"></a>COOKIE_DOMAIN=.yourdomain.com
</span><span id="__span-1-26"><a id="__codelineno-1-26" name="__codelineno-1-26" href="#__codelineno-1-26"></a>ALLOWED_ORIGINS=https://map.yourdomain.com,http://localhost:3000
</span></code></pre></div></li>
</span><span id="__span-1-10"><a id="__codelineno-1-10" name="__codelineno-1-10" href="#__codelineno-1-10"></a># Server Configuration
</span><span id="__span-1-11"><a id="__codelineno-1-11" name="__codelineno-1-11" href="#__codelineno-1-11"></a>PORT=3000
</span><span id="__span-1-12"><a id="__codelineno-1-12" name="__codelineno-1-12" href="#__codelineno-1-12"></a>NODE_ENV=production
</span><span id="__span-1-13"><a id="__codelineno-1-13" name="__codelineno-1-13" href="#__codelineno-1-13"></a>SESSION_SECRET=your-secure-random-string
</span><span id="__span-1-14"><a id="__codelineno-1-14" name="__codelineno-1-14" href="#__codelineno-1-14"></a>
</span><span id="__span-1-15"><a id="__codelineno-1-15" name="__codelineno-1-15" href="#__codelineno-1-15"></a># Map Defaults (Edmonton, AB)
</span><span id="__span-1-16"><a id="__codelineno-1-16" name="__codelineno-1-16" href="#__codelineno-1-16"></a>DEFAULT_LAT=53.5461
</span><span id="__span-1-17"><a id="__codelineno-1-17" name="__codelineno-1-17" href="#__codelineno-1-17"></a>DEFAULT_LNG=-113.4938
</span><span id="__span-1-18"><a id="__codelineno-1-18" name="__codelineno-1-18" href="#__codelineno-1-18"></a>DEFAULT_ZOOM=11
</span><span id="__span-1-19"><a id="__codelineno-1-19" name="__codelineno-1-19" href="#__codelineno-1-19"></a>
</span><span id="__span-1-20"><a id="__codelineno-1-20" name="__codelineno-1-20" href="#__codelineno-1-20"></a># Production Settings
</span><span id="__span-1-21"><a id="__codelineno-1-21" name="__codelineno-1-21" href="#__codelineno-1-21"></a>COOKIE_DOMAIN=.yourdomain.com
</span><span id="__span-1-22"><a id="__codelineno-1-22" name="__codelineno-1-22" href="#__codelineno-1-22"></a>ALLOWED_ORIGINS=https://map.yourdomain.com,http://localhost:3000
</span></code></pre></div>
<h3 id="3-auto-create-database-structure">3. Auto-Create Database Structure<a class="headerlink" href="#3-auto-create-database-structure" title="Permanent link">&para;</a></h3>
<p>Run the build script to create required tables:</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a>chmod<span class="w"> </span>+x<span class="w"> </span>build-nocodb.sh
</span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>./build-nocodb.sh
</span></code></pre></div>
<p>This creates three tables:
- <strong>Locations</strong> - Main map data with geo-location, contact info, support levels
- <strong>Login</strong> - User authentication (email, name, admin flag)
- <strong>Settings</strong> - Admin configuration and QR codes</p>
<h3 id="4-get-table-urls">4. Get Table URLs<a class="headerlink" href="#4-get-table-urls" title="Permanent link">&para;</a></h3>
<p>After the script completes:</p>
<ol>
<li>Login to your NocoDB instance</li>
<li>Navigate to your project ("Map Viewer Project")</li>
<li>Copy the view URLs for each table from your browser address bar</li>
<li>URLs should look like: <code>https://your-nocodb.com/dashboard/#/nc/project-id/table-id</code></li>
</ol>
<h2 id="running-the-application">Running the Application<a class="headerlink" href="#running-the-application" title="Permanent link">&para;</a></h2>
<h3 id="5-update-environment-with-urls">5. Update Environment with URLs<a class="headerlink" href="#5-update-environment-with-urls" title="Permanent link">&para;</a></h3>
<p>Edit your <code>.env</code> file and add the table URLs:</p>
<div class="language-text highlight"><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>NOCODB_VIEW_URL=https://your-nocodb.com/dashboard/#/nc/project-id/locations-table-id
</span><span id="__span-3-2"><a id="__codelineno-3-2" name="__codelineno-3-2" href="#__codelineno-3-2"></a>NOCODB_LOGIN_SHEET=https://your-nocodb.com/dashboard/#/nc/project-id/login-table-id
</span><span id="__span-3-3"><a id="__codelineno-3-3" name="__codelineno-3-3" href="#__codelineno-3-3"></a>NOCODB_SETTINGS_SHEET=https://your-nocodb.com/dashboard/#/nc/project-id/settings-table-id
</span></code></pre></div>
<h3 id="6-build-and-deploy">6. Build and Deploy<a class="headerlink" href="#6-build-and-deploy" title="Permanent link">&para;</a></h3>
<p>Build the Docker image and start the application:</p>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a><span class="c1"># Build the Docker image</span>
</span><span id="__span-4-2"><a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>docker-compose<span class="w"> </span>build
</span><span id="__span-4-3"><a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a>
</span><span id="__span-4-4"><a id="__codelineno-4-4" name="__codelineno-4-4" href="#__codelineno-4-4"></a><span class="c1"># Start the application</span>
</span><span id="__span-4-5"><a id="__codelineno-4-5" name="__codelineno-4-5" href="#__codelineno-4-5"></a>docker-compose<span class="w"> </span>up<span class="w"> </span>-d
</span></code></pre></div>
<h2 id="verify-installation">Verify Installation<a class="headerlink" href="#verify-installation" title="Permanent link">&para;</a></h2>
<ol>
<li>
<p>Check container status:
<div class="language-bash highlight"><pre><span></span><code><span id="__span-5-1"><a id="__codelineno-5-1" name="__codelineno-5-1" href="#__codelineno-5-1"></a>docker-compose<span class="w"> </span>ps
</span></code></pre></div></p>
</li>
<li>
<p>View logs:
<div class="language-bash highlight"><pre><span></span><code><span id="__span-6-1"><a id="__codelineno-6-1" name="__codelineno-6-1" href="#__codelineno-6-1"></a>docker-compose<span class="w"> </span>logs<span class="w"> </span>-f<span class="w"> </span>map-viewer
</span></code></pre></div></p>
</li>
<li>
<p>Access the application at <code>http://localhost:3000</code></p>
</li>
</ol>
<h2 id="quick-start">Quick Start<a class="headerlink" href="#quick-start" title="Permanent link">&para;</a></h2>
<ol>
<li><strong>Login</strong>: Use an email from your Login table</li>
<li><strong>Add Locations</strong>: Click on the map to add new locations</li>
<li><strong>Admin Panel</strong>: Admin users can access <code>/admin.html</code> for configuration</li>
<li><strong>Walk Sheets</strong>: Generate printable canvassing forms with QR codes</li>
</ol>
<h2 id="maintenance-commands">Maintenance Commands<a class="headerlink" href="#maintenance-commands" title="Permanent link">&para;</a></h2>
<h3 id="update-application">Update Application<a class="headerlink" href="#update-application" title="Permanent link">&para;</a></h3>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-7-1"><a id="__codelineno-7-1" name="__codelineno-7-1" href="#__codelineno-7-1"></a>docker-compose<span class="w"> </span>down
</span><span id="__span-7-2"><a id="__codelineno-7-2" name="__codelineno-7-2" href="#__codelineno-7-2"></a>git<span class="w"> </span>pull<span class="w"> </span>origin<span class="w"> </span>main
</span><span id="__span-7-3"><a id="__codelineno-7-3" name="__codelineno-7-3" href="#__codelineno-7-3"></a>docker-compose<span class="w"> </span>build
</span><span id="__span-7-4"><a id="__codelineno-7-4" name="__codelineno-7-4" href="#__codelineno-7-4"></a>docker-compose<span class="w"> </span>up<span class="w"> </span>-d
</span></code></pre></div>
<h3 id="development-mode">Development Mode<a class="headerlink" href="#development-mode" title="Permanent link">&para;</a></h3>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-2-1"><a id="__codelineno-2-1" name="__codelineno-2-1" href="#__codelineno-2-1"></a><span class="nb">cd</span><span class="w"> </span>app
</span><span id="__span-2-2"><a id="__codelineno-2-2" name="__codelineno-2-2" href="#__codelineno-2-2"></a>npm<span class="w"> </span>install
</span><span id="__span-2-3"><a id="__codelineno-2-3" name="__codelineno-2-3" href="#__codelineno-2-3"></a>npm<span class="w"> </span>run<span class="w"> </span>dev
<div class="language-bash highlight"><pre><span></span><code><span id="__span-8-1"><a id="__codelineno-8-1" name="__codelineno-8-1" href="#__codelineno-8-1"></a><span class="nb">cd</span><span class="w"> </span>app
</span><span id="__span-8-2"><a id="__codelineno-8-2" name="__codelineno-8-2" href="#__codelineno-8-2"></a>npm<span class="w"> </span>install
</span><span id="__span-8-3"><a id="__codelineno-8-3" name="__codelineno-8-3" href="#__codelineno-8-3"></a>npm<span class="w"> </span>run<span class="w"> </span>dev
</span></code></pre></div>
<h3 id="production-with-docker">Production with Docker<a class="headerlink" href="#production-with-docker" title="Permanent link">&para;</a></h3>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-3-1"><a id="__codelineno-3-1" name="__codelineno-3-1" href="#__codelineno-3-1"></a>docker-compose<span class="w"> </span>up<span class="w"> </span>-d
<h3 id="health-check">Health Check<a class="headerlink" href="#health-check" title="Permanent link">&para;</a></h3>
<div class="language-bash highlight"><pre><span></span><code><span id="__span-9-1"><a id="__codelineno-9-1" name="__codelineno-9-1" href="#__codelineno-9-1"></a>curl<span class="w"> </span>http://localhost:3000/health
</span></code></pre></div>
<h2 id="first-run">First Run<a class="headerlink" href="#first-run" title="Permanent link">&para;</a></h2>
<ol>
<li>Access the application at <code>http://localhost:3000</code> (or your domain)</li>
<li>Login with an email from your authorized users list</li>
<li>Verify locations appear on the map</li>
</ol>
<h2 id="maintenance">Maintenance<a class="headerlink" href="#maintenance" title="Permanent link">&para;</a></h2>
<ul>
<li>To clear the geocoding cache, restart the application</li>
<li>To update the application:
<div class="language-bash highlight"><pre><span></span><code><span id="__span-4-1"><a id="__codelineno-4-1" name="__codelineno-4-1" href="#__codelineno-4-1"></a>docker-compose<span class="w"> </span>down
</span><span id="__span-4-2"><a id="__codelineno-4-2" name="__codelineno-4-2" href="#__codelineno-4-2"></a>git<span class="w"> </span>pull<span class="w"> </span>origin<span class="w"> </span>main
</span><span id="__span-4-3"><a id="__codelineno-4-3" name="__codelineno-4-3" href="#__codelineno-4-3"></a>docker-compose<span class="w"> </span>up<span class="w"> </span>-d<span class="w"> </span>--build
</span></code></pre></div></li>
</ul>
<h2 id="troubleshooting">Troubleshooting<a class="headerlink" href="#troubleshooting" title="Permanent link">&para;</a></h2>
<ul>
<li><strong>Locations not showing</strong>: Verify table has required columns and API token has read permissions</li>
<li><strong>Cannot add locations</strong>: Check API token has write permissions</li>
<li><strong>Authentication issues</strong>: Verify login sheet is properly configured</li>
</ul>
<h2 id="security-recommendations">Security Recommendations<a class="headerlink" href="#security-recommendations" title="Permanent link">&para;</a></h2>
<ol>
<li>Use HTTPS in production</li>
<li>Regularly rotate API tokens</li>
<li>Restrict API token permissions to only what's needed</li>
<li>Set appropriate CORS and cookie domains</li>
<li>Keep dependencies updated</li>
</ol>
<p>The application will automatically:</p>
<ul>
<li>Parse project/table IDs from view URLs</li>
<li>Sync geo fields between different formats</li>
<li>Cache geocoding results for performance</li>
<li>Rate limit API endpoints</li>
<li>Validate all inputs</li>
</ul>
<h2 id="support">Support<a class="headerlink" href="#support" title="Permanent link">&para;</a></h2>
<p>For detailed configuration, troubleshooting, and usage instructions, see the <a href="../../config/map/">Map Configuration Guide</a>.</p>

View File

@@ -1293,6 +1293,8 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
@@ -1417,6 +1419,29 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
<li class="md-nav__item">
<a href="../../config/map/" class="md-nav__link">
<span class="md-ellipsis">
Map
</span>
</a>
</li>
</ul>
</nav>

View File

@@ -1092,6 +1092,8 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
@@ -1216,6 +1218,29 @@ Changemaker Archive. <a href="https://docs.bnkops.com">Learn more</a>
<li class="md-nav__item">
<a href="../../config/map/" class="md-nav__link">
<span class="md-ellipsis">
Map
</span>
</a>
</li>
</ul>
</nav>