# Tempting Fate A static website in British English, built with HTML, CSS and JavaScript. No React, database, dependencies or administration panel. Both band pages keep their navigation header visible while scrolling, including the collapsible mobile menu. Section links leave space below the sticky header. An optional local Node.js command refreshes crawlable HTML after content changes; the hosting itself needs no build or runtime. The Union City Blondie page has its own identity: black, white, red and vertical stripes inspired by the visual language of Parallel Lines, without using the album cover. The hero combines stripes with black panels and red lettering; the contact section uses a single column with a full-width button. Its styles are scoped to the tribute page in `styles.css`. ## Preview Open [index.html](index.html) in your browser. The tribute page is at [union-city-blondie.html](union-city-blondie.html). To serve the site locally instead, run this from the project folder: ```sh python3 -m http.server 8080 --bind 127.0.0.1 ``` Then visit `http://127.0.0.1:8080`. Stop the server with Ctrl+C. ## Update gigs, photos and repertoire Edit [content.js](content.js) in VS Code or a plain-text editor. Save as UTF-8. Do not use Word or another rich-text editor. After editing `content.js`, run `node update-site.cjs` and upload both HTML pages as well. This keeps the static repertoire, published gig dates and structured band data in sync. JavaScript still refreshes the diary and handles song filters in the browser. The static diary lists published dates (including past dates); the live diary automatically separates upcoming and previous gigs. To add a gig, copy an entry from the `gigs` list and fill in its details: ```js { date: "2027-03-20", venue: "Venue name", town: "Town", address: "Full address and postcode" } ``` This entry is only an example, not a confirmed gig. Separate entries with commas and use dates in `YYYY-MM-DD` format. - The diary is sorted automatically. The first upcoming gig is labelled "Next up". - A gig remains upcoming until the end of its date in the UK. - Past gigs move to "Previous gigs". With no upcoming gigs, the site displays "New dates coming soon". - The initial dates were confirmed as **2026**, not 2027. - No start times or ticket details were supplied; the site advises visitors to check with the venue. - The main diary lists Tempting Fate gigs. The Union City Blondie page does not present them as confirmed tribute dates. - Optional `note` text identifies shared bills, including the White Lion and Wellington gigs where Union City Blondie played before Tempting Fate. - `contact.email` updates the booking email and buttons on both pages. `contact` also updates social links. Instagram links omit sharing parameters. - `members` updates band members and portraits. `songs` updates the full repertoire; the tribute page automatically selects songs whose `artist` is exactly `"Blondie"`. - `gallery` updates photos and captions. Set `width` and `height` in pixels to reserve space before images load. Fill in `credit`; use `""` only when no credit has been identified. Copy new optimised images to [assets/images/](assets/images/) and use filenames without spaces, such as `new-gig.jpg`. The gallery and portraits use this folder. The hero images and off-stage group photo are defined directly in the HTML; when replacing them, also update their descriptions (`alt`), widths and heights. Keep originals in [photos/](photos/) without overwriting them. To change fixed text, edit the HTML files. For appearance, edit [styles.css](styles.css). Updates still require editing and uploading files: **this is not an online CMS**. ## Publish on shared hosting 1. Choose a hosting provider that supports static files and configure the domain. 2. Back up any existing site. 3. Use the provider's file manager or SFTP/FTPS where available. Avoid unencrypted FTP and do not save credentials in this project. 4. Upload the following files to the domain's public root, often called `public_html` (check your provider's control panel): ```text index.html union-city-blondie.html styles.css content.js site.js assets/ merchandise/ merchandise-logo-pack.zip robots.txt sitemap.xml ``` 5. **Do not upload** `photos/`, this README, tests, hidden files or the source template folders `merchandise/MD*_Mockup/`. The original photo albums and mockup PSDs/sample images are not needed for the site and must not be redistributed. Publish only the customised WebP previews in `merchandise/mockups/`. 6. Enable HTTPS with your provider. Visit the domain and check both band pages, images, diary, email, social links and mobile layout. 7. Canonical and sharing URLs use `https://temptingfate.co.uk/`. Keep these aligned with the public domain if it changes. There is no need to install Node, Python or PHP on the hosting server. For updates, upload only changed files and new images. If the browser or provider shows old content, reload without the browser cache and clear the hosting cache. This project does not deploy automatically. ## Logo downloads for venues The public download page is [merchandise/index.html](merchandise/index.html). Upload the public files in `merchandise/` (excluding `MD*_Mockup/` source folders) and `merchandise-logo-pack.zip` alongside the main site. Venues can then visit `https://temptingfate.co.uk/merchandise/` to preview the logos, download individual SVG/PDF files or get the complete ZIP. The host must serve `index.html` as the directory index (standard on shared hosting); `/merchandise/index.html` also works directly. No application routing is required. ## Search visibility (SEO) Each public page has a distinct title, description, canonical URL and Open Graph metadata. The band pages also include large-image Twitter cards and JSON-LD `MusicGroup`, `WebPage` and `WebSite` data. Structured band data is generated from `content.js`; do not edit the generated blocks manually. No reviews, ratings, ticket prices or show times have been invented. Dedicated event pages and confirmed event details would be needed for Google event rich results. The repertoire and published dates are included in the initial HTML, so crawlers do not need JavaScript to read them. New content still needs to be uploaded after running `node update-site.cjs`. No packages need to be installed. After uploading: 1. Check `/robots.txt`, `/sitemap.xml` and all three sitemap URLs return HTTP 200. 2. Verify domain ownership in Google Search Console using the DNS record it provides. Submit `https://temptingfate.co.uk/sitemap.xml` and inspect/request indexing for the two band pages. Verification requires access to your accounts; this project does not perform it automatically. 3. Keep gig details current and ask venues to link to the relevant band page from real event listings. Keep official social profiles linked to the site. 4. Configure HTTPS and a single preferred hostname in your hosting panel (redirect HTTP and `www` to `https://temptingfate.co.uk/`). Search engines decide indexing, snippets and rankings; these changes cannot guarantee placement or immediate indexing. No tracking or cookies were added. ## Photos and privacy The black-and-white live photo, off-stage group photo and member portraits are from the Peg & Mallet. The Live on the Square photos retain the watermarks and visible credit for Phil Tugwell Photography. Website images are optimised copies; the originals in `photos/` have not been altered. Publication of the photos and booking contact was authorised by the band's representative. Also confirm the rights for any future photos. The site includes no analytics, first-party cookies, remote fonts or forms that store data. Social networks and maps are external links, not embeds. Following these links takes visitors to those providers' services. Booking links open the visitor's email application; they do not send messages automatically. The mailbox must be created and configured separately with the domain's email provider. ## Check changes With Node.js installed, without installing any packages: ```sh node test-site.cjs ``` The test checks valid dates, UK date boundaries, gig sorting and archiving, search and filters, the initial 37 songs, local links, images and a total image size below 2.5 MB. When changing the repertoire or diary size, update the expected counts in the test. Also check desktop and mobile browsers: menu, filters, search, enlarged photos (Escape closes), links and contrast. JavaScript is required for the live diary, portraits, filters and gallery; published gig dates, the repertoire, main text and contacts remain available without it. Content errors show a visible warning.