{"id":21691181,"url":"https://github.com/jsjoeio/jp-courses","last_synced_at":"2026-05-19T00:05:49.179Z","repository":{"id":97829540,"uuid":"358631234","full_name":"jsjoeio/jp-courses","owner":"jsjoeio","description":"CLI for downloading my courses","archived":false,"fork":false,"pushed_at":"2021-06-06T15:01:35.000Z","size":338,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-01-25T13:09:15.907Z","etag":null,"topics":["cli","deno"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jsjoeio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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}},"created_at":"2021-04-16T14:47:15.000Z","updated_at":"2021-06-08T06:55:12.000Z","dependencies_parsed_at":null,"dependency_job_id":"dfe01268-537a-46c3-b503-ffafb8622bc1","html_url":"https://github.com/jsjoeio/jp-courses","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsjoeio%2Fjp-courses","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsjoeio%2Fjp-courses/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsjoeio%2Fjp-courses/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jsjoeio%2Fjp-courses/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jsjoeio","download_url":"https://codeload.github.com/jsjoeio/jp-courses/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244618448,"owners_count":20482319,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["cli","deno"],"created_at":"2024-11-25T17:36:45.959Z","updated_at":"2026-05-19T00:05:49.153Z","avatar_url":"https://github.com/jsjoeio.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# jp-courses\n\nCLI for downloading and taking my courses.\n\nWritten in Deno.\n\n## Quickstart\n\nTo get started, run the install script which will download the project into a directory called `jp-courses`:\n\n```sh\ncurl -fsSL https://raw.githubusercontent.com/jsjoeio/jp-courses/main/scripts/install.sh | sh\n\ncd jp-courses\n\n./jp-courses --help\n```\n\n### Download Manually\n\n1. Go to [Releases](https://github.com/jsjoeio/jp-courses/releases)\n2. Download for your OS (aarch64-apple-darwin is for macOS with M1)\n3. Unzip\n4. `chmod +x jp-courses`\n5. Run `--help` or `--dryRun` to get started\n\n### Try the Demo Course\n\nAfter downloading the CLI, you can try the demo course by following these steps:\n\n```sh\n# inside jp-courses folder\n./jp-courses --paymentId cs_live_a1VHFUz7lYnXOL3PUus13VbktedDQDubwfew8E70EvnS1BTOfNTSUXqO0i\n\n# Downloads demo course into folder called `course`\ncd course\n\n# Start course\n../jp-courses start\n\n# Open course in browser on localhost:4507\n```\n\n## Permissions\n\nThis CLI uses the following permissions:\n- `--allow-net`: allow network access\n  - the CLI sends a request to joeprevite.com to verify your purchase, then it downloads the course zip file from raw.githubusercontent.com. We also serve the course content on localhost:4507, or localhpst:$PORT if you specify the `PORT` environment variable.\n- `--allow-write`\n  - We unzip the course to your current directory (where you call the CLI).\n- `--allow-read`: allow file system read access\n  - Once we've downloaded the course as a zip to the system, we then need this to read the file and unzip it. We also need it to serve the course files on the course server which runs on localhost:4507\n- `--allow-env`\n  - When the CLI is used in dry run mode, we add an environment variable called `DRY_RUN` and set it to \"0\".\n- `--unstable`\n  - The CLI uses unstable Deno features so we must use this.\n\nRead more about Deno's permissions list [here](https://deno.land/manual@v1.9.2/getting_started/permissions#permissions-list).\n\n## Local Development\n\n## Scripts\n\nThis project uses [`denon`](https://github.com/denosaurs/denon) to manage scripts. See [`scripts.json`](./scripts.json)\n\n### `start`\n\nStarts the course on http://localhost:3000. Note: this will fail if there is not a directory with `/content` at the root.\n### `download`\n\nRuns the script with a valid payment ID to download the course.\n\n### `help`\n\nRuns the script with the `--help` flag.\n\n### `test`\n\nRuns all the tests.\n```sh\ndenon test\n```\n\n### `unit`\n\nRuns only the `tests/unit.test.ts`\n\n### `integration`\n\nRuns only the `tests/integration.test.ts`\n\n### `e2e`\n\nRuns only the `tests/e2e.test.ts`\n\n## Release\n\nTo generate a new release, follow these steps:\n\n1. Bump version in `scripts.json`\n2. Commit and push to remote\n3. Run `denon release`\n4. Type in release notes\n5. Press Enter","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsjoeio%2Fjp-courses","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjsjoeio%2Fjp-courses","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjsjoeio%2Fjp-courses/lists"}