41 Commits

Author SHA1 Message Date
da3e43fcf7 Add browser-based system upgrade UI with file-based IPC
API container writes trigger files to a shared volume (data/upgrade/),
and a systemd path watcher on the host detects them and runs the
upgrade scripts. This avoids giving the container Docker socket access.

- Add upgrade-check.sh (git fetch + compare + write status.json)
- Add upgrade-watcher.sh (systemd bridge, dispatches check/upgrade)
- Add systemd path/service units with placeholder substitution
- Modify upgrade.sh with --api-mode flag (progress.json + result.json)
- Add API upgrade module (service + routes, SUPER_ADMIN only)
- Add System tab to Settings page with version info, changelog,
  progress steps, and upgrade confirmation modal
- Add upgrade watcher installation to config.sh wizard
- Add data/upgrade/ shared volume to api service in docker-compose

Bunker Admin
2026-03-03 18:00:15 -07:00
576dea2f98 Merge branch 'v2' of https://gitea.bnkops.com/admin/changemaker.lite into v2 2026-03-03 14:22:44 -07:00
d528bc7816 Add mobile poll responses viewer and inline vote success feedback
Mobile users could only see aggregate vote counts (7Y/0M/1N) but not
who voted what. Adds a collapsible "View Responses" panel with per-voter
breakdown and score summary. Also adds a persistent inline success Alert
after vote submission to complement the easy-to-miss toast notification.

Bunker Admin
2026-03-03 14:22:19 -07:00
31e46af493 Add enhanced poll insert modal with list + quick create to docs editor
Replace the bare text input modal with a two-tab PollInsertModal that lets
users browse/search existing polls or create a new one inline, following
the same pattern as AdPickerModal.

Bunker Admin
2026-03-03 12:25:05 -07:00
2390820e41 Fix MkDocs header nav rendering broken icons for unmapped Ant Design icons
ScheduleOutlined was missing from the ANT_ICON_TO_MATERIAL mapping in
header-builder.service.ts, causing Material Icons to render raw text
characters ("S", "O") instead of a clock icon for the Shifts nav item.
Added the missing mapping and a toMaterialIcon() fallback that converts
any unmapped Ant Design icon name to snake_case Material Icons format.

Bunker Admin
2026-03-03 11:08:45 -07:00
f57a6d07f5 Fix poll vote submission failure and add pridecorner.ca nginx routing
Users could not submit scheduling poll votes when an invalid or partial
email was entered — Zod rejected empty strings and non-email text with a
generic validation error. Added client-side email validation in both
SchedulingPollPage and SchedulingPollWidget, plus z.preprocess() on the
backend to coerce empty strings to undefined. Also added pridecorner.ca
to all nginx server blocks and added generate_nginx_configs() to
config.sh so template-based configs are generated during setup.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 14:15:26 -07:00
3c4465525c Add ability to remove voters from Meeting Planner polls
Add DELETE /meeting-planner/:id/voters/:voterKey endpoint and delete
button on each voter row in the voting matrix. Includes voterKey in
API response for voter identification.

Bunker Admin
2026-03-02 14:02:04 -07:00
62f906d6f0 Fix upgrade script for Gancio config loss and LSIO volume shadowing
Two issues occurred during upgrades:

1. Gancio config.json lost when Docker volume name prefix changes
   (e.g., changemakerlite_ vs changemaker-lite_). Gancio finds existing
   DB but no config and enters restart loop. Fix: verify_gancio_config()
   checks the volume and regenerates config.json from .env if missing.

2. mkdocs-site-server (LSIO nginx) returns 403 after upgrade because
   the anonymous /config volume shadows the ./mkdocs/site bind mount.
   Fix: docker compose rm -sf the LSIO container before up -d so the
   anonymous volume is recreated fresh.

Also adds Gancio and MkDocs site health checks to Phase 6 verification.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-02 11:12:25 -07:00
e3045966a0 Allow editing existing date/time options in Meeting Planner polls
Add PUT endpoint for updating individual poll options and replace
read-only text display with inline DatePicker/TimePicker controls
in the edit drawer.

Bunker Admin
2026-03-02 10:25:05 -07:00
b30e4301bb upgrade update 2026-03-02 10:00:15 -07:00
92dc0448ac Allow meeting planner polls with a single date/time option
Bunker Admin
2026-03-01 18:47:26 -07:00
e95bc8883e scheduling features 2026-03-01 15:22:27 -07:00
aaba7df97d Add new conversation feature to SMS module
Enable starting ad-hoc SMS conversations from the conversations page
by searching contacts across SMS lists, CRM, and existing threads,
then composing and sending a first message.

Bunker Admin
2026-02-28 16:55:24 -07:00
d835f0837b Redesign SMS Contacts page to contacts-first view with cross-list search
Add getAllEntries API endpoint to query individual contacts across all lists
with optional list filter and case-insensitive search. Redesign the frontend
from a lists-only table to a contacts-first layout with search, list filter
dropdown, and a collapsible lists management panel.

Bunker Admin
2026-02-28 16:48:01 -07:00
d98488c1dc Fix people graph to include all source types and use grid layout for disconnected nodes
The graph view only showed managed Contacts and Users (5 nodes) while
the table/cards views showed all 94 people. Added SMS contacts, address
occupants, campaign senders, shift signups, and donations to the graph
API with email/phone deduplication. Updated the frontend layout to
arrange disconnected nodes in a grid instead of a single horizontal
line, while preserving dagre tree layout for connected components.

Bunker Admin
2026-02-28 16:09:12 -07:00
41d86782b4 Move entity results above actions in command palette and tighten fuzzy matching
- Reorder result hierarchy: Pages → Entities → Actions → Settings
  (doc files and database records now appear right after page matches)
- Disable fuzzy matching for terms under 5 characters to prevent
  false positives like "test" matching "text" (all SMS pages)
- Prefix matching still works for short terms (e.g. "mail" → MailHog)

Bunker Admin
2026-02-28 09:22:29 -07:00
46fc92fab8 Add command palette improvements: descriptions, favorites, scope filters, contextual boost, and information hierarchy
- Add description field to CommandItem and descriptions to all 59 registry entries
- Add SMS Templates navigation and quick action entries
- Integrate favorites store: show starred items above recents when no query, star badges in search results
- Add @prefix: scope filtering (10 scopes) with parseQuery(), scope chip UI, and clickable scope list
- Add contextual command boosting based on current route (+50 path match, +25 group match)
- Reorder result hierarchy: Pages → Actions → Entities → Settings
- Extract CommandGroupSection and EntityGroupSection render helpers

Bunker Admin
2026-02-28 09:04:24 -07:00
1f2ce681a6 Add "free*" asterisk modal to landing page hero for transparency
Discloses external production dependencies (server, ISP, domain, tunnel,
SMTP, Android phone for SMS) and offers paid hardware/managed options.

Bunker Admin
2026-02-28 09:04:11 -07:00
98acd4917d Add custom 404 pages and error report email to admins
- NotFoundPage component with Go Back, Go Home (role-aware), and Report to Admin buttons
- Catch-all routes inside AppLayout, VolunteerLayout, and top-level PublicLayout
- POST /api/public/error-report endpoint sends 404 notification emails to super admins
- Express API 404 handler returns consistent JSON error envelope for /api/* routes
- Fastify media API 404 handler via setNotFoundHandler
- Rate-limited error reports (5/hour per IP)

Bunker Admin
2026-02-28 09:04:09 -07:00
18997da3eb Add ~50 missing env vars to CCP env.hbs template for full feature coverage
New instances provisioned via CCP were missing env vars for video analytics,
geocoding config, Listmonk SMTP, Gitea comments, Overpass/area import,
monitoring ports, Bunker Ops, and other features added since the template
was last updated.

Bunker Admin
2026-02-27 20:15:13 -07:00
ce590ccae8 Add missing pages to command palette and fix feature flag handling
Add Social Dashboard/Graph/Moderation, Jitsi Video Meetings, and Ad Analytics
to searchable command registry. Add missing ContactsOutlined and ScissorOutlined
icons to ICON_MAP. Update defaults-off feature flag list to include enableSocial,
enableChat, and enableMeet.

Bunker Admin
2026-02-27 20:11:06 -07:00
06ce9dac1b sms updates 2026-02-27 15:02:28 -07:00
9f9244df32 Simplify SMS phone setup to single setup.sh script
Replaced multi-step manual instructions (heredocs, printf, individual echo
commands) with a single convenience script. Users now just clone the repo
and run: bash setup.sh YOUR_API_KEY

The script handles package install, key config, permissions, Termux:Boot,
and starting the server. Updated both the admin wizard and MkDocs docs.

Bunker Admin
2026-02-27 09:14:09 -07:00
5461ebd187 Replace printf boot script with individual echo commands for mobile
printf \n escapes also get mangled by Android clipboard (expanded to real
newlines). Individual echo >> commands are the only reliable approach for
copy-pasting multi-line scripts to a mobile terminal.

Bunker Admin
2026-02-27 08:50:33 -07:00
a8de30cf8e Replace heredoc boot scripts with printf one-liners for mobile copy-paste reliability
Heredocs fail silently on Android Termux when copy-pasting from the admin GUI
(trailing whitespace from clipboard prevents EOF recognition). Switched to
printf commands in both the setup wizard and MkDocs docs. Also added
source ~/.bashrc and boot script steps directly in the wizard Step 4.

Bunker Admin
2026-02-27 08:48:42 -07:00
6b47f67d8a sms changes 2026-02-27 08:38:23 -07:00
621042806a Updates to sms 2026-02-27 08:36:21 -07:00
9e51aac570 Okay Wish I could say I know exactly. Will do better next time promise lol 2026-02-26 17:47:04 -07:00
2fa50b001c Merge changemaker-control-panel into v2 monorepo
Absorbs the separate control-panel git repo as a subdirectory.
Instances and backups directories excluded via .gitignore.

Bunker Admin
2026-02-21 11:51:45 -07:00
7352815e57 More control panel updates 2026-02-21 11:46:55 -07:00
435fb8150c A whole bunch of stuff agian lol I promise to track more closely when we get to more stable state - like end of feb 2026-02-19 09:41:27 -07:00
1a1f12c45b Tonne of updates 2026-02-18 17:15:31 -07:00
56e262ad8b Tonne of udpatess 2026-02-18 10:01:54 -07:00
99a6abab06 Add video card insert feature + MkDocs video hydration + fixes
- New video card block for GrapesJS landing pages, email templates,
  MkDocs export, and documentation editor Insert dropdown
- Shared HTML generators in admin/src/utils/videoCardHtml.ts
- MkDocs video-player.js hydrates .video-card-block elements:
  thumbnail fix via MEDIA_API_URL, click-to-play inline, Gallery link
- Media API CORS: auto-add MkDocs + docs subdomain origins
- env_config_hook.py: smart Docker hostname detection, ADMIN_PORT
  resolution, pass env vars to MkDocs container
- Gallery URL uses /gallery?expanded=ID format
- VideoPickerModal: fix double /api prefix and Docker hostname thumbs
- Seed: default-video-card PageBlock
- Remove V1 legacy code (influence/, map/)

Bunker Admin
2026-02-17 15:42:32 -07:00
58dc1942ec More udpates to documentation generation 2026-02-17 10:36:41 -07:00
d3287a0fa4 Updates to howe the file tree udpates 2026-02-16 21:31:47 -07:00
4370cbacf4 seed updated 2026-02-16 19:43:02 -07:00
cd19f8c0b9 .env example 2026-02-16 19:27:45 -07:00
a7978de5a0 Bunch of stuff again 2026-02-16 18:48:54 -07:00
7895ce683e Tonne of debugging - getting ready for the production builds 2026-02-16 10:44:18 -07:00
a77306fac2 Initial v2 commit: complete rebuild with unified API + React admin
Phase 1-14 complete:
- Unified Express.js API (TypeScript, Prisma ORM, PostgreSQL 16)
- React Admin GUI (Vite + Ant Design + Zustand)
- JWT auth with refresh tokens
- Influence: Campaigns, Representatives, Responses, Email Queue
- Map: Locations, Cuts, Shifts, Canvassing System
- NAR data import infrastructure (2025 format)
- Listmonk newsletter integration
- Landing page builder (GrapesJS)
- MkDocs + Code Server integration
- Volunteer portal with GPS tracking
- Monitoring stack (Prometheus, Grafana, Alertmanager)
- Pangolin tunnel integration

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-02-11 10:05:04 -07:00