{"id":14980046,"url":"https://github.com/mutinywallet/mutiny-web","last_synced_at":"2025-04-06T20:13:05.838Z","repository":{"id":91144473,"uuid":"595315000","full_name":"MutinyWallet/mutiny-web","owner":"MutinyWallet","description":"The frontend for Mutiny Wallet","archived":false,"fork":false,"pushed_at":"2024-09-04T16:04:37.000Z","size":38374,"stargazers_count":179,"open_issues_count":144,"forks_count":62,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-02T06:02:44.558Z","etag":null,"topics":["bitcoin","bitcoin-wallet","lightning","lightning-node","nostr","wallet"],"latest_commit_sha":null,"homepage":"https://app.mutinywallet.com","language":"TypeScript","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/MutinyWallet.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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-01-30T20:43:05.000Z","updated_at":"2025-03-05T18:16:35.000Z","dependencies_parsed_at":"2024-01-22T12:46:45.665Z","dependency_job_id":"0c815ca3-abb0-41eb-87cd-8789a791eef0","html_url":"https://github.com/MutinyWallet/mutiny-web","commit_stats":{"total_commits":892,"total_committers":21,"mean_commits":"42.476190476190474","dds":0.4405829596412556,"last_synced_commit":"71d1beda6429724852d45e2481b5524f76ec62f4"},"previous_names":[],"tags_count":183,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MutinyWallet%2Fmutiny-web","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MutinyWallet%2Fmutiny-web/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MutinyWallet%2Fmutiny-web/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MutinyWallet%2Fmutiny-web/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MutinyWallet","download_url":"https://codeload.github.com/MutinyWallet/mutiny-web/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247543595,"owners_count":20955865,"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":["bitcoin","bitcoin-wallet","lightning","lightning-node","nostr","wallet"],"created_at":"2024-09-24T14:01:12.725Z","updated_at":"2025-04-06T20:13:05.807Z","avatar_url":"https://github.com/MutinyWallet.png","language":"TypeScript","readme":"### Running Mutiny Web\n\n### Dependencies\n\n-   pnpm \u003e 8\n\n```\npnpm install\npnpm run dev\n```\n\n### Env\n\nThe easiest way to get start with development is to create a file called `.env.local` and copy the contents of `.env.example` into it. This is basically identical to the env that `signet-app.mutinywallet.com` uses.\n\n### Testing\n\nWe have a couple Playwright e2e tests in the e2e folder. You can run these with:\n\n```\njust test\n```\n\nOr get a visual look into what's happening:\n\n```\njust test-ui\n```\n\n### Formatting\n\nHopefully your editor picks up on the `prettier.config.mjs` file and auto formats accordingly. If you want to format everything in the project run `pnpm run format`.\n\n### Deploying Web\n\nCreate a PR from `master` to `prod`, and once it does CI and gets approvals, do this from the command line:\n\n```\ngit checkout master \u0026\u0026 git pull \u0026\u0026 git checkout prod \u0026\u0026 git pull \u0026\u0026 git merge --ff-only origin/master \u0026\u0026 git push\n```\n\n## Contributing\n\nBefore committing make sure to run `pnpm run pre-commit`. This will typecheck, lint, and format everything so CI won't hassle you. (Shortcut: `just pre`).\n\n### Local\n\nIf you want to develop against a local version of [the node manager](https://github.com/MutinyWallet/mutiny-node), you may want to `pnpm link` it.\n\nDue to how [Vite's dev server works](https://vitejs.dev/config/server-options.html#server-fs-allow), the linked `mutiny-node` project folder should be a sibling of this `mutiny-web` folder. Alternatively you can change the allow path in `vite.config.ts`.\n\nIn your `mutiny-node` local repo:\n\n```\njust link\n```\n\n(on a Mac you might need to prefix `just link` with these flags: `AR=/opt/homebrew/opt/llvm/bin/llvm-ar CC=/opt/homebrew/opt/llvm/bin/clang`)\n\nNow in this repo, link them.\n\n```\njust local\n```\n\nTo revert back and use the remote version of mutiny-wasm:\n\n```\njust remote\n```\n\n## Android\n\n### How to test locally\n\n```\njust native\n```\n\nNow open up the `android` directory in android studio and run the build\n\n### Deploying\n\n#### Pull Requests\n\nEach pull request will build the debug signet app and upload it internally to the github actions run.\n\n#### Master\n\nEach push to master will build a signed release version running in signet mode. The build process is almost identical to the release version.\n\nPrereleased tags will be created for master.\n\n#### Release\n\n##### Android\n\nFirst bump up the `versionCode` and `versionName` in `./andriod/app/build.gradle`. The `versionCode` must always go up by one when making a release. The `versionName` can mimic `package.json` with an extra build number like `0.4.3-1` to make it easier to keep things looking like they are in sync when android only releases go out.\n\nPublish a new tag like `0.4.3-1` in order to trigger a signed release version running in mainnet mode.\n\n##### iOS\n\nIn `ios/App/App.xcodeproj/project.pbxproj` bump `MARKETING_VERSION` and then do whatever needs to be done in testflight to get it released.\n\n### Creating keys for the first time\n\n1. Generate a new signing key\n\n```\nkeytool -genkey -v -keystore \u003cmy-release-key.keystore\u003e -alias \u003calias_name\u003e -keyalg RSA -keysize 2048 -validity 10000\nopenssl base64 \u003c \u003cmy-release-key.keystore\u003e | tr -d '\\n' | tee some_signing_key.jks.base64.txt\n```\n\n2. Create 3 Secret Key variables on your GitHub repository and fill in with the signing key information\n    - `KEY_ALIAS` \u003c- `\u003calias_name\u003e`\n    - `KEY_STORE_PASSWORD` \u003c- `\u003cyour key store password\u003e`\n    - `SIGNING_KEY` \u003c- the data from `\u003cmy-release-key.keystore\u003e`\n3. Change the `versionCode` and `versionName` on `app/build.gradle`\n4. Commit and push.\n\n## Translating\n\n### Testing language keys\n\nTo check what keys are missing from your desired language:\n\n```\njust i18n $lang\n```\n\n### Adding new languages or keys\n\n1. In `public/i18n/` locate your desired language .json file or create one if one does not exist\n\n    - When creating a new language file ensure it follows the ISO 639 2-letter standard\n\n2. Populate your translation file with a translation object where all of the keys will be located\n\nIf you want to add Japanese you will create a file `/public/i18n/jp.json` and populate it with keys like so:\n\n```\n{\n  \"common\": {\n        \"continue\": \"続ける\",\n        ...\n    }\n}\n```\n\n(You should compare your translations against the English language as all other languages are not the master and are likely deprecated)\n\nIf you're using VS Code there are some nice extensions that can make this easier like i18n-ally and i18n-json-editor\n\n3. Add your language to the `Language` object in `/src/utils/languages.ts`. This will allow you to select the language via the language selector in the UI. If your desired language is set as your primary language in your browser it will be selected automatically\n\n```\nexport const LANGUAGE_OPTIONS: Language[] = [\n    {\n        value: \"日本語\",\n        shortName: \"jp\"\n    },\n```\n\n4. That's it! You should now be able to see your translation keys populating the app in your desired language. When youre ready go ahead and open a PR to have you language merged for others!\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmutinywallet%2Fmutiny-web","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmutinywallet%2Fmutiny-web","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmutinywallet%2Fmutiny-web/lists"}