Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BigQuery Release Notes Dashboard & Twitter Sharer

A modern, high-aesthetic web application built using Python Flask, vanilla HTML5, CSS3, and JavaScript. It aggregates the Google BigQuery release notes RSS feed, parses complex daily entries into granular update cards (Features, Changes, Issues, Deprecations), and provides an interactive Twitter/X composer with a custom character validator.


✨ Features

  • Granular Updates parsing: Google Cloud combines multiple updates under a single day's feed entry. The backend splits them on <h3> block boundaries so you can view, select, and tweet about one specific update instead of the entire day's log.
  • Smart Twitter/X Composer: Generates pre-formatted tweet drafts containing emojis, category metadata, trimmed text descriptions, and official links.
  • Twitter-Compliant character count: Accurate count calculation that treats any URL as exactly 23 characters (following Twitter/X shortener guidelines), preventing validation mismatch.
  • 1-Hour File caching: Implements a local file cache (release_notes_cache.json) to guarantee fast page loads and protect against hitting Google Cloud feed endpoints on every reload.
  • Force refresh: Instantly bypasses the cache using the refresh button (complete with a CSS animated spinner) to pull live data.
  • Aesthetic Glassmorphism UI: Uses a responsive dark-slate design system featuring dynamic color-coded badges matching the category of the release notes.

📂 Project Structure

  • app.py: Flask backend web server containing feed fetching, sub-update extraction, and caching logic.
  • templates/index.html: Main HTML5 page featuring navigation, timeline layout, search boxes, and X composer mockup.
  • static/css/style.css: Custom stylesheet handling visual layouts, dark theme, and grid grids.
  • static/js/app.js: Frontend controller managing feed queries, live search, categories filtering, character limits, clipboard operations, and social sharing.
  • .gitignore: Configured to exclude .venv, IDE settings, and local JSON data caches.

🚀 Getting Started

📋 Prerequisites

  • Python 3.8 or higher installed on your system.

⚙️ Installation & Running Locally

  1. Clone the repository:

    git clone https://github.com/prayush-sinha/bigquery-release-note.git
    cd bigquery-release-note
  2. Create and activate a virtual environment:

    • Windows (PowerShell):
      python -m venv .venv
      .venv\Scripts\Activate.ps1
    • macOS / Linux:
      python3 -m venv .venv
      source .venv/bin/activate
  3. Install dependencies:

    pip install flask requests
  4. Launch the server:

    python app.py
  5. Open in browser: Navigate to http://127.0.0.1:5000 in your web browser.


📝 How It Works

XML Feed Parsing & Formatting

Inside app.py, the parse_xml_feed() function parses the Atom XML data. When it finds an entry, it applies:

parts = re.split(r'<h3>(.*?)</h3>', content_html)

This splits the block of text on HTML headers. If a day has 3 features and 1 issue, it generates 4 separate select-to-tweet cards.

Smart Character Counter

Inside static/js/app.js, the calculateTwitterLength() function adjusts the length calculation:

function calculateTwitterLength(text) {
    const urlRegex = /https?:\/\/[^\s]+/g;
    let length = text.length;
    const urls = text.match(urlRegex);
    if (urls) {
        urls.forEach(url => {
            length = length - url.length + 23; // Any URL is 23 characters on X
        });
    }
    return length;
}

This prevents your post from being blocked by X's web intent parser.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages