aboutsummaryrefslogtreecommitdiffstats
path: root/web/index.html (follow)
Commit message (Collapse)AuthorAge
* web: plainer front page copy -- themes, effects, scripting, floats, installuser2026-09-24
|
* web: a recording of the theme picker, and the tour step for ituser2026-09-22
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The landing page's feature tour is scripted recordings -- driver scripts against `slosh --script` on a virtual clock, re-rendered by `make` so a UI change can never leave a stale demo -- and the picker is exactly the kind of thing that does not survive being described. "Moving the selection applies the theme" is a sentence; twenty-six seconds of a session changing colour under a list is the claim itself. demos/themes.py: a sidebar session with two tabs and a build pane that says it is busy (so the spinner is in shot, turning in whatever colour the theme being tried says it should), `cat config.kdl` showing a config that names a theme and holds no colours at all, then C-a t -- the list, two themes worn rather than swatched, `pho` typed to narrow, C-s writing the one line, a second `cat` proving it wrote that line and nothing else, and finally a browse that ends in Escape, which puts back what was worn. Two rules the demo had to obey, both now in PLAN.md beside the other lessons: only dark themes, because cells slosh does not paint keep the terminal's own background and the cast header fixes that once -- `paper` would look broken in the player and fine in a light terminal; and nothing on screen may carry this machine, so the themes are copied next to the temp config rather than pointed at with `theme_dir`, leaving a `cat` frame that reads as a name and a directory nobody has to have. The step slots after "make it yours, live", which is where a reader has just been shown a config being edited by hand and is best placed to notice that a theme is one word of it. Casts are built at publish time, so build-site picks the new one up with no wiring.
* sidebar: statuses wear italic instead of an indent, and can wear colouruser2026-09-10
| | | | | | | | | | | | | | | | | | | | | | | Three columns of indent is a fifth of a sixteen-column sidebar, spent saying 'this belongs to the row above'. The slant says it in none: a status now starts in the same column its tab's name starts in, and is set in italic. That also survives the monochrome themes in contrib, where a colour-only distinction would have had nothing to spend. tab_status_fg / tab_status_bg are there for themes that do have colour to spend. The fg follows tab_count when a theme does not name it -- the same declared/derived split apply_scrolled makes -- so the six themes in contrib get coherent status rows without a line added to any of them. The bg is unset by default, because a band is opt-in and 'none' is what a translucent terminal wants; the row is padded so a band that *is* set covers the row rather than the words on it. Two things fell out. The padding loop existed three times and is now pad_cells. And cb_color wrote #000000 for an unset colour, so quietly pinned attach_bg -- 'gray ink on the terminal's own background', says its comment -- to a black band. Unset colours are now written commented out, the same trick the states block uses for what it wants re-derived rather than pinned.
* web: on one column the hero hovers, not a copy of the logouser2026-09-03
| | | | | | | | | | | The stage-resident logo copy goes: instead the top section itself -- logo and buttons -- is position: sticky below 54rem, full-bleed, with the tour's stage tucked under it at --hero-h, which the page script measures (wrapping buttons make it no fixed number; a ResizeObserver keeps it honest). The tagline yields the room: with the header on screen at all times, every line it keeps is a line the tour loses. Desktop is exactly as before -- the floating logo, its observers and its collision test untouched.
* web: the floating logo, on one-column screens toouser2026-09-03
| | | | | | | | | Below 54rem the fixed corner the float centres itself in is content, not air, so the float stays hidden there -- but the logo can ride where the terminal does: a small copy inside the sticky stage, above the player, on screen at all times. No observer, no collision test; it sticks with the stage. Same link back to the top, same wash and shine (the shared rules now name both), same reduced-motion fallback.
* web: carduser2026-09-02
|
* web: arch install as three copyable stepsuser2026-09-02
| | | | | | | | | The pacman.conf section and the install command each get their own box (one copies config, the other a command; sharing a box made the copy button copy neither cleanly), and ghostty-terminfo moves from the aside into the install box as a commented optional line, marked x86_64-only -- extra does not build it for aarch64, where slosh's self-installed ~/.terminfo copy is the whole story.
* arch: point at ghostty-terminfo, the pacman spelling of the entryuser2026-09-02
| | | | | | | | optdepends says it at install time, the README and the install tab say it before. Our package deliberately does not ship the file: extra/ghostty-terminfo owns that path, and two packages must not. Without either, slosh's own ~/.terminfo copy covers it. pkgrel=2, both architectures rebuilt and republished.
* web: the released version in the hero, linking to the releaseuser2026-09-02
| | | | | | Stamped by build-site from ./VERSION, which the release invariant keeps equal to the newest tag -- so the page cannot advertise a version that was never cut, and nothing is bumped by hand.
* web: contributing section, shorteruser2026-09-02
|
* web: a contributing section -- the github and the discorduser2026-09-02
| | | | | | The multiplayer patch proved the repo takes patches; say so where people can see it, and give the not-yet-an-issue conversations somewhere to happen.
* web: no em dashes on the landing pageuser2026-09-02
| | | | | | Colons, commas and semicolons where twelve of them stood. People read an em dash as the house style of a language model, and the landing page is not the place to argue.
* web: the sessions step mentions shared attachuser2026-09-02
|
* web: choreuser2026-09-02
|
* web: choreuser2026-09-02
|
* install: source tab clones from githubuser2026-09-02
|
* install: key enrollment commands right in the pacman tabuser2026-09-02
| | | | | | The three commands were a link away in contrib/arch; a repo whose packages refuse to install without the key should hand them over where the repo is advertised.
* public links: point at github.com/sl0p-foo/slosh instead of cgituser2026-09-02
| | | | | | | | GitHub is the public interaction point now. The formula and PKGBUILD fetch GitHub's /archive/ tarballs (same git-archive bytes, per-ref stable); the PKGBUILD is bumped to 0.1.2 while at it, and its cd's drop the v -- GitHub tag archives extract to slosh-X.Y.Z/. The cgit remote stays for pushing; only published URLs change.
* install tabs: macOS / linux / sourceuser2026-09-02
|
* install: drop install.sh, point at GitHub releases for binariesuser2026-09-02
| | | | | | | The landing page now shows the releases page for direct downloads and only lists package manager tabs (homebrew, arch, source). The linux installer script and the windows curl recipe are gone — the releases page is the single place for prebuilt binaries.
* point homebrew tap at github.com/sl0p-foo/homebrew-sloshuser2026-09-02
| | | | | brew auto-resolves GitHub taps, so the explicit URL is no longer needed: 'brew tap sl0p-foo/slosh' is all users type.
* web: cleanupuser2026-09-02
|
* web: the logo becomes geometry -- fonts cannot break rectsuser2026-08-30
| | | | | | | | | | | | | | | | | | | Android reports arrived of the logo rendering shattered, and the cause is the ascii itself: the default monospace there has no block glyphs, so every ▀▄█ falls back to whatever font volunteers, each with its own metrics, and the grid comes apart. No font stack fixes a missing glyph, and shipping a font is against the house rules. So the logo stops being text: web/gen-logo-mask turns logo.txt into an SVG of merged rects, inlined into site.css as a data URI and used as a CSS mask on an empty element. The animated background layers show through the mask exactly as they showed through background-clip: text, so every effect survives -- gradient slide, shine, hue, glow -- and two old hacks retire with the fonts: the letter-spacing pinstripe fix, and (after one round of seams at fractional mask scales) a vertical overlap baked into the rects. Same 318x84 box, same placement math, and a hero that reads as role=img with a label instead of seven rows of block glyphs.
* web: a one-line footer -- slosh is a sl0p.foo productuser2026-08-30
| | | | | | The page gets its colophon back, at a fraction of the old footer's size: one centred mono line in the floor's own greys, the link a shade brighter and pink under the pointer.
* web: the hero button says try it, like the section it goes touser2026-08-30
|
* web: the whole step is the road, not just its titleuser2026-08-30
| | | | | | | | | | Clicking anywhere in a dimmed article glides it to the centre and so, through the observer, switches the recording. Three guards keep the click meaning navigation: the active step does not react (clicks there are for reading and selecting, not going where you already are), a selection is not a click, and a link is a link. The pointer cursor and the title's breath of pink now belong to dimmed steps only -- the active one is just prose.
* web: a step's title is a road to the stepuser2026-08-30
| | | | | | | | Clicking an article's h3 glides it to the middle of the viewport -- the exact spot where the tour's observer activates it, so the click also switches the recording, through the same door scrolling uses rather than a second mechanism. The pointer cursor and a breath of pink on hover say clickable.
* web: the floating logo yields to the buttons and the rising terminaluser2026-08-30
| | | | | | | | | | | | | | | Two overlaps the section observers missed. The show opened on the big logo leaving, but the hero's buttons sit below it, so there was a band of scroll with the little logo arriving on top of install/try/docs -- observe the whole hero instead. And at the tour's exit the stage unpins and is dragged up through the logo's air before the try section crosses its line -- no section boundary says so, but two rects do: a rAF-throttled collision check against the pinned player's rect, and whenever the terminal would touch the logo, the logo yields. Verified by sweeping fifteen scroll positions: shown through the whole tour, hidden over the buttons, the rising terminal, the demo box and the install tabs, with zero overlapping frames.
* web: the casts play at 1.75x -- the owner has watched them enoughuser2026-08-30
|
* web: one knob to hurry every cast on the pageuser2026-08-30
| | | | | | | | | window.SLOSHCAST_SPEED, multiplied into each mount's own data-speed: the front page sets 1.25 and every recording plays a quarter faster than authored, the scripts under demos/ untouched -- their pacing is theirs, and how much of it a visitor's attention span gets is the page's call. The clock keeps counting cast-time, so the timestamps mean the same thing at any speed.
* web: the panes cast shows the drop bands, not just the swapuser2026-08-30
| | | | | | | | | | | | | | | | The title drag had one beat -- drop in the middle, trade places -- which undersells the feature: carried over a pane, the target subdivides into a centre and four edge bands, a band meaning "in beside it, on this side", filling the half it would hand over while every other candidate greys out. The cast now lingers over the centre, steers into a band, and drops -- and the drop restacks the whole tab, a rearrangement no swap could produce, chosen so the release visibly changes the layout (the first cut dropped a pane beside the neighbour it already had, and proved nothing). The band is aimed by its entry in the compositor's hit list, like every coordinate in these demos: the rect the program promised is the rect the pointer hits. The panes article's bullet follows suit.
* web: power off is a button, not a cheeky linkuser2026-08-30
| | | | | | A real ghost button centred under the running machine, in the hero buttons' own dress -- ghost on purpose: booting stays the loud verb, stopping the quiet one. The caption drops to a side note beside it.
* web: the demo machine can be powered offuser2026-08-30
| | | | | | | | | | | | A caption under the running machine offers the off switch, dressed as a link inside a sentence. Dropping the iframe out of the DOM tears the whole VM down -- emulator, kernel, disk cache, the lot -- the stage shrinks back into the poster (the original nodes come back from a stash, listeners and all, so the boot button is immediately live again), and the scroll follows both ways. Reload always did this; the button does it without taking the rest of the page with it.
* web: the demo machine, bootable in the front pageuser2026-08-30
| | | | | | | | | | | | | | | | | | | | | | | A try section between the tour and the install box: a modest poster with one button, and the machine only when the button is pushed -- the front page keeps costing two files, which is the decision the README recorded when the demo got its own page, still being honoured. The click grows the stage to most of a viewport *before* the iframe goes in (the guest reads its geometry from the room exactly once, at boot), then glides the scroll to land the machine centred. An iframe, not the demo's scripts inlined: the emulator's emscripten glue owns its globals by name, and isolation is what keeps this page and that blob out of each other's namespaces. ?embed=1 makes the demo page drop its own header and footer inside the frame; standalone it is unchanged, and phones navigate to it rather than embedding -- wasm under a soft keyboard in an iframe helps nobody. The floating logo learns the tour's edges properly while at it: the try section arriving closes the show (measured with a -45% rootMargin, because the tour's exit margin lets the section ride high while the last step is still centred), and a section scrolled past counts as arrived, not gone.
* web: centre the floating logo in the air above the terminaluser2026-08-30
| | | | | | | | | | | | | A fixed top worked at one viewport height and overlapped the pinned terminal at others: the terminal's top edge is (viewport - the stage's lift padding) / 2 - half the player, which no constant tracks. Measure it instead, centre the logo in what remains, and hide it outright when a short viewport leaves no air -- hiding beats overlapping. Re-placed on resize and by a ResizeObserver on the player mounts, not on the pin: the players are zero-height until their casts arrive, and the pin is a 100vh box that never resizes, so watching it would freeze the placement at the pre-load height.
* web: a seventh cast -- floats, and the cheatsheetuser2026-08-30
| | | | | | | | | | | | C-a F drops a throwaway shell over a working layout; a monitor runs in it, moves with the keys that move boundaries, grows about its centre. Then C-a ?, the cheatsheet built from the bindings actually in force, and exit closes the float with the layout exactly as it was. The monitor is an htop impression with authored numbers, not htop: a recording that renders differently every run is a bug here, byte-for- byte is the contract. Phosphor, because every cast in the tour records under its own theme so the next step reads as a scene change.
* web: a whole lot of html/css wranglinguser2026-08-30
|
* web: sloshcastuser2026-08-30
|
* arch: sign the packages and the database, and say whose keyuser2026-08-29
| | | | | | | | | | | | | | | | | | | | An ed25519 key made for exactly this -- slosh package signing <slosh@slosh.foo>, 0F67C909938CFFA8A76B59FD8D69B55A0E9056B9 -- signs every package and both indexes. The public half travels two ways that would both have to lie: contrib/arch/slosh.asc in git, and /arch/slosh.asc on the website; the READMEs walk through pacman-key --add and --lsign-key, and the [slosh] stanza loses its SigLevel override because pacman's default demands signatures and now gets them. contrib/arch-repo pins the fingerprint, refuses to run without the secret key (an unsigned update would make every enrolled pacman refuse the repo), and now regenerates the index from the directory every time: repo-add skips an entry whose version it already has, so after a same-version rebuild an incremental add left the db describing the previous bytes -- a checksum mismatch for every client. An index rebuilt from disk cannot disagree with disk. Verified end to end with a scratch pacman keyring: enrolled key syncs and downloads under Required DatabaseRequired, unenrolled key is refused at the database.
* arch: a self-hosted pacman repository, since the AUR is shutuser2026-08-29
| | | | | | | | | | | | | AUR signups are closed while the AUR deals with supply chain attacks, so the package is published from our own roof -- which is the better offer anyway: a pacman repository serves built packages where the AUR hands every user a rebuild. contrib/aur/ becomes contrib/arch/ (the .SRCINFO goes; it is AUR metadata, regenerated in a minute when signups reopen), and contrib/arch-repo builds the package and maintains the slosh.db / slosh.files indexes in dist/arch/<carch>/, which rsyncs to /opt/slosh/arch/ on the box. The README and the front page carry the [slosh] stanza; SigLevel is spelled out because the packages are not signed yet and pacman defaults to demanding it.
* gitignore: DESIGN.md and .fastfeedback are local, not the projectuser2026-08-28
| | | | | | | | DESIGN.md was a scratch design doc and .fastfeedback a per-repo tool cache; neither belongs in the tree. Both stay on disk, ignored. Everything that pointed at DESIGN.md now points at docs/design.md, and the decision counts quoted from it (which had already drifted: the README said twenty-one, the docs said twenty-two) are gone with it.
* web: the Windows port, on the front page and out of install.shuser2026-08-28
| | | | | | | | The install section says what Windows gets (one slosh.exe, ConPTY panes, AF_UNIX sessions) and points at the docs; the front-page doc list gains the windows page. install.sh states in its header that Windows is not its job, and refuses under MSYS/MinGW/Cygwin with a pointer instead of building a binary that is the wrong shape for the machine.
* placeholder webbieuser2026-08-25
|
* slosh: the website lives in web/ -- one directory, one build, make wwwuser2026-08-19
Consolidate everything the website is made of: - web_new/ -> web/: the front page, install.sh, and build-site - contrib/webdemo/ -> web/demo/: the in-browser machine, committed for the first time (it had never been checked in) - make www at the top level assembles the whole site into build/www (NO_DEMO=1 skips the guest cross-compile) - web_plan.md deleted: the plan is fulfilled and web/README.md is now the record Path fallout: the overlay theme symlink gains one ../ (web/demo is a level shallower relative to contrib/themes), PYSRC in the Makefile follows the demo scripts, contrib/README.md drops its webdemo section. ROOT := ../.. in the demo Makefile survives unchanged -- web/demo sits at the same depth contrib/webdemo did. Verified: make www builds front page + docs + demo end to end, web/demo make check boots the image to slosh, tests/test_docs.py and make fmt-check green.