Skip to content
20 Category Winners

The Signal Remains

U2’s tours remapped with styled Google Maps, tracing a cultural signal across continents. Hosted in the cloud for a dynamic, navigation-driven map narrative of late 20th-century history.

Core trick

Each tour leg loads its own styled Google Map, and selecting a stop sends that show's date and place to Gemini for historical context.

Tags

Built with

countup.jsgoogle-cloud-rungoogle-gemini-1.5-apigoogle-maps-javascript-apijsonlucide-iconsreactstyled-map-idstailwind-csstypescriptvite

Description

Inspiration I was inspired by the idea that world tours are shaped as much by history and politics as by music — each one a reflection of its moment in time. Each map in this project is uniquely styled to reflect the cultural and political atmosphere surrounding that specific leg or tour. I approached each one not just as a visual record, but as a historical artifact shaped by the era it represents. This project visualizes that dynamic: how global conditions shaped the band’s path — and how U2, in turn, reshaped cultural space. The design of each map responds to that feedback loop. What it does The Signal Remains is a navigation-driven, styled , cloud-hosted atlas that remaps U2’s major 20th-century tours as a narrative of movement, tension, and memory. Each leg of each tour in different eras uses a custom-styled Google Map to express regional and historical tone. Tour stops are rendered as interactive markers, and when selected, each one calls Gemini 1.5 to dynamically generate contextual insights — including cultural, historical, or political background relevant to that show’s time and place. This is a map-driven story about global music as geopolitical artifact — enhanced with real-time AI and expressive cartography. How we built it This is a modern, full-stack web application that combines cartography, music history, and AI to create an interactive exploration of U2's concert tours from 1978-1998, deployed on Google Cloud Platform with automated CI/CD. External APIs Google Maps JavaScript API - Interactive maps Google Maps Static API - Static map images Google Gemini 1.5 Pro API - AI-generated content to hydrate marker InfoWindow content based on a predefined prompt including tour name, date, city, and global context Site images also generated by Gemini CI/CD Pipeline Google Cloud Build - Automated build and deployment pipeline Docker - Containerization for consistent deployments Artifact Registry - Container image storage Secret Manager - Secure API key management for Gemini API Google Cloud Platform (GCP) Cloud Run - Serverless container deployment Cloud Build - CI/CD automation Multi-step build process Secrets injection at runtime Automatic deployment on commit Secret Manager - Secure credential storage for API keys Artifact Registry - Container image repository Image tagging with commit SHA Versioned deployments Frontend @vis.gl/react-google-maps 1.5.4 - Google Maps React components React 18.3.1 - Main UI framework TypeScript 5.5.3 - Type safety and development experience Vite 5.4.2 - Build tool and development server Material-UI (MUI) 7.2.0 - React component library that implements Google's Material Design @mui/material - Core components @mui/icons-material - Icon components @emotion/react & @emotion/styled - Styling engine Redux Toolkit 2.8.2 - State management React Redux 9.2.0 - React bindings for Redux Lucide React 0.344.0 - Icon library Backend Node.js - Runtime environment Express 5.1.0 - Web framework CORS 2.8.5 - Cross-origin resource sharing dotenv 17.2.0 - Environment variable management Styling & Design @fontsource/inter 5.2.6 - Google Fonts integration Tailwind CSS 3.4.1 - Utility-first CSS framework PostCSS 8.4.35 - CSS processing Autoprefixer 10.4.18 - CSS vendor prefixing Development Tools ESLint 9.9.1 - Code linting TypeScript ESLint 8.3.0 - TypeScript-specific linting Nodemon 3.1.10 - Development server with auto-restart Concurrently 8.2.2 - Run multiple commands simultaneously Key Features Web Accessibility (AAA) with ARIA labels and keyboard navigation Interactive cartographic visualization of U2 tour data AI-enhanced storytelling with Gemini API integration Custom map styling with Google Maps Map IDs Responsive design with Material-UI and Tailwind Real-time data processing of concert information Cultural context integration with historical narratives Automated deployment with zero-downtime updates Secure API key management through GCP Secret Manager Challenges we ran into Styling multiple Google Maps with meaningful variation — without losing visual clarity Managing WebGL contexts and navigation-driven map instance creation for different tour legs Structuring Gemini prompts to return insightful, accurate, and readable content — without hallucination or redundancy Ensuring InfoWindows stayed visible and readable across mobile and desktop breakpoints Accomplishments that we're proud of Created a modular, web accessible, navigation-driven narrative UI powered by custom styled Google Maps Built a multi-map architecture that supports dynamic creation/destruction per tour leg Used Gemini 1.5 to generate high-quality cultural and political context for over 240 concerts — making each marker a living story Designed map styles that feel emotionally aligned with the era, region, and tone of each tour What we learned How to build expressive, stylized maps using Google Maps Platform at a fine level of control How to use Gemini 1.5 effectively for live, structured content generation at scale How to design navigation-driven layouts that stay performant even as map logic gets more complex How to combine storytelling, geography, and AI without compromising design integrity What's next for The Signal Remains Expand to include additional cultural events, overlays, and artist movements across decades Use Gemini 1.5 to generate summaries of entire tour legs or regions — not just individual shows Integrate timelines, archival visuals, or radio broadcasts as layers of story Make the codebase open-source to help others map art, memory, and movement with Google Maps and AI

The linked repo returns 404, so it was deleted or made private.

Team