Loading the documentation…
Prepared views
Named starting points — New Releases, Short Stories, whatever fits the catalog — composed in the Librarian, one click for the reader.
jpl · jay pscot library
A self-hosted, tag-driven library for authors — books, novellas, short stories, and articles organized by ideas rather than shelves. One catalog, prepared views, reader-controlled refinement by tag, author, and series — and a Librarian's desk behind it. Framework-free PHP + SQLite; no Composer, no Node, no build step.
$ curl -O https://smisco.biz/jpl/jpl.zip
the proof
pscot.com is not a demo rig — it is this library, live, serving Jay Pscot's books, stories, and articles to readers. Every screenshot on this page is that instance, doing its day job.
the reader's side
Prepared views are starting points, not silos. Tags, authors, and series stack: every selection narrows the shelf, every removal widens it, and text search runs across titles, subtitles, summaries, author names, and series names. Refinements survive a change of view, update without a page reload, and live in the URL — so any shelf a reader builds is a link they can send.
behind the desk
The admin side lives at /desk and speaks library. The Circulation Desk is the dashboard: catalog totals, authors, series, tags, views, visitors, Reads, Previews, Downloads, and Amazon hits — all first-party, no third-party analytics. Authors and series are records, not free text: each has its own page, and selecting a row lists every catalog entry filed under it. The catalog itself filters by author, series, and status, or searches across all of them. Entries carry covers, grouped tags with quick-add, a formatted summary, and an uploaded document — PDF, EPUB, Markdown, Word, and more, up to 50 MB. Per work, the Librarian decides what visitors may do: read inline, preview a percentage, download the original, or follow an Amazon link — each independent.
what you get
Named starting points — New Releases, Short Stories, whatever fits the catalog — composed in the Librarian, one click for the reader.
Grouped tags (format, genre, subject) with quick-add; every tag narrows, every removal widens.
First-class records, not free text. A work can belong to several of either; both filter the public library and both get their own Librarian page.
Tags, authors, series, and search live in the URL and survive a change of view. Results refresh in place — no page reload.
Titles, subtitles, summaries, author names, and series names — searched within the current results, not as a separate mode.
Covers front and back, subtitles, series, bylines, summaries — each work with its own page and slug.
A small, enforced subset of HTML — emphasis, quotes, rules, code. Attributes stripped, unknown tags removed, sanitized on save and on display.
Per-work permissions. Partial preview by percentage for text formats; sandboxed HTML reading; downloads send the original.
Commercial works link out to Amazon — independent of read and download permissions.
Reads, previews, downloads, visitors — hashed visitor tokens, no IPs stored, nothing sent to third parties.
SQLite database, uploaded documents, covers, and backups live outside the webroot, served only through controlled routes.
One setting sizes the whole library and desk, 80–140%. Installable as an app, with the library's own mark and colors.
requirements & install
Private data (the SQLite database, uploaded documents, covers, backups) lives beside — not inside — the webroot. The README covers the requirements and the upgrade path; upgrades copy over the existing tree and leave the catalog, tags, authors, series, and analytics intact.
# extracts to pscot-site/ — place it as the site tree: $ php bin/install.php $ php bin/check.php # sign in at /desk/ and start cataloging
rendered live · from README.md
The document below is the current distribution's own README — requirements, the upgrade path, and what changed in this release — fetched and rendered in your browser by md-mini.js — a sibling smisco tool. The zip also ships RELEASE.md and DESIGN.md alongside it.
Loading the documentation…