{"id":50448505,"url":"https://github.com/patrick-morrison/australian-library-browser","last_synced_at":"2026-05-31T23:03:11.386Z","repository":{"id":355394829,"uuid":"1199297427","full_name":"patrick-morrison/australian-library-browser","owner":"patrick-morrison","description":"Desktop app for collecting material from Trove and SLWA into self-describing research libraries on disk.","archived":false,"fork":false,"pushed_at":"2026-05-03T11:16:08.000Z","size":4979,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-03T13:17:32.447Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"JavaScript","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/patrick-morrison.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":"COPYRIGHT.md","agents":null,"dco":null,"cla":null}},"created_at":"2026-04-02T08:06:23.000Z","updated_at":"2026-05-03T11:16:13.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/patrick-morrison/australian-library-browser","commit_stats":null,"previous_names":["patrick-morrison/australian-library-browser"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/patrick-morrison/australian-library-browser","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-morrison%2Faustralian-library-browser","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-morrison%2Faustralian-library-browser/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-morrison%2Faustralian-library-browser/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-morrison%2Faustralian-library-browser/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/patrick-morrison","download_url":"https://codeload.github.com/patrick-morrison/australian-library-browser/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/patrick-morrison%2Faustralian-library-browser/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33752286,"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-05-31T02:00:06.040Z","response_time":95,"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":[],"created_at":"2026-05-31T23:03:09.805Z","updated_at":"2026-05-31T23:03:11.380Z","avatar_url":"https://github.com/patrick-morrison.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# The Australian Library Browser\n\nDesktop app for collecting material from Trove and SLWA into self-describing research libraries on disk.\n\nRun it either way:\n\n- packaged builds: [GitHub Releases](https://github.com/patrick-morrison/australian-library-browser/releases)\n- from source: `npm install` then `npm start`\n\nBuilt on April 1-2, 2026 as an experiment in spinning up a custom research browser. It is vibe-coded, so do not expect my usual standard. The tyres have been kicked, but use it at your own risk. I am writing the history of Wellington Dam, and this was built to speed up and improve the workflow for handling primary research notes.\n\nThe point of it is simple: save full-resolution images and markdown into a local library, keep the primary record on disk, and make that material searchable, summarisable, and cross-referenceable with help from Codex or Claude Code.\n\n## Getting Started: Wellington Dam Case Study\n\nThis example uses a small Wellington Dam research task: find newspaper references to the dam, collect useful articles, ignore or uncollect false leads, then add an SLWA photograph to the same local research library.\n\n### 1. Create a library\n\nOpen the app, choose **Library**, then click **New Library**. Name it something direct, such as `wellington-dam`. The app creates a normal folder on disk with a `.trovelibrary` manifest, `items.csv`, and subfolders for newspapers, images, notes, and debug material.\n\n### 2. Search Trove newspapers\n\nSwitch to **Collect** and search Trove for `Wellington Dam` in Newspapers \u0026 Gazettes. Click **Save** on the toolbar once the search is useful. This records the search URL so you can come back to the exact result set later.\n\n\n### 3. Preview, collect, ignore, or uncollect\n\nOpen a promising result. The left preview pane extracts the record metadata and text into markdown. Use:\n\n- **Collect** when the record belongs in the project.\n- **Ignore** when it is clearly irrelevant but may appear in future searches.\n- **Uncollect** from the Library detail view if you collected something and later decide it should be removed from the active collection.\n\nCollected and ignored decisions stay attached to matching records when they appear again.\n\n![Previewing a Wellington Dam newspaper article](docs/screenshots/getting-started-wellington-preview.png)\n\nAfter collection, the preview pane changes state so you can see that the record has already been handled.\n\n![A collected Wellington Dam newspaper article](docs/screenshots/getting-started-wellington-decision.png)\n\n### 4. Add SLWA photographs\n\nFor images, search or open an SLWA record such as `Wellington Dam campsite`. The preview pane shows the photograph, source metadata, and extracted note content. Click **Collect** to save the full image plus a markdown sidecar into the library.\n\n![Previewing an SLWA Wellington Dam image](docs/screenshots/getting-started-wellington-slwa-preview.png)\n\n### 5. Review the local library\n\nSwitch to **Library** to review what you have collected. Use the filters for collected, ignored, and uncollected records; use Gallery for image records; use the newspaper calendar to browse Trove newspaper articles by date.\n\nEverything remains in the project folder:\n\n- newspaper articles as markdown in `newspapers/`\n- image files and sidecar markdown in `images/`\n- an inventory spreadsheet in `items.csv`\n- project state in `project.yaml`\n\n![Reviewing the Wellington Dam library](docs/screenshots/getting-started-wellington-library.png)\n\n## Screenshots\n\nSearch live on Trove or SLWA, save the search, and work through results with inline controls.\n\n![Searching](docs/screenshots/searching.jpeg)\n\nPreview a record before collecting it, with the extracted text or image shown in the side pane.\n\n![Library finder](docs/screenshots/library.jpeg)\n\nCollect or ignore as you go. Decisions stay attached to records when they turn up again in later searches.\n\n![Ignoring](docs/screenshots/ignoring.jpeg)\n\nWork back through the local library, reopen saved searches, and inspect what has already been collected. In the end, it is all markdown and images in a folder on your local computer.\n\n![Library](docs/screenshots/library-finder.jpeg)\n\nPaste research notes full of Trove or SLWA links, extract the URLs, and open unresolved ones for triage.\n\n![Links](docs/screenshots/links.jpeg)\n\nIf you need to map a new site, save debug dumps of the page structure and build an unofficial adapter from that material.\n\n![Debug dumps](docs/screenshots/debug.jpeg)\n\nThe screenshots live in `docs/screenshots/`.\n\nSupported sources:\n\n- `Trove`\n- `SLWA`\n\nEach library is a normal folder with a `.trovelibrary` manifest inside it.\n\nTypical contents:\n\n- `project.yaml` for project state\n- `items.csv` for a flat inventory\n- `README.md` for local notes\n- `newspapers/` for markdown captures\n- `images/` for downloaded images and sidecar markdown\n- `debug/` for optional page dumps and reverse-engineering notes\n\n## Workflow\n\nStart with a search on Trove or SLWA, then save that search so there is a record of what you looked for. As you work through the results, collect or ignore records so there is a record of what you have already seen and decided on. Then change the search and keep going. Records you already made a decision on stay marked as collected or ignored when they turn up again in later searches.\n\nYou can preview items before collecting them. For Trove, that means traversing through to the full text and rendering it as markdown. For SLWA, it means pulling through to the image and associated record details. When you collect something, the app saves the result neatly into the local library with the metadata alongside it.\n\nIf you already have research notes full of Trove or SLWA links, there is a bulk import path. Paste the notes in, the app will extract the links, show which ones are already collected or ignored, and open the unresolved ones in tabs for triage.\n\nThe whole point is to move quickly through Trove and SLWA searches, keep local copies of what matters, keep a record of what has already been seen, and leave the metadata in a form that is easy to search and work across later.\n\n## New Sites\n\nThere is a debug dump path for mapping the HTML of a new site you want to work on. The idea is to save page dumps into `debug/`, inspect the structure, and then quickly sketch an adapter from that material with help from Claude or Codex.\n\nNone of this is official. The source integrations are just pragmatic adapters around public pages.\n\n## Development\n\n```bash\nnpm install\nnpm start\n```\n\nCommon commands:\n\n```bash\nnpm run test:fixtures\nnpm run test:e2e:smoke\nnpm run test:mcp\nnpm run dist\nnpm run dist:mac\n```\n\nFor agent/debug harness notes, see [`docs/HARNESS.md`](docs/HARNESS.md).\n\nOpen tabs from the CLI:\n\n```bash\nnpm run open:tabs -- \"https://trove.nla.gov.au/newspaper/article/32575438\"\npbpaste | npm run open:tabs\n```\n\nStart the MCP server with:\n\n```bash\nnpm run mcp:start\n```\n\nMCP tools:\n\n- `list_projects`\n- `create_project`\n- `get_project_inventory`\n- `read_item_markdown`\n- `search_markdown`\n- `save_project_note`\n- `open_urls_in_tabs`\n- `open_search_queries_in_tabs`\n\nWith MCP, Codex can read saved markdown in a library, identify names, places, dates or phrases worth following up, and open the next Trove or SLWA search tabs directly from those queries.\n\nNotes:\n\n- This repo does not ship downloaded research libraries or copied third-party page dumps.\n- The package is licensed under MIT.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrick-morrison%2Faustralian-library-browser","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpatrick-morrison%2Faustralian-library-browser","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpatrick-morrison%2Faustralian-library-browser/lists"}