{"id":26370229,"url":"https://github.com/ottodevs/pomodoro-counter","last_synced_at":"2025-10-15T07:37:01.819Z","repository":{"id":71769036,"uuid":"166156896","full_name":"ottodevs/pomodoro-counter","owner":"ottodevs","description":null,"archived":false,"fork":false,"pushed_at":"2018-12-10T15:27:52.000Z","size":212,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-08-12T02:41:07.855Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":false,"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/ottodevs.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,"zenodo":null}},"created_at":"2019-01-17T03:53:35.000Z","updated_at":"2021-09-17T10:58:30.000Z","dependencies_parsed_at":null,"dependency_job_id":"fc36c9c1-47cd-4a16-bcd1-426d63271871","html_url":"https://github.com/ottodevs/pomodoro-counter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ottodevs/pomodoro-counter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ottodevs%2Fpomodoro-counter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ottodevs%2Fpomodoro-counter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ottodevs%2Fpomodoro-counter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ottodevs%2Fpomodoro-counter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ottodevs","download_url":"https://codeload.github.com/ottodevs/pomodoro-counter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ottodevs%2Fpomodoro-counter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279059611,"owners_count":26094991,"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","status":"online","status_checked_at":"2025-10-15T02:00:07.814Z","response_time":56,"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":"2025-03-16T23:18:31.037Z","updated_at":"2025-10-15T07:37:01.778Z","avatar_url":"https://github.com/ottodevs.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Aragon React Boilerplate\n\n\u003e 🕵️ [Find more boilerplates using GitHub](https://github.com/search?q=topic:aragon-boilerplate) | \n\u003e ✨ [Official boilerplates](https://github.com/search?q=topic:aragon-boilerplate+org:aragon)\n\nReact boilerplate for Aragon applications.\n\nThis boilerplate also includes a fully working example app, complete with a background worker and a front-end in React (with Aragon UI).\n\n## Usage\n\n```sh\naragon init foo.aragonpm.test react\n```\n\n## Running your app\n\n### Using HTTP\n\nRunning your app using HTTP will allow for a faster development process of your app's front-end, as it can be hot-reloaded without the need to execute `aragon run` every time a change is made.\n\n- First start your app's development server running `npm run start:app`, and keep that process running. By default it will rebuild the app and reload the server when changes to the source are made.\n\n- After that, you can run `npm run start:aragon:http` which will compile your app's contracts, publish the app locally and create a DAO. You will need to stop it and run it again after making changes to your smart contracts.\n\nChanges to the app's background script (`app/script.js`) cannot be hot-reloaded, after making changes to the script, you will need to either restart the development server (`npm run start:app`) or rebuild the script `npm run build:script`.\n\n### Using IPFS\n\nRunning your app using IPFS will mimic the production environment that will be used for running your app. `npm run start:aragon:ipfs` will run your app using IPFS. Whenever a change is made to any file in your front-end, a new version of the app needs to be published, so the command needs to be restarted.\n\n## What's in the box?\n\n### npm Scripts\n\n- **start** or **start:aragon:ipfs**: Runs your app inside a DAO served from IPFS\n- **start:aragon:http**: Runs your app inside a DAO served with HTTP (hot reloading)\n- **start:app**: Starts a development server for your app\n- **compile**: Compile the smart contracts\n- **build**: Builds the front-end and background script\n- **build:app**: Builds the front-end\n- **build:script**: Builds the background script\n- **test**: Runs tests for the contracts\n- **publish**: Builds the apps and the contracts and publishes them to IPFS and APM\n\n### Libraries\n\n- [**@aragon/os**](https://github.com/aragon/aragonos): Aragon interfaces\n- [**@aragon/client**](https://github.com/aragon/aragon.js/tree/master/packages/aragon-client): Wrapper for Aragon application RPC\n- [**@aragon/ui**](https://github.com/aragon/aragon-ui): Aragon UI components (in React)\n\n#### Publish\nThis app has 3 environments defined in `arapp.json`:\n\n| Environment | Network |\n|---|---|\n| default | localhost |\n| staging | rinkeby |\n| production | mainnet |\n\nPrerequisites:\n- ENS Registry address\n\nNote: the `default` environment which points to `localhost` does not have an ENS Registry address specified, that's because the `@aragon/cli` will use the default value of `0xB9462EF3441346dBc6E49236Edbb0dF207db09B7`.\n\n##### Staging environment\nThis environment defined in `arapp.json` points to:\n- an ENS registry (`0x314159265dd8dbb310642f98f50c066173c1259b`)\n- an APM registry (`open.aragonpm.eth`)\n- an APM repository (`pomodoro-counter`)\n- an Ethereum network (`rinkeby`)\n\nthe `rinkeby` network is further defined in `truffle.js`, and has:\n- an Ethereum API address (`https://rinkeby.infura.io`)\n- an Ethereum Account (`0xb4124cEB3451635DAcedd11767f004d8a28c6eE7`)\n    (which is the first account generated from the `DEFAULT_MNEMONIC` variable)\n\n##### Content \u0026 contract\nCommand:\n```\naragon apm publish major CounterApp --environment staging\n```\n\nThis will:\n1. _build_ the app's frontend (which lives in `dist`)\n2. _compile_ the app's contracts (which live in `build`)\n3. publish the app to the **staging** environment.\n\nSample output:\n```\n ✔ Check IPFS\n ✔ Applying version bump (major)\n ✔ Deploy contract\n ✔ Determine contract address for version\n ✔ Building frontend\n ✔ Prepare files for publishing\n ✔ Generate application artifact\n ✔ Publish pomodoro-counter.aragonpm.eth\n ✔ Fetch published repo\n\n ✔ Successfully published pomodoro-counter.aragonpm.eth v4.0.0: \n ℹ Contract address: 0xC56a94cB177B297A9f4fe11781CE4E2eD1829f8B\n ℹ Content (ipfs): QmetwPT5CSuzAgTdqwwr5NTBm2R53YMNHp4p6PUbWxrVwg\n ℹ Transaction hash: 0x6ad17abdac51aca2f37679c43ce4fcbc68dc65515ea1eea587c9ca8f5bf293b8\n```\n\n\n##### Content/frontend only\nCommand:\n```\naragon apm publish minor --only-content --environment staging\n```\n\nThis will:\n1. _build_ the app's frontend (which lives in `dist`)\n2. publish the app to the **staging** environment.\n\nSample output:\n```\n ✔ Check IPFS\n ✔ Applying version bump (minor)\n ✔ Determine contract address for version\n ✔ Building frontend\n ✔ Prepare files for publishing\n ✔ Generate application artifact\n ✔ Publish pomodoro-counter.open.aragonpm.eth\n ✔ Fetch published repo\n\n ✔ Successfully published pomodoro-counter.open.aragonpm.eth v2.1.0: \n ℹ Content (ipfs): QmQCPnPrVFQzKRYHYffa28HGM3ge5ztGp2qCp4ELiF3pBa\n ℹ Transaction hash: 0x8092746febb63ed888fca33c8319f237c5bf4fe6fa18381e7407e5dddef97f68\n```\n\n##### Help\nTo deploy from a different account, you can:\n- define a `~/.aragon/mnemonic.json` file\n    ```\n    {\n        \"mnemonic\": \"explain tackle mirror kit ...\"\n    }\n    ```\n    or\n- define a `~/.aragon/rinkeby_key.json` file\n    ```\n    {\n        \"rpc\": \"http://127.0.0.1:8545\",\n        \"keys\": [\n            \"a8a54b2d8197bc0b19bb8a084031be71835580a01e70a45a13babd16c9bc1563\"\n        ]\n    }\n    ```\n\nYou might encounter the following errors:\n1. `No \"from\" address specified in neither the given options, nor the default options.`\n    That is because the network you are trying to deploy does not have an Ethereum account provider.\n\n2. `Transaction would not succeed (\"gas required exceeds allowance or always failing transaction\")`\n    when running `aragon apm publish minor CounterApp --environment staging`.\n    Solution: deploy a `major` version. ¯\\_(ツ)_/¯\n\n3. `Transaction would not succeed (\"Returned error: VM Exception while processing transaction: revert REPO_INVALID_VERSION\")`\n    when running `aragon apm publish minor CounterApp`.\n    Solution: deploy a `major` version. ¯\\_(ツ)_/¯\n\n4. `→ ENOENT: no such file or directory, open '.../pomodoro-counter/build/contracts/CounterApp.json'`\n    when running `aragon apm publish patch`.\n    Is it expected to have the contracts compiled and the current version's contract to be redeployed.\n    \n\n#### Install the app in a DAO\nTo install this app on a rinkeby dao, e.g: `daniel.aragonid.eth`, which lives at `0xf9e4c6ee977b1fe7d296fbe3b75ba05f12a30e4e`,\n\nRun:\n```\ndao install daniel pomodoro-counter.open.aragonpm.eth --environment staging\n```\n\nSample output:\n```\n ✔ Fetching pomodoro-counter.open.aragonpm.eth@latest\n ↓ Checking installed version [skipped]\n   → Installing the first instance of pomodoro-counter.open.aragonpm.eth in DAO\n ✔ Deploying app instance\n ↓ Fetching deployed app [skipped]\n   → App wasn't deployed in transaction.\n ℹ Successfully executed: \"Execute desired action as a token holder\"\n ⚠ After the app instance is created, you will need to assign permissions to it for it appear as an app in the DAO\n```\n^- this is because the you do not have direct permissions to add apps.\n\nNow you can go to the app and vote, it should look like this: `Kernel: No description`.\nIf you vote yes, the app will be installed in the DAO.\nFor the app to appear in the DAO you need to install permissions:\n1. Check the `NewAppProxy` event from the kernel:  https://rinkeby.etherscan.io/address/0xF9e4c6ee977b1Fe7D296FbE3b75BA05f12A30E4e#events\nand extract the app address: `c82ad38789097e2b151840eb3dc9875f9eedd695`\n2. Create the permissions\n```\ndao acl create daniel c82ad38789097e2b151840eb3dc9875f9eedd695 INCREMENT_ROLE 0xb4124cEB3451635DAcedd11767f004d8a28c6eE7 0xb4124cEB3451635DAcedd11767f004d8a28c6eE7 --environment staging\n```\nOutput:\n```\n ✔ Generating transaction\n ✔ Sending transaction\n ✔ Successfully executed: \"Execute desired action as a token holder\"\n```\n\n*Now a new vote will be created, and once it passes the app should appear in the menu.*\n\nSolution B: grant on the `Kernel` app, the `Manage apps` permission to the account you are trying to publish with (`0xb4124cEB3451635DAcedd11767f004d8a28c6eE7`)\nTODO\n\n##### Upgrade\n```\ndao upgrade daniel pomodoro-counter.open.aragonpm.eth --environment staging\n```\n\n##### Remove\n\nTODO\n\n##### Help\nYou might encounter the following errors:\n1. `Transaction has been reverted by the EVM:`\n    This is because you do not have direct permissions.\n\n2. `→ Cannot find artifacts in APM repo. Please make sure the package is published and IPFS or your HTTP server running.`\n    This could be because there is no IPFS peer that has your app's content (frontend/artifact)\n    You can check by going to `https://ipfs.io/ipfs/${hash}` and see if you can fetch it.\n    Easiet fix is to re-deploy.\n\n3. Stuck at `Inspecting DAO`\n    This could be because `aragon.js` needs a websocket connection to ethereum to query data, and truffle providers being on `web3 0.x`, not supporting web sockets, the following workaround is needed:\n    ```diff\n    {\n      \"registry\": \"0x98df287b6c145399aaa709692c8d308357bc085d\",\n      \"appName\": \"pomodoro-counter.open.aragonpm.eth\",\n    + \"wsRPC\": \"wss://rinkeby.eth.aragon.network/ws\",\n      \"network\": \"rinkeby\"\n    } \n    ```\n    Note: this will work in the next version of the cli, when [pull/270](https://github.com/aragon/aragon-cli/pull/270) is merged!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fottodevs%2Fpomodoro-counter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fottodevs%2Fpomodoro-counter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fottodevs%2Fpomodoro-counter/lists"}