{"id":50773641,"url":"https://github.com/jamditis/rosen-frontend","last_synced_at":"2026-06-11T21:05:32.047Z","repository":{"id":359385149,"uuid":"1100091048","full_name":"jamditis/rosen-frontend","owner":"jamditis","description":"The assets and components used to build the Jay Rosen Internet Archive. Created by Joe Amditis.","archived":false,"fork":false,"pushed_at":"2026-06-05T23:17:26.000Z","size":197704,"stargazers_count":0,"open_issues_count":89,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-06T00:13:35.574Z","etag":null,"topics":["academia","archive","history","journalism","library","media","news","university"],"latest_commit_sha":null,"homepage":"https://jamditis.github.io/rosen-frontend/","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jamditis.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-11-19T20:36:18.000Z","updated_at":"2026-06-05T22:28:25.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/jamditis/rosen-frontend","commit_stats":null,"previous_names":["jamditis/rosen-frontend"],"tags_count":0,"template":false,"template_full_name":"google-gemini/aistudio-repository-template","purl":"pkg:github/jamditis/rosen-frontend","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamditis%2Frosen-frontend","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamditis%2Frosen-frontend/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamditis%2Frosen-frontend/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamditis%2Frosen-frontend/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jamditis","download_url":"https://codeload.github.com/jamditis/rosen-frontend/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jamditis%2Frosen-frontend/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34217510,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-11T02:00:06.485Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["academia","archive","history","journalism","library","media","news","university"],"created_at":"2026-06-11T21:05:31.146Z","updated_at":"2026-06-11T21:05:32.041Z","avatar_url":"https://github.com/jamditis.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jay Rosen Internet Archive\n\nA public collection of the works, critiques, and teachings of Jay Rosen, NYU professor of journalism. Covers four decades of journalism criticism, media theory, and public life.\n\n**Live site:** https://pressthink.org/j/rosen-archive/\n\n## What this is\n\nThe archive has two main parts:\n\n1. **The archive browser** — a searchable, filterable interface for 1,030 records (800 articles, 137 Tumblr posts, 83 newspaper clippings, 10 social-media threads) plus ~29,700 social media posts, indexed by 5,036 named entities and 4,666 relationships\n2. **The dissertation tools** — 3 interactive surfaces for exploring Jay's 1986 doctoral dissertation, *The Impossible Press*: the reader, the foreword, and the network-effect film analysis (an earlier set of 8 tools — comparison, concepts, context, excerpts, faq, glossary, source, timeline — was retired and lives in `archived/dissertation-tools/` for reference)\n\nEverything runs as a static site with no server-side code. The frontend loads JSON data files directly in the browser.\n\n## Running it locally\n\n```bash\npython3 -m http.server 8000\n```\n\nOpen http://localhost:8000. That's it — no build step, no `npm install` needed just to serve the site (npm install is only needed when you regenerate JSON from the source CSVs — see next section).\n\n## How the site works\n\n- `index.html` is the entry point. It loads React, HTM, and other libraries from `esm.sh` CDN via an import map.\n- `frontend/` contains the React app. All components use HTM tagged templates (`` html`...` ``) instead of JSX.\n- `data/` contains the archive data as JSON files, generated from CSV source files.\n- `dissertation/` contains 3 live presentation tools (`reader/`, `foreword/`, `network-effect/`), each in its own subdirectory with an `index.html`. An earlier set of 7 tools (comparison, concepts, context, excerpts, faq, glossary, timeline) is retired to `archived/dissertation-tools/`; that path also holds a `source/` bundle (PDF + transcribed markdown + a build helper), which is not a standalone tool.\n- `frontend/dist/tailwind.css` is a pre-built Tailwind CSS file. No build needed unless you change styles.\n\n## Updating the archive data\n\nThe site reads from JSON files that are generated from CSV source files:\n\n| Source file | What it contains |\n|-------------|-----------------|\n| `data/archive_records-public.csv` | Main archive records (1,030 records) |\n| `data/social_posts.csv` | Twitter/X and Bluesky posts (~29,700) |\n| `data/extracted_entities.csv` | Named entities (5,036) |\n| `data/extracted_relationships.csv` | Entity relationships (4,666) |\n\nTo regenerate the JSON after editing a CSV:\n\n```bash\nnpm install          # first time only\nnode data/export-archive-data.js\n```\n\nThis produces the split JSON files the frontend reads:\n- `data/archive-core.json` — lightweight record cards (loads on page load)\n- `data/archive-details.json` — full summaries, quotes, concepts (loads on demand)\n- `data/archive-entities.json` — entity graph for the Explorer view (loads on demand)\n- `data/archive-data.json` — full combined fallback file\n\n## Deploying to production\n\nThe site is hosted at `pressthink.org/j/rosen-archive/` via FTP to a WordPress server. The full deploy manifest — what to upload, what to exclude, and the cache-busting steps — lives in `DEPLOYMENT.md`. The short version:\n\n1. Edit source files as needed.\n2. If data changed: `npm install` (first time only), then `node data/export-archive-data.js`.\n3. Bump the version string in `index.html`, `version.json`, and every `?v=` query parameter on versioned imports — both JS (`./frontend/index.js?v=…`) and CSS (`./frontend/index.css?v=…`, `./frontend/dist/tailwind.css?v=…`). `tests/version-consistency.test.js` enforces a single shared `?v=` only across `index.html` and `frontend/**.js`; it does NOT scan the dissertation subpages, archived tools, or feature pages. Stale `?v=` values outside that scope will pass CI but leave cached assets live in production, so sweep the whole tree by hand on a version bump.\n4. Upload only the files that changed via FTP to `/wp-content/rosen-archive/`.\n\n**Do not upload:** CSVs, backup files, screenshots, the `backend/`, `tests/`, `docs/`, `archived/`, `.github/`, `.claude/`, or `node_modules/` trees. See `DEPLOYMENT.md` for the full exclusion list.\n\n## Running tests\n\n```bash\nnpm test                   # all tests\nnpm run test:data          # data integrity + CSV quality\nnpm run test:pipeline      # data pipeline + thread detection\nnpm run test:frontend      # version consistency + frontend structure\n```\n\nTests use Node.js built-in test runner.\n\n## Key directories\n\n```\nindex.html                    Entry point\nfrontend/                     React application\n  components/                 UI components\n  services/                   Data loading, routing, SQLite\n  dist/tailwind.css           Pre-built styles\ndata/                         CSV sources + generated JSON\ndissertation/                 3 live dissertation tools (7 earlier ones, plus a source bundle, in archived/dissertation-tools/)\nfeatures/                     Standalone feature pages\nbackend/                      Python data pipeline (scraping, AI analysis)\ntools/active/                 Dev tools (data explorer, data viz)\ntests/                        Frontend and data test suite\narchived/                     Legacy code (reference only)\ndocs/                         Project documentation\n.github/workflows/            CI/CD (frontend validation, backend tests, linting)\n```\n\n## Important notes\n\n- **No build step.** The frontend runs directly from source files via ES modules. Never add npm/webpack/vite to the production frontend.\n- **Version all imports.** Every `.js` import uses a `?v=X.X.X` query parameter for cache busting. Check `index.html` for the current version.\n- **HTM, not JSX.** Components use `` html`...` `` tagged templates. Import from `../html.js`.\n- **Dissertation content is verified.** Quotes in `frontend/components/dissertationData.js` are verified citations — don't modify them.\n- **Backend uses Poetry.** Run backend commands with `poetry run python ...` from the `backend/` directory.\n- **Path auto-detection.** The app detects local vs production paths automatically in `App.js` based on hostname.\n\n## For more detail\n\nSee `CLAUDE.md` for comprehensive technical documentation including the full architecture, design system, data schema, known issues, and development rules.\n\n---\n\n*Originally curated by Joe Amditis.*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamditis%2Frosen-frontend","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjamditis%2Frosen-frontend","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjamditis%2Frosen-frontend/lists"}