This site was built and tested to work well on IE 5 & Netscape 3.04
even from a Windows 3.11 computer.
New Window
Launching my new Throwback Website!
Posted on
Today I have launched throwback.kirsle.net, a “New Old Website” about Retro Computers.
This website is about old operating systems such as Windows 3.1 and Windows 98, and about the Old Web of the 1990’s to early 2000’s that coincided with these old operating systems. So, this website serves as a resource to download vintage software & drivers that can get these old OS’s running on modern systems (in emulators), and a directory of cool websites online that bring back online services and support for these older systems as well!
It is a new website built in 2026 but it is written using old HTML and CSS constraints, designed (& tested!) to work well enough even from a vintage web browser such as Internet Explorer 5.0 or Netscape 3.4, on Windows for Workgroups 3.11!
Note: most of the links on this post go to https: websites and probably won’t be viewable from a vintage web browser!
Inspiration
So, why have I decided to make a retro website? It was really a handful of things:
Personal nostalgia: my first computer ran Windows 3.1!
I got it when I was 5 years old and I went on to grow up with Windows from there, later having a Windows 95 and Windows 98 computer, the first of which we had Internet on at home was Windows 98.
I have a lot of fond memories of these old operating systems, and over the years I liked to dabble with them still, running them in virtual machines or emulators and playing with the old games and apps that I had growing up.
There have been a lot of cool new websites and services to support these older operating systems recently.
These operating systems are so old, that the latest versions of Web Browsers available for them don’t cope well anymore with the modern Internet. They don’t understand our new HTML, CSS and JavaScript, and even if they did, most websites nowadays are encrypted and the older web browsers don’t understand the modern encryption algorithms.
And, older versions of Windows had long ago lost support for the Windows Update service, locking fresh installations out from accessing Service Pack updates and drivers.
Some cool projects have popped up that allow vintage web browsers to access the modern Web (or to make the Old Web available to them once more, to visit old websites again like it’s 1999!), and some others provide replacement services for Windows Update and other old apps such as AOL Instant Messenger!
There is a general renaissance going on with The Indie Web, and a whole community of people are making new old websites and bringing back the spirit of the early Internet with unique and stylish home pages.
Websites such as Neocities that brings back memories of Geocities, and SpaceHey which is a modern clone of MySpace, they have me feeling super nostalgic.
I have a SpaceHey profile and I made my own “modern” old website on Neocities too. The latter is actually a ‘modern’ site that was only made to look super old-school, with the appearance of a table-based layout, but really it’s a CSS Grid and it works very nicely on mobile! A vintage web browser wouldn’t be able to render it, but, that’s what this new site is for!
The Challenges of Old HTML
So, I had first taught myself how to write my own websites in HTML around the year 2000 when I was 12 years old, so once upon a time, I lived and breathed this stuff. But, the Web has advanced so freaking much in the decades since, that writing an old-school website that actual vintage web browsers can cope with was actually a little challenging!
Here were some of the fun challenges.
Old HTML Tags
Old web browsers such as Internet Explorer 5.0 were only just starting to adopt “HTML 4.01,” but support was spotty across browsers and most websites in this era were written using the even older HTML 3 tags.
Old websites had no Cascading Style Sheets and all visual presentation styles were handled in HTML.
So tags like <font face="Arial" size="3" color="blue"> had to be liberally sprinkled around the page to control the font settings at all times. The <body> tag had attributes to set the background, text and link colors. Full page layouts, such as columns, were done by using <table> tags as we had nothing like Flexbox or CSS Grid to work with!
In HTML 4, we began to move towards CSS and keeping our style separate from our content, which is widely regarded to be a good move. But for my new old website, for maximum compatibility, I had to kick it old school.
I loathe the idea of writing a million <font> tags, though, and I also don’t envy the days when I used to write whole static websites by hand and had to keep the navigation bars in sync between all the pages. So I used the Hugo static website generator to build this site, using a custom theme written in old-school HTML, to minimize how much I would have to write myself to fill out the content.
Poor CSS Support
Internet Explorer 5.0 supports a little CSS, but its support is very hit or miss.
For example, moving something to the left with float: left seems to work, but there is no clear: left that you can follow it up with to fix your page flow in case the surrounding content doesn’t clear it (so that the rest of your page flow doesn’t become broken). It supports hiding an element with display: none and you can add a border: 1px solid red but it didn’t support attributes like border-bottom.
So, I decided I would use very minimal CSS on my website. Mainly just enough to recolor my headers to break up the visual flow of my page and make it easier to read.
Netscape 3.04 doesn’t even support that much and my page contents are woefully monochrome over there!
JavaScript 1.2
Another challenge is that JavaScript was very different to what we have today, and even back in the era, Internet Explorer and Netscape had different dialects of JavaScript. It was common for old web games to have two completely different versions, one that works in IE and the other in Netscape.
So I wanted to use an absolute minimum of JavaScript on this site so that I don’t break one of the old browsers and cause it to show error dialog pop-ups!
I used some JavaScript to make two minor enhancements:
Find all hyperlinks that lead to external websites, and make them open in a new window and have a visually distinct style.
With Hugo, most of the pages on this site are written in Markdown, which gets rendered automatically into HTML, and I don’t have much easy control to add target="_blank" to all the external links. So a JavaScript does this for me, so that you don’t lose your place on this site every time you check out one of my bookmarks!
In case the website is visited by a modern (mobile) browser, I want to make the site not terrible to interact with by slightly enhancing it with JavaScript. Which brings me to…
Making it Mobile-Friendly
I work on modern websites for a living, and in the modern world we all have smartphones, and true vintage websites are not mobile friendly at all, especially when they have a table-based layout with multiple columns. Back then, tables were the way to lay out your page: we didn’t have Flexbox or CSS Grid or anything fancy like that!
So, I wanted my website to be at least a little bit not terrible to look at on mobile.
Some parts of this were easy, like the classic meta tag:
Old browsers won’t know what to make of that, but mobiles will at least display the page as if it’s mobile-friendly (rather than a fully zoomed-out desktop view which is really hard to read and bother with).
For the table-based layout, I wanted the left nav column to be narrow by default on mobile, with a mobile-only “hamburger menu” button to toggle its size (so you can access the links, but still be able to read the page text comfortably when the menu is closed). For this I would need a little bit of JavaScript to spruce up the page, but written in a way that old browsers don’t freak out.
In order to not freak out Internet Explorer 5, I guarded my JavaScript code with a feature detection like so:
// Make an anonymous, self-calling function so we don't have to worry
// about `window.onload =` or the lack of `document.addEventListener()`
(function() {
// Detect whether the browser understands `document.querySelector()`,
// which indicates it is a modern-enough browser.
if (!document.querySelector) return;
// Do the needful here.
})();
When writing the remainder of the script, I couldn’t use new JavaScript syntax like const or arrow functions, as IE 5 was still trying to parse the code and would error out. But with that code above, IE 5 would fail the feature detection and bail safely.
Netscape 3.04, though, was another story.
Netscape 3 doesn’t support anonymous functions, so the function() keyword immediately threw an error. I’m not sure exactly how poor Netscape 3’s version of JavaScript is, because even when I tried making it a named function and assigning it to window.onload = init() Netscape still didn’t like the word function in function init() {}!
For Netscape, it turned out that I could prevent it from even trying to parse my JavaScript by guarding it like this on the HTML side:
Old browsers like Netscape support the deprecated language attribute of the <script> tag, and by putting “JavaScript1.2” there I tell Netscape 3 to skip trying to parse that code, as Netscape 3 only supported up to JavaScript1.1.
I have the document.write() there to embed the actual script on the page, as apparently, if that script tag were there in the HTML, then Netscape would still download and fail to parse the script even if the language="JavaScript1.2" attribute is on it. Apparently, Netscape’s back-end pre-fetches the script before Netscape sees the attribute that tells it it can’t run it!
Netscape 3 and text/javascript
A related quirk I learned about Netscape 3 is that it doesn’t understand the text/javascript MIME type for .js files (it expects them to be application/x-javascript), so if you embed a JavaScript on your page, Netscape will prompt the user to download it!
For my website, I had to configure my web server (NGINX) to use the Netscape-preferred MIME type in case I ever want Netscape 3 to run an external JavaScript in the future:
# nginx config
server {
server_namethrowback.kirsle.net;
listen80;
listen[::]:80;
# Legacy MIME type for Netscape 3.4 to understand JS files.
location ~ \.js$ {
# Clear out the nginx MIME types list to
# prevent any conflicts.
types { }
# Use the legacy JS MIME type.
default_typeapplication/x-javascript;
}
root/var/www/html;
indexindex.html;
location/ {
try_files $uri $uri/ =404;
}
}
For now I don’t really care to and all my scripts have a JavaScript1.2 guard, but while I was trying to debug this stuff, I saw Netscape showing me a download prompt every time I refreshed my pages!
More to come!
I will be updating this new website, at least for a little while, as I add new download links and write some tutorials myself!
It has its own static web blog where I will post about topics relevant to Retro Computing and Old Web 1.0 nostalgia.