Skip to main content

Release Notes

A running log of everything shipped in Vibemap, written for humans. Weeks run Monday through Sunday, newest first.


Week of February 24, 2026

New Features

  • Standalone WordPress theme — Committed the first version of the standalone WordPress block theme (108 files), including templates, blocks, fonts, styles, and images. This is the foundation for running Vibemap on standard WordPress without the headless Gatsby setup.
  • Mobile banner ad placements — The map-grid layout now supports banner ads on mobile with four placement options: above content, below content, split, or in the header. Ads can be configured directly in the WordPress combo block editor with image upload and link URL.
  • Membership tier badges on cards — Map cards now display a membership tier badge on card images, styled as a rounded rectangle with multi-line text support. Tier controls have been added to six WordPress blocks (places, events, carousel, single card, combo) with options to show/hide the badge, filter by tier, and set badge position.

Improvements

  • Login button moved into filter bar — The login button is now integrated into the filter bar instead of floating in a separate position.
  • Card layout updates — Card titles can now wrap to two lines (was one), addresses show two lines (was one), and horizontal cards are taller. Vibes and chips are pushed to the bottom of cards. The "All" category label now reads "All Categories."
  • Map sidebar enforces minimum width — The map sidebar now stays at least 450 pixels wide, preventing content from getting too compressed.
  • Map-grid responsive ad and toggle layout — The map-grid embed now uses container-based sizing for the ad and view toggle areas, so they adapt better to different embed widths.
  • Tier badge positioning — The tier badge has been moved below the title in the detail panel for better readability.
  • Default item count adjusted — The default number of items shown at start changed from 100 to 99.
  • Embed sizing improvements — The embed loader now uses the actual browser window height instead of the screen's available height for more accurate sizing. Iframe embed height changed from a fixed value to a minimum height so content can grow beyond the initial size, with a fallback of 90% of window height (minimum 400 pixels) when the parent viewport size is unavailable.
  • Documented mobile ad placement parameter — The mobileAdPlacement URL parameter is now documented for embed configuration.
  • Card carousel links to event series — Clicking an event in the card carousel now links to its event series page.
  • Removed debug logging — Cleaned up leftover debug logging from the embed loader.

Bug Fixes

  • Virtual event submission fixed — Submitting a virtual or online event was failing with "Location is required." The form now skips location validation when the event is marked as online.
  • Tier overrides no longer misapply to events — Tier-based display overrides were incorrectly being applied to events. Events with a start date now skip tier logic entirely, since tiers only apply to places.
  • Map layers persist through style changes — The transit layer and heatmap were disappearing when the map style changed. They now reconnect automatically using a persistent listener with a polling fallback.
  • Grid embeds scroll again — Fixed an issue where embedded grid views were not scrolling by applying overflow settings to the correct page element.
  • Embed height race condition resolved — Fixed a timing issue where map-grid embeds would not properly report their height to the pages embedding them.
  • WordPress featured images no longer silently deleted — Fixed a bug where featured image thumbnails were being deleted when intermediate image sizes were missing.

Infrastructure

  • WordPress plugin updated through four versions — The plugin moved from version 2.1.17 to 2.1.22 across this week's changes.

Week of February 17, 2026

New Features

  • CSV export on admin pages — A new split-button export on the admin events and places pages lets you either quick-export all columns or open a dialog to pick specific columns. The export logic is extracted into a shared module reusable across the admin and other apps.
  • Login and export button on embeds — Embedded map-grid and grid pages now show a configurable login/avatar button with position, alignment, and size controlled via URL parameters. The button menu includes quick CSV export and a custom column picker export dialog.
  • Admin dashboard rebuilt — The admin dashboard now features animated counters, bar/pie/line charts, and quick-action cards. The API mode toggle is restricted to admin users only.
  • Theme admin editor expanded — The theme editor now includes dozens of new fields for card display, map options, filter settings, and layout options.
  • Elementor widget for Vibemap — A new Elementor page builder widget (525 lines) gives full control over map type, boundary, theme, cards, and filters for sites using Elementor.
  • Single event and place embed pages — New embed-friendly pages for displaying individual events or places. Card links can open in the parent frame when used inside an iframe, and the embed loader forwards parent page URL parameters into iframes.
  • Embed filter restriction — Embed filter chips can now be restricted to only the values passed via URL parameters, and a tag whitelist can be fetched from the API to control which tags appear. Added unit tests for this filtering behavior.

Improvements

  • Theme colors load live from the API — City branding colors are now fetched from the Vibemap API and merged with local defaults. New style variables (primary, secondary, accent) are used throughout. The theme admin color field has been renamed from "color" to "primary" for clarity.
  • Default theme palette updated — Default theme colors changed from blue tones to a cool gray-purple palette, with font weight and foreground color added to headings.
  • Event badges use city brand colors — Event badges now display in each city's primary color instead of hardcoded white. Corpus Christi's primary color updated to #075959.
  • Corpus Christi theme restored as local fallback — Fixed API theme color parsing to handle nested color objects, with Corpus Christi available as a local fallback.
  • Theme API handles both formats — The theme interface now supports both the new nested format and the older flat format. Hours display fixed to show "Open 24 hours," "Closed," or "Hours not available" for special period types.
  • Map boundary tooltips toggleable — Boundary tooltips on the map can now be turned on or off. New shortcode attributes added for filter and search visibility.
  • View toggle moved inline with filters — The grid/list/calendar switcher is now positioned inline with the filter tags instead of on a separate row. Corpus Christi hides it by default. Two-column layout disabled when card layout is carousel or filters are hidden.
  • Card source labels redesigned — "User-added" and "AI-added" labels on cards changed from colored badges to subtle gray text with a tooltip showing who approved the item and when.
  • Embedded detail pages capped at max width — Single event and place embed views no longer stretch awkwardly on very wide screens.
  • Calendar day cells more compact — Desktop calendar cells now use smaller venue text, tighter padding, and reduced title line height.
  • Filter tag layout simplified — Filter tags now wrap naturally instead of scrolling in a slider. The date range selector is more compact.
  • Mobile filter layout tightened — Tighter spacing on mobile, pill-shaped filters always use slider mode, and the date range selector is repositioned.
  • Two-column events layout cleaned up — Fixed wrapping, better Add Event button placement, and tags wrap properly.
  • WordPress event form rewritten — The add-event-form block has been rebuilt with theme integration, live preview, and organized editor panels.
  • Organization data from API — The organization provider now fetches full organization data from the API.
  • Downtown Erie embed restricted to passed filters — Added the onlyShowPassedTaxonomies option to the Downtown Erie redirect URL, and changed the default date filter label from "upcoming" to "all" (both show events from today onward).
  • Greater Utica hides items without images — The Greater Utica theme now automatically hides events and places that lack images.
  • Event form auto-tags stabilized — The auto-tag field no longer causes infinite re-fetch loops and properly merges auto-tags with existing tags at initialization.
  • Login button supports custom menu items — The login dropdown can now include custom menu items.
  • Lynnwood placeholder image added — A Lynnwood-specific placeholder image is now available.
  • KOP calendar wider — The KOP calendar maximum width increased from 120rem to 180rem.
  • autoTags URL parameter — Embeds now support a pipe-separated autoTags URL parameter.
  • WordPress forces block editor for Vibemap content — The block editor is now enforced for Vibemap events and places, overriding the Classic Editor plugin if installed.

Bug Fixes

  • Event dates no longer bleed between events — Clicking between events was causing wrong dates to display because URL parameters were cascading with malformed double question marks. Event-specific parameters (date, ID) are now stripped when navigating between events. URL date overrides only apply to recurring events.
  • Color values in embed URLs display correctly — Fixed double-encoding of color values (# becoming %2523). Old embed URLs with %23-prefixed color values are also handled correctly for backward compatibility.
  • Calendar event titles wrap properly — In the calendar view, long event titles now wrap to multiple lines instead of being truncated, and column widths are equal.
  • Carousel arrows no longer overlap cards — When a carousel section has no heading, the navigation arrows are now positioned above the cards instead of overlapping them.
  • Custom tags show selected state — Tags included via custom configuration now correctly appear as selected in the filter bar.
  • URL parameters preserved during redirects — Filters, search terms, and other query parameters are no longer lost when the app redirects between pages.
  • Filter chips no longer wiped by restriction mode — Filter chips were being completely cleared when the restriction mode was enabled but no taxonomy values were passed via URL parameters.
  • Shared data features work reliably — Resolved a conflict where duplicate library instances caused categories and vibes to fail in the admin.
  • Embed loader uses correct height property — Fixed the embed loader to use the correct style property for minimum height. Added KOP-specific styling with centered layout and yellow event badges.
  • Removed debug logging — Cleaned up debug console.log statements from event fetching.

Infrastructure

  • Faster development builds — Added Turbo monorepo configuration for faster local development builds.
  • WordPress plugin updated — Plugin moved from version 2.1.16 to 2.1.17.

Week of February 10, 2026

New Features

  • Theme management admin — A new admin interface for creating, editing, and deleting city themes via the API. Includes a dev/prod toggle and scrolling section navigation for the many theme fields.
  • Recurring event improvements — Events with 10 or more occurrences now show a "Show all X occurrences" toggle. A "Reset to single event" option clears recurrence entirely. The form displays the recurrence pattern and occurrence dates upfront, with per-instance editing hidden behind a "Customize" button. The delete button is always visible.
  • Parking layer on maps — Maps now display a dedicated parking layer showing nearby parking as small blue "P" markers, separate from the main clustered pins. Admins can also exclude specific editorial categories from maps via an API filter. WordPress blocks updated with parking layer and exclude-categories controls.
  • "Update" badges on cards — Card images can now display overlay labels like "Sponsored" or "Offer Available." Sorting prioritizes places with active updates within each tier.
  • File upload for places and events — New file upload support using presigned URLs, enabling image and media uploads directly from the admin.
  • Reusable Add Data form — A shared Add Data form component has been extracted for reuse across the admin. The admin import page now renders this form directly.
  • Admin event editor enhancements — The admin event editor now includes venue search and selection, a price field, editorial categories display, and improved tag management.
  • Notification dashboard with charts — Admin notifications dashboard enhanced with campaign performance charts, platform breakdown pie chart, notification type distribution, deep link builder, and user picker.
  • Auto-generated type definitions — A new shared types module auto-generates 2,800+ type definitions from the Vibemap API specification.
  • Default calendar view per theme — New theme options let city partners default to calendar view on desktop and/or mobile. Fayetteville defaults to calendar view on mobile.

Improvements

  • Theme system rebuilt with style variables — Five themes (Greater Utica, Culinaria, Springfield, Harlem, Moline) migrated from per-theme style sheets to a variable-based system. Adding a new city theme now only requires a configuration object, not custom style sheets.
  • Stevenson themes styled — Visit Stevenson (green/brown with Montserrat font) and Downtown Stevenson (navy/teal with Oswald font) fully styled with calendar, pill, and chip color overrides. Downtown Stevenson accent color adjusted from dark navy (#003366) to lighter blue (#205684).
  • Evanston theme updates — Evanston now uses Arial font for descriptions, the left panel, and cluster badges. Theme-driven number badges on map cluster markers support custom colors per theme.
  • Calendar event cards larger — Thumbnails increased from 52 to 64 pixels on mobile, 80 to 100 on tablet, and 100 to 120 on desktop. Maximum events shown per day increased from 4 to 6 on desktop and 6 to 10 on mobile.
  • Calendar event titles show more text — Calendar titles now display up to three lines (was two) with proper text clamping.
  • View toggle buttons support theme colors — Toggle buttons now use the theme accent color with white text when active.
  • Filter bar styled for Stevenson — The filter bar is wrapped in a styled container for Stevenson themes.
  • Date range inputs always visible — In grid and map-grid views, date range inputs are always visible and auto-switch to custom mode when edited. "Upcoming" restored as default date filter, and the computed end date shows through the last event.
  • Left-column sidebar restructured — Horizontal date inputs, compact calendar, and tags below search for a cleaner sidebar layout.
  • Archive filter bar visibility fixed — The archive filter bar now appears above map cluster markers.
  • KOP theme refined — Pill buttons have lighter font weight and smaller font size. Events use columns layout, heading font weight and color adjusted, and calendar date range scaled up.
  • Icons inherit theme colors — Location, parking, residential, and tag icons now inherit text color from their parent instead of being hardcoded black.
  • Lynnwood banner images updated — Lynnwood banner ad images updated from placeholder service to actual hosted images.
  • Map-grid supports mobile map height parameter — Embeds now accept a mobileMapHeight URL parameter.
  • Admin table updates instantly — After toggling hide or priority status on an item, the admin table now patches the data in place immediately without needing a refresh.
  • AI-scraped categories matched flexibly — AI-scraped categories are now matched regardless of capitalization, and vibes from scraped data populate the place form.
  • Fayetteville tags expanded — Added Dog-Friendly, Fayetteville Ale Trail, Free, Cycling, and Running to the Fayetteville theme tag list.
  • WordPress taxonomy-archive block improved — Both the editor and renderer for the taxonomy-archive block have been updated.

Bug Fixes

  • Redirect rule fixed for Lynchburg — Corrected the redirect rule for the Lynchburg-downtown add-event page.
  • Downtown Erie redirect finalized — After multiple iterations, the Downtown Erie embed redirect is now working reliably with loop prevention.
  • WordPress plugin blocks rebuilt — Updated taxonomy-archive, events, and combo block source changes in the WordPress plugin.

Infrastructure

  • Shared data module — Categories, vibes, and tags data moved to a shared module for reuse across admin and other apps.
  • Admin dev server port changed — The local development admin app now runs on port 3031 instead of 3001 to avoid conflicts.
  • Claude Code skill created — Added a frontend-design skill with Vibemap project context, later updated.
  • WordPress plugin versions — Plugin moved from 2.1.5 to 2.1.6 (custom ordering fix), then through several more increments.

Week of February 3, 2026

New Features

  • Women's Wave theme — New partner theme with purple header, warm background, and Montserrat font.
  • Custom taxonomy labels — "Vibes," "Categories," and "Tags" can now be renamed per theme (for example, "Feel" instead of "Vibes"). URL parameters vibesLabel, categoriesLabel, and tagsLabel are also supported. WordPress blocks updated with taxonomy label editor panels.
  • Banner ads on map-grid embeds — The map-grid embed layout now supports banner advertisements with click tracking, randomly selected from configured ad slots. Lynnwood gets a placeholder banner ad configuration.
  • Evanston theme created — New 92-line theme with Cubano font, purple chips, and teal header.
  • Greater Utica theme added — Green accent (#1E8340), green boundary lines, clustering disabled, and addresses shown on cards.
  • Visit Stevenson and Downtown Stevenson themes — Two new Stevenson themes created: visit-stevenson (green accent) and downtown-stevenson (navy accent, Oswald font). Visit Stevenson enhanced with Montserrat font and warm colors.
  • Recent submissions history — The event form now shows a "Recent Submissions" accordion displaying previously submitted events with timestamps and links, stored locally in the browser.
  • WordPress place editing modernized — Place editing in WordPress converted from legacy panels to a modern sidebar with map-based location picker, address, phone, website, hours, image gallery, categories, and API sync controls.
  • URL parameter documentation — Created URL_PARAMS.md documentation for map-grid embed parameters.
  • Automated testing for WordPress — Three end-to-end test suites for WordPress (1,000+ lines) plus unit tests for WordPress blocks, with support for Firefox and Safari browsers. Test documentation included.

Improvements

  • Search feels faster — Previous searches are now cancelled when a new one starts, so results no longer stack up or flicker. Results clear immediately when a new search begins. API request functions now support cancellation signals for smoother sequential searches.
  • Date formatting improved — Dates now include ordinal suffixes (for example, "Feb 4th"), use comma separators instead of dashes, and line breaks render correctly.
  • All-day events no longer show times — Events marked as all-day now display without misleading start and end times.
  • Random sorting stays consistent — Map-grid random sorting now uses a session-stable seed, so items stay in consistent positions as more data loads.
  • Text-with-image headings render formatting — Section headings now render bold text and links instead of showing raw formatting codes.
  • Theme-driven cluster badges — Map cluster markers now display number badges with custom colors per theme.
  • Multipolygon boundary support — City boundaries and regions defined with complex multipolygon shapes now render properly on the map.
  • WordPress custom ordering includes filters — Custom ordering now includes current filter parameters when fetching all items, ensuring the order panel shows only matching items. Added a fetch-all API parameter for bypassing pagination.
  • WordPress places no longer require API ID — Places and events in WordPress no longer require a Vibemap API ID, allowing local-only WordPress posts. Added an additional_links event field.
  • Calendar title clamping works across browsers — Calendar card title truncation now uses a standard property alongside the browser-specific one.
  • Fayetteville tag corrected — "Agrotourism" renamed to "Agritourism." Added UA Sports and Fundraiser tags.
  • Downtown Erie map adjusted — Map tilt removed (pitch 45 to 0) and slight rotation added (bearing 0 to -25). Redirect rule added.
  • Map viewport uses theme coordinates — The map now uses the theme's latitude, longitude, and zoom as fallback priority. Bearing and pitch sync after boundary fit animation. Heat map configuration aliased for compatibility.
  • KOP calendar styling — KOP-specific styling added with centered layout and yellow event badges.
  • Development watcher auto-rebuilds styles — The development watcher now automatically rebuilds style sheets alongside code changes.

Bug Fixes

  • Stale event cards cleared on search reset — Previously, stale event cards persisted after clearing search. Cards now render from fresh data, and a loading skeleton cycle is forced on search mode transitions.
  • Calendar event links work — Removed a block on calendar event link navigation and fixed a guard for undefined external URLs. Centralized calendar routing logic with theme-aware page support, recurring date extraction, and proper link behavior on cards.
  • Map-grid embeds no longer crash without boundaries — Embeds using lists without a geographic boundary were crashing due to an incorrect fallback that used the organization name as a boundary name. Also fixed a related ordering error.
  • Missing code import fixed — Resolved a build error caused by a missing import in the table loading placeholder component.
  • Deleted stale configuration file — Removed a stale package lock file from the web module.
  • Backend documentation compiles cleanly — Fixed self-closed tags, escaped formatting, encoded operators, and corrected image paths in the documentation files. Fixed two typos in the REST API docs.
  • Build tool restored — Reverted a temporary build tool change back to the standard version.

Infrastructure

  • GitHub Actions updated — All build pipelines updated from v3 to v4+ (checkout, setup-node, cache, deploy) since GitHub blocked the old versions. Node version bumped from 18 to 20.
  • Backend documentation synced — 32 new files covering API docs, architecture, data model, guides, and reference added to the Docusaurus docs site and sidebar navigation.
  • WordPress plugin versions — Plugin moved from 2.1.3 through 2.1.10 across this week's changes.
  • Docs module configuration — Added commit message instructions for the docs module.

Week of February 1, 2026

New Features

  • Right-click context menu on admin tables — Right-clicking a row in the admin events or places table opens a context menu with quick actions: edit, feature, hide, set priority, scrape, and copy.
  • Priority venue badges — Venues can be marked as "priority" with a green star icon next to their name in both card and table views (visible to logged-in users only). Priority rows are highlighted with a green background in the admin table, and priority venues get a green gradient badge on their cards. The name column is widened to accommodate the icon.
  • "Past Events" toggle — Logged-in users can now toggle a "Past Events" option that mirrors the selected date range backward to fetch historical events.
  • "Save As" for duplicating content — A new "Save As" action on event and place context menus opens a dialog for duplicating items with editable name, description, and dates.
  • Admin rich text editor and image gallery — The admin panel now includes a rich text editor for descriptions, an image gallery editor with drag-to-reorder and URL upload, and editable opening hours.
  • Loading skeleton for admin tables — The admin data table now shows animated placeholder rows while data loads instead of an empty table.

Improvements

  • Maps clip to visible area — Maps now constrain results to the visible area by default, keeping listings relevant to what is on screen.
  • Place detail improvements — The detail panel always shows the full description instead of a short version. Selected places in embeds now fetch full details (social links, hours) that search results omit. Closure status changed from a toggle to a dropdown to prevent accidental changes. Category labels now show their hierarchy (for example, "Music > Rock / Indie").
  • Lynnwood theme colors updated — Darker brown header, lighter gray chips.
  • Boundary selector label clarified — Changed from "Boundaries" to "Boundary."
  • Edit button styled correctly — The edit button renders as a circular icon button when no text label is present.

Bug Fixes

  • First-load page crashes fixed — Pages on the main site were crashing on first load because the authentication wrapper was not available during initial page rendering. Split into client-only rendering with stable initialization.
  • "Remove / Hide Business" works correctly — The action was calling the wrong handler. It now correctly toggles the approved status. Unapproved places appear grayed out (50% opacity, gray background) in the admin table.
  • "Set Priority Event Venue" works correctly — The action was calling the wrong handler. It now properly toggles priority status.
  • Date range dropdown now filters events — The date range dropdown (Today, Weekend, This Month) was not actually filtering events. It now computes actual date boundaries and triggers a data refresh.
  • Tier visibility no longer hides content by default — Tier-based feature visibility was hiding content by default instead of showing everything. It now only hides fields explicitly set to hidden.
  • Login button temporarily disabled — The login button was disabled pending a shared authentication fix to avoid user confusion.
  • Gatsby builds reliably — Fixed memory-related build crashes by increasing allocation to 6 GB and removing a debugging tool from production output.