START A BOOK CLUB
Local Deployment & Offline Reading Architecture

How to Run Locally & Read with the EPUB

Everything you need to set up WinnegansFake on your own laptop, download the public scan of Finnegans Wake from Internet Archive, and explore the complete text alongside the collected wisdom of 80+ years of Joycean scholarship.

Zero-Copyright Imperative: Why the EPUB Must Stay Strictly Local

James Joyce died in Zurich in 1941, meaning his works are in the public domain throughout much of the world. However, under the United States Sonny Bono Copyright Term Extension Act of 1998, works first published with notice between 1929 and 1977 enjoy statutory protection for 95 years from publication date:

Publication Year: 1939 (Faber & Faber / Viking Press)
Statutory Term: 95 Years
U.S. Public Domain Entry: January 1, 2036

Because of this, no copyrighted text from Finnegans Wake may ever be committed to git, uploaded to GitHub, or hosted on our public web servers.

The entire source archive (data/finneganswake00joycuoft.epub) and extracted chapters remain strictly confined to your local data/ directory, which is permanently ignored by git via .gitignore.

By keeping the book text strictly on the reader’s device, everyone can read the authentic Joyce text alongside the open-source scholarly metadata glosses with 100% legal compliance!

OPTION A • ZERO CODING OR TERMINAL REQUIRED

Read Directly in Your Web Browser

You don’t even need to install Node.js or use a terminal to read with your local EPUB! Our web application includes an in-browser EPUB engine powered by JSZip that runs 100% on your laptop:

  1. 1
    Download the EPUB file from Internet Archive to your Downloads folder:
  2. 2
    Open the Web Reader:
  3. 3
    Click “Load Local EPUB File” in the reader toolbar and select your downloaded file. The reader immediately unzips the archive in browser memory and renders the book lines side-by-side with all annotations!
OPTION B • FULL LOCAL DEVELOPER ENVIRONMENT

Full Local Laptop Setup (CLI & Dev Server)

Running WinnegansFake locally gives you full offline capabilities, access to the high-performance TypeScript EPUB parsing engine, and the ability to draft, validate, and contribute scholarly annotations.

System Prerequisites

  • Node.js: v20.0.0 or later
  • pnpm: v9.0.0 or later (Mandatory!)
  • Python: 3.8+ (for page indexer)
  • Make & curl: standard Unix utilities
1Clone the Repository

Clone the project from GitHub to your workspace:

Clone via Gitbash
git clone https://github.com/tekromancy/WinnegansFake.git
cd WinnegansFake
2Install Dependencies with pnpm

Install monorepo dependencies. Per AGENTS.md, this repo uses pnpm exclusively (never npm or yarn):

Install with pnpmbash
pnpm install
3Fetch the EPUB Source Data

Run the automated Makefile target to download the public scan of Finnegans Wake into your local data/ directory:

Fetch local databash
pnpm fetch:data
Under the hood, this runs make -C data, which downloads finneganswake00joycuoft.epub and extracts chapter HTMLs.
4Verify Cryptographic Signatures & Generate Index

Verify the SHA-256 hashes of the downloaded EPUB to ensure data integrity, and calibrate printed page coordinates:

Verify & Indexbash
pnpm signatures:verify
pnpm index:epub
5Validate Annotation Corpus

Validate all 630 page annotation files against the JSON Schema and ensure zero copyright phrase violations:

Validate schema & rulesbash
pnpm validate
6Launch Local Development Server

Start the Next.js local server:

Start dev serverbash
pnpm dev

Open http://localhost:3000 in your browser to read and edit offline!

Quick One-Liner (Automated Setup)

If you have all prerequisites installed, run the full pipeline in one command:

One-line setup & runbash
pnpm setup && pnpm dev
COMMUNITY CONTRIBUTIONS

How to Contribute Annotations via Pull Request

WinnegansFake is a crowdsourced communal project. If you have identified a multilingual pun, Dublin topographical reference, Viconian cycle, or literary allusion, you can contribute directly via GitHub:

Annotation File Structure:

Each page is stored under annotations/<title>/book_<B>/chapter_<C>/page_<PPP>.json (e.g. annotations/finneganswake/...).

Example annotation entry in page_003.jsonjson
{
  "id": "003.01-01",
  "line_number": 1,
  "target_phrase": "riverrun",
  "annotation_text": "Anna Livia Plurabelle as the River Liffey beginning her course toward the sea; connects to final sentence on page 628. Also French riverain (riverbank dweller).",
  "categories": ["viconian-cycles", "river-liffey", "etymological-polyglot"],
  "cross_references": ["628.16"],
  "sources": ["McHugh, Roland. Annotations to Finnegans Wake (4th ed.), p. 3"],
  "contributors": ["your-github-username"]
}

Contributor Rules:

  • Target Phrase Limit: target_phrase must be strictly under 150 characters (only the anchor lemma, never full copyrighted paragraphs).
  • Line Number Range: line_number must be between 1 and 40.
  • Coordinates: Must match standard page pagination (1 to 628).
  • Validation: Run pnpm validate before committing. Automated CI rejects invalid schemas.
  • License: All contributed notes are published under Creative Commons Attribution-ShareAlike 4.0 International (CC BY-SA 4.0).