{"id":13779639,"url":"https://github.com/petermikitsh/myethereumapp","last_synced_at":"2025-04-15T18:30:51.845Z","repository":{"id":55862541,"uuid":"141500251","full_name":"petermikitsh/myethereumapp","owner":"petermikitsh","description":"Web client for viewing data from the Etherscan API","archived":false,"fork":false,"pushed_at":"2020-12-10T21:41:47.000Z","size":1122,"stargazers_count":19,"open_issues_count":9,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-29T00:33:52.802Z","etag":null,"topics":["crypto","cryptocurrency","ethereum","etherscan-api","feathersjs","now","zeit"],"latest_commit_sha":null,"homepage":"https://myethereum.app","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/petermikitsh.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":"2018-07-18T23:32:04.000Z","updated_at":"2024-05-04T05:31:49.000Z","dependencies_parsed_at":"2022-08-15T08:00:49.088Z","dependency_job_id":null,"html_url":"https://github.com/petermikitsh/myethereumapp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/petermikitsh%2Fmyethereumapp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/petermikitsh%2Fmyethereumapp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/petermikitsh%2Fmyethereumapp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/petermikitsh%2Fmyethereumapp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/petermikitsh","download_url":"https://codeload.github.com/petermikitsh/myethereumapp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249128921,"owners_count":21217244,"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":["crypto","cryptocurrency","ethereum","etherscan-api","feathersjs","now","zeit"],"created_at":"2024-08-03T18:01:07.443Z","updated_at":"2025-04-15T18:30:51.361Z","avatar_url":"https://github.com/petermikitsh.png","language":"JavaScript","funding_links":[],"categories":["Resources"],"sub_categories":["Examples"],"readme":"### ✨ Demo Site: [https://myethereum.app](https://myethereum.app) ✨\n\n## myethereumapp\n\n[![Build Status](https://travis-ci.org/petermikitsh/myethereumapp.svg?branch=master)](https://travis-ci.org/petermikitsh/myethereumapp) [![Coverage Status](https://coveralls.io/repos/github/petermikitsh/myethereumapp/badge.svg?branch=master)](https://coveralls.io/github/petermikitsh/myethereumapp?branch=master) [![dependencies Status](https://david-dm.org/petermikitsh/myethereumapp/status.svg)](https://david-dm.org/petermikitsh/myethereumapp)\n\nWeb client for viewing data from the Etherscan API.\n\n### Getting Started\n\nThis application requires a locally-running MySQL instance in development mode. By default, the application will attempt connecting to the following location: `mysql://localhost:3306/etherscan-local`. Once the MySQL server is available, run the following:\n\n```\nnpm install\nnpm run db:migrate\nnpm start\n```\n\nYour browser will open when the bundle is ready.\n\n### Architecture, design decisions, etc\n\n- Server: [NodeJS](https://nodejs.org/en/) server using [FeathersJS](https://feathersjs.com/) for quickly building REST and real-time APIs. Data is persisted in [Google Cloud Platform's Cloud SQL](https://cloud.google.com/sql/) service. [Sequelize](https://github.com/sequelize/sequelize) is used as the ORM and to manage the database table structure with migration scripts.\n\n- Client: Single-page [React](https://reactjs.org/) application, using [Redux](https://redux.js.org/) for state management. The [Material Design React components](https://github.com/collegepulse/material-react-components) used in this project were implemented by the author. These components were designed with a focus on performance, accessibility, and cross-browser support. Color palette and font choices inspired by the look-and-feel of the Apple Design Award winning [Robinhood](https://robinhood.com/) app. The following separation of concerns is applied:\n\n  - The `src/client/components` directory contains React components primarily concerned with the DOM.\n\n  - The `src/client/routes` directory contains React components that integrate with `react-router` and `redux` state management. No DOM-specific logic lives in this directory.\n\n- Testing: When shipping enterprise applications, you need confidence in quality. The unit tests provide extensive coverage of the codebase, allowing developers to add or augment existing features, without fear of introducing a regression. Unit tests are written with [Jest](https://jestjs.io/) for parallelized, fast execution.\n\n- Developer experience: If you want to move quickly, you need to be effectively utilizing developer tools. This project implements hot module reloading on **both** the client and server. When server code changes, the server is restarted. When client code changes, [react-hot-loader](https://github.com/gaearon/react-hot-loader) patches them into the browser (no hard page refresh). Seeing is believing!\n\n- Automated deployments: Once unit tests and the build succeed, [Travis](https://travis-ci.org/petermikitsh/myethereumapp) automatically deploys the application to [Zeit](https://zeit.co/), a PaaS for NodeJS applications. The application is accessible at [https://myethereum.app](https://myethereum.app).\n\n### Out of scope\n\n- Locking down the API. In a true production environment, you'd want to rate limit requests, add pagination, and require authentication to reach the API endpoints.\n\n- Server-side rendering. If you look at the response from the server root (e.g., `GET /`), you'll notice the [body](https://github.com/petermikitsh/myethereumapp/blob/master/src/server/services/render/index.js) is sparse, as the DOM is populated by React on the client. This can be less-than-ideal for SEO.\n\n- Simplified workflows. In this project, you'll see I've pushed commits directly to master. In enterprise environments with multiple collaborators, I usually follow a variation of the [standard branching model](https://nvie.com/posts/a-successful-git-branching-model/?), where features are built on a new branch.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpetermikitsh%2Fmyethereumapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpetermikitsh%2Fmyethereumapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpetermikitsh%2Fmyethereumapp/lists"}