{"id":24747873,"url":"https://github.com/NeedBee-LLC/surely-expo","last_synced_at":"2025-10-10T16:31:33.121Z","repository":{"id":37256745,"uuid":"404671441","full_name":"NeedBee-LLC/surely-expo","owner":"NeedBee-LLC","description":"Official client for the Surely todo app. An Expo React Native app that builds to both iOS and web.","archived":false,"fork":false,"pushed_at":"2025-10-02T00:09:05.000Z","size":7398,"stargazers_count":28,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-10-02T01:17:21.524Z","etag":null,"topics":["expo","json-api","react-native","react-native-paper","react-native-web","react-navigation"],"latest_commit_sha":null,"homepage":"https://surelytodo.com","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/NeedBee-LLC.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-09-09T10:01:48.000Z","updated_at":"2025-10-02T00:09:07.000Z","dependencies_parsed_at":"2023-10-24T10:34:23.171Z","dependency_job_id":"5db59d90-4286-4277-89a8-7d269bcd375e","html_url":"https://github.com/NeedBee-LLC/surely-expo","commit_stats":null,"previous_names":["needbee-llc/surely-expo","codingitwrong/surely-expo"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/NeedBee-LLC/surely-expo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeedBee-LLC%2Fsurely-expo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeedBee-LLC%2Fsurely-expo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeedBee-LLC%2Fsurely-expo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeedBee-LLC%2Fsurely-expo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NeedBee-LLC","download_url":"https://codeload.github.com/NeedBee-LLC/surely-expo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NeedBee-LLC%2Fsurely-expo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279004706,"owners_count":26083750,"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-10T02:00:06.843Z","response_time":62,"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":["expo","json-api","react-native","react-native-paper","react-native-web","react-navigation"],"created_at":"2025-01-28T05:18:01.533Z","updated_at":"2025-10-10T16:31:33.116Z","avatar_url":"https://github.com/NeedBee-LLC.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Surely-Expo\n\nOfficial client for the Surely todo app. An Expo React Native app that builds to both iOS and web.\n\nBackend is \u003chttps://api.surelytodo.com\u003e. If you'd like to build the client yourself, you can still use the same backend, or you can set up your own installation of [surely-api](https://github.com/CodingItWrong/surely-api) to point to.\n\n## Code Features\n\n- Deployed to both [iOS](https://apps.apple.com/us/app/surely/id1586633713) and [web](https://surelytodo.com). Only blocker on Android is a dependency requiring [intl support](https://github.com/web-ridge/react-native-paper-dates#android-caveats).\n- Material Design with dark mode support on all platforms via React Native Paper.\n- Navigation via React Navigation, including predictable web URLs and a drawer that smoothly transitions between persistent on large viewports and collapsible on small.\n- Uses a custom styling library, [`react-native-style-queries`](https://github.com/bignerdranch/BNR-react-native-style-queries), to apply responsive styles declaratively in a way inspired by media queries.\n- Thoroughly tested via React Native Testing Library.\n- Dependencies kept up-to-date with minimal effort: when tests pass and app boots, can be confident nothing's broken.\n- Good accessibility labels, which I used via iOS Voice Control while I was experiencing some wrist pain.\n- Since it is a \"CRUD\" app, uses JSON:API for the data layer to minimize client and server code needed to be written. Uses a custom client library, [`@codingitwrong/jsonapi-client`](https://github.com/CodingItWrong/jsonapi-client/).\n\n## Support\n\nYou have two options for getting support with Surely:\n\n- [Open a GitHub Issue on this repo](https://github.com/CodingItWrong/surely-expo/issues)\n- Send a support email to support at surelytodo dot com\n\n## Requirements\n\n- Node 22.x\n- [Yarn 1.x](https://yarnpkg.com/en/docs/install)\n- [Expo CLI](https://docs.expo.dev/get-started/installation/)\n- [EAS CLI](https://docs.expo.dev/build/setup/#1-install-the-latest-eas-cli)\n- [Cocoapods](https://guides.cocoapods.org/using/getting-started.html#installation)\n- [Fastlane](https://docs.fastlane.tools/getting-started/ios/setup/)\n- [Detox CLI](https://wix.github.io/Detox/docs/introduction/getting-started/#1-command-line-tools-detox-cli)\n\nRequirements and npm dependencies can be installed by running `bin/setup`\n\n## Installation\n\n```bash\n$ yarn install\n```\n\n## Running\n\n### iOS\n\nBuild and install native dev client on a simulator:\n\n```bash\n$ yarn ios\n```\n\nIf the native dev client is already installed:\n\n```bash\n$ yarn start\n```\n\nThen press `i`\n\n### Web\n\n```bash\n$ yarn start\n```\n\nThen press `w` to run in a web browser\n\n### Physical iOS Device\n\n- Open `src/baseUrl.js` and set a `LOCAL_IP` for the dev server\n- Plug in physical device\n- Run `yarn ios --device`\n\n## Testing\n\n### Linting\n\n```bash\n$ yarn lint\n```\n\n### Unit Tests\n\n```bash\n$ yarn test\n```\n\n### End-to-End Tests (web)\n\n- `yarn start`\n- Click \"Run in web browser\"\n- In another terminal, `yarn cypress`\n\n## Release\n\n### iOS\n\n- Increment the `ios.buildNumber` in `app.config.js`\n- Run `yarn build:ios`\n- Once the build completes, upload the `.ipa` file it created to TestFlight using the Apple [Transporter](https://apps.apple.com/us/app/transporter/id1450874784?mt=12) app.\n\nIf this doesn't work, do a prebuild (see instructions above) then archive the app in Xcode.\n\n### Web\n\n```bash\n$ yarn build:web\n```\n\n- Copy the `web-build` folder to somewhere accessible on the public internet\n- Configure the web server to route all paths that aren't found on disk to `index.html`; that way links to pages handled by React Navigation will all load up the app\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNeedBee-LLC%2Fsurely-expo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FNeedBee-LLC%2Fsurely-expo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FNeedBee-LLC%2Fsurely-expo/lists"}