Fig. 01

Turn the old web back on.

Your corner of the internet

Short links, hosted homepages, link trees, hand-curated webrings, and five widgets you paste onto any page — guestbook, hit counter, poll, status pill, banner strip. Self-hosted, on a box you already own.

Self-hosted 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
9
Paste-in
5 one-liners
Hosted
2 pages
Runs on
Your own box
Source
Coming soon

9 surfaces

What it puts on your page

Five of them are a single line you paste into any page. Two 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
  • 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://your-host/p/your-slug

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://your-host/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://your-host/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://your-host/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://your-host/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://your-host/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://your-host/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
Part of the public SPA, so it ships wherever you deploy it.

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.

Release in preparation

Running it yourself

LinxMax runs daily on its own hardware. Getting it to the point where somebody else can run theirs — licence, packaging, a first-run that assumes nothing — is what is left.

Source
Release in preparation. When it is up, this page says where — there is no repository to point at before then.
Licence
Chosen before the source goes up, rather than sorted out afterwards.
Price
Free. No commercial tier, no hosted plan, nothing to sign up for.

The honest reason it is not out yet is the boring one: it is a one-person project that grew up on one LAN, and the parts that are fine for that are not the parts that are fine for a stranger’s server. Ports, secrets handling and the first-run experience all assume somebody who already knows the layout.

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.