yahew.com The guestbook

The guestbook

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.

The whole dynamic surface was one HTML comment

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.

Notepad/home/yourname/public_html/guestbook.html

        
Netscapehttp://your.host.com/~yourname/guestbook.html

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.


Sign it. This one is real.

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.

Smilies:

*

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.

The book

Downloads the whole book as guestbook.html, sentinel and all, ready to drop on your own host.


One line in the config is the honest answer to why they died

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.


What arrives in a guestbook that is still running

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.

  1. #4,187 Hola
  2. #4,188 greetings!
  3. #4,189 saludos desde madrid :)
  4. #4,190 Кто здесь?
  5. #4,191 honey please come home
  6. #4,192 Labaspreces point eu /wp-json/ a bot probing for a WordPress endpoint

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.


Field marks

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,192

An 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: USA

City, 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.

&#x4a;&#x61;&#x6e;&#x69;&#x73;

Email addresses written as hex entities

every character, like &#x4a;&#x61;&#x6e;. 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.

What it solved, and what took it

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.

Back to the directory.

Sources, and what is deliberately absent

Prev The hit counter Next The tagboard