Fig. 01

Turn the old web back on.

Your corner of the internet

Hosted homepages, short links, link trees, hand-curated webrings, and five widgets you paste onto any page — guestbook, hit counter, poll, status pill, banner strip. Nine surfaces over one database, built to assume each other.

No algorithm Counter: no JS One visit per IP Yours to keep
Hit counter
Guestbook
Recent2 signed

found you through the webring — great taste in fonts

marcy · 12 Aug

hello from 1998

anon · 09 Aug

Awaiting review: 1

Webring
‹ PrevStrange blogsNext ›

Join this ring

Short link
lnx.mx/7f6k9

Edit the target later

Poll

Which one should I add first?

Guestbook46%
Hit counter33%
Webring21%

One vote per visitor

Status pill

rewriting the marketing site, again

Updated 2h ago

Surfaces
10
Paste-in
5 one-liners
Hosted
3 pages
Wired to
Each other
Source
Not released

10 surfaces

What it puts on your page

Five of them are a single line you paste into any page. Three are pages the software hosts for you. The other two are the link shortener and the webring. Use one, use all of them, use none — they share a database and nothing else.

Publish.

A homepage, a page of links, a short URL, a row of badges for your friends. Somewhere of your own that you hold the keys to.

  • Short links
  • Pages
  • Neighbourhoods
  • Link trees
  • Banner strips

Connect.

Rings of sites a person curates, and a book visitors can sign. Discovery and conversation without an algorithm in the middle.

  • Webrings
  • Guestbooks

Signal.

A counter, a poll, a line saying what you are up to. Enough to show the place is lived in, and nothing that profiles whoever visits.

  • Hit counters
  • Polls
  • Status pills

Short links

Redirect

Pick a slug or let the server generate one. Update the destination later — the short link keeps working. Hits counted, no visitor profiling.

Pages

Hosted page

A homepage of your own, built from blocks rather than a blank file: text, pictures, free-form HTML, and any widget above dropped straight in.

https://lnx.mx/p/your-slug

Neighbourhoods

Hosted page

Give a page a street address instead of a name. Pick a neighbourhood, pick a street, pick a number — and land somewhere with neighbours, which is the part a list of slugs never had.

https://lnx.mx/n/Hollywood/Lot/4737

Link trees

Hosted page

A hosted, themed page of link buttons. Each button records a click on the way through. Edit the list without losing the counts.

https://lnx.mx/t/your-slug

Webrings

Ring

Browse and join curated rings of indie sites. Next/prev/random navigation that works without JS, and join requests a person reads before anything appears.

Guestbooks

Embed

The sign-my-book widget, back from the dead. Visitors leave a message; nothing appears until you approve it. Rate-limited and honeypotted.

<script src="https://lnx.mx/guestbooks/embed.js" data-guestbook="ID" async></script>

Hit counters

Embed

The odometer, as a plain image — no JavaScript at all. Counts unique visitors once per IP per day, so a refresh does not inflate it.

<img src="https://lnx.mx/counters/ID.svg" alt="visitor count">

Polls

Embed

Ask one question, get bars back. One vote per visitor, and the results stay hidden until they have voted. Editing options preserves the votes.

<script src="https://lnx.mx/polls/embed.js" data-poll="ID" async></script>

Status pills

Embed

A small “what I am up to now” line — emoji, text, and how long ago you changed it. You curate it; the public only reads it.

<script src="https://lnx.mx/status/embed.js" data-status="ID" async></script>

Banner strips

Embed

A hover-grow row of 88×31 badges linking to your friends’ sites. Curate a set in the admin, paste one script tag, done.

<script src="https://lnx.mx/banners/embed.js" data-set="ID" async></script>

Fig. 02 · rendered, not screenshotted

What the widgets look like

These are drawn by this page, in this palette, to the shape the servers emit — not screenshots. There is no instance to photograph, and a mocked-up screenshot of software nobody can open is exactly the claim this site no longer makes.

Guestbook rendered
Recent2 signed

found you through the webring — great taste in fonts

marcy · 12 Aug

hello from 1998

anon · 09 Aug

Awaiting review: 1

<script src="https://your-host/guestbooks/embed.js" data-guestbook="ID" async></script>

Always moderated. Nothing shows until you approve it.

Poll rendered

Which one should I add first?

Guestbook46%
Hit counter33%
Webring21%

One vote per visitor

<script src="https://your-host/polls/embed.js" data-poll="ID" async></script>

One vote per IP, ever. Results hidden until you vote.

Status pill rendered

rewriting the marketing site, again

Updated 2h ago

<script src="https://your-host/status/embed.js" data-status="ID" async></script>

You curate it; the public only reads it.

Banner strip rendered
A strange
blog
Cool site
club
Under
construction
<script src="https://your-host/banners/embed.js" data-set="ID" async></script>

88×31, the dimension the format actually shipped at.

Link tree rendered

notdsk

lnx.mx/t/notdsk

My blog

Photos, 2004–

Guestbook

Clicks counted via /go/

https://your-host/t/your-slug

A page it hosts. Clicks survive an edit.

On the wire

Every embed is one tag. No build step, no npm install, and no framework landing on someone else’s blog. The hit counter is a plain <img>, so it works with JavaScript switched off entirely.

Specifics

How each part behaves

Claim on the left, the actual specifics on the right. Where a behaviour has a caveat, the caveat is in the table rather than in a footnote nobody reaches.

Embeds are one tag, and they stay one tag

Create the thing in the admin, hit Copy embed, paste it once. It renders on a static site, a Neocities page, or whatever CMS you are still running — nothing about the host has to change.

What you paste
Install
One <script> or <img> tag. No build step.
No-JS
The hit counter works with scripts off. The other four need JS.
Public write
Signing a guestbook and voting in a poll need no API key — a visitor has none.
Abuse
Rate limits, a honeypot field, per-IP dedup, and moderation on the guestbook.
Preview
Every widget has a hosted preview URL, so you can see it before you paste it.

Links that outlive the destination

The whole point of a short URL is durability. Each mapping lives in your own database; when the target moves, you update it once and every link that was ever shared keeps working.

What survives an edit
Slug
Custom, or a random hash whose length you choose.
Editable
Change the destination without breaking the short link.
Counting
Hits per mapping. No visitor profiling, no per-person history.
Link trees
Buttons route through /go/ to count a click, then redirect.
Export
lnx export dumps every mapping as JSON, any time.
Backup
One pg_dump. It is your database on your box.

Webrings, moderated by a person

Webrings were the original answer to discovery without an algorithm, and they worked because somebody read the join requests. That part is not automated here either.

Who approves what
Joining
A visitor submits their site; the ring owner reads it. Nothing is listed until a person approves it, and no bot approves anything.
Navigation
Next, previous and random — server-side redirects, no JS required.
Widget
One per ring, pasted once on each member site.
Directory
Browsable on the LinxMax beta

The parts list moved

The components, the default port map and what running it needs are on the architecture page. Every surface, one card each, is on features.

One database, nine surfaces

How the pieces connect

None of these is worth much on its own. A guestbook nobody can find is a form; a hit counter nobody trips is a zero. What makes them a place is that they are wired to each other.

A page holds the rest
A hosted homepage is an ordered list of blocks, and one kind of block is any of the widgets — pick it from a list, the page writes the embed. That is the only way a script reaches a page here, which is why it is a dropdown rather than a text box.
A ring moves people between them
A webring is a hand-kept list of sites with a next and a previous, and it is the piece that brings anyone to the rest. Nobody applies to it and no score decides the order — a person keeping the ring decided you belong on it.
The visit leaves a mark
Somebody arrives from the ring, the counter on that page ticks, they sign the guestbook, you approve it. Three surfaces, one visitor, and no account anywhere in it — the counter and the poll tell repeat visits apart by a salted fingerprint that is not an address and cannot be turned back into one.
One database under all of it
The surfaces share a database and nothing else — no bus, no plugin system, no per-widget account. Use one, use all nine, use none of the others.
Availability
Free, with no commercial tier. In closed beta: everything published here is public to read, and making your own is not open to everybody yet. The source has not been released.

The shape this is copying is older than the software. A personal page with a ring badge at the bottom, a counter under it and a book to sign was not nine features — it was one habit, and the habit was that the way you found the next site was that a person had put it there.

So the parts are built to assume each other. A homepage can hold any widget as a block. A ring walks a list somebody keeps by hand. Neither of them needs an account, a profile, or a feed, because the thing doing the recommending is the person whose page you are standing on.

Go find a strange blog.

Webrings, guestbooks and hit counters were how people found each other before an algorithm did it for them. The about page has the longer version — what this is, what it deliberately isn't, and what state each part is really in.