Welcome to automated – a GitHub-powered dashboard for tracking YouTube channel statistics, cryptocurrency prices (XMR + BTC), and daily GitHub activity streaks using GitHub Actions and GitHub Pages.
This repo uses GitHub Actions to automatically:
- Fetch YouTube stats (subscribers, views, videos) from multiple channels
- Track Monero (XMR) and Bitcoin (BTC) prices 3x daily
- Keep a daily commit streak alive with a timestamp file
- Display everything neatly on a public GitHub Pages dashboard
- Pulls stats from 6 YouTube channels
- Appends to a
youtube.csvfor long-term tracking - Updates a current snapshot in
docs/youtube.json - Outputs hosted live via GitHub Pages
- Displays graph for visual representation of growth over time.
📁 Files:
youtube/youtube.csv– historical statsdocs/youtube.json– latest snapshot (used on website)
⏱ Schedule: every 48 hours
- Fetches prices from CoinGecko
- Saves to
docs/xmr-btc.jsonandcrypto/xmr-btc.csv - Useful for price widgets, system tray apps, or analytics
📁 Files:
docs/xmr-btc.json– current price snapshotcrypto/xmr-btc.csv– historical log
⏱ Schedule: 3x per day (08:00, 14:00, 20:00 UTC)
- Updates a timestamp file (
last-updated.txt) once per day - Helps maintain a daily commit streak even with no changes
- Minimal footprint, runs silently without pushing other files
📁 File:
last-updated.txt– updated once daily
⏱ Schedule: every day at 09:00 UTC
Live site: ➡️ https://uxillary.github.io/automated/
This renders the data visually with JavaScript. JSON is used for live stats display, while CSV files power long-term tracking.
The GitHub Lifetime Stats workflow runs daily at 02:23 UTC and can also be
started manually with workflow_dispatch. It publishes two plain-integer files:
docs/lifetime-contributions.txtis the authenticated contribution-calendar total from account creation through the time of the run. The script fetches the account creation timestamp, splits the UTC range into consecutive windows of at most one calendar year, and sums the GraphQLtotalContributionsvalues.docs/release-downloads.txtis the live sum of download counts for uploaded assets that still exist on published releases, including prereleases, in original (non-fork) repositories owned byuxillary. All forks and draft releases are excluded. GitHub's generated source-code ZIP and tar archives, clones, packages, workflow artifacts, GitHub Pages traffic, externally hosted downloads, and deleted releases or assets are not included.
The release scan uses the public owner endpoint for uxillary, then filters out
every repository whose GitHub fork flag is set, rather than querying releases
from forks. It also avoids the authenticated /user/repos endpoint. This is
important for fine-grained tokens:
the latter only returns repositories visible to that token and can silently
produce an incomplete (or empty) repository list. A zero lifetime contribution
result is treated as an API/token visibility error and leaves both existing
files untouched instead of publishing misleading zeroes.
The workflow supplies the existing API_GITHUB repository secret to the script
as GH_TOKEN. To run it locally, set the token only in your shell environment
(do not put it in the repository):
GH_TOKEN="..." node scripts/github_lifetime_stats.jsThe mocked test suite never contacts GitHub and does not need a token:
node --test tests/github_lifetime_stats.test.jsThe daily GitHub Release Metrics workflow records cumulative download counts
for uploaded release assets and publishes a historical dataset plus browser-ready
summary under docs/metrics/. History begins with the first successful snapshot;
GitHub does not provide earlier daily download counts, so none are backfilled.
The explicit allow-list currently tracks uxillary/font-size-tweak and
uxillary/maintenance-goblin. Add one entry to
scripts/github_release_config.js to track another repository. The workflow uses
the existing API_GITHUB secret and can be started from Actions → GitHub Release
Metrics → Run workflow. No browser-side GitHub credentials or API calls are used.
Run its tests locally with:
node --test tests/github_release_metrics.test.jsTo fork and use this yourself:
- Create a GitHub Personal Access Token (for pushing data)
- Get a YouTube Data API Key
- Set up the required GitHub Secrets:
YOUTUBE_API_KEY
Optional (for commit stats, crypto, and streaks):
- Make sure GitHub Pages is enabled on
/docs - Set up any additional APIs if using altcoins
- Chart.js or D3.js visuals
- Weekly summary card generator
- Discord bot integration
- Telegram alerts
- Webhooks for price thresholds
@uxillary / AJ Studios
Inspired by automation, powered by caffeine, sustained by daily commits ☕
The Update project previews workflow uses Playwright's Chromium browser to capture consistent, clean website previews at a 1440 × 900 desktop viewport. Screenshots are converted to WebP at quality 85 and stored with capture metadata in generated/project-previews/; these stable assets are intended for consumers such as adamj.link.
Website definitions live only in data/project-previews.json. To add one, append a unique kebab-case slug, display name, verified HTTP(S) url, "enabled": true, and "type": "website". Optional per-project settings include waitFor, delay, viewport, fullPage, hideSelectors, and theme. Only enabled website entries are captured; desktop applications and manually designed covers intentionally remain outside this workflow.
Install dependencies and Chromium, then capture all projects locally:
npm ci
npx playwright install chromium
npm run previewsCapture one configured project with npm run previews -- --project 404cache, or validate the configuration without launching a browser with npm run previews -- --validate-config. To run it on GitHub, open Actions → Update project previews → Run workflow. It also runs every Monday at 03:17 UTC and commits generated changes only when image content or capture status changes. A failed site is recorded in the manifest without stopping other captures or deleting its last known-good image.