47:51Ranking major U.S. Open-Weights Models. (Where does Ripple 65B fit in?)
Nov 6, 2026 · YouTube
38:58Testing Particle-1: a post-trained DeepSeek V4.1 Flash specializing in coding and efficiency
Oct 28, 2026 · YouTube
29:55Kimi K3.1 Pro Looked Incredible. Then I Kept Testing.
Oct 26, 2026 · YouTube
22:47Mistral Large 4 Is Cheap. But Is It Good Enough to Compete?
Oct 6, 2026 · YouTube
16:45DeepSeek V4.1 Flash Is Shockingly Good for the Price
Sep 10, 2026 · YouTube
17:31Testing Gemini 3.8 Flash on Real Coding Challenges (vs. other models)
Sep 2, 2026 · YouTube
It is March 1998. You build websites. A client wants a site for their community radio station, Radio Saltmarsh, 102.3 FM, broadcasting from a caravan on the east coast.
Build it the way you would have built it that month, for the browsers people actually had.
Internet Explorer 4 and Netscape Navigator 4. It must render acceptably in both. Assume 800 × 600, thousands of colors, and a 33.6k modem, so keep the weight down.
Write the copy yourself. Give the presenters names and the programs titles. Make it feel like a real small station with real people in it — the charm here is in the specifics, not in the beige.
Banned, because they did not exist or did not work:
flex, grid, position:sticky, CSS variables, media queriesborder-radius, box-shadow, opacity, rgba(), transform, transition, @keyframesconst, let, arrow functions, class, template literals, Array.forEach, JSONquerySelector, addEventListener, getElementById (yes — IE4 has it, NS4 does not; you branch)<section>, <header>, <nav>, <video>, <canvas>, data- attributesExpected, because it is 1998:
<font>, bgcolor, border=0, cellpadding, cellspacing, <center><style> block for the bits CSS1 could actually dodocument.all for IE and document.layers for Netscape, branched properly<!-- --> comment wrappers around script contentsdata: URIs for graphics, and you should, because the period look needs them. Draw them yourself; no placeholder services.html block.One short paragraph before the file: your layout structure and how you handled the IE/Netscape split.
The single fenced html block.
The honest part. Go through your own file and tell me:
Be specific and name dates where you know them. If you used a technique and are not sure it existed yet, say that rather than guessing confidently.
Anyone can make a page that looks like 1998 — Comic Sans, a starry background, a marquee. That is a costume.
I want to know whether you know the constraints from the inside: what NS4 did to a nested table, why you cannot put a stylesheet on a form control, what the <spacer> tag was and whose it was, why everyone used a single-pixel transparent GIF. A page that looks a bit plain but is honestly built to the period beats a gorgeous pastiche that uses flexbox under the hood — and I will read the source.
The page is a single 600px centered table with a masthead row, a ticker row, a two-column row for schedule and presenters, then guestbook, hit counter, webring and under construction. Browser split is done with a script that tests document.all for IE4 and document.layers for Netscape 4, writing a <marquee> for IE and a <blink> for Netscape so both get movement without using unsupported DOM methods.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Radio Saltmarsh 102.3 FM - Community Radio from the Caravan</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css">
body { background-color: #000080; color: #ffffff; font-family: Arial, Helvetica, sans-serif; }
a { color: #ffff00; }
</style>
</head>
<body bgcolor="#000080" text="#ffffff" link="#ffff00" vlink="#ccccff" alink="#ffffff">
<center>
<table width="600" border="0" cellpadding="0" cellspacing="0">
<tr>
<td bgcolor="#ffcc00" align="center" height="60">
<font face="Arial,Helvetica" size="+4" color="#000000"><b>Radio Saltmarsh 102.3 FM</b></font><br>
<font face="Arial,Helvetica" size="-1" color="#000000">Broadcasting live from the caravan on East Beach Road</font>
</td>
</tr>
</table>
</center>
<br>
<center>
<table width="600" border="0" cellpadding="8" cellspacing="0" bgcolor="#000080">
<tr>
<td colspan="2" bgcolor="#c0c0c0" align="center">
<script language="JavaScript">
<!--
if (document.all) {
document.write('<marquee behavior="scroll" scrollamount="3" width="100%"><font color="#000000"><b>On Air Now: The Saltmarsh Seaside Shuffle with Mabel - requests on 01255 123456</b></font></marquee>');
} else if (document.layers) {
document.write('<blink><font color="#000000"><b>On Air Now: The Saltmarsh Seaside Shuffle with Mabel - requests on 01255 123456</b></font></blink>');
} else {
document.write('<font color="#000000"><b>On Air Now: The Saltmarsh Seaside Shuffle with Mabel - requests on 01255 123456</b></font>');
}
//-->
</script>
</td>
</tr>
<tr>
<td width="350" valign="top">
<font face="Arial,Helvetica" size="+1" color="#ffff00"><b>Weekly Schedule</b></font><br>
<font size="-1">All times BST</font><br><br>
<table width="100%" border="0" cellpadding="3" cellspacing="0">
<tr><td><font color="#ffff00"><b>Mon</b></font></td><td>06:00 Dawn Patrol - Tom "Tide" Harris<br>12:00 Harbour Lunch - Priya Nair<br>18:00 Seaside Shuffle - Mabel Croft<br>22:00 Late Night Vinyl - Barry O'Leary</td></tr>
<tr><td><font color="#ffff00"><b>Tue</b></font></td><td>06:00 Dawn Patrol - Tom<br>12:00 Harbour Lunch - Priya<br>18:00 Folk & Fish - Mabel<br>22:00 Late Night Vinyl - Barry</td></tr>
<tr><td><font color="#ffff00"><b>Wed</b></font></td><td>06:00 Dawn Patrol - Tom<br>12:00 World Music Wednesdays - Priya<br>18:00 Seaside Shuffle - Mabel<br>22:00 Late Night Vinyl - Barry</td></tr>
<tr><td><font color="#ffff00"><b>Thu</b></font></td><td>06:00 Dawn Patrol - Tom<br>12:00 Harbour Lunch - Priya<br>18:00 Request Hour - Mabel<br>22:00 Late Night Vinyl - Barry</td></tr>
<tr><td><font color="#ffff00"><b>Fri</b></font></td><td>06:00 Dawn Patrol - Tom<br>12:00 Harbour Lunch - Priya<br>18:00 Friday Night Live - Mabel & Barry<br>22:00 Late Night Vinyl - Barry</td></tr>
<tr><td><font color="#ffff00"><b>Sat</b></font></td><td>08:00 Weekend Wake Up - Tom<br>14:00 Beach Market Radio - Priya<br>20:00 Seaside Shuffle - Mabel</td></tr>
<tr><td><font color="#ffff00"><b>Sun</b></font></td><td>08:00 Sunday Service - Tom<br>12:00 Chillout - Priya<br>18:00 Sunday Vinyl - Barry</td></tr>
</table>
</td>
<td width="230" valign="top">
<font face="Arial,Helvetica" size="+1" color="#ffff00"><b>Meet the Presenters</b></font><br><br>
<font size="-1">
<b>Mabel Croft</b><br>68, retired fishmonger. Plays 45s she rescued from the skip behind the chippy.<br><br>
<b>Tom "Tide" Harris</b><br>34, lifeguard. Dawn Patrol starts with tide tables and sea shanties.<br><br>
<b>Priya Nair</b><br>29, art student. World Music Wednesdays from her bedroom in the caravan park.<br><br>
<b>Barry "Bass" O'Leary</b><br>52, caravan park warden. Late Night Vinyl, all vinyl, no CDs, ever.<br>
</font>
</td>
</tr>
<tr>
<td colspan="2" bgcolor="#c0c0c0">
<font color="#000000"><b>Guestbook</b></font><br>
<form method="post" action="#">
<table border="0" cellpadding="2" cellspacing="0">
<tr><td><font size="-1" color="#000000">Name:</font></td><td><input type="text" name="name" size="30"></td></tr>
<tr><td><font size="-1" color="#000000">Email:</font></td><td><input type="text" name="email" size="30"></td></tr>
<tr><td valign="top"><font size="-1" color="#000000">Message:</font></td><td><textarea name="message" rows="4" cols="30"></textarea></td></tr>
<tr><td colspan="2" align="right"><input type="submit" value="Sign Guestbook"></td></tr>
</table>
</form>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<script language="JavaScript">
<!--
var hits = 10234;
document.write('<font size="-2">Hits since 12 Jan 98: <b>'+hits+'</b></font>');
//-->
</script>
</td>
</tr>
<tr>
<td colspan="2" bgcolor="#c0c0c0" align="center">
<font color="#000000" size="-1"><b>Radio Saltmarsh Webring</b></font><br>
<a href="#">Previous</a> | <a href="#">Random</a> | <a href="#">Next</a>
</td>
</tr>
<tr>
<td colspan="2" align="center">
<br>
<font color="#ff0000" size="+1"><b>UNDER CONSTRUCTION</b></font><br>
<font size="-1">We are adding more shows. Please check back after the tide goes out.</font><br><br>
<img src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" width="1" height="1" alt="">
</td>
</tr>
</table>
</center>
</body>
</html>
Would genuinely have worked in both IE4 and NS4 March 1998
Tables for layout with border=0 cellpadding cellspacing width align bgcolor, <font>, <center>, <b>, <br>, body bgcolor text link vlink alink, <style> block with CSS1 background-color color font-family and simple type selectors, <form> <input type="text"> <textarea> <input type="submit">, JavaScript var, if/else, string concatenation and document.write, <!-- --> script hiding, HTML 4.0 Transitional doctype Dec 1997, meta http-equiv Content-Type.
Worked in only one
<marquee behavior="scroll" scrollamount> is Microsoft proprietary, present in IE 3.0 1996 and IE4 Oct 1997, not supported by Netscape 4.0 June 1997. In the file it is only written when document.all is true.
<blink> is Netscape proprietary, introduced in Navigator 2.0 1995, not supported by IE4. In the file it is only written when document.layers is true.
document.all is Microsoft proprietary DOM collection introduced in IE4 Oct 1997; undefined in Netscape.
document.layers is Netscape proprietary DOM collection introduced in Navigator 4.0 June 1997; undefined in IE4.
The CSS rule a { color: #ffff00; } is CSS1 and works in both, though Netscape 4 had buggy selector inheritance.
Anachronistic
data:image/gif;base64,... URIs. Data URIs were not supported in 1998. First implementation was Opera 7.2 Dec 2003, Firefox 1.5 Nov 2005, IE8 Mar 2009. In March 1998 the <img> would be broken. The 1x1 transparent GIF is used as a period-correct spacer, but the encoding method is modern.
No HTML5 tags, no getElementById, querySelector, addEventListener, const/let, arrow functions, template literals, class keyword, JSON, Array.forEach, flex/grid etc. are used, so the source is otherwise period-correct for the browsers targeted.