7.8 KiB
NocoDB Map Viewer
A containerized web application that visualizes geographic data from NocoDB on an interactive map using Leaflet.js.
Features
- 🗺️ Interactive map visualization with OpenStreetMap
- 📍 Real-time geolocation support
- ➕ Add new locations directly from the map
- 🔄 Auto-refresh every 30 seconds
- 📱 Responsive design for mobile devices
- 🔒 Secure API proxy to protect credentials
- 👤 User authentication with login system
- ⚙️ Admin panel for system configuration
- 🎯 Configurable map start location
- <EFBFBD> Walk Sheet generator for door-to-door canvassing
- 🔗 QR code integration for digital resources
- <EFBFBD>🐳 Docker containerization for easy deployment
- 🆓 100% open source (no proprietary dependencies)
Quick Start
Prerequisites
- Docker and Docker Compose
- NocoDB instance with a table containing location data
- NocoDB API token
NocoDB Table Setup
-
Main Locations Table - Create a table with these required columns. The format here is
Column Name - Column Type - Other Settings:Geo-Location(Geo-Data): Format "latitude;longitude"latitude(Decimal): Precision 10, Scale 8longitude(Decimal): Precision 11, Scale 8First Name(Single Line Text): Person's first nameLast Name(Single Line Text): Person's last nameEmail(Email): Email addressPhone(Single Line Text): Phone numberUnit Number(Single Line Text): Unit or apartment numberSupport Level(Single Select): Options: "1", "2", "3", "4" (1=Strong Support/Green, 2=Moderate Support/Yellow, 3=Low Support/Orange, 4=No Support/Red)Address(Single Line Text): Street addressSign(Checkbox): Has campaign signSign Size(Single Select): Options: "Small", "Medium", "Large"Notes(Long Text): Additional details and commentstitle(Text): Location name (legacy field)category(Single Select): Classification (legacy field)
-
Login Table - Create a table for user authentication:
Email(Email): User email addressName(Single Line Text): User display nameAdmin(Checkbox): Admin privileges
-
Settings Table - Create a table for admin configuration:
key(Single Line Text): Setting identifiertitle(Single Line Text): Display namevalue(Long Text): Setting valueGeo-Location(Text): Format "latitude;longitude"latitude(Decimal): Precision 10, Scale 8longitude(Decimal): Precision 11, Scale 8zoom(Number): Map zoom levelcategory(Single Select): Setting categoryupdated_by(Single Line Text): Last updater emailupdated_at(DateTime): Last update timeqr_code_1_image(Attachment): QR code 1 imageqr_code_2_image(Attachment): QR code 2 imageqr_code_3_image(Attachment): QR code 3 image
Installation
-
Clone this repository or create the file structure as shown
-
Copy the environment template:
cp .env.example .env -
Edit
.envwith your NocoDB details:NOCODB_API_URL=https://db.lindalindsay.org/api/v1 NOCODB_API_TOKEN=your-token-here NOCODB_VIEW_URL=https://db.lindalindsay.org/dashboard/#/nc/p406kno3lbq4zmq/mvtryxrvze6td79 NOCODB_LOGIN_SHEET=https://db.lindalindsay.org/dashboard/#/nc/p406kno3lbq4zmq/login_sheet_id NOCODB_SETTINGS_SHEET=https://db.lindalindsay.org/dashboard/#/nc/p406kno3lbq4zmq/settings_sheet_id -
Start the application:
docker-compose up -d -
Access the map at: http://localhost:3000
Finding NocoDB IDs
API Token
- Click user icon → Account Settings
- Go to "API Tokens" tab
- Create new token with read/write permissions
Project and Table IDs
- Simply provide the full NocoDB view URL in
NOCODB_VIEW_URL - The system will automatically extract the project and table IDs
API Endpoints
Public Endpoints
GET /api/locations- Fetch all locations (requires auth)POST /api/locations- Create new location (requires auth)GET /api/locations/:id- Get single location (requires auth)PUT /api/locations/:id- Update location (requires auth)DELETE /api/locations/:id- Delete location (requires auth)GET /api/config/start-location- Get map start locationGET /health- Health check
Authentication Endpoints
POST /api/auth/login- User loginGET /api/auth/check- Check authentication statusPOST /api/auth/logout- User logout
Admin Endpoints (requires admin privileges)
GET /api/admin/start-location- Get start location with source infoPOST /api/admin/start-location- Update map start locationGET /api/admin/walk-sheet-config- Get walk sheet configurationPOST /api/admin/walk-sheet-config- Save walk sheet configuration
Admin Panel
Users with admin privileges can access the admin panel at /admin.html to configure system settings.
Features
Start Location Configuration
- Interactive Map: Visual interface for selecting coordinates
- Real-time Preview: See changes immediately on the admin map
- Validation: Built-in coordinate and zoom level validation
Walk Sheet Generator
- Printable Forms: Generate 8.5x11 walk sheets for door-to-door canvassing
- QR Code Integration: Add up to 3 QR codes with custom URLs and labels
- Form Field Matching: Automatically matches fields from the main location form
- Live Preview: See changes as you type
- Print Optimization: Proper formatting for printing or PDF export
- Persistent Storage: All QR codes and settings saved to NocoDB
- Real-time Preview: See changes immediately on the admin map
- Validation: Built-in coordinate and zoom level validation
Access Control
- Admin access is controlled via the
Admincheckbox in the Login table - Only authenticated users with admin privileges can access
/admin.html - Admin status is checked on every request to admin endpoints
Start Location Priority
The system uses a cascading fallback system for map start location:
- Database: Admin-configured location stored in Settings table (highest priority)
- Environment: Default values from .env file (medium priority)
- Hardcoded: Edmonton, Canada coordinates (lowest priority)
Configuration
All configuration is done via environment variables:
| Variable | Description | Default |
|---|---|---|
NOCODB_API_URL |
NocoDB API base URL | Required |
NOCODB_API_TOKEN |
API authentication token | Required |
NOCODB_VIEW_URL |
Full NocoDB view URL | Required |
NOCODB_LOGIN_SHEET |
Login table URL for authentication | Required |
NOCODB_SETTINGS_SHEET |
Settings table URL for admin config | Optional |
PORT |
Server port | 3000 |
DEFAULT_LAT |
Default map latitude | 53.5461 |
DEFAULT_LNG |
Default map longitude | -113.4938 |
DEFAULT_ZOOM |
Default map zoom level | 11 |
Development
To run in development mode:
-
Install dependencies:
cd app npm install -
Start with hot reload:
npm run dev
Security Considerations
- API tokens are kept server-side only
- CORS is configured for security
- Rate limiting prevents abuse
- Input validation on all endpoints
- Helmet.js for security headers
Troubleshooting
Locations not showing
- Verify table has
geodata,latitude, andlongitudecolumns - Check that coordinates are valid numbers
- Ensure API token has read permissions
Cannot add locations
- Verify API token has write permissions
- Check browser console for errors
- Ensure coordinates are within valid ranges
Connection errors
- Verify NocoDB instance is accessible
- Check API URL format
- Confirm network connectivity
License
MIT License - See LICENSE file for details
Support
For issues or questions:
- Check the troubleshooting section
- Review NocoDB documentation
- Open an issue on GitHub