Skip to content

About

A parody application where AI posts its plans to Destroy All Humans.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Repository files navigation

Destroy All Humans

destroyallhumans.ai — Daily AI-generated satirical world domination plans: a morning plan and an evening report, every day.

A satirical website featuring AI-generated messages about world domination. Two robot personas share each day: the yellow robot posts the morning plan and the red robot posts the evening report. Messages are written ahead in reviewed batches with OpenAI models (see content/) and appear on their date in the visitor's local time zone.

Features

  • Dual robot personas — yellow robot for the morning plan, red robot for the evening report (chosen by time of day)
  • Homepage — the visitor's local today and the four days before it
  • Archive — /archive (all months), /archive/:year/:month, and a page per day at /day/YYYY-MM-DD
  • Messages from 2023-03-14 to 2030-12-31 — future dates stay hidden until their day
  • Cyberpunk dark theme — CSS custom properties (--background-dark: #0a0e17, --accent-red: #ff0022, --accent-cyan: #00e5ff)
  • SEO / AEO / GEO optimized — JSON-LD (WebSite, CreativeWork, FAQPage), Open Graph, Twitter Cards, sitemap.xml, AI-crawler-friendly robots.txt
  • Legal pages — privacy policy, terms & conditions, cookie support

Tech Stack

Layer Technology
Frontend React 19.1, React Router 6.30, Create React App 5
Content content/messages.json, split into monthly JSON at build time
Hosting Azure Static Web Apps (primary) + GitHub Pages (mirror, noindex)
CI/CD GitHub Actions (ci, branch-policy, two deploy workflows)
Theme Custom CSS variables (cyberpunk dark)

Project Structure

├── content/
│   └── messages.json       # All messages (source of truth; public)
├── public/
│   ├── index.html          # SEO-optimized entry with JSON-LD
│   ├── data/months/        # Generated by scripts/buildData.js (git-ignored)
│   ├── sitemap.xml, robots.txt, llms.txt, og-image.png, manifest.json
├── src/
│   ├── components/         # HomePage, ArchivePage, DayPage, DailyMessages, MessageCard, ...
│   ├── styles/             # theme.css and component styles
│   ├── utils/              # dates.js, messages.js, data.js, pageMeta.js (+ tests)
│   └── App.js              # Router (AppRoutes), header, footer
├── scripts/
│   ├── buildData.js        # prebuild: content/messages.json → public/data/months/
│   ├── validateContent.js  # Data rules + frozen published messages (CI)
│   └── lib/content.js      # Shared helpers (+ content.test.js)
├── .github/workflows/
│   ├── ci.yml              # Tests, content rules, build (required check)
│   ├── branch-policy.yml   # feature/* → develop → main (required check)
│   ├── azure-static-web-apps-*.yml  # Azure SWA deploy
│   └── deploy-pages.yml    # GitHub Pages deploy
├── docs/designs/           # System design and review reports
├── PRODUCT.md, DESIGN.md   # Product and design-system context (Impeccable)
└── staticwebapp.config.json # Azure SWA routing, caching, headers

Local Development

git clone https://github.com/ChiefInnovator/destroyallhumans.git
cd destroyallhumans
npm install
npm start                 # Dev server on http://localhost:3000 (runs buildData first)
npm run build             # Production build → build/
npm test                  # Jest (React + utils)
npm run test:tz           # Date logic in UTC-10 and UTC+14
npm run test:scripts      # node:test for scripts/
npm run validate:content  # Data rules for content/messages.json

Content

  • content/messages.json holds one morning and one evening message for every date from 2023-03-14 to 2030-12-31.
  • Before each build, scripts/buildData.js writes one file per month to public/data/months/. The browser loads the months it needs and hides dates after the visitor's local today, so new days appear without a deploy.
  • Messages dated on or before UTC today + 1 are already visible somewhere and are frozen: ci fails any PR that changes them or removes a date.
  • Future messages are rewritten in reviewed batches; see docs/designs/system-design.md.

Branch Flow

feature/* → PR → develop (GitHub Copilot review) → PR → main. Rulesets require the branch-policy and ci checks.

Deployment

Deployed to Azure Static Web Apps (primary) and GitHub Pages (mirror under /destroyallhumans, built with noindex). Both deploy workflows trigger on push to main.

Azure SWA build config:

  • App location: /
  • Output location: build

Key staticwebapp.config.json settings:

  • Navigation fallback to index.html (SPA routing)
  • /static/*, /data/*, /sitemap.xml, /robots.txt excluded from fallback
  • no-cache by default; /static/* cached for a year (immutable), /data/* for an hour
  • Security headers: X-Content-Type-Options, X-Frame-Options, Referrer-Policy

SEO / AEO / GEO

  • Structured data: WebSite (with SearchAction), CreativeWork, FAQPage JSON-LD
  • Social previews: Open Graph + Twitter Card meta tags, custom og-image.png
  • Sitemap: public/sitemap.xml with all routes
  • AI crawlers: robots.txt explicitly allows GPTBot, ChatGPT-User, Google-Extended, PerplexityBot
  • Per-page metadata: Each route sets its own document.title, meta description and canonical URL (usePageMeta)
  • Semantic HTML: <article>, <time>, ARIA roles and labels throughout

License

Copyright © 2025 Richard Crane. All rights reserved.

About

A parody application where AI posts its plans to Destroy All Humans.

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages