
1995. A stranger typed into a form and a Perl script wrote it straight into an HTML file sitting in your own directory. You could FTP it down and open it in Notepad.
guestbook.html is a plain static file. guestbook.pl opens it, reads down the lines, and when it hits the sentinel it writes the new entry and puts the sentinel back. That is the entire mechanism.
Your visitors' comments were a file, in your directory, on your host. Nobody could deprecate it, rate limit it, or decide your comments now belonged to somebody else's engagement metric. You could delete one line with a text editor.
The field names below are the ones from addguest.html: realname, url, city, state, country, comments. Asking a stranger where they were from, and them answering, is a fact about how small the web was.
No email field, on purpose. The 1995 form had one, and every live book captured for this plate hex-encodes the addresses character by character against harvesters. That obfuscation is itself the field mark: posting your address in a guestbook got you spammed, and that is the same force that killed the format. This plate does not collect one.
Downloads the whole book as guestbook.html, sentinel and all, ready to drop on your own host.
This is the options block from guestbook.pl, unedited. Read the second to last line.
$guestbookurl = "http://your.host.com/~yourname/guestbook.html";
$guestbookreal = "/home/yourname/public_html/guestbook.html";
$guestlog = "/home/yourname/public_html/guestlog.html";
$cgiurl = "http://your.host.com/cgi-bin/guestbook.pl";
$date_command = "/usr/bin/date";
# Set Your Options:
$mail = 0; # 1 = Yes; 0 = No
$uselog = 1; # 1 = Yes; 0 = No
$linkmail = 1; # 1 = Yes; 0 = No
$separator = 1; # 1 = <hr>; 0 = <p>
$redirection = 0; # 1 = Yes; 0 = No
$entry_order = 1; # 1 = Newest entries added first;
# 0 = Newest Entries added last.
$remote_mail = 0; # 1 = Yes; 0 = No
$allow_html = 1; # 1 = Yes; 0 = No
$line_breaks = 0; # 1 = Yes; 0 = No
$allow_html = 1 is the shipped default. Raw HTML from an anonymous stranger, written straight into your homepage, with no review, in 1995. Not a bug and not an oversight, just what the web assumed about people at the time. Every guestbook horror story after that follows from this one line, and you can verify it in the file rather than take it on faith.
This guestbook escapes everything before it stores it, so the field it documents is not reproduced. That is a deliberate departure and it is the only one.
A hosted book captured for this plate had reached entry 4,192. Its previous ten signatures took two months. Another book on the same service took a full year to collect ten. This is the last stretch of the first one.
Roughly five signatures a month, four languages, and a measurable share of them machines. The counterpoint worth keeping is that the same service still hands you an RSS feed of your own book, which is more than most comment platforms will do.
How to spot a guestbook.
$entry_order = 1;The newest entry is at the top
$entry_order = 1 is the default, so almost every book you have ever seen reads backwards through time without anyone deciding that.
Monday, August 02, 1999 at 14:23:05 (EDT)A date like
Monday, August 02, 1999 at 14:23:05 (EDT). Full weekday, full month name, the literal word "at", parenthesised timezone. It comes from one shell call to /usr/bin/date and nothing says 1995 faster.
Number: 4,192An incrementing entry number
printed on every signature. Real books show numbers in the thousands next to ten entries a year, because the number counts everything that was ever posted, including what got deleted.
Country: USACity, State, Country fields
with country pre-filled as USA. That default dates and locates the script better than any comment in it.
<b>comments</b><br>name
place - date
<hr>Comments in bold above the name
then the location, then the date, then an <hr>. That is the order guestbook.pl writes them in.
JanisEmail addresses written as hex entities
every character, like Jan. Harvester defence, and proof of what posting your address actually cost.
<tr height="1" bgcolor="#DFDFDF">Nested tables with a one pixel hairline row
The hosted services build the frame as a table inside a table, with the rule made of a <tr height="1"> holding an empty cell.
A guestbook was the only way a stranger could leave a mark on your page, and the mark landed in a file you owned. No account on either side. You could read it, edit it, back it up, or delete it, and if your host vanished you still had the HTML.
What took it was that the same open door let anyone write to your homepage. Spam arrived, then the address harvesters, and the fix was to hand the whole thing to a hosted service with a filter. That worked, and it also moved your visitors' words onto somebody else's server, which is where comments have lived ever since.
A stranger could say something on your page, and it landed in a file that stayed yours.