Official client for the Surely todo app. An Expo React Native app that builds to both iOS and web.
Backend is https://api.surelytodo.com. 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 to point to.
- Deployed to both iOS and web. Only blocker on Android is a dependency requiring intl support.
- Material Design with dark mode support on all platforms via React Native Paper.
- Navigation via React Navigation, including predictable web URLs and a drawer that smoothly transitions between persistent on large viewports and collapsible on small.
- Uses a custom styling library,
react-native-style-queries, to apply responsive styles declaratively in a way inspired by media queries. - Thoroughly tested via React Native Testing Library.
- Dependencies kept up-to-date with minimal effort: when tests pass and app boots, can be confident nothing's broken.
- Good accessibility labels, which I used via iOS Voice Control while I was experiencing some wrist pain.
- 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.
You have two options for getting support with Surely:
- Open a GitHub Issue on this repo
- Send a support email to support at surelytodo dot com
Requirements and npm dependencies can be installed by running bin/setup
$ yarn installBuild and install native dev client on a simulator:
$ yarn iosIf the native dev client is already installed:
$ yarn startThen press i
$ yarn startThen press w to run in a web browser
- Open
src/baseUrl.jsand set aLOCAL_IPfor the dev server - Plug in physical device
- Run
yarn ios --device
$ yarn lint$ yarn testyarn start- Click "Run in web browser"
- In another terminal,
yarn cypress
- Increment the
ios.buildNumberinapp.json - Run
yarn build:ios - Once the build completes, upload the
.ipafile it created to TestFlight using the Apple Transporter app.
If this doesn't work, do a prebuild (see instructions above) then archive the app in Xcode.
$ yarn build:web- Copy the
web-buildfolder to somewhere accessible on the public internet - 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
MIT