Skip to content

IPXO/ipv4-events

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

204 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ–₯️ ipv4.events

A retro Windows 95–style timeline of the Internet's IPv4 era. From ARPANET to dual-stack β€” and beyond. πŸ“‘

β–Ά Launch ipv4.events

Curated by IPXO and a growing community of contributors. 500+ milestones, 32 categories, 8 decades of Internet history β€” rendered in glorious silver-gray panels with beveled borders.


πŸ—‚οΈ Repository Structure

ipv4-events/
β”œβ”€β”€ docs/                          # πŸ’Ύ Public site root (served by GitHub Pages)
β”‚   β”œβ”€β”€ index.html                 # Main app β€” Win95 UI, loads data & renders timeline
β”‚   β”œβ”€β”€ 404.html                   # Blue Screen of Death 404 page
β”‚   β”œβ”€β”€ CNAME                      # Custom domain: ipv4.events (apex)
β”‚   β”œβ”€β”€ robots.txt                 # Crawling rules + sitemap pointer
β”‚   β”œβ”€β”€ sitemap.xml                # SEO sitemap (homepage only β€” SPA canonical)
β”‚   β”œβ”€β”€ icons/                     # πŸ–±οΈ Win95/98/NT/W2K/XP .ico files + social card
β”‚   β”œβ”€β”€ css/style.css              # All styles β€” retro theme, tabs, filters, modal
β”‚   β”œβ”€β”€ js/app.js                  # Data fetch, hash routing, filters, render, modal
β”‚   └── data/                      # πŸ“‹ Human-editable JSON (the real source of truth)
β”‚       β”œβ”€β”€ categories.json        # Category IDs / labels / groups / icons
β”‚       β”œβ”€β”€ news.json              # Daily news feed (updated by GitHub Actions)
β”‚       └── events/                # Events split by topic
β”‚           β”œβ”€β”€ manifest.json      # Load order for all event JSON files
β”‚           └── *.json             # One file per category
β”œβ”€β”€ scripts/
β”‚   └── fetch-news.mjs             # πŸ“° Fetches RSS feeds β†’ docs/data/news.json
└── .github/workflows/
    └── fetch-news.yml             # βš™οΈ Runs fetch-news.mjs daily at 06:00 UTC

πŸ“‹ Event Format

Each event lives in docs/data/events/<category>.json:

{
  "id": "1981_rfc791",
  "year": 1981,
  "categories": ["Standards"],
  "title": "RFC 791 β€” IPv4 Published",
  "overview": "The Internet Protocol version 4 (IPv4) is standardized in RFC 791, defining the dominant packet format for decades.",
  "hashtags": ["RFC791", "IPv4", "Standards"],
  "links": {
    "wikipedia": "https://en.wikipedia.org/wiki/IPv4"
  }
}

Fields

Field Type Required Description
id string βœ… Unique key β€” lowercase, underscores, no spaces
year integer βœ… e.g. 1981
categories string[] βœ… One or more IDs from categories.json
title string βœ… Short event title
overview string βœ… 2–3 sentences describing the event
hashtags string[] βœ… Keywords for search and filtering
links.wikipedia string β˜‘οΈ Wikipedia article URL

πŸ–±οΈ Categories

32 categories organized into 10 groups displayed as a grouped pill bar on the homepage:

Group Categories
πŸ“œ Standards & Governance Standards, Governance, RIRs
πŸ“‘ Networking & Backbone Networking, Backbone Speeds, Submarine Cables, Wireless, IXPs & NOGs, Hardware & Vendors
πŸ’» Operating Systems Windows OS, Linux Distros, Mobile OS
πŸ‘¨β€πŸ’» Programming & Software Programming Languages, Software & Tools, Web Browsers, Streaming & Multimedia
πŸ’¬ Social & Messaging Social Networks, Messaging
πŸ€– AI & Emerging Tech Artificial Intelligence, Quantum & Next-Gen, Metaverse & XR
πŸ”’ Security & Policy Security, Policy & Regulation
πŸ’° Economy Finance, Market
☁️ Cloud & Infrastructure Cloud & Virtualization, Serverless, Edge Computing, CDN, Data Centers
πŸš€ Space & Satellite Satellite Internet, Space

Each entry in categories.json:

{
  "id": "Standards",
  "label": "Standards",
  "group": "Standards & Governance",
  "iconUrl": "icons/w98_help_book_small.ico"
}

πŸ’Ύ Contributing

The easiest way: click "+ Propose an Event" on the homepage β€” it opens a pre-filled GitHub issue, no fork required.

To contribute JSON directly, read CONTRIBUTING.md.


βš™οΈ Development

Pure static HTML + vanilla JS on GitHub Pages β€” no build step.

Running locally

npx serve docs
# open http://localhost:3000

Key files

File What it does
docs/js/app.js Parallel data fetch, hash routing, category pill bar, news tab, contribute modal, dynamic meta tags
docs/css/style.css Retro Win95 theme, view tabs, filter controls, decade jump nav, news cards
docs/data/categories.json Canonical category list β€” edit to add/rename categories
docs/data/events/manifest.json Load order for all event JSON files
docs/data/news.json Auto-generated daily β€” do not edit by hand
scripts/fetch-news.mjs Fetches RSS from RIPE Labs, APNIC, ARIN, Cloudflare, etc.

Hash routing

The app uses client-side hash routing. All routes are handled by app.js:

URL View
https://ipv4.events/ Timeline, defaults to 2020s
https://ipv4.events/#/category/networking Timeline filtered by category
https://ipv4.events/#/decade/1990s Timeline filtered by decade
https://ipv4.events/#/search/arpanet Timeline filtered by search term
https://ipv4.events/#/news News view

Dynamic meta tags

updatePageMeta() in app.js updates <title> and <meta name="description"> on every route change. This ensures Google's JS-rendering crawl indexes unique titles and descriptions per category, decade, and search view.

Asset cache busting

CSS and JS are loaded with a ?v= query param in index.html. Bump the version string on every deploy that changes these files:

<link rel="stylesheet" href="css/style.css?v=20260423i">
<script src="js/app.js?v=20260423i" defer></script>

πŸ“° News Feed

The News tab shows the latest articles from IPv4/internet news sources, fetched daily by a GitHub Actions workflow.

Sources: RIPE Labs, APNIC, ARIN, Cloudflare, The Register, IETF, CircleID

Workflow: .github/workflows/fetch-news.yml β€” runs scripts/fetch-news.mjs daily at 06:00 UTC and commits the result to docs/data/news.json via the GitHub Contents API (signed commit, satisfies branch protection).

To trigger manually: GitHub β†’ Actions β†’ "Fetch news feed" β†’ Run workflow.


🌐 SEO

This is a pure client-side SPA. SEO approach:

  • Single canonical URL β€” https://ipv4.events/ is the only URL in sitemap.xml. Category/decade/news routes are hash-based and not separately indexed.
  • Dynamic meta tags β€” updatePageMeta() sets unique <title> and <meta description> per route for Google's JS-rendering crawl.
  • HTTPS enforced β€” GitHub Pages "Enforce HTTPS" is enabled on the repo (Settings β†’ Pages). All http:// requests get a server-side 301 redirect. A JS fallback in index.html handles edge cases.
  • robots.txt β€” references the HTTPS sitemap.
  • Open Graph + Twitter cards β€” set in index.html <head>.

Note: Do not add category or decade URLs back to sitemap.xml. When Ahrefs (or other crawlers that don't execute JS) encounter these paths, they see thin-content pages and flag them as duplicates, which tanks the health score. The updatePageMeta() approach handles SEO for JS-capable crawlers (Google) without creating duplicate-content issues for non-JS crawlers.


πŸ“œ License

  • Code: MIT License
  • Content: CC BY-SA 4.0 (attribution required)

Made with πŸ’Ύ by IPXO and contributors.

About

Windows retro style timeline of technological events during the IPv4 era.

Topics

Resources

License

Contributing

Stars

3 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors