Back to the catalog

Jay Rosen Internet Archive public wiki

Reader-facing concept and entity pages for the archive, authored in OKF and generated into the public wiki.

Open source Repository Open in the app JSON README (API)

About

# Jay Rosen Internet Archive public wiki

This bundle holds the public, reader-facing wiki content for the archive: the key ideas from Jay Rosen's 1986 dissertation, *The Impossible Press*, as concept pages, the chapters that frame them as topic pages, and the people and works they connect to.

It is the source of truth for `data/wiki-seed.json`, which `data/build-wiki-seed.js` generates and the frontend renders at `#wiki`. The internal maintainer bundle lives separately at `wiki/`.

## Sections

- [Concepts](concept/index.md): the key ideas
- [Entities](entity/index.md): people, works, and organizations
- [Topics](topic/index.md): one page per dissertation chapter

Details

Kind
OKF bundles
Topic
Productivity
Publisher
jamditis
Origin
okf_github
Category
dados
Version
0.1
Last push
2026-09-07T15:10:35Z
Repository state
ativo
Language
JavaScript
License
MIT
Added
2026-09-08 16:04:09
Updated
2026-09-08 16:04:09
Origin id
jamditis/rosen-frontend:data/wiki-content/index.md

README

# Jay Rosen's Internet Archive

A public archive of the works, critiques, and teachings of Jay Rosen — press critic, professor of journalism at NYU since 1986, and author of the PressThink blog. The collection spans four decades of journalism criticism, media theory, and writing about public life, from his 1986 doctoral dissertation to his present-day essays and social media threads.

**Explore the archive:** https://pressthink.org/j/rosen-archive/

This repository contains everything that powers the archive: the website, the data, and the tools used to build and maintain it. The whole thing is open — you can browse the code, download the data, run the site on your own computer, or just read about how it was put together.

## What's in the archive

- **1,029 curated records** — 799 articles and essays, 137 Tumblr posts, 83 newspaper clippings, and 10 social media threads
- **~29,700 social media posts** from Twitter/X, Bluesky, and Mastodon
- **8,100+ named entities** (people, organizations, and concepts) and 12,500+ relationships connecting them across the collection
- **The 1986 dissertation** — *The Impossible Press: American Journalism and the Decline of Public Life*, written under Neil Postman and released publicly in December 2025

Every record is categorized by theme, era, and publication. Most of the curated records are also cross-linked to the people, organizations, and ideas they mention; entity extraction is still catching up on some records, and the social media posts are largely not entity-linked yet.

## Ways to explore

On the live site:

- **[Start here](https://pressthink.org/j/rosen-archive/#start)** — a guided introduction for first-time visitors
- **The archive browser** — search and filter all records by category, era, and publication
- **[Entities](https://pressthink.org/j/rosen-archive/#entities)** — browse the people, organizations, and concepts that appear across the collection
- **[The dissertation](https://pressthink.org/j/rosen-archive/dissertation/)** — a full-text reader, a foreword, an interactive mind map, and a film analysis of *Network* (1976)
- **[Analytics](https://pressthink.org/j/rosen-archive/#analytics)** — statistics about the collection
- **[FAQ](https://pressthink.org/j/rosen-archive/faq/)** — common questions about the archive and the dissertation
- **[Ways to participate](https://pressthink.org/j/rosen-archive/features/participate/)** — how to suggest records, report problems, or use the data

### Site tools for AI agents

The main archive registers four read-only WebMCP site tools in supporting
browsers. They list accepted archive facets, search public records, read one
record, and find its related entities. The tools use the same public data and
search logic as the visible archive. They do not change page state, archive
records, or source files. Browsers without WebMCP support use the site normally.

## Open data

The archive's data is part of the public record and free to use. See [`data/README.md`](data/README.md) for the full data guide, including:

- Generated JSON files the site reads (record cards, full details, entity graph)
- Source CSV files with every record, post, entity, and relationship
- A human-readable data dictionary in [`data/SCHEMA.md`](data/SCHEMA.md)
- RSS and OPML feeds under `data/feeds/`

Licensing: the code in this repository is MIT licensed (see [`LICENSE`](LICENSE)); the metadata and derived data (entities, relationships) are licensed [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), so reuse requires attribution; and the archived writings themselves remain under their original copyright — the dissertation is © 1986 Jay Rosen.

## Running the site locally

The site is a zero-build static site — no bundler, no compile step, no database. If you have Python installed:

```bash
python3 -m http.server 8000
```

Then open http://localhost:8000. That's it. (`npm run preview` does the same thing with Node.) You only need `npm install` if you want to regenerate the data files or run the tests.

## How the site works

- `index.html` is the entry point. It loads React, HTM, and other libraries from the `esm.sh` CDN via an import map — there is no build step.
- `frontend/` contains the React app. Components use HTM tagged templates (`` html`...` ``) instead of JSX.
- `data/` contains the archive data as JSON files, generated from CSV source files.
- `dissertation/` contains the dissertation reader, foreword, and network-effect pages, each a standalone page in its own subdirectory. The archive-wide FAQ lives at `faq/`.
- `backend/` contains the Python pipeline used to scrape, analyze, and archive new content. You never need it just to browse or serve the site.
- `frontend/dist/tailwind.css` is pre-built Tailwind CSS. No build needed unless you change styles.

### Key directories

```
index.html                    Entry point
frontend/                     React application
  components/                 UI components
  services/                   Data loading, routing, SQLite
  dist/tailwind.css           Pre-built styles
data/                         CSV sources + generated JSON (see data/README.md)
dissertation/                 Dissertation reader, foreword, and network-effect pages
faq/                          Archive and dissertation FAQ
features/                     Standalone feature pages
backend/                      Python data pipeline (see backend/README.md)
tools/active/                 Data explorer and data visualization tools
tests/                        Frontend and data test suite
docs/                         Project documentation (see docs/README.md)
archived/                     Legacy code kept for reference only
.github/workflows/            Continuous integration
```

## Updating the archive data

The site reads JSON files generated from four CSV source files:

| Source file | What it contains |
|-------------|-----------------|
| `data/archive_records-public.csv` | Curated archive records (1,029 records) |
| `data/social_posts.csv` | Twitter/X, Bluesky, and Mastodon posts (29,747) |
| `data/extracted_entities.csv` | Named entities (8,150) |
| `data/extracted_relationships.csv` | Entity relationships (12,556) |

To regenerate the JSON after editing a CSV:

```bash
npm install          # first time only
node data/export-archive-data.js
```

Adding a record by hand is a three-step process (edit a CSV, run one command, upload the output) — the step-by-step guide, written for non-technical curators, is [`ADDING-RECORDS.md`](ADDING-RECORDS.md).

## Continuous stewardship

New public work now appears mainly on Bluesky. The planned stewardship flow finds Jay Rosen's public posts, keeps meaningful public discourse as record candidates, preserves needed thread context, and sends approved work through the existing archive review and release path.

Read the plain-language system map: [Bluesky-first archive stewardship pipeline](docs/bluesky-stewardship-pipeline.md).

Source discovery does not publish records. The repository data, tests, and deployment workflow remain the publication gate.

## Running tests

```bash
npm test                   # all tests
npm run test:data          # data integrity + CSV quality
npm run test:pipeline      # data pipeline + thread detection
npm run test:frontend      # version consistency + frontend structure
```

Tests use the Node.js built-in test runner.

## Deploying to production

The site is hosted at `pressthink.org/j/rosen-archive/` and deployed by uploading changed files via FTP. The full deploy manifest — what to upload, what to exclude, and the cache-busting steps — lives in [`DEPLOYMENT.md`](DEPLOYMENT.md). The short version:

1. Edit source files as needed.
2. If data changed: `node data/export-archive-data.js`.
3. Run `npm run bump-version -- X.X.X` to stamp the new version across `index.html`, `version.json`, versioned JS/CSS references in `frontend/`, `faq/`, `features/`, and `dissertation/`, and the service worker's `CACHE_VERSION`. The service worker uses exact versioned request URLs and removes old cache namespaces when a release activates, so both version surfaces must move together.
4. Upload dependencies first, then standalone pages and record shells. Upload root `index.html`, `frontend/sw.js`, root `sw.js`, and `version.json` last, preserving the order from `backend/scripts/deploy_full_site.py`.

**Do not upload:** CSVs, backup files, screenshots, or the `backend/`, `tests/`, `docs/`, `archived/`, `.github/`, `.claude/`, or `node_modules/` trees. See `DEPLOYMENT.md` for the full exclusion list.

## Notes for contributors

- **No build step.** The frontend runs directly from source files via ES modules. Never add npm/webpack/vite to the production frontend.
- **Version all imports.** Every `.js` import uses a `?v=X.X.X` query parameter for cache busting. Check `index.html` for the current version.
- **HTM, not JSX.** Components use `` html`...` `` tagged templates imported from the local `html.js`.
- **Dissertation content is verified.** Quotes in `frontend/components/dissertationData.js` are verified citations — don't modify them.
- **Backend uses Poetry.** Run backend commands with `poetry run python ...` from the `backend/` directory.
- **Path auto-detection.** The app detects local vs production paths automatically in `App.js` based on hostname.
- **Sentence case everywhere.** UI text, comments, and documentation use sentence case, not title case.

## Learn more

- [`docs/README.md`](docs/README.md) — a map of all project documentation
- [`CLAUDE.md`](CLAUDE.md) — comprehensive technical reference: architecture, design system, data schema, and known issues
- [`CONTEXT.md`](CONTEXT.md) — the project's shared vocabulary (what "Record," "Entity," and "Facet" mean here)
- The [FAQ on the live site](https://pressthink.org/j/rosen-archive/faq/) — questions about the archive itself

## Contact

The archive is curated and maintained by Joe Amditis. Found a broken link, a missing work, or a data error? [Open an issue](https://github.com/jamditis/rosen-frontend/issues) or use the [ways to participate](https://pressthink.org/j/rosen-archive/features/participate/) page.

Record and social-post counts above were verified against the data files on 2026-07-23; they drift slightly as the collection grows.

More