forked from ChelseaKR/queer-the-stacks
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdashboard.html
More file actions
30 lines (30 loc) · 20.9 KB
/
Copy pathdashboard.html
File metadata and controls
30 lines (30 loc) · 20.9 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><title>Queer the Stacks — your reading dashboard</title><style>
:root { color-scheme: light dark; }
/* Explicit fg/bg (system Canvas/CanvasText, not just the color-scheme hint) so
every element inherits a guaranteed-AA-contrast pair in both light and dark —
without this, unstyled table cells can inherit mismatched UA default colors
in some browsers/OSes and fail the axe color-contrast check (FIX 2026-07-05,
closes the pa11y-graduation blocker — see docs/ROADMAP.md §7). */
html { color: CanvasText; background-color: Canvas; }
body { font-family: system-ui, sans-serif; max-width: 75ch; margin: 0 auto; padding: 1rem;
color: inherit; background-color: inherit; }
a { color: LinkText; }
a:visited { color: VisitedText; }
.card, li.reading { border: 1px solid; border-radius: 8px; padding: 1rem; margin: 1rem 0;
list-style: none; }
ul.books { padding: 0; }
.tag { border: 1px solid; border-radius: 999px; padding: 0.1rem 0.5rem; margin-right: 0.25rem;
white-space: nowrap; }
.tag::before { content: "# "; } /* glyph paired with text, never colour-only */
a:focus, .skip:focus { outline: 3px solid; }
.skip { position: absolute; left: -999px; }
.skip:focus { left: 1rem; top: 1rem; }
table { border-collapse: collapse; width: 100%; margin: 0.5rem 0; color: inherit;
background-color: inherit; }
th, td { border: 1px solid; padding: 0.4rem; text-align: left; color: inherit;
background-color: inherit; }
.lens-warning { border: 2px dashed; border-radius: 8px; padding: 0.5rem 0.75rem; }
@media (prefers-reduced-motion: reduce) {
* { animation: none !important; transition: none !important; }
}
</style></head><body><a class="skip" href="#main">Skip to your reading dashboard</a><header><h1>Queer the Stacks</h1><p>Your private reading dashboard, demo — unified read-only from Calibre and KOReader, with recommendations from ethical, non-gatekept catalogs. Reading data never leaves this instance.</p></header><main id="main"><h2>Data status</h2><table><caption>How current the data on this page is</caption><thead><tr><th scope="col">Measure</th><th scope="col">Value</th></tr></thead><tbody><tr><th scope="row">Data as of</th><td>never refreshed — run `stacks refresh`</td></tr></tbody></table><h2>Currently reading</h2><ul class="books"><li class="reading"><h3>Stone Butch Blues</h3><p class="byline">by Leslie Feinberg</p><p class="progress">Progress: 47% · last on Kobo</p><p class="themes">Themes: <span class="tag">historical</span> <span class="tag">literary</span> <span class="tag">queer</span> <span class="tag">trans</span></p></li></ul><h2>Reading stats</h2><table><caption>Reading totals (data-table equivalent of the stats panel)</caption><thead><tr><th scope="col">Metric</th><th scope="col">Value</th></tr></thead><tbody><tr><th scope="row">Books finished</th><td>7</td></tr><tr><th scope="row">Currently reading</th><td>1</td></tr><tr><th scope="row">Pages read</th><td>2281</td></tr><tr><th scope="row">Time read (hours)</th><td>105.8</td></tr><tr><th scope="row">Current streak (days)</th><td>1</td></tr><tr><th scope="row">Longest streak (days)</th><td>3</td></tr><tr><th scope="row">Active reading days</th><td>16</td></tr><tr><th scope="row">Highlights</th><td>130</td></tr></tbody></table><table><caption>Theme & genre mix, from sourced tags only</caption><thead><tr><th scope="col">Theme</th><th scope="col">Books</th></tr></thead><tbody><tr><th scope="row">speculative</th><td>5</td></tr><tr><th scope="row">queer</th><td>4</td></tr><tr><th scope="row">trans</th><td>4</td></tr><tr><th scope="row">literary</th><td>3</td></tr><tr><th scope="row">science fiction</th><td>3</td></tr><tr><th scope="row">dystopia</th><td>3</td></tr><tr><th scope="row">short stories</th><td>1</td></tr><tr><th scope="row">fabulist</th><td>1</td></tr><tr><th scope="row">time travel</th><td>1</td></tr><tr><th scope="row">historical</th><td>1</td></tr><tr><th scope="row">feminist</th><td>1</td></tr></tbody></table><h2>Reading diversity</h2><p>Built <strong>only</strong> from sourced descriptors of the books themselves — Calibre tags, OpenLibrary subjects, and curated lists. We never infer an author's identity and never auto-label a person; a book with no sourced descriptor is reported as unknown, not as “not diverse”.</p><p>Every sourced descriptor is shown individually below. To aggregate the identity-adjacent ones (handy when screen-sharing a queer/trans reading history), set <code>STACKS_HIDE_SENSITIVE=1</code> or load <code>?hide_sensitive=1</code>.</p><table><caption>Coverage — how much of the shelf carries a sourced descriptor</caption><thead><tr><th scope="col">Measure</th><th scope="col">Value</th></tr></thead><tbody><tr><th scope="row">Books considered (reading + finished)</th><td>8</td></tr><tr><th scope="row">With a sourced descriptor</th><td>8</td></tr><tr><th scope="row">No sourced descriptor (unknown — not 'none')</th><td>0</td></tr><tr><th scope="row">Descriptor coverage</th><td>100%</td></tr></tbody></table><p>Lens grouping: <strong>built-in defaults</strong>.</p><table><caption>Representation lenses, as a share of your described books (a grouping of sourced descriptors — never an author's identity)</caption><thead><tr><th scope="col">Lens</th><th scope="col">Books</th><th scope="col">% of described</th><th scope="col">Sourced descriptors seen</th></tr></thead><tbody><tr><th scope="row">Trans & nonbinary</th><td>4</td><td>50%</td><td>trans</td></tr><tr><th scope="row">Queer / LGBTQ+</th><td>4</td><td>50%</td><td>queer</td></tr><tr><th scope="row">Speculative / SFF</th><td>5</td><td>62%</td><td>dystopia, fabulist, science fiction, speculative, time travel</td></tr><tr><th scope="row">Feminist</th><td>1</td><td>12%</td><td>feminist</td></tr><tr><th scope="row">Literary</th><td>3</td><td>38%</td><td>literary, short stories</td></tr><tr><th scope="row">Historical</th><td>1</td><td>12%</td><td>historical</td></tr></tbody></table><table><caption>Where these descriptors came from (count of sourced tags by source)</caption><thead><tr><th scope="col">Source</th><th scope="col">Descriptors</th></tr></thead><tbody><tr><th scope="row">calibre-tag</th><td>27</td></tr></tbody></table><table><caption>Per-descriptor provenance — every diverse-shelf tag, the source that asserted it, and when it was fetched (sourced, never inferred)</caption><thead><tr><th scope="col">Descriptor</th><th scope="col">Books</th><th scope="col">Source(s)</th><th scope="col">Retrieved</th></tr></thead><tbody><tr><th scope="row">speculative</th><td>5</td><td>calibre-tag</td><td>2026-06-05</td></tr><tr><th scope="row">queer (sensitive)</th><td>4</td><td>calibre-tag</td><td>2026-06-05</td></tr><tr><th scope="row">trans (sensitive)</th><td>4</td><td>calibre-tag</td><td>2026-06-05</td></tr><tr><th scope="row">dystopia</th><td>3</td><td>calibre-tag</td><td>2026-06-05</td></tr><tr><th scope="row">literary</th><td>3</td><td>calibre-tag</td><td>2026-06-05</td></tr><tr><th scope="row">science fiction</th><td>3</td><td>calibre-tag</td><td>2026-06-05</td></tr><tr><th scope="row">fabulist</th><td>1</td><td>calibre-tag</td><td>2026-06-05</td></tr><tr><th scope="row">feminist</th><td>1</td><td>calibre-tag</td><td>2026-06-05</td></tr><tr><th scope="row">historical</th><td>1</td><td>calibre-tag</td><td>2026-06-05</td></tr><tr><th scope="row">short stories</th><td>1</td><td>calibre-tag</td><td>2026-06-05</td></tr><tr><th scope="row">time travel</th><td>1</td><td>calibre-tag</td><td>2026-06-05</td></tr></tbody></table><h2>Reading Wrapped 2024</h2><p>7 books · 37.6 hours · 16 reading days — computed locally, shared with no one.</p><table><caption>Standout reads of 2024 by time spent</caption><thead><tr><th scope="col">Title</th><th scope="col">Author</th><th scope="col">Hours</th></tr></thead><tbody><tr><th scope="row">Oryx and Crake</th><td>Margaret Atwood</td><td>16.9</td></tr><tr><th scope="row">Detransition, Baby</th><td>Torrey Peters</td><td>16.7</td></tr><tr><th scope="row">Parable of the Sower</th><td>Octavia E. Butler</td><td>16.1</td></tr><tr><th scope="row">Kindred</th><td>Octavia E. Butler</td><td>14.4</td></tr><tr><th scope="row">The Handmaid's Tale</th><td>Margaret Atwood</td><td>13.9</td></tr></tbody></table><table><caption>Monthly reading in 2024 (pace: 141.1 pages per reading day)</caption><thead><tr><th scope="col">Month</th><th scope="col">Pages</th><th scope="col">Hours</th><th scope="col">Days</th></tr></thead><tbody><tr><th scope="row">Mar</th><td>374</td><td>6.2</td><td>3</td></tr><tr><th scope="row">Apr</th><td>926</td><td>15.4</td><td>7</td></tr><tr><th scope="row">May</th><td>808</td><td>13.5</td><td>5</td></tr><tr><th scope="row">Jun</th><td>150</td><td>2.5</td><td>1</td></tr></tbody></table><p><a href="/share">Make a share card for Bookwyrm or Mastodon</a> — composed locally; nothing is posted until you copy and share it yourself.</p><h2>Up next in your series</h2><table><caption>Unread books in series you've started</caption><thead><tr><th scope="col">Title</th><th scope="col">Series</th><th scope="col">Author</th></tr></thead><tbody><tr><th scope="row">Parable of the Talents</th><td>Earthseed</td><td>Octavia E. Butler</td></tr></tbody></table><h2>To-read shelf</h2><ul class="books"><li class="reading"><h3>Parable of the Talents</h3><p class="byline">by Octavia E. Butler</p><p class="progress">Progress: 0% · last on Calibre</p><p class="themes">Themes: <span class="tag">dystopia</span> <span class="tag">science fiction</span> <span class="tag">speculative</span></p></li></ul><h2>Recommended for you</h2><p>Every pick shows why it surfaced and the source it came from.</p><table><caption>Recommendation fit scores (data-table equivalent of the cards)</caption><thead><tr><th scope="col">Rank</th><th scope="col">Title</th><th scope="col">Author</th><th scope="col">Fit</th></tr></thead><tbody><tr><td>1</td><th scope="row">An Unkindness of Ghosts</th><td>Rivers Solomon</td><td>1.053</td></tr><tr><td>2</td><th scope="row">The Fifth Season</th><td>N. K. Jemisin</td><td>0.972</td></tr><tr><td>3</td><th scope="row">Dawn</th><td>Octavia E. Butler</td><td>0.843</td></tr><tr><td>4</td><th scope="row">Confessions of the Fox</th><td>Jordy Rosenberg</td><td>0.755</td></tr><tr><td>5</td><th scope="row">Nevada</th><td>Imogen Binnie</td><td>0.668</td></tr></tbody></table><article class="card" aria-labelledby="rec-ol-unkindness-ghosts"><h3 id="rec-ol-unkindness-ghosts">1. An Unkindness of Ghosts</h3><p class="byline">by Rivers Solomon</p><p class="score">Fit score: 1.053</p><h4>Why recommended</h4><ul><li>theme: shares your themes: queer, science fiction, speculative</li><li>collaborative: listed alongside Octavia E. Butler, whom you've finished, on “Speculative Feminist Classics”</li><li>list: on the curated list “Trans & Spec-Fic Canon”</li><li>list: on the curated list “Speculative Feminist Classics”</li></ul><h4>Sources</h4><ul><li>openlibrary-subject: <a href="https://openlibrary.org/subjects/speculative" rel="noopener noreferrer external">https://openlibrary.org/subjects/speculative</a> <span class="retrieved">(retrieved 2026-06-05)</span></li><li>openlibrary-subject: <a href="https://openlibrary.org/subjects/science fiction" rel="noopener noreferrer external">https://openlibrary.org/subjects/science fiction</a> <span class="retrieved">(retrieved 2026-06-05)</span></li><li>openlibrary-subject: <a href="https://openlibrary.org/subjects/queer" rel="noopener noreferrer external">https://openlibrary.org/subjects/queer</a> <span class="retrieved">(retrieved 2026-06-05)</span></li><li>curated-list: <a href="#source-curated-list-speculative-feminist-classics">curated-list:speculative-feminist-classics</a> <span class="retrieved">(retrieved 2026-06-05)</span></li><li>curated-list: <a href="#source-curated-list-trans-spec-fic-canon">curated-list:trans-spec-fic-canon</a> <span class="retrieved">(retrieved 2026-06-05)</span></li></ul><p class="summary">Recommended because it shares your themes: queer, science fiction, speculative.</p></article><article class="card" aria-labelledby="rec-ol-fifth-season"><h3 id="rec-ol-fifth-season">2. The Fifth Season</h3><p class="byline">by N. K. Jemisin</p><p class="score">Fit score: 0.972</p><h4>Why recommended</h4><ul><li>theme: shares your themes: dystopia, science fiction, speculative</li><li>collaborative: listed alongside Octavia E. Butler, whom you've finished, on “Speculative Feminist Classics”</li><li>list: on the curated list “Speculative Feminist Classics”</li></ul><h4>Sources</h4><ul><li>openlibrary-subject: <a href="https://openlibrary.org/subjects/speculative" rel="noopener noreferrer external">https://openlibrary.org/subjects/speculative</a> <span class="retrieved">(retrieved 2026-06-05)</span></li><li>openlibrary-subject: <a href="https://openlibrary.org/subjects/science fiction" rel="noopener noreferrer external">https://openlibrary.org/subjects/science fiction</a> <span class="retrieved">(retrieved 2026-06-05)</span></li><li>openlibrary-subject: <a href="https://openlibrary.org/subjects/dystopia" rel="noopener noreferrer external">https://openlibrary.org/subjects/dystopia</a> <span class="retrieved">(retrieved 2026-06-05)</span></li><li>curated-list: <a href="#source-curated-list-speculative-feminist-classics">curated-list:speculative-feminist-classics</a> <span class="retrieved">(retrieved 2026-06-05)</span></li></ul><p class="summary">Recommended because it shares your themes: dystopia, science fiction, speculative.</p></article><article class="card" aria-labelledby="rec-ol-dawn-butler"><h3 id="rec-ol-dawn-butler">3. Dawn</h3><p class="byline">by Octavia E. Butler</p><p class="score">Fit score: 0.843</p><h4>Why recommended</h4><ul><li>theme: shares your themes: science fiction, speculative</li><li>author: by Octavia E. Butler, whom you've finished</li><li>list: on the curated list “Speculative Feminist Classics”</li></ul><h4>Sources</h4><ul><li>openlibrary-subject: <a href="https://openlibrary.org/subjects/speculative" rel="noopener noreferrer external">https://openlibrary.org/subjects/speculative</a> <span class="retrieved">(retrieved 2026-06-05)</span></li><li>openlibrary-subject: <a href="https://openlibrary.org/subjects/science fiction" rel="noopener noreferrer external">https://openlibrary.org/subjects/science fiction</a> <span class="retrieved">(retrieved 2026-06-05)</span></li><li>curated-list: <a href="#source-curated-list-speculative-feminist-classics">curated-list:speculative-feminist-classics</a> <span class="retrieved">(retrieved 2026-06-05)</span></li></ul><p class="summary">Recommended because it shares your themes: science fiction, speculative.</p></article><article class="card" aria-labelledby="rec-ol-confessions-fox"><h3 id="rec-ol-confessions-fox">4. Confessions of the Fox</h3><p class="byline">by Jordy Rosenberg</p><p class="score">Fit score: 0.755</p><h4>Why recommended</h4><ul><li>theme: shares your themes: historical, queer, speculative, trans</li><li>list: on the curated list “Trans & Spec-Fic Canon”</li></ul><h4>Sources</h4><ul><li>openlibrary-subject: <a href="https://openlibrary.org/subjects/trans" rel="noopener noreferrer external">https://openlibrary.org/subjects/trans</a> <span class="retrieved">(retrieved 2026-06-05)</span></li><li>openlibrary-subject: <a href="https://openlibrary.org/subjects/speculative" rel="noopener noreferrer external">https://openlibrary.org/subjects/speculative</a> <span class="retrieved">(retrieved 2026-06-05)</span></li><li>openlibrary-subject: <a href="https://openlibrary.org/subjects/queer" rel="noopener noreferrer external">https://openlibrary.org/subjects/queer</a> <span class="retrieved">(retrieved 2026-06-05)</span></li><li>openlibrary-subject: <a href="https://openlibrary.org/subjects/historical" rel="noopener noreferrer external">https://openlibrary.org/subjects/historical</a> <span class="retrieved">(retrieved 2026-06-05)</span></li><li>curated-list: <a href="#source-curated-list-trans-spec-fic-canon">curated-list:trans-spec-fic-canon</a> <span class="retrieved">(retrieved 2026-06-05)</span></li></ul><p class="summary">Recommended because it shares your themes: historical, queer, speculative, trans.</p></article><article class="card" aria-labelledby="rec-ol-nevada"><h3 id="rec-ol-nevada">5. Nevada</h3><p class="byline">by Imogen Binnie</p><p class="score">Fit score: 0.668</p><h4>Why recommended</h4><ul><li>theme: shares your themes: literary, queer, trans</li><li>list: on the curated list “Trans & Spec-Fic Canon”</li></ul><h4>Sources</h4><ul><li>curated-list: <a href="#source-curated-list-trans-spec-fic-canon">curated-list:trans-spec-fic-canon</a> <span class="retrieved">(retrieved 2026-06-05)</span></li></ul><p class="summary">Recommended because it shares your themes: literary, queer, trans.</p></article><h2>Recently finished</h2><ul class="books"><li class="reading"><h3>A Safe Girl to Love</h3><p class="byline">by Casey Plett</p><p class="progress">Progress: 100% · last on Kobo</p><p class="themes">Themes: <span class="tag">literary</span> <span class="tag">queer</span> <span class="tag">short stories</span> <span class="tag">trans</span></p></li><li class="reading"><h3>Detransition, Baby</h3><p class="byline">by Torrey Peters</p><p class="progress">Progress: 100% · last on Kobo</p><p class="themes">Themes: <span class="tag">literary</span> <span class="tag">queer</span> <span class="tag">trans</span></p></li><li class="reading"><h3>Fierce Femmes and Notorious Liars</h3><p class="byline">by Kai Cheng Thom</p><p class="progress">Progress: 100% · last on Readest</p><p class="themes">Themes: <span class="tag">fabulist</span> <span class="tag">queer</span> <span class="tag">speculative</span> <span class="tag">trans</span></p></li><li class="reading"><h3>Kindred</h3><p class="byline">by Octavia E. Butler</p><p class="progress">Progress: 100% · last on Kobo</p><p class="themes">Themes: <span class="tag">science fiction</span> <span class="tag">speculative</span> <span class="tag">time travel</span></p></li><li class="reading"><h3>Parable of the Sower</h3><p class="byline">by Octavia E. Butler</p><p class="progress">Progress: 100% · last on Kobo</p><p class="themes">Themes: <span class="tag">dystopia</span> <span class="tag">science fiction</span> <span class="tag">speculative</span></p></li><li class="reading"><h3>The Handmaid's Tale</h3><p class="byline">by Margaret Atwood</p><p class="progress">Progress: 100% · last on Calibre-Web</p><p class="themes">Themes: <span class="tag">dystopia</span> <span class="tag">feminist</span> <span class="tag">speculative</span></p></li><li class="reading"><h3>Oryx and Crake</h3><p class="byline">by Margaret Atwood</p><p class="progress">Progress: 100% · last on Kobo</p><p class="themes">Themes: <span class="tag">dystopia</span> <span class="tag">science fiction</span> <span class="tag">speculative</span></p></li></ul><h2>Your lists</h2><p>No authored lists yet — create one with <code>stacks lists new</code> and it will show up here.</p><h2>Browse your library</h2><p><label for="lib-filter">Filter the table below (works without JavaScript via the /browse route):</label> <input id="lib-filter" type="text" autocomplete="off" placeholder="type a title, author, or theme"></p><table id="lib-table"><caption>Your library — browse by reading the rows, or filter via the box above (or the /browse route)</caption><thead><tr><th scope="col">Title</th><th scope="col">Author</th><th scope="col">Status</th><th scope="col">Themes (sourced)</th></tr></thead><tbody><tr><th scope="row">A Safe Girl to Love</th><td>Casey Plett</td><td>finished</td><td>literary, queer, short stories, trans</td></tr><tr><th scope="row">Detransition, Baby</th><td>Torrey Peters</td><td>finished</td><td>literary, queer, trans</td></tr><tr><th scope="row">Fierce Femmes and Notorious Liars</th><td>Kai Cheng Thom</td><td>finished</td><td>fabulist, queer, speculative, trans</td></tr><tr><th scope="row">Kindred</th><td>Octavia E. Butler</td><td>finished</td><td>science fiction, speculative, time travel</td></tr><tr><th scope="row">Oryx and Crake</th><td>Margaret Atwood</td><td>finished</td><td>dystopia, science fiction, speculative</td></tr><tr><th scope="row">Parable of the Sower</th><td>Octavia E. Butler</td><td>finished</td><td>dystopia, science fiction, speculative</td></tr><tr><th scope="row">Parable of the Talents</th><td>Octavia E. Butler</td><td>unread</td><td>dystopia, science fiction, speculative</td></tr><tr><th scope="row">Stone Butch Blues</th><td>Leslie Feinberg</td><td>reading</td><td>historical, literary, queer, trans</td></tr><tr><th scope="row">The Handmaid's Tale</th><td>Margaret Atwood</td><td>finished</td><td>dystopia, feminist, speculative</td></tr></tbody></table><script>(function(){var i=document.getElementById('lib-filter');var t=document.getElementById('lib-table');if(!i||!t||!t.tBodies.length){return;}i.addEventListener('input',function(){var q=i.value.toLowerCase();var rows=t.tBodies[0].rows;for(var r=0;r!==rows.length;r++){var hay=rows[r].textContent.toLowerCase();rows[r].hidden=(q!==''&&hay.indexOf(q)===-1);}});})();</script></main></body></html>