{"id":28280140,"url":"https://github.com/yuzhoumo/piazzabox","last_synced_at":"2026-04-26T16:32:40.601Z","repository":{"id":232140282,"uuid":"783559237","full_name":"yuzhoumo/piazzabox","owner":"yuzhoumo","description":"Piazza course archiver and viewer","archived":false,"fork":false,"pushed_at":"2024-06-02T03:42:21.000Z","size":2832,"stargazers_count":1,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-16T18:45:14.523Z","etag":null,"topics":["alpinejs","piazza","python","web-archiving"],"latest_commit_sha":null,"homepage":"","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/yuzhoumo.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}},"created_at":"2024-04-08T06:11:45.000Z","updated_at":"2024-07-30T16:14:52.000Z","dependencies_parsed_at":"2024-04-13T21:29:46.385Z","dependency_job_id":null,"html_url":"https://github.com/yuzhoumo/piazzabox","commit_stats":null,"previous_names":["yuzhoumo/piazzabox"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yuzhoumo/piazzabox","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuzhoumo%2Fpiazzabox","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuzhoumo%2Fpiazzabox/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuzhoumo%2Fpiazzabox/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuzhoumo%2Fpiazzabox/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yuzhoumo","download_url":"https://codeload.github.com/yuzhoumo/piazzabox/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yuzhoumo%2Fpiazzabox/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32305035,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-26T09:34:17.070Z","status":"ssl_error","status_checked_at":"2026-04-26T09:34:00.993Z","response_time":129,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["alpinejs","piazza","python","web-archiving"],"created_at":"2025-05-21T10:16:13.764Z","updated_at":"2026-04-26T16:32:40.586Z","avatar_url":"https://github.com/yuzhoumo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\".github/logo.svg\" alt=\"Piazzabox logo\" /\u003e\n\n[![MIT License](https://img.shields.io/badge/License-MIT-green.svg)](https://choosealicense.com/licenses/mit/)\n\nPiazzabox is an archiver for Piazza courses. Save posts and file attachments\nfrom Piazza and generate static sites for local viewing!\n\nBuilt with Python and Alpine.js + Tailwind.\n\n![screenshot](.github/screenshot.png)\n\n## Features\n\n- Archives course info and posts to json files\n- Downloads file attachments and user profile photos\n- Generates an offline, searchable webpage for each archived course\n- Webpages properly display both markdown and math notations (LaTeX)\n- Anonymous usernames are correctly generated (matches what's shown on Piazza)\n\n## Installation\n\n```sh\npython3 -m venv venv\nsource ./venv/bin/activate\npip install -r requirements.txt\n```\n\n## Usage\n\n1. Run `python3 piazzabox.py` and enter your login credentials.\n2. Choose Piazza courses to archive.\n3. Open the generated `index.html` file found in the `out` folder\n   (alternatively, host this somewhere).\n\nOptional: Rename the `secrets.template.json` file to `secrets.json` and fill\nin your Piazza email and password to keep your login credentials saved.\n\nIf Piazzabox fails due to network errors or is otherwise interrupted while\narchiving, restart the program and it will pick up where it left off.\n\n## Development\n\nThere is no need to install dev dependencies for the webpage unless you are\nmaking changes to it. Use the following to install dev dependencies:\n\n```sh\ncd web\nnpm install\n# Important: Run after making changes to re-build tailwind css\n# npm run build\n```\n\n## Acknowledgements\n\n- [Unofficial Piazza API](https://github.com/hfaran/piazza-api)\n- [Inspired by Ben Cuan's archive script](https://github.com/64bitpandas/piazza-archiver)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyuzhoumo%2Fpiazzabox","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyuzhoumo%2Fpiazzabox","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyuzhoumo%2Fpiazzabox/lists"}