documentation for maps and stuff
This commit is contained in:
@@ -7,10 +7,10 @@
|
||||
"stars_count": 0,
|
||||
"forks_count": 0,
|
||||
"open_issues_count": 0,
|
||||
"updated_at": "2025-06-30T15:50:33-06:00",
|
||||
"updated_at": "2025-06-30T21:38:32-06:00",
|
||||
"created_at": "2025-05-28T14:54:59-06:00",
|
||||
"clone_url": "https://gitea.bnkops.com/admin/changemaker.lite.git",
|
||||
"ssh_url": "git@gitea.bnkops.com:admin/changemaker.lite.git",
|
||||
"default_branch": "main",
|
||||
"last_build_update": "2025-06-30T15:50:33-06:00"
|
||||
"last_build_update": "2025-06-30T21:38:32-06:00"
|
||||
}
|
||||
@@ -4,13 +4,13 @@
|
||||
"description": "VS Code in the browser",
|
||||
"html_url": "https://github.com/coder/code-server",
|
||||
"language": "TypeScript",
|
||||
"stars_count": 72493,
|
||||
"forks_count": 6061,
|
||||
"open_issues_count": 133,
|
||||
"updated_at": "2025-07-01T00:35:58Z",
|
||||
"stars_count": 72508,
|
||||
"forks_count": 6062,
|
||||
"open_issues_count": 142,
|
||||
"updated_at": "2025-07-01T15:16:52Z",
|
||||
"created_at": "2019-02-27T16:50:41Z",
|
||||
"clone_url": "https://github.com/coder/code-server.git",
|
||||
"ssh_url": "git@github.com:coder/code-server.git",
|
||||
"default_branch": "main",
|
||||
"last_build_update": "2025-06-25T21:18:52Z"
|
||||
"last_build_update": "2025-07-01T13:04:15Z"
|
||||
}
|
||||
@@ -4,13 +4,13 @@
|
||||
"description": "A highly customizable homepage (or startpage / application dashboard) with Docker and service API integrations.",
|
||||
"html_url": "https://github.com/gethomepage/homepage",
|
||||
"language": "JavaScript",
|
||||
"stars_count": 24565,
|
||||
"forks_count": 1520,
|
||||
"stars_count": 24583,
|
||||
"forks_count": 1519,
|
||||
"open_issues_count": 1,
|
||||
"updated_at": "2025-06-30T20:44:09Z",
|
||||
"updated_at": "2025-07-01T15:20:04Z",
|
||||
"created_at": "2022-08-24T07:29:42Z",
|
||||
"clone_url": "https://github.com/gethomepage/homepage.git",
|
||||
"ssh_url": "git@github.com:gethomepage/homepage.git",
|
||||
"default_branch": "dev",
|
||||
"last_build_update": "2025-07-01T00:41:49Z"
|
||||
"last_build_update": "2025-07-01T12:14:06Z"
|
||||
}
|
||||
@@ -4,13 +4,13 @@
|
||||
"description": "Git with a cup of tea! Painless self-hosted all-in-one software development service, including Git hosting, code review, team collaboration, package registry and CI/CD",
|
||||
"html_url": "https://github.com/go-gitea/gitea",
|
||||
"language": "Go",
|
||||
"stars_count": 49312,
|
||||
"forks_count": 5886,
|
||||
"open_issues_count": 2714,
|
||||
"updated_at": "2025-06-30T22:55:41Z",
|
||||
"stars_count": 49327,
|
||||
"forks_count": 5887,
|
||||
"open_issues_count": 2706,
|
||||
"updated_at": "2025-07-01T14:28:19Z",
|
||||
"created_at": "2016-11-01T02:13:26Z",
|
||||
"clone_url": "https://github.com/go-gitea/gitea.git",
|
||||
"ssh_url": "git@github.com:go-gitea/gitea.git",
|
||||
"default_branch": "main",
|
||||
"last_build_update": "2025-06-30T22:55:36Z"
|
||||
"last_build_update": "2025-07-01T13:44:05Z"
|
||||
}
|
||||
@@ -4,10 +4,10 @@
|
||||
"description": "High performance, self-hosted, newsletter and mailing list manager with a modern dashboard. Single binary app.",
|
||||
"html_url": "https://github.com/knadh/listmonk",
|
||||
"language": "Go",
|
||||
"stars_count": 17238,
|
||||
"stars_count": 17242,
|
||||
"forks_count": 1657,
|
||||
"open_issues_count": 104,
|
||||
"updated_at": "2025-06-30T20:57:12Z",
|
||||
"updated_at": "2025-07-01T14:26:50Z",
|
||||
"created_at": "2019-06-26T05:08:39Z",
|
||||
"clone_url": "https://github.com/knadh/listmonk.git",
|
||||
"ssh_url": "git@github.com:knadh/listmonk.git",
|
||||
|
||||
@@ -6,11 +6,11 @@
|
||||
"language": "Vue",
|
||||
"stars_count": 1254,
|
||||
"forks_count": 164,
|
||||
"open_issues_count": 14,
|
||||
"updated_at": "2025-06-30T20:22:20Z",
|
||||
"open_issues_count": 13,
|
||||
"updated_at": "2025-07-01T14:06:12Z",
|
||||
"created_at": "2023-04-21T14:20:14Z",
|
||||
"clone_url": "https://github.com/lyqht/mini-qr.git",
|
||||
"ssh_url": "git@github.com:lyqht/mini-qr.git",
|
||||
"default_branch": "main",
|
||||
"last_build_update": "2025-06-23T05:55:30Z"
|
||||
"last_build_update": "2025-07-01T14:06:08Z"
|
||||
}
|
||||
@@ -4,13 +4,13 @@
|
||||
"description": "Fair-code workflow automation platform with native AI capabilities. Combine visual building with custom code, self-host or cloud, 400+ integrations.",
|
||||
"html_url": "https://github.com/n8n-io/n8n",
|
||||
"language": "TypeScript",
|
||||
"stars_count": 113658,
|
||||
"forks_count": 33263,
|
||||
"open_issues_count": 1062,
|
||||
"updated_at": "2025-07-01T00:43:52Z",
|
||||
"stars_count": 113903,
|
||||
"forks_count": 33364,
|
||||
"open_issues_count": 1058,
|
||||
"updated_at": "2025-07-01T15:22:32Z",
|
||||
"created_at": "2019-06-22T09:24:21Z",
|
||||
"clone_url": "https://github.com/n8n-io/n8n.git",
|
||||
"ssh_url": "git@github.com:n8n-io/n8n.git",
|
||||
"default_branch": "master",
|
||||
"last_build_update": "2025-06-30T20:59:49Z"
|
||||
"last_build_update": "2025-07-01T15:23:16Z"
|
||||
}
|
||||
@@ -4,13 +4,13 @@
|
||||
"description": "\ud83d\udd25 \ud83d\udd25 \ud83d\udd25 Open Source Airtable Alternative",
|
||||
"html_url": "https://github.com/nocodb/nocodb",
|
||||
"language": "TypeScript",
|
||||
"stars_count": 55468,
|
||||
"forks_count": 3981,
|
||||
"stars_count": 55480,
|
||||
"forks_count": 3987,
|
||||
"open_issues_count": 714,
|
||||
"updated_at": "2025-06-30T23:29:28Z",
|
||||
"updated_at": "2025-07-01T14:03:05Z",
|
||||
"created_at": "2017-10-29T18:51:48Z",
|
||||
"clone_url": "https://github.com/nocodb/nocodb.git",
|
||||
"ssh_url": "git@github.com:nocodb/nocodb.git",
|
||||
"default_branch": "develop",
|
||||
"last_build_update": "2025-06-30T23:13:56Z"
|
||||
"last_build_update": "2025-07-01T14:26:19Z"
|
||||
}
|
||||
@@ -4,13 +4,13 @@
|
||||
"description": "Documentation that simply works",
|
||||
"html_url": "https://github.com/squidfunk/mkdocs-material",
|
||||
"language": "Python",
|
||||
"stars_count": 23759,
|
||||
"forks_count": 3783,
|
||||
"stars_count": 23763,
|
||||
"forks_count": 3786,
|
||||
"open_issues_count": 4,
|
||||
"updated_at": "2025-07-01T00:38:44Z",
|
||||
"updated_at": "2025-07-01T13:38:53Z",
|
||||
"created_at": "2016-01-28T22:09:23Z",
|
||||
"clone_url": "https://github.com/squidfunk/mkdocs-material.git",
|
||||
"ssh_url": "git@github.com:squidfunk/mkdocs-material.git",
|
||||
"default_branch": "master",
|
||||
"last_build_update": "2025-06-29T16:43:26Z"
|
||||
"last_build_update": "2025-07-01T12:56:28Z"
|
||||
}
|
||||
8
mkdocs/docs/build/index.md
vendored
8
mkdocs/docs/build/index.md
vendored
@@ -224,9 +224,15 @@ Once services are running, access them locally:
|
||||
- **NocoDB**: [http://localhost:8090](http://localhost:8090) — No-code database
|
||||
|
||||
### 🛠️ Interactive Tools
|
||||
- **Map Viewer**: [http://localhost:3000](http://localhost:3000) — Geographic data visualization
|
||||
- **Mini QR**: [http://localhost:8089](http://localhost:8089) — QR code generator
|
||||
|
||||
## Map
|
||||
|
||||
!!! warning "Map"
|
||||
Map is the canvassing application that is custom view of nocodb data. Map is best built **after production deployment** to reduce duplicate build efforts.
|
||||
|
||||
### [Map Manual](map.md)
|
||||
|
||||
## Production Deployment
|
||||
|
||||
### Deploy with Cloudflare Tunnels
|
||||
|
||||
143
mkdocs/docs/build/map.md
vendored
Normal file
143
mkdocs/docs/build/map.md
vendored
Normal file
@@ -0,0 +1,143 @@
|
||||
# Map
|
||||
|
||||
Map is BNKops canvassing application. It is built from the ground up to serve our community (Edmonton).
|
||||
|
||||
## Prerequisites
|
||||
- Docker and Docker Compose installed
|
||||
- NocoDB instance with API access
|
||||
- Domain name (optional but recommended for production)
|
||||
|
||||
## NocoDB Table Setup
|
||||
|
||||
### Required Columns
|
||||
Create a table in NocoDB with these required columns. The format here is the `Name of the column - column type - details`:
|
||||
|
||||
1. **Geo Location** (geo-data) - Format: "latitude;longitude"
|
||||
2. **latitude** (Decimal) - Precision: 10, Scale: 8
|
||||
3. **longitude** (Decimal) - Precision: 11, Scale: 8
|
||||
|
||||
### Recommended Columns
|
||||
|
||||
- First Name (Text)
|
||||
- Last Name (Text)
|
||||
- Email (Email)
|
||||
- Phone (Phone)
|
||||
- Unit Number (Text)
|
||||
- Address (LongText)
|
||||
- Support Level (Single Select) - Values (only enter numbers):
|
||||
- 1 `Strong Support (Green)`
|
||||
- 2 `Moderate Support (Yellow)`
|
||||
- 3 `Low Support (Orange)`
|
||||
- 4 `No Support (Red)`
|
||||
- Sign (Checkbox)
|
||||
- Sign Size (Single Select) - Values: Small, Medium, Large
|
||||
- Notes (LongText)
|
||||
|
||||
## Login Sheet Setup
|
||||
Create a separate table for authorized users with:
|
||||
- Email (Email) - Primary column
|
||||
- Name (Text) - Optional
|
||||
|
||||
## API Token Setup
|
||||
|
||||
1. In NocoDB, click user icon → Account Settings
|
||||
2. Go to "API Tokens" tab
|
||||
3. Create new token with read/write permissions for both tables
|
||||
|
||||
## 6. Finding NocoDB IDs
|
||||
|
||||
- **Project and Table IDs**: Use the full NocoDB view URL in `NOCODB_VIEW_URL`
|
||||
- **Login Sheet ID**: Use the full URL to your login sheet in `NOCODB_LOGIN_SHEET`
|
||||
|
||||
## Environment Configuration
|
||||
|
||||
!!! note "Config"
|
||||
The `./config.sh` should have created a new `.env` file. If `.env` file is present, and it has properly defined domain, skip to step 2
|
||||
|
||||
1. Copy the example env file:
|
||||
|
||||
```bash
|
||||
cp .env.example .env
|
||||
```
|
||||
|
||||
2. Edit .env with your NocoDB details:
|
||||
```env
|
||||
NOCODB_API_URL=https://your-nocodb-instance.com/api/v1
|
||||
NOCODB_API_TOKEN=your-api-token-here
|
||||
NOCODB_VIEW_URL=https://your-nocodb-instance.com/dashboard/#/nc/project-id/table-id
|
||||
NOCODB_LOGIN_SHEET=https://your-nocodb-instance.com/dashboard/#/nc/project-id/login-sheet-id
|
||||
|
||||
# Server Configuration
|
||||
PORT=3000
|
||||
NODE_ENV=production
|
||||
|
||||
# Session Secret (generate with: openssl rand -hex 32)
|
||||
SESSION_SECRET=your-secure-random-string
|
||||
|
||||
# Map Defaults
|
||||
DEFAULT_LAT=53.5461
|
||||
DEFAULT_LNG=-113.4938
|
||||
DEFAULT_ZOOM=11
|
||||
|
||||
# Optional: Map Boundaries
|
||||
# BOUND_NORTH=53.7
|
||||
# BOUND_SOUTH=53.4
|
||||
# BOUND_EAST=-113.3
|
||||
# BOUND_WEST=-113.7
|
||||
|
||||
# Domain Settings (for cookies)
|
||||
COOKIE_DOMAIN=.yourdomain.com
|
||||
ALLOWED_ORIGINS=https://map.yourdomain.com,http://localhost:3000
|
||||
```
|
||||
|
||||
## Running the Application
|
||||
|
||||
### Development Mode
|
||||
```bash
|
||||
cd app
|
||||
npm install
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### Production with Docker
|
||||
```bash
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
## First Run
|
||||
|
||||
1. Access the application at `http://localhost:3000` (or your domain)
|
||||
2. Login with an email from your authorized users list
|
||||
3. Verify locations appear on the map
|
||||
|
||||
## Maintenance
|
||||
|
||||
- To clear the geocoding cache, restart the application
|
||||
- To update the application:
|
||||
```bash
|
||||
docker-compose down
|
||||
git pull origin main
|
||||
docker-compose up -d --build
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- **Locations not showing**: Verify table has required columns and API token has read permissions
|
||||
- **Cannot add locations**: Check API token has write permissions
|
||||
- **Authentication issues**: Verify login sheet is properly configured
|
||||
|
||||
## Security Recommendations
|
||||
|
||||
1. Use HTTPS in production
|
||||
2. Regularly rotate API tokens
|
||||
3. Restrict API token permissions to only what's needed
|
||||
4. Set appropriate CORS and cookie domains
|
||||
5. Keep dependencies updated
|
||||
|
||||
The application will automatically:
|
||||
|
||||
- Parse project/table IDs from view URLs
|
||||
- Sync geo fields between different formats
|
||||
- Cache geocoding results for performance
|
||||
- Rate limit API endpoints
|
||||
- Validate all inputs
|
||||
@@ -17,8 +17,8 @@
|
||||
<!-- Main Hero Block -->
|
||||
<div class="hero-main grid-card">
|
||||
<div class="meta-badge">🤯 This Site Runs On Changemaker Lite</div>
|
||||
<h1>The Only Free and Open Source Political Campaign Stack</h1>
|
||||
<p>Stop paying thousands of dollars a month to corporate platforms just to be surveilled and your supports data sold to the highest bidder. Run your entire political campaign on ~$200 hardware and
|
||||
<h1>The Only Free and Open Source Political Campaign Platform</h1>
|
||||
<p>Stop paying thousands of dollars a month to corporate platforms just to be surveilled. Your supporters data deserves better. Run your entire political campaign on ~$200 hardware and
|
||||
with fewer corporate dependencies every day.</p>
|
||||
|
||||
<div class="hero-ctas">
|
||||
@@ -37,7 +37,7 @@
|
||||
<div class="problem-item">👁️ Surveillance: Always on</div>
|
||||
<div class="problem-item">🔒 Vendor lock-in: Trapped forever</div>
|
||||
<div class="problem-item">📉 Data ownership: Not yours</div>
|
||||
<div class="promlem-itme">😠 Implicitly Supporting Evil Corporations</div>
|
||||
<div class="problem-item">😠 Implicitly Supporting Evil Corporations</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
@@ -200,4 +200,4 @@ Most campaigns recover their entire first-year investment in **60-90 days** thro
|
||||
|
||||
---
|
||||
|
||||
*Ready to stop feeding your budget to corporate surveillance? [Get started with Changemaker Lite today](./build/index.md) and take control of your digital infrastructure.*
|
||||
*Ready to stop feeding your budget to corporate surveillance? [Get started with Changemaker Lite today](../build/index.md) and take control of your digital infrastructure.*
|
||||
@@ -38,9 +38,9 @@ Corporate platforms don't make money from your subscription fees—they make mon
|
||||
|
||||
### Our Principles
|
||||
|
||||
#### 🏳️⚧️ 🇵🇸 Liberation First
|
||||
#### 🏳️⚧️ 🏳️🌈 🇵🇸 Liberation First
|
||||
|
||||
Technology that centers the most marginalized voices and fights for collective liberation. Trans rights are human rights, and our tools reflect this commitment.
|
||||
Technology that centers the most marginalized voices and fights for collective liberation. We believe strongly that the medium is the message; if you the use the medium of fascists, what does that say about your movement?
|
||||
|
||||
#### 🤝 Community Over Profit
|
||||
|
||||
|
||||
Reference in New Issue
Block a user