jay pscot library jpl

jpl · jay pscot library

Publish your writing
as a living 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.

v1.1.2 · retained releases — pscot-site-v1.1.2.zip pscot-site-v1.0.0.zip
$ curl -O https://smisco.biz/jpl/jpl.zip
PHP 8.2+ SQLite zero frameworks self-hosted MIT
The library at pscot.com — the public face of the app, with prepared views and tag filters over a catalog of works

the proof

It runs its author's own catalog.

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.

pscot.com

the reader's side

Start with a view. Refine the results.

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.

The filter panel with the New Releases prepared view active and tag, author, and series controls
Prepared views — one click sets the shelf.
An author and a series selected together, shown as removable chips under Selected filters
Authors and series — cumulative, removable, and in the URL.
A selected tag narrowing results, with the grouped tag directory open
Tags — grouped by format, genre, and subject; the reader is the cataloger.
A work's own page with cover, byline, series line, and a formatted description summary
A work's page — cover, byline, series, formatted summary.

behind the desk

Every library needs a Librarian.

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.

The Circulation Desk dashboard with catalog, author, series, tag, visitor, and activity totals
The Circulation Desk — the library's day at a glance.
The catalog list filtered by status, author, and series
The catalog — filter by author, series, or status.
The Series manager with a series row selected, listing the catalog entries assigned to it
Series — select a row to see everything filed under it.
A catalog entry's description summary with its allowed-formatting rules, above the author and series assignments
A catalog entry — summary markup, authors, series.
Availability, document upload, and per-work read, preview-percentage, and download permissions
Availability and permissions — who may read, preview, or download.
The prepared views manager composing the public starting points
Prepared views — compose the public starting points.

what you get

The whole library, in one zip.

Prepared views

Named starting points — New Releases, Short Stories, whatever fits the catalog — composed in the Librarian, one click for the reader.

Tag refinement

Grouped tags (format, genre, subject) with quick-add; every tag narrows, every removal widens.

Authors & series

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.

Shareable filters

Tags, authors, series, and search live in the URL and survive a change of view. Results refresh in place — no page reload.

Text search

Titles, subtitles, summaries, author names, and series names — searched within the current results, not as a separate mode.

Work pages

Covers front and back, subtitles, series, bylines, summaries — each work with its own page and slug.

Formatted summaries

A small, enforced subset of HTML — emphasis, quotes, rules, code. Attributes stripped, unknown tags removed, sanitized on save and on display.

Read, Preview, Download

Per-work permissions. Partial preview by percentage for text formats; sandboxed HTML reading; downloads send the original.

Amazon linking

Commercial works link out to Amazon — independent of read and download permissions.

First-party analytics

Reads, previews, downloads, visitors — hashed visitor tokens, no IPs stored, nothing sent to third parties.

Private data, private

SQLite database, uploaded documents, covers, and backups live outside the webroot, served only through controlled routes.

Type scale & PWA

One setting sizes the whole library and desk, 80–140%. Installable as an app, with the library's own mark and colors.

requirements & install

PHP 8.2, SQLite, and a folder.

Requirements

  • PHP 8.2+ with pdo_sqlite, fileinfo, json
  • Apache with .htaccess support, or equivalent server rules
  • HTTPS in production
  • Explicitly no Composer, PHP framework, JS framework, Node, build system, or database server

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.

Install

# 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

Straight from the zip.

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…