{"id":23070565,"url":"https://github.com/sametcodes/tweether","last_synced_at":"2025-10-19T01:08:54.010Z","repository":{"id":134107265,"uuid":"542173087","full_name":"sametcodes/tweether","owner":"sametcodes","description":"An ethereum-based twitter clone.","archived":false,"fork":false,"pushed_at":"2022-10-14T14:47:03.000Z","size":653,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-09T07:04:57.894Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"tweether.vercel.app","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/sametcodes.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":"2022-09-27T16:03:24.000Z","updated_at":"2023-08-31T19:09:52.000Z","dependencies_parsed_at":null,"dependency_job_id":"a6e29f95-cbdc-47cb-8aa5-cdb413854c82","html_url":"https://github.com/sametcodes/tweether","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sametcodes/tweether","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sametcodes%2Ftweether","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sametcodes%2Ftweether/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sametcodes%2Ftweether/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sametcodes%2Ftweether/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sametcodes","download_url":"https://codeload.github.com/sametcodes/tweether/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sametcodes%2Ftweether/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260072816,"owners_count":22954926,"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":[],"created_at":"2024-12-16T06:27:11.379Z","updated_at":"2025-10-19T01:08:53.921Z","avatar_url":"https://github.com/sametcodes.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"## tweether\n\n### About\n\n`tweether` is a blockchain-based twitter clone, _that was done for educational purposes._\n\nThe stack is based on React/TypeScript. The smart contract for the application must be located under `src/contract/Tweether.sol`. The ABI code will be produced as `src/contract/Tweether.json` after running `npm run compile:contract` command. The contract address must be defined with `REACT_APP_CONTRACT_ADDRESS` environment variable in the `.env` file.\n\nUsing TypeScript on frontend applications provides a safer development environment, it can be optional for some projects. When web applications that drive smart contracts are concerned, it must be a necessity, in my opinion. Interfaces were clearly declared for all the components, and TypeChain was used to declare the smart contract methods. If something changes in the smart contract, it should be compiled again and run `npm run typechain` command to update method interfaces.\n\n### About the contract code\n\nIf you check out `src/contract/Tweether.sol`, you'll notice that `tweets[]` array is defined as private variable. The reason is to promote data fetching from the `getTweet` method. The cause is `likedBy` value in the `Tweet` struct requires a calculation; it's not possible to do that in the way of direct access to `tweets[]` variable.\n\n`Tweet` struct has a one-to-many relation on itself. The relation can be seen [here](https://dbdiagram.io/d/633841a37b3d2034ff009027) as a table.\n\n### Install and Run\n\n```bash\nnpm install\n```\n\n```bash\nnpm start\n```\n\nIn the case of changing `src/contract/Tweether.sol` file, the ABI code and interface of the smart contract must be reproduced. The `compile:contract` and `compile:typechain` commands can be sent as `compile` at once.\n\n```bash\nnpm run compile\n```\n\n### Dependencies\n\n- [React Blockies](https://www.npmjs.com/package/react-blockies)\n- [dethcrypto/TypeChain](https://github.com/dethcrypto/TypeChain)\n- [React Router v6](https://reactrouter.com/en/main)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsametcodes%2Ftweether","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsametcodes%2Ftweether","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsametcodes%2Ftweether/lists"}