{"id":22382518,"url":"https://github.com/jcoreio/iron-pi-webapp","last_synced_at":"2026-02-17T12:35:25.210Z","repository":{"id":38266167,"uuid":"112291583","full_name":"jcoreio/iron-pi-webapp","owner":"jcoreio","description":"Web application for the jcore.io Iron Pi device","archived":false,"fork":false,"pushed_at":"2022-12-22T08:52:31.000Z","size":5370,"stargazers_count":3,"open_issues_count":46,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-07-31T04:39:05.760Z","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":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jcoreio.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}},"created_at":"2017-11-28T05:45:37.000Z","updated_at":"2021-06-09T00:03:04.000Z","dependencies_parsed_at":"2023-01-30T06:16:49.276Z","dependency_job_id":null,"html_url":"https://github.com/jcoreio/iron-pi-webapp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/jcoreio/iron-pi-webapp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcoreio%2Firon-pi-webapp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcoreio%2Firon-pi-webapp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcoreio%2Firon-pi-webapp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcoreio%2Firon-pi-webapp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jcoreio","download_url":"https://codeload.github.com/jcoreio/iron-pi-webapp/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jcoreio%2Firon-pi-webapp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29543907,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-17T12:21:34.159Z","status":"ssl_error","status_checked_at":"2026-02-17T12:21:02.057Z","response_time":100,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":[],"created_at":"2024-12-05T00:13:19.648Z","updated_at":"2026-02-17T12:35:20.200Z","avatar_url":"https://github.com/jcoreio.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# iron-pi-webapp\n\nWeb application for the jcore.io Iron Pi device\n\n* Runtime\n    * [Node 8](https://nodejs.org/)\n    * [Express](https://expressjs.com/) - server request routing\n    * [React](https://reactjs.org/) - view rendering\n    * [React Router](https://reacttraining.com/react-router/)\n    * [JSS](http://cssinjs.org/) - CSS styling\n    * [Redux](https://redux.js.org/) - state management\n    * [Immutable.js](https://facebook.github.io/immutable-js/) - state models\n    * [`redux-features`](https://github.com/jcoreio/redux-features)\n    * [Sequelize](http://docs.sequelizejs.com/) - ORM\n    * [flow-runtime](https://codemix.github.io/flow-runtime/) - runtime type validation\n    * [GraphQL](http://graphql.org/) - API query language\n    * [Apollo](https://www.apollographql.com) - data transport middleware\n* Services\n    * [Postgres](https://www.postgresql.org/)\n* Build tools\n    * [Yarn](https://yarnpkg.com/)\n    * [Promake](https://github.com/jcoreio/promake)\n    * [Babel](https://babeljs.io/)\n    * [Webpack](https://webpack.js.org/)\n* Code quality tools\n    * [Flow](https://flow.org/) - type checking\n    * [Eslint](https://eslint.org/) - code style\n* Test tools\n    * [Mocha](https://mochajs.org/) - test definition\n    * [Chai](http://chaijs.com/) - assertions\n    * [Istanbul](https://istanbul.js.org/) - code coverage\n    * [Enzyme](http://airbnb.io/enzyme/) - React unit testing\n    * [Webdriver.io](http://webdriver.io/) - selenium testing\n\n## Cloning this project\n\nRun the following:\n```js\ngit clone https://github.com/jcoreio/iron-pi-webapp yourproject\ncd yourproject\nyarn\n./run bootstrap\n```\n\n## Setup\n\n* Install [node.js](https://nodejs.org/en/) version 8.  You may want to use [nvm](https://github.com/creationix/nvm) or\n[nvm-windows](https://github.com/coreybutler/nvm-windows) to easily switch between versions of Node.\n* Install [Docker](https://www.docker.com/), which allows you to run development instances of MySQL, Redis, and DynamoDB.\n* Log into `npm` via command line (so that you can install our private packages):\n```\nnpm login\n```\n* Install `yarn` if you haven't already:\n```\nnpm i -g yarn\n```\n* Install dependencies with `yarn`:\n```\nyarn\n```\n\n## Build script\n\nAll build and launch scripts in this project are implemented with\n[Promake](https://github.com/jcoreio/promake) in the `run` file.  To see\na list of available tasks, run it without arguments:\n```\n./run\n```\n\n## Running Dev mode\n\nRun the backend in one console:\n```\n./run dev:server\n```\n\nRun webpack in another:\n```\n./run dev:client\n```\n\nOpen the webapp at [http://localhost:4000](http://localhost:4000).\n\nYou may want some other dev tools in Chrome:\n* [React dev tools](https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi?hl=en)\n* [Redux dev tools](https://github.com/zalmoxisus/redux-devtools-extension) (last I tried Redux dev tools they were too slow for high action throughput, but maybe they've improved)\n* [Immutable.js Object Formatter](https://chrome.google.com/webstore/detail/immutablejs-object-format/hgldghadipiblonfkkicmgcbbijnpeog)\n\nDev mode includes hot reloading, faster builds, [redux-logger](https://github.com/evgenyrodionov/redux-logger), and non-minified React errors.\nThe webpack dev server runs on port 4000 and proxies to the main app server running on port 3000.\n\nYou'll probably also want to have `flow` and `eslint` checking your code in the background as you develop; to do that\npop open two terminals and run `./run flow:watch` in one and `./run lint:watch` in the other.\nYou can run `./run lint:fix` to have `eslint` auto-fix most pesky formatting errors.\n\n## Running Prod mode\n\nRun the backend in one console:\n```\n./run prod:server\n```\n\nRun webpack in another:\n```\n./run prod:client\n```\n\nOpen the webapp at [http://localhost:4000](http://localhost:4000).\n\n## Debugging the backend\n\nRun the backend with `node --inspect`:\n```\nnode --inspect ./run dev:server\n```\nor\n```\nnode --inspect ./run prod:server\n```\netc.\n\nOpen `chrome://inspect` in Google Chrome, and click the link for your node VM to open the console.\n\n## Testing\n\nTo run all tests, run:\n```\n./run test\n```\n\nOr you may run individual categories of tests:\n\n#### Unit tests\n```\n./run test:unit\n```\n\nThese are standalone and are located in either:\n* `src/**/__tests__/*.js`\n* `test/unit/**/*.js`\n\n#### Selenium tests\n```\n./run test:selenium\n```\n\nThese test against a running webapp.  The `ROOT_URL` environment\nvariable controls the server to test against.  The default is in\n`env/test.js`.\n\n#### Running webapp in test mode\nTo get full code coverage, the client and server must be running in test\nmode.   You can launch the webapp in test mode by running the `env:test`\ntask before the task(s) that launch the webapp:\n```\n./run env:test dev:server\n./run env:test dev:client\n./run env:test prod:server\n./run env:test prod:client\n```\n\n`env:test` also defaults to different databases.\n\n#### Watch mode\nAdd `:watch` at the end of a task to run in watch mode:\n```\n./run test:watch\n./run test:unit:watch\n./run test:selenium:watch\n```\n\n#### Code coverage mode\nYou can run the test with `nyc` code coverage by replacing `test` with\n`coverage` (`:watch` isn't available in this mode):\n```\n./run coverage\n./run coverage:unit\n./run coverage:selenium\n```\n\nTo get full coverage, the client and server must be running in [test\nmode](#running-webapp-in-test-mode).\n\n## Flashing the Iron Pi\n\nThese instructions mirror the generic [Raspberry Pi Compute Module Flashing Instructions](https://www.raspberrypi.org/documentation/hardware/computemodule/cm-emmc-flashing.md).\n\n#### Put the Iron Pi in flashing mode\n\n- Power down the Iron Pi\n- Connect the Iron Pi's `CPU` micro-USB to the USB port on another computer or another Raspberry Pi-based device\n- While the other computer is powered on, power on the Iron Pi. When it detects that the micro-usb is connected on \nboot, it enters flashing mode instead of attempting to boot up.\n\n#### Install and run `usbboot`:\n\nThe `usbboot` utility sends instructions via USB that make the Iron Pi's flash act\nlike a USB removable storage device.\n\nThese steps require `git`, `gcc` or a similar compiler, and `make`.\nOn a debian-based Linux system, you can install these tools by typing\n`sudo apt install git build-essential`.\n\n```sh\ngit clone https://github.com/raspberrypi/usbboot.git\ncd usbboot\n./configure\nmake\nsudo ./rpiboot\n``` \n\n##### Installing `libusb` on Mac OS\n\nTo build `usbboot` on Mac OS, you may need to download and install [libusb](https://sourceforge.net/projects/libusb/files/latest/download):\n\n```sh\ncd libusb\n./configure\nmake\nmake install\n```\n\n#### Locate the remote storage device\n\nOn Mac OS:\n\n```sh\n$ diskutil list\n/dev/disk0 (internal, physical):\n   #:                       TYPE NAME                    SIZE       IDENTIFIER\n   0:      GUID_partition_scheme                        *1.0 TB     disk0\n   1:                        EFI EFI                     209.7 MB   disk0s1\n   2:                 Apple_APFS Container disk1         1.0 TB     disk0s2\n/dev/disk1 (external, physical):\n   #:                       TYPE NAME                    SIZE       IDENTIFIER\n   0:                                                   *3.9 GB     disk1\n```\n\nIn this case, the Iron Pi is at `/dev/disk1`, and the computer's built-in hard drive is at `/dev/disk0`.\n\n#### Load the flash\n\nOn Mac OS:\n\nEnsure that the disk is not mounted:\n\n```sh\n$ sudo diskutil umountDisk /dev/disk1\nPassword:\nUnmount of all volumes on disk1 was successful\n```\n\nCopy the OS image to the Iron Pi:\n\n```sh\n$ sudo dd bs=4m if=os-image.img of=/dev/rdisk1\n```\n\n## Loading the Iron Pi software on a stock Raspbian image\n\nYou can flash the Iron Pi with a stock Raspbian OS, and then load the Iron Pi software on that OS.\n\n#### Enabling SSH\n\nSSH is disabled by default in Raspbian. To enable it:\n\n- On Mac OS, the Pi's `/boot` partition should now be accessible in Finder. In Linux, the Pi's \n  `/boot` and root partitions may be mounted under `/media`. \n- If the Iron Pi's `boot` partition did not automatically mount to your flashing computer, power cycle the Iron Pi \n  while keeping its `CPU` micro USB connected to the flashing computer, and then re-run `sudo ./rpiboot`\n  from the directory where you installed `usbboot`.\n- In the `/boot` directory mounted from the Iron Pi, create an empty file titled `ssh` (with no extension on the name).\n  On Mac OS, run `cd /Volumes/boot` and then `touch ssh`.\n- Disconnect the USB cable from the Iron Pi's `CPU` micro USB connector and power cycle the Iron Pi\n\n#### Finding your Iron Pi on the network\n\n- Connect your Iron Pi's Ethernet to a network with Internet access and DHCP support\n- [Use your router's web console, nmap, or another method to find the Iron Pi's IP address](https://www.raspberrypi.org/documentation/remote-access/ip-address.md)\n- Connect to the Iron Pi. If your Iron Pi has an address of 192.168.1.66, `ssh -l pi 192.168.1.66` should connect you via SSH\n- The default SSH password is `raspberry`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcoreio%2Firon-pi-webapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjcoreio%2Firon-pi-webapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcoreio%2Firon-pi-webapp/lists"}