From 532286217eae85547ec78d6d29922df124b52ae6 Mon Sep 17 00:00:00 2001 From: admin Date: Sun, 3 Aug 2025 13:26:20 -0600 Subject: [PATCH] Updates to sending user details --- git-report.txt | 68 ++ map/app/controllers/usersController.js | 42 + map/app/public/js/admin.js | 55 +- map/app/routes/users.js | 3 + map/app/services/email.js | 35 +- map/app/templates/email/login-details.html | 116 ++ map/app/templates/email/login-details.txt | 17 + map/files-explainer.md | 12 +- .../bae6e5d76e4a4ee30a1f912a9b050b3a.png | Bin 0 -> 64126 bytes .../repo-data/admin-changemaker.lite.json | 4 +- mkdocs/docs/blog/posts/3.md | 74 ++ mkdocs/docs/phil/index.md | 29 +- .../assets/images/social/blog/posts/3.png | Bin 0 -> 64126 bytes .../repo-data/admin-changemaker.lite.json | 4 +- mkdocs/site/blog/2025/07/10/2/index.html | 18 + mkdocs/site/blog/2025/08/01/3/index.html | 1030 +++++++++++++++++ mkdocs/site/blog/archive/2025/index.html | 83 ++ mkdocs/site/blog/index.html | 83 ++ mkdocs/site/phil/index.html | 76 +- mkdocs/site/search/search_index.json | 2 +- mkdocs/site/sitemap.xml | 74 +- mkdocs/site/sitemap.xml.gz | Bin 407 -> 412 bytes 22 files changed, 1669 insertions(+), 156 deletions(-) create mode 100644 git-report.txt create mode 100644 map/app/templates/email/login-details.html create mode 100644 map/app/templates/email/login-details.txt create mode 100644 mkdocs/.cache/plugin/social/bae6e5d76e4a4ee30a1f912a9b050b3a.png create mode 100644 mkdocs/docs/blog/posts/3.md create mode 100644 mkdocs/site/assets/images/social/blog/posts/3.png create mode 100644 mkdocs/site/blog/2025/08/01/3/index.html diff --git a/git-report.txt b/git-report.txt new file mode 100644 index 0000000..f789bcd --- /dev/null +++ b/git-report.txt @@ -0,0 +1,68 @@ +e488a23 2025-08-01 | admin | few small changes to language on the admin page +5b673da 2025-08-01 | admin | A tonne more changes, including new nocodb admin section, search for database, code cleanups, and debugging +9fcaf48 2025-08-01 | admin | website updates +55cd626 2025-08-01 | admin | Data converter +0dacdfc 2025-07-31 | admin | udpated config to properly build for smtp +52d921c 2025-07-31 | admin | smtp integration and password recovery. +c0811de 2025-07-31 | admin | a few more dashboard updates +d775dea 2025-07-30 | admin | mobile friendliness +373018c 2025-07-30 | admin | anaylitics dashboard +7edc665 2025-07-30 | admin | square representations of apartments +0d7bdf0 2025-07-29 | admin | Updated apartment locations to stand out mor +dfe7c69 2025-07-28 | admin | some auth updates that got over written +8cebb56 2025-07-27 | admin | Fixed the input form modal to be above the other modals. +d711456 2025-07-27 | admin | Full update to map css +994440a 2025-07-27 | admin | Added apartment views and city of edmonton data import +5da24ae 2025-07-27 | admin | New site frontend updates, search, and general bug fixes +3b7d382 2025-07-24 | admin | Some udpates to tracking user inputs. Still not happy with it but functional so moving on +bb7032d 2025-07-24 | admin | A tonne of updates to how the system builds the view points in hopes of having a better mobile expereince +59ca237 2025-07-22 | admin | QR Code Maker update +dd416f8 2025-07-20 | admin | fixed the search float +54b9210 2025-07-19 | admin | new stuff +5bf87d4 2025-07-19 | admin | New search functionality +0088ffd 2025-07-19 | admin | few cosmetic updates +7989ea0 2025-07-18 | admin | added a move system for the pins +b98207b 2025-07-17 | admin | Fixed some menu bugs +6aae0fe 2025-07-17 | admin | added in the user managment section. Need to also do some updates to the admin menue and whatnot however itll get figured. +88b80bc 2025-07-16 | admin | bug fixes for shifts functionality +65c786d 2025-07-16 | admin | new system for address confrimation +ff3e1e8 2025-07-16 | admin | Added calendar view to the shifts +e056290 2025-07-16 | admin | updated the config.sh so that multiple changemakers can be run on each machine easier. +167b82f 2025-07-16 | admin | added shift titles to the shift signup sheets to make tracking easier and adding shifts easier +fb90f2a 2025-07-16 | admin | Config fixes for the services. yaml and a couple minor things about making it more url agnostic. +2c0c943 2025-07-16 | admin | config changes to better build map .env and updates to the login ui controls +0dd56c0 2025-07-16 | admin | Couple more updates to shiftcontroller to make it more robust +a5bd0e9 2025-07-16 | admin | Fixed bug for displaying sign ups for shifts +9e5b319 2025-07-13 | admin | Fixed bug with where maps presents +2b05b60 2025-07-11 | admin | debugged build precision values on decimal places inside nocodb +0878237 2025-07-11 | admin | Fixes to the map display and several other bugs +c29ad2d 2025-07-10 | admin | Shifts manager +5cba672 2025-07-10 | admin | updates to saving settings +2778b15 2025-07-09 | admin | map system updates +1236c6b 2025-07-09 | admin | Mpas manual and udpates to map view buttons for simpler workflow +34ef38a 2025-07-09 | admin | UI updates to better position map for building dots +d11837e 2025-07-09 | admin | Added in a password field for login. need to add encryption sometime +ab2e91e 2025-07-08 | admin | fixed the preview on moblie for the walk sheet +e31b770 2025-07-08 | admin | naming updates +de3b349 2025-07-08 | admin | documentation updates +56ab400 2025-07-07 | admin | map styling update +488bb99 2025-07-07 | admin | build nocodb udpate - makes new base on every run +c1f6f25 2025-07-06 | admin | okay bidirectional saving done +1ba3899 2025-07-06 | admin | final update for the map server omg +18de90f 2025-07-06 | admin | got config save working +5f39ce8 2025-07-06 | admin | more configs and readme updates. +c4ea519 2025-07-06 | admin | reste.sh updatae +ac01d92 2025-07-06 | admin | okay got to a much more stable state. Fixed race condtion at stat of files. Should be smooth salining for a bit now. +1fc8b52 2025-07-06 | admin | final round of updates. Still need to stabalize first load for the map, having issues for sure; longer load time +f4eefa1 2025-07-05 | admin | resolved most in browser errors and got maps stable. Next need to do some work on the save configuration stuff. +412ca36 2025-07-05 | admin | config.sh fix +776420b 2025-07-05 | admin | build shell script for NocoDB map data +77c3a32 2025-07-05 | admin | new maps admin feature +09c8e02 2025-07-05 | admin | start production updates +4b6acbd 2025-07-04 | admin | update so we can run more than one changemaker per machine +e9d5af3 2025-07-04 | admin | removed the cloudflare credentials and yml from up +d41bd87 2025-07-04 | admin | pushing updates before doing a reset on local machine. +ed0bd33 2025-07-04 | admin | Clean up +949be0b 2025-07-03 | admin | maps updates +7e65665 2025-07-03 | admin | Some updates to the start-production script and just general clean up +ea6e5f1 2025-07-02 | admin | a tonne of improvements! We got maps updaTed, a tonne of documentaiton done, and several small upgrades to hook logic and other things. Fixed the looping problem for mkdocs and claude is not integrated with coder; if people wanna have a ai anyway \ No newline at end of file diff --git a/map/app/controllers/usersController.js b/map/app/controllers/usersController.js index c265c8a..7da2f64 100644 --- a/map/app/controllers/usersController.js +++ b/map/app/controllers/usersController.js @@ -2,6 +2,7 @@ const nocodbService = require('../services/nocodb'); const logger = require('../utils/logger'); const config = require('../config'); const { sanitizeUser, extractId } = require('../utils/helpers'); +const { sendLoginDetails } = require('../services/email'); class UsersController { async getAll(req, res) { @@ -155,6 +156,47 @@ class UsersController { }); } } + + async sendLoginDetails(req, res) { + try { + const userId = req.params.id; + + if (!config.nocodb.loginSheetId) { + return res.status(500).json({ + success: false, + error: 'Login sheet not configured' + }); + } + + // Get user data from database + const user = await nocodbService.getById( + config.nocodb.loginSheetId, + userId + ); + + if (!user) { + return res.status(404).json({ + success: false, + error: 'User not found' + }); + } + + // Send login details email + await sendLoginDetails(user); + + res.json({ + success: true, + message: 'Login details sent successfully' + }); + + } catch (error) { + logger.error('Error sending login details:', error); + res.status(500).json({ + success: false, + error: 'Failed to send login details' + }); + } + } } module.exports = new UsersController(); \ No newline at end of file diff --git a/map/app/public/js/admin.js b/map/app/public/js/admin.js index b9f1d50..2ff5f4f 100644 --- a/map/app/public/js/admin.js +++ b/map/app/public/js/admin.js @@ -346,7 +346,7 @@ function setupEventListeners() { } // User form submission - const userForm = document.getElementById('user-form'); + const userForm = document.getElementById('create-user-form'); if (userForm) { userForm.addEventListener('submit', createUser); } @@ -1269,6 +1269,9 @@ function displayUsers(users) { ${formattedDate}
+ @@ -1288,22 +1291,27 @@ function displayUsers(users) { } function setupUserActionListeners() { - const tableBody = document.getElementById('users-table-body'); - if (!tableBody) return; + const container = document.querySelector('.users-list'); + if (!container) return; - // Remove existing listeners by cloning the node - const newTableBody = tableBody.cloneNode(true); - tableBody.parentNode.replaceChild(newTableBody, tableBody); + // Remove existing event listeners by cloning the container + const newContainer = container.cloneNode(true); + container.parentNode.replaceChild(newContainer, container); // Get the updated reference - const updatedTableBody = document.getElementById('users-table-body'); + const updatedContainer = document.querySelector('.users-list'); - updatedTableBody.addEventListener('click', function(e) { + updatedContainer.addEventListener('click', function(e) { if (e.target.classList.contains('delete-user-btn')) { const userId = e.target.getAttribute('data-user-id'); const userEmail = e.target.getAttribute('data-user-email'); console.log('Delete button clicked for user:', userId); deleteUser(userId, userEmail); + } else if (e.target.classList.contains('send-login-btn')) { + const userId = e.target.getAttribute('data-user-id'); + const userEmail = e.target.getAttribute('data-user-email'); + console.log('Send login details button clicked for user:', userId); + sendLoginDetailsToUser(userId, userEmail); } }); } @@ -1333,13 +1341,40 @@ async function deleteUser(userId, userEmail) { } } +async function sendLoginDetailsToUser(userId, userEmail) { + if (!confirm(`Send login details to "${userEmail}"?`)) { + return; + } + + try { + const response = await fetch(`/api/users/${userId}/send-login-details`, { + method: 'POST', + headers: { + 'Content-Type': 'application/json' + } + }); + + const data = await response.json(); + + if (data.success) { + showStatus(`Login details sent to "${userEmail}" successfully`, 'success'); + } else { + throw new Error(data.error || 'Failed to send login details'); + } + + } catch (error) { + console.error('Error sending login details:', error); + showStatus(`Failed to send login details: ${error.message}`, 'error'); + } +} + async function createUser(e) { e.preventDefault(); const email = document.getElementById('user-email').value.trim(); const password = document.getElementById('user-password').value; const name = document.getElementById('user-name').value.trim(); - const admin = document.getElementById('user-admin').checked; + const admin = document.getElementById('user-is-admin').checked; if (!email || !password) { showStatus('Email and password are required', 'error'); @@ -1382,7 +1417,7 @@ async function createUser(e) { } function clearUserForm() { - const form = document.getElementById('user-form'); + const form = document.getElementById('create-user-form'); if (form) { form.reset(); showStatus('User form cleared', 'info'); diff --git a/map/app/routes/users.js b/map/app/routes/users.js index 2e28f50..5521d70 100644 --- a/map/app/routes/users.js +++ b/map/app/routes/users.js @@ -8,6 +8,9 @@ router.get('/', usersController.getAll); // Create new user router.post('/', usersController.create); +// Send login details to user +router.post('/:id/send-login-details', usersController.sendLoginDetails); + // Delete user router.delete('/:id', usersController.delete); diff --git a/map/app/services/email.js b/map/app/services/email.js index 7fcc455..db2a3ca 100644 --- a/map/app/services/email.js +++ b/map/app/services/email.js @@ -92,8 +92,41 @@ const sendPasswordRecovery = async (user) => { } }; +const sendLoginDetails = async (user) => { + try { + const baseUrl = config.isProduction ? + `https://map.${config.domain}` : + `http://localhost:${config.port}`; + + const isAdmin = user.admin || user.Admin || false; + + const variables = { + APP_NAME: process.env.APP_NAME || 'CMlite Map', + USER_NAME: user.Name || user.name || user.Email || user.email, + USER_EMAIL: user.Email || user.email, + PASSWORD: user.Password || user.password, + USER_ROLE: isAdmin ? 'Administrator' : 'User', + LOGIN_URL: `${baseUrl}/login.html`, + TIMESTAMP: new Date().toLocaleString() + }; + + const { html, text } = await emailTemplates.render('login-details', variables); + + return await sendEmail({ + to: user.Email || user.email, + subject: `Your Login Details - ${variables.APP_NAME}`, + text, + html + }); + } catch (error) { + logger.error('Failed to send login details email:', error); + throw error; + } +}; + module.exports = { initializeEmailService, sendEmail, - sendPasswordRecovery + sendPasswordRecovery, + sendLoginDetails }; \ No newline at end of file diff --git a/map/app/templates/email/login-details.html b/map/app/templates/email/login-details.html new file mode 100644 index 0000000..cd61b51 --- /dev/null +++ b/map/app/templates/email/login-details.html @@ -0,0 +1,116 @@ + + + + + Your Login Details + + + +
+
+ +
+
+

Your Login Details

+

Hello {{USER_NAME}},

+

Here are your login credentials for {{APP_NAME}}:

+ +
+
+ Email: + {{USER_EMAIL}} +
+
+ Password: + {{PASSWORD}} +
+
+ Role: + {{USER_ROLE}} +
+
+ +

You can log in using the link below:

+

+ +

+ +

💡 For security reasons, we recommend changing your password after your first login.

+
+ +
+ + diff --git a/map/app/templates/email/login-details.txt b/map/app/templates/email/login-details.txt new file mode 100644 index 0000000..021b747 --- /dev/null +++ b/map/app/templates/email/login-details.txt @@ -0,0 +1,17 @@ +Login Details - {{APP_NAME}} + +Hello {{USER_NAME}}, + +Here are your login credentials for {{APP_NAME}}: + +Email: {{USER_EMAIL}} +Password: {{PASSWORD}} +Role: {{USER_ROLE}} + +You can log in at: {{LOGIN_URL}} + +For security reasons, we recommend changing your password after your first login. + +--- +This email was sent from {{APP_NAME}} at {{TIMESTAMP}} +If you have any questions, please contact your administrator. diff --git a/map/files-explainer.md b/map/files-explainer.md index a75bcf8..2b1dfae 100644 --- a/map/files-explainer.md +++ b/map/files-explainer.md @@ -62,7 +62,7 @@ Controller for aggregating and calculating dashboard statistics from locations a # app/controllers/usersController.js -Controller for user management (list, create, delete users). +Controller for user management (list, create, delete users, send login details via email). # app/middleware/auth.js @@ -98,7 +98,7 @@ Service for generating QR codes and handling QR-related logic. # app/services/email.js -Service for sending emails via SMTP, including password recovery emails using nodemailer. Supports multiple SMTP providers and includes connection verification and error handling. +Service for sending emails via SMTP, including password recovery emails and login details using nodemailer. Supports multiple SMTP providers and includes connection verification and error handling. # app/services/emailTemplates.js @@ -112,6 +112,14 @@ Plain text email template for password recovery notifications. Contains user-fri HTML email template for password recovery notifications. Features responsive design with styled password display box and security warnings for better user experience. +# app/templates/email/login-details.txt + +Plain text email template for sending login credentials to users. Contains email, password, role, and login URL with security recommendations. + +# app/templates/email/login-details.html + +HTML email template for sending login credentials to users. Features responsive design with styled credentials display and login button for better user experience. + # app/utils/helpers.js Utility functions for geographic data, validation, and helpers used across the backend. diff --git a/mkdocs/.cache/plugin/social/bae6e5d76e4a4ee30a1f912a9b050b3a.png b/mkdocs/.cache/plugin/social/bae6e5d76e4a4ee30a1f912a9b050b3a.png new file mode 100644 index 0000000000000000000000000000000000000000..3183deb69a6a5fb5c3c8e6552f3e1596c6cbe8b7 GIT binary patch literal 64126 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 literal 0 HcmV?d00001 diff --git a/mkdocs/docs/assets/repo-data/admin-changemaker.lite.json b/mkdocs/docs/assets/repo-data/admin-changemaker.lite.json index 8723a7d..8a18e54 100644 --- a/mkdocs/docs/assets/repo-data/admin-changemaker.lite.json +++ b/mkdocs/docs/assets/repo-data/admin-changemaker.lite.json @@ -7,10 +7,10 @@ "stars_count": 0, "forks_count": 0, "open_issues_count": 8, - "updated_at": "2025-08-01T10:32:33-06:00", + "updated_at": "2025-08-01T15:14:12-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-08-01T10:32:33-06:00" + "last_build_update": "2025-08-01T15:14:12-06:00" } \ No newline at end of file diff --git a/mkdocs/docs/blog/posts/3.md b/mkdocs/docs/blog/posts/3.md new file mode 100644 index 0000000..70770a3 --- /dev/null +++ b/mkdocs/docs/blog/posts/3.md @@ -0,0 +1,74 @@ +--- +date: 2025-08-01 +--- + +Alrighty yall, it was a wild month of development, and we have a lot to cover! Here’s the latest on Changemaker Lite, including our new landing page, major updates to the map application, and a comprehensive overview of all changes made in the last month. + +Campaigning is going! We have candidates working the system in the field, and we’re excited to see how it performs in real-world scenarios. + +# Monthly Development Report – August 2025 + +## Git Change Summary (July–August 2025) + +Below is a summary of all changes pushed to git in the last month: + +- **Admin Panel & NocoDB Integration**: Major updates to the admin section, including a new NocoDB admin area, improved database search, and code cleanups. +- **Website & UI Updates**: Numerous updates to the website, including language tweaks, mobile friendliness, and new frontend features. +- **Shifts Management**: Comprehensive volunteer shift management system added, with calendar/grid views, admin controls, and real-time updates. +- **Authentication & User Management**: Enhanced login system, password recovery via SMTP, user management panel for admins, and role-based access control. +- **Map & Geocoding**: Improved map display, apartment views, geocoding integration, and address confirmation system. +- **Unified Search System**: Powerful search bar (Ctrl+K) for docs and address search, with real-time results, caching, and QR code generation. +- **Data Import & Conversion**: CSV data import with batch geocoding and visual progress, plus a new data converter tool. +- **Email & Notifications**: SMTP integration for email notifications and password recovery. +- **Performance & Bug Fixes**: Numerous bug fixes, code cleanups, and performance improvements across the stack. +- **Docker & Deployment**: Docker containerization, improved build scripts, and easier multi-instance deployment. +- **Documentation**: Expanded and updated documentation, including new manuals and guides. + +For a detailed commit log, see `git-report.txt`. + +--- + +## Overview of `lander.html` + +The `lander.html` file is a modern, responsive landing page for Changemaker Lite, featuring: + +- **Custom Theming**: Light/dark mode toggle with persistent user preference. +- **Sticky Header & Navigation**: Fixed header with smooth scroll and navigation links. +- **Hero Section**: Prominent introduction with call-to-action buttons. +- **Search Integration**: Inline MkDocs search with real-time results and keyboard shortcuts. +- **Feature Showcases**: Sections for problems, solutions, power tools, data ownership, pricing, integrations, testimonials, and live examples. +- **Responsive Design**: Mobile-friendly layout with adaptive grids and cards. +- **Animations**: Intersection observer for fade-in effects on cards and sections. +- **Video & Media**: Embedded video showcase and rich media support. +- **Footer**: Informative footer with links and contact info. + +The page is styled with CSS variables for easy theming and includes scripts for search, theme switching, and smooth scrolling. + +--- + +## New Features in Map (`README.md`) + +The map application has received significant upgrades: + +- **Interactive Map**: Real-time visualization with OpenStreetMap and Leaflet.js. +- **Unified Search**: Docs and address search in one bar, with keyboard shortcuts and smart caching. +- **Geolocation & Add Locations**: Real-time user geolocation and ability to add new locations directly from the map. +- **Auto-Refresh**: Map data auto-refreshes every 30 seconds. +- **Responsive & Mobile Ready**: Fully responsive design for all devices. +- **Secure API Proxy**: Protects credentials and secures API access. +- **Admin Panel**: System configuration, user management, and shift management for admins. +- **Walk Sheet Generator**: For door-to-door canvassing, with customizable titles and QR code integration. +- **Volunteer Shifts**: Calendar/grid views, signup/cancellation, admin shift creation, and real-time updates. +- **Role-Based Access**: Admin vs. user permissions throughout the app. +- **Email Notifications**: SMTP-based notifications and password recovery. +- **CSV Import & Geocoding**: Batch import with geocoding and progress tracking. +- **Dockerized Deployment**: Easy setup and scaling with Docker. +- **Open Source**: 100% open source, no proprietary dependencies. + +**API Endpoints**: Comprehensive REST API for locations, shifts, authentication, admin, and geocoding, all with rate limiting and security features. + +**Database Schema**: Auto-created tables for locations, users, settings, shifts, and signups, with detailed field definitions. + +--- + +For more details, see the full `README.md` and explore the live application. diff --git a/mkdocs/docs/phil/index.md b/mkdocs/docs/phil/index.md index 3c996d6..4412f25 100644 --- a/mkdocs/docs/phil/index.md +++ b/mkdocs/docs/phil/index.md @@ -54,20 +54,6 @@ Your data belongs to you and your community. We build tools that let you own you Real security comes from community control, not corporate promises. We integrate security culture practices into our technology design. -## The Changemaker Difference - -### Traditional Corporate Flow - -``` -Your Data → Corporate Server → Surveillance → Profit → Your Oppression -``` - -### Changemaker Flow - -``` -Your Data → Your Server → Your Community → Your Power → Liberation -``` - ### Why This Matters When you control your technology infrastructure: @@ -90,7 +76,7 @@ Digital security culture asks: "Who controls the infrastructure where this infor We believe in **community technology** - tools that: - Are owned and controlled by the communities that use them -- Are designed with liberation politics from the ground up +- Are designed with liberation politics from the ground up using free and open source software - Prioritize care, consent, and collective power - Can be understood, modified, and improved by community members @@ -123,19 +109,6 @@ Real security comes from community control, not corporate promises. When you con - You know exactly where your data is and who can see it - You can't be de-platformed or locked out of your own data -## Historical Context - -### Learning from Past Struggles - -Every liberation movement has had to solve the problem of secure communication and information sharing: - -- **Underground Railroad** - Coded songs and safe houses -- **Labor Movement** - Secret meetings and encrypted telegrams -- **Civil Rights Movement** - CB radios and phone trees -- **LGBTQ+ Liberation** - Chosen families and community networks - -The internet should expand these traditions, not replace them with corporate surveillance. - ### The Surveillance Capitalism Trap As Shoshana Zuboff documents in "The Age of Surveillance Capitalism," we're living through a new form of capitalism that extracts value from human experience itself. Political movements are particularly valuable targets because: diff --git a/mkdocs/site/assets/images/social/blog/posts/3.png b/mkdocs/site/assets/images/social/blog/posts/3.png new file mode 100644 index 0000000000000000000000000000000000000000..3183deb69a6a5fb5c3c8e6552f3e1596c6cbe8b7 GIT binary patch literal 64126 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 literal 0 HcmV?d00001 diff --git a/mkdocs/site/assets/repo-data/admin-changemaker.lite.json b/mkdocs/site/assets/repo-data/admin-changemaker.lite.json index 8723a7d..8a18e54 100644 --- a/mkdocs/site/assets/repo-data/admin-changemaker.lite.json +++ b/mkdocs/site/assets/repo-data/admin-changemaker.lite.json @@ -7,10 +7,10 @@ "stars_count": 0, "forks_count": 0, "open_issues_count": 8, - "updated_at": "2025-08-01T10:32:33-06:00", + "updated_at": "2025-08-01T15:14:12-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-08-01T10:32:33-06:00" + "last_build_update": "2025-08-01T15:14:12-06:00" } \ No newline at end of file diff --git a/mkdocs/site/blog/2025/07/10/2/index.html b/mkdocs/site/blog/2025/07/10/2/index.html index a2e23e8..3ebd12a 100644 --- a/mkdocs/site/blog/2025/07/10/2/index.html +++ b/mkdocs/site/blog/2025/07/10/2/index.html @@ -18,6 +18,8 @@ + + @@ -879,6 +881,22 @@ Changemaker Archive. Learn more + + +

+ + + diff --git a/mkdocs/site/blog/2025/08/01/3/index.html b/mkdocs/site/blog/2025/08/01/3/index.html new file mode 100644 index 0000000..f356eb8 --- /dev/null +++ b/mkdocs/site/blog/2025/08/01/3/index.html @@ -0,0 +1,1030 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 3 - Changemaker Lite + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + +
+ + + + + + + +
+ +
+ + + + +
+
+ + + + + + + + + + + +
+
+ +
+
+ + + +
+
+
+
+ + +
+
+
+
+ + + + + + + +

Alrighty yall, it was a wild month of development, and we have a lot to cover! Here’s the latest on Changemaker Lite, including our new landing page, major updates to the map application, and a comprehensive overview of all changes made in the last month.

+

Campaigning is going! We have candidates working the system in the field, and we’re excited to see how it performs in real-world scenarios.

+

Monthly Development Report – August 2025

+

Git Change Summary (July–August 2025)

+

Below is a summary of all changes pushed to git in the last month:

+
    +
  • Admin Panel & NocoDB Integration: Major updates to the admin section, including a new NocoDB admin area, improved database search, and code cleanups.
  • +
  • Website & UI Updates: Numerous updates to the website, including language tweaks, mobile friendliness, and new frontend features.
  • +
  • Shifts Management: Comprehensive volunteer shift management system added, with calendar/grid views, admin controls, and real-time updates.
  • +
  • Authentication & User Management: Enhanced login system, password recovery via SMTP, user management panel for admins, and role-based access control.
  • +
  • Map & Geocoding: Improved map display, apartment views, geocoding integration, and address confirmation system.
  • +
  • Unified Search System: Powerful search bar (Ctrl+K) for docs and address search, with real-time results, caching, and QR code generation.
  • +
  • Data Import & Conversion: CSV data import with batch geocoding and visual progress, plus a new data converter tool.
  • +
  • Email & Notifications: SMTP integration for email notifications and password recovery.
  • +
  • Performance & Bug Fixes: Numerous bug fixes, code cleanups, and performance improvements across the stack.
  • +
  • Docker & Deployment: Docker containerization, improved build scripts, and easier multi-instance deployment.
  • +
  • Documentation: Expanded and updated documentation, including new manuals and guides.
  • +
+

For a detailed commit log, see git-report.txt.

+
+

Overview of lander.html

+

The lander.html file is a modern, responsive landing page for Changemaker Lite, featuring:

+
    +
  • Custom Theming: Light/dark mode toggle with persistent user preference.
  • +
  • Sticky Header & Navigation: Fixed header with smooth scroll and navigation links.
  • +
  • Hero Section: Prominent introduction with call-to-action buttons.
  • +
  • Search Integration: Inline MkDocs search with real-time results and keyboard shortcuts.
  • +
  • Feature Showcases: Sections for problems, solutions, power tools, data ownership, pricing, integrations, testimonials, and live examples.
  • +
  • Responsive Design: Mobile-friendly layout with adaptive grids and cards.
  • +
  • Animations: Intersection observer for fade-in effects on cards and sections.
  • +
  • Video & Media: Embedded video showcase and rich media support.
  • +
  • Footer: Informative footer with links and contact info.
  • +
+

The page is styled with CSS variables for easy theming and includes scripts for search, theme switching, and smooth scrolling.

+
+

New Features in Map (README.md)

+

The map application has received significant upgrades:

+
    +
  • Interactive Map: Real-time visualization with OpenStreetMap and Leaflet.js.
  • +
  • Unified Search: Docs and address search in one bar, with keyboard shortcuts and smart caching.
  • +
  • Geolocation & Add Locations: Real-time user geolocation and ability to add new locations directly from the map.
  • +
  • Auto-Refresh: Map data auto-refreshes every 30 seconds.
  • +
  • Responsive & Mobile Ready: Fully responsive design for all devices.
  • +
  • Secure API Proxy: Protects credentials and secures API access.
  • +
  • Admin Panel: System configuration, user management, and shift management for admins.
  • +
  • Walk Sheet Generator: For door-to-door canvassing, with customizable titles and QR code integration.
  • +
  • Volunteer Shifts: Calendar/grid views, signup/cancellation, admin shift creation, and real-time updates.
  • +
  • Role-Based Access: Admin vs. user permissions throughout the app.
  • +
  • Email Notifications: SMTP-based notifications and password recovery.
  • +
  • CSV Import & Geocoding: Batch import with geocoding and progress tracking.
  • +
  • Dockerized Deployment: Easy setup and scaling with Docker.
  • +
  • Open Source: 100% open source, no proprietary dependencies.
  • +
+

API Endpoints: Comprehensive REST API for locations, shifts, authentication, admin, and geocoding, all with rate limiting and security features.

+

Database Schema: Auto-created tables for locations, users, settings, shifts, and signups, with detailed field definitions.

+
+

For more details, see the full README.md and explore the live application.

+ + + + + + + + + + + + + + + + + + +
+
+ + + +
+ + + +
+ + + +
+
+
+
+ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/mkdocs/site/blog/archive/2025/index.html b/mkdocs/site/blog/archive/2025/index.html index 0ecb763..6189950 100644 --- a/mkdocs/site/blog/archive/2025/index.html +++ b/mkdocs/site/blog/archive/2025/index.html @@ -770,6 +770,89 @@ Changemaker Archive. Learn more
+ +
+
+

3

+

Alrighty yall, it was a wild month of development, and we have a lot to cover! Here’s the latest on Changemaker Lite, including our new landing page, major updates to the map application, and a comprehensive overview of all changes made in the last month.

+

Campaigning is going! We have candidates working the system in the field, and we’re excited to see how it performs in real-world scenarios.

+

Monthly Development Report – August 2025

+

Git Change Summary (July–August 2025)

+

Below is a summary of all changes pushed to git in the last month:

+
    +
  • Admin Panel & NocoDB Integration: Major updates to the admin section, including a new NocoDB admin area, improved database search, and code cleanups.
  • +
  • Website & UI Updates: Numerous updates to the website, including language tweaks, mobile friendliness, and new frontend features.
  • +
  • Shifts Management: Comprehensive volunteer shift management system added, with calendar/grid views, admin controls, and real-time updates.
  • +
  • Authentication & User Management: Enhanced login system, password recovery via SMTP, user management panel for admins, and role-based access control.
  • +
  • Map & Geocoding: Improved map display, apartment views, geocoding integration, and address confirmation system.
  • +
  • Unified Search System: Powerful search bar (Ctrl+K) for docs and address search, with real-time results, caching, and QR code generation.
  • +
  • Data Import & Conversion: CSV data import with batch geocoding and visual progress, plus a new data converter tool.
  • +
  • Email & Notifications: SMTP integration for email notifications and password recovery.
  • +
  • Performance & Bug Fixes: Numerous bug fixes, code cleanups, and performance improvements across the stack.
  • +
  • Docker & Deployment: Docker containerization, improved build scripts, and easier multi-instance deployment.
  • +
  • Documentation: Expanded and updated documentation, including new manuals and guides.
  • +
+

For a detailed commit log, see git-report.txt.

+
+

Overview of lander.html

+

The lander.html file is a modern, responsive landing page for Changemaker Lite, featuring:

+
    +
  • Custom Theming: Light/dark mode toggle with persistent user preference.
  • +
  • Sticky Header & Navigation: Fixed header with smooth scroll and navigation links.
  • +
  • Hero Section: Prominent introduction with call-to-action buttons.
  • +
  • Search Integration: Inline MkDocs search with real-time results and keyboard shortcuts.
  • +
  • Feature Showcases: Sections for problems, solutions, power tools, data ownership, pricing, integrations, testimonials, and live examples.
  • +
  • Responsive Design: Mobile-friendly layout with adaptive grids and cards.
  • +
  • Animations: Intersection observer for fade-in effects on cards and sections.
  • +
  • Video & Media: Embedded video showcase and rich media support.
  • +
  • Footer: Informative footer with links and contact info.
  • +
+

The page is styled with CSS variables for easy theming and includes scripts for search, theme switching, and smooth scrolling.

+
+

New Features in Map (README.md)

+

The map application has received significant upgrades:

+
    +
  • Interactive Map: Real-time visualization with OpenStreetMap and Leaflet.js.
  • +
  • Unified Search: Docs and address search in one bar, with keyboard shortcuts and smart caching.
  • +
  • Geolocation & Add Locations: Real-time user geolocation and ability to add new locations directly from the map.
  • +
  • Auto-Refresh: Map data auto-refreshes every 30 seconds.
  • +
  • Responsive & Mobile Ready: Fully responsive design for all devices.
  • +
  • Secure API Proxy: Protects credentials and secures API access.
  • +
  • Admin Panel: System configuration, user management, and shift management for admins.
  • +
  • Walk Sheet Generator: For door-to-door canvassing, with customizable titles and QR code integration.
  • +
  • Volunteer Shifts: Calendar/grid views, signup/cancellation, admin shift creation, and real-time updates.
  • +
  • Role-Based Access: Admin vs. user permissions throughout the app.
  • +
  • Email Notifications: SMTP-based notifications and password recovery.
  • +
  • CSV Import & Geocoding: Batch import with geocoding and progress tracking.
  • +
  • Dockerized Deployment: Easy setup and scaling with Docker.
  • +
  • Open Source: 100% open source, no proprietary dependencies.
  • +
+

API Endpoints: Comprehensive REST API for locations, shifts, authentication, admin, and geocoding, all with rate limiting and security features.

+

Database Schema: Auto-created tables for locations, users, settings, shifts, and signups, with detailed field definitions.

+
+

For more details, see the full README.md and explore the live application.

+ +
+
+ +
+
+