$ cat ./posty/devlogi/pivot-devlog-0.md

cutty devlog #0 — czemu jeszcze jedna skracarka linków

maj 19 12:07 | 3 min | autor: esej | #devlogi
● aktualizacja 2026-05-19 — projekt pivot ewoluował do cutty.dev. Ten devlog to historia rozwoju, ale produkt żyje dalej pod nową nazwą i nowym stackiem.

$ git log –oneline pivot/

pivot ma w /projekty/pivot/ swoją stronę-dokumentację, gdzie wszystko jest poukładane jak w README: featurki, stack, API, roadmap. Profesjonalnie. Bezosobowo. Tak, jakby projekt napisał kompetentny zespół, który ma standup co rano.

Ten post jest o tym, jak to wyglądało naprawdę. Trochę o tym, że jedna z tych „kompetentnych osób” to ja, druga też ja, a standup robi mi Simba o szóstej rano, kładąc się na klawiaturze.

== prolog ==

Dwa lata temu wkleiłem znajomemu link do dokumentu na Google Drive. Link miał 217 znaków, z czego 180 to był token autoryzacji wyglądający jak hasło wifi sąsiada. Znajomy spojrzał, powiedział „ej, możesz mi to inaczej wysłać” i poszedł zrobić sobie kawę.

Wtedy pomyślałem: muszę mieć własną skracarkę.

Potem przez dwa lata jej nie miałem.

== „to weekend roboty” ==

To zdanie, które każdy programista wypowiada przynajmniej raz przed każdym projektem, który zajmie mu trzy miesiące. Wypowiedziałem je w sobotę 17 maja, około 22:30, po trzecim espresso i jednej myśli: „co ja właściwie robię z życiem, skoro nie mam własnej skracarki linków”.

Pierwsza rzecz, którą napisałem — nazwa. Bo dobra nazwa robi 70% projektu, a zła zabija go zanim ktokolwiek napisze pierwszą linię kodu. (Tak, mam projekty, które padły bo nazwa brzmiała głupio. Nie pytaj.)

Lista nazw, którą rozważałem:

  • ln — komenda unixowa, idealna semantyka, ale brzmi jak rejestracja samochodu
  • jmp — assemblerowy skok, hardcore, ale 90% odbiorców nie złapie
  • 301 — kod HTTP redirect, pierwsza myśl normalsa: „co to za błąd”
  • tnij — polski rozkaz, swojski, ale traci unix-vibe
  • cut, sed, mov, hop, bounce, warp — wszystkie dobre, ale za miękkie

W końcu padło pivot. Z Metasploita — w slangu pentesterskim pivot to przeskakiwanie przez skompromitowanego hosta, żeby dostać się dalej w sieć. Krótki link to literalnie pivot przez mojego hosta do twojego celu. Semantycznie się zgadza, brzmi groźniej niż „skracarka”, i jest na tyle prosto, że babcia nie zapyta co to znaczy. Bo nie zapyta — zignoruje. Lepiej.

== plan na MVP ==

Trzy endpointy, jedna tabela:

POST /pivot          # tworzy krótki link
GET  /p/{slug}       # 301 redirect
GET  /p/{slug}+      # statystyki (plus na końcu jak w bit.ly)

Schema bazy:

CREATE TABLE wp_esej_pivot (
  slug VARCHAR(8) PRIMARY KEY,
  url TEXT NOT NULL,
  hits INT DEFAULT 0,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

I to wszystko. Słownik base62, 4 znaki = 14.7M unikalnych. Generuję random, sprawdzam czy nie ma kolizji, jak jest — retry. Statystycznie nieosiągalne przy moich kilkudziesięciu linkach miesięcznie, ale lubię kod, który ma sens nawet w teorii.

== co już zostało zrobione ==

  • [x] nazwa
  • [x] spec (TEN post + strona /projekty/pivot/)
  • [x] decyzja: bez nowego runtime, wszystko w PHP wewnątrz motywu WP

== co jeszcze nie ==

  • [ ] jakiekolwiek linie kodu

Ale spokojnie. W przyszłym tygodniu.

(Jak Simba pozwoli.)


// PS: jak ktoś z was ma swoją skracarkę linków od weekendu i jakoś jeszcze nie umarł — daj znać, porównamy bazy danych.

// PPS: jak ktoś z was JESZCZE NIE MA swojej skracarki — co robisz z życiem.