docs/PLANNING.md
# Apps
## Focus
- hourly notification journal
- count deep work hours (intensity + focus + category [work, investment, physical])
- timeline count of number of hours spent in each category
## Complete
- kanban todos
- ranked based on impact + effort
- project management
## Checklists
- best practices
- shareability + forking
# Planning
## Top goals (FOCUS)
Deploy Android + iOS App
V1
- [x] add tab bar (day view, calendar, settings)
- [x] login/logout
- [x] landing screens
- [x] sign up
- [x] redux layer
- [x] debug page
- [x] download page
- [x] validate ios, android, web
- [ ] gracefully handle server errors
- [ ] error boundary
- [ ] android working
- [ ] complete debug page (interval, goal)
- [ ] terms and privacy policy
- [ ] splash screen
- [ ] interval page
- [ ] goal page
- [ ] progress page
- [ ] account page
- [ ] interval notifications
V2
- [ ] data migrations
- [ ] codepush
- [ ] progress page
- [ ] onboarding
- [ ] social sign up
- [ ] payment
- [ ] interval change
v3
- [ ] deeplinking
- [ ] rate app
- [ ] nps survey
- [ ] ads
- [ ] lazy load app navigation routes
* Bonus
- [x] remove Questionnaire
- [ ] remove Checklist
- [x] migrate everything to libs (wont do)
- [x] update to react-native-mmkv (wont do)
- [x] upgrade 71
- [x] move all to .cache
- [x] add pressable component with onPressIn (remove touchable compnoents)
- [x] upgrade to flashlist
- [ ] update text inputs (1 component, remove value, useRef instead of useState)
- [ ] update redux (toolkit, slices based on apps)
- [ ] remove dayjs
- [ ] make modal global like toast (https://github.com/timolins/react-hot-toast)
- [ ] Notification.show(), alert.show(), actionsheet.show()
- [ ] cache test in ci
```ts
const Modal = {};
Modal.push();
Modal.pop();
Modal.popToTop();
Modal.popAll();
```
Deploy iOS App (Focus)
- [ ] assets
- [ ] landing page
- [ ] push notifications
- [ ] nps survey
- [ ] app review survey
- [ ] find 10 users
Deploy 2nd Android App (Journal)
- [ ] landing screens
- [ ] daily view
- [ ] scrollable entries
- [ ] input view
- [ ] settings icon
- [ ] backend storage
- [ ] assets
- [ ] push notifications
Automate Deploys
- [ ] release branch for all builds
- [ ] ios app version = package version
- [ ] test ipa
- [ ] test apk
Faster Releases
- [ ] app center
- [ ] code push
Deploy 2nd iOS App (Journal)
- [ ] assets
Deploy 3nd App (Complete)
- [ ] drag and drop
- [ ] backend
- [ ] sync/offline
## Actionables
| action | type | impact | complexity |
| ------------------------------------------------------------------------------------------------- | ------------ | :----: | :--------: |
| hourly update | core | 5 | 5 |
| login | core | 5 | 1 |
| signup | core | 5 | 1 |
| codepush | | 1 | 5 |
| app center deploy | | 1 | 5 |
| firebase backend | core | 5 | 5 |
| landing page | core | 2 | 3 |
| automatic deploys | | | |
| swipe | fun | | |
| slack | fun | | |
| remove dayjs | debt | | |
| stripe | money | | |
| google abmob | money | | |
| facebook ads | money | | |
| nps | feedback | | |
| review app | feedback | | |
| email landing | feedback | | |
| deeplink | reach | | |
| push notifications | reach | | |
| local notifications | reach | | |
| text me the app | reach | | |
| referrals | reach | | |
| error boundary | core | 5 | 1 |
| storybook | | | |
| auto update dependency | | | |
| splitwise | | | |
| [snoopy profiling](https://github.com/jondot/rn-snoopy) | | | |
| [deploy rollback](https://eng.uber.com/ubereats-react-native/) | | | |
| [chat datamodels](https://www.youtube.com/watch?v=m_u6P5k0vP0&feature=share) | | | |
| each app landing page | | | |
| [badges](https://www.youtube.com/watch?v=4-s1qoADXok) | gamification | | |
| [points](https://www.youtube.com/watch?v=i-08jn0VP-A) (teamtreehouse, khanacadamey, codeacadamey) | gamification | | |
| leader boards | gamification | | |
| spend points (gifts, subscription) | gamification | | |
| daily rewards | gamification | | |
| [basketball](https://github.com/FaridSafi/react-native-basketball) | game | | |
| [flappybird](https://github.com/GeekyAnts/FlappyBird-ReactNative) | game | | |
| snake | game | | |
| papi jump | game | | |
| drift get bigger and faster | game | | |
| hourly update | app | | |
| checklist | app | | |
| todo | app | | |
| cant hurt me | app | | |
| portfolio | app | | |
| journal | app | | |
| one page notes | app | | |
| questionnaires | feature | | |
| chat | feature | | |
| markdown | feature | | |
## Resources
- [ ] main landing page https://www.lemonade.com/ https://www.any.do/ https://i.imgur.com/e4svRwy.png https://evernote.com/ https://telegram.org/ https://lyft.com http://www.shegy.nazwa.pl/materialupmarket/mdlp/index_light.html https://ifttt.com/
## Done
- [x] fix modal shadow
- [x] remove /providers
- [x] remove /hooks
- [x] remove /utils
- [x] add yup for runtime typeshecking
- [x] complete bouncing loading screen
- [x] react navigation
- [x] fastlane build multiple apps
- [x] ios (core)
- [x] ios (journal)
- [x] ios (progress)
- [x] ios (complete)
- [x] android (core)
- [x] android (journal)
- [x] android (progress)
- [x] android (complete)
- [x] navigation
- [x] upload zshrc
- [x] fix android https://github.com/fastlane/fastlane/issues/18403
- [x] color
- [x] date-fns to dayjs
- [x] use createStackNavigator instead of createStackNavigator (from 45fps to 55fps. does not work with modals)
- [x] use react-native-fast-image
- [x] `{showReview && <Review onComplete />`
- [x] install accelerator
- [x] fix ios build (pods)
- [x] backup google drive offline
- [x] rename app to playground
- [x] debug menu
- [x] dark mode
- [x] fix build (web) (@react-native-community/netinfo)
- [x] revive focus
- [x] cant hurt me dialog
- [x] use net info
- [x] make ios work
- [x] fix tests
- [x] deploy ios
- [x] update docs dependencies
- [x] run on android
- [x] push code
- [x] remove react-native-version-number for updated react-native-device-info
- [x] code splitting by screen
- [x] error boundary
- [x] redux offline
- [x] dynamic import screens
- [x] remove moment.js
- [x] cant hurt me modals like focus
- [x] fix pinch spread
- [x] fix dark mode card size
- [x] icons for web
- [x] set metro.config to `true` without crashing because of `react-native-vector-icons`
- [x] ~~relay~~
- [x] ~~[styled components](https://github.com/styled-components/styled-components)~~
- [x] vscode (editor)
- [x] remote-redux-devtools
- [x] [typescript](https://medium.com/@rintoj/
- [x] ~~[storybook](https://github.com/storybooks/storybook/tree/master/app/react-native) (component builder)~~
- [x] [duck or duck++](https://github.com/erikras/ducks-modular-redux) (redux management)
- [x] ~~[react-native-interactable](https://github.com/wix/react-native-interactable) (native animations)~~
- [x] ~~[redux injectors](http://nicolasgallagher.com/redux-modules-and-code-splitting/)~~
- [x] add error boundary in app and show error alert
- [x] remove `@babel/plugin-transform-object-assign` dependency when updating `react` `react-dom` or `react-test-renderer`
- [x] remove `YellowBox` warning after upgrading react native to 0.59.5+
- [x] prevent `Trace: The node type SpreadProperty has been renamed to SpreadElement` in app center build
- [x] ~~airbnb lint~~
- [x] prettier lint
- [x] github ci
- [x] deploy ci
- [x] jest
- [x] codecov
- [x] dependency check
- [x] change log
- [x] commit restriction
- [x] main tableview
- [x] main navigation
- [x] main counter
- [x] main app statusbar
- [x] fix stopwatch
- [x] logout clear everything
- [x] attempt icons again
- [x] useRootSelector
- [x] darkmode
- [x] fix test because of hooks
- [x] useRootDispatch
- [x] finish redux for user (async typeactions)
- [x] hook up auth to sign in flow
- [x] add tests to auth
- [x] clean up navigation layer
- [x] fix checklists and canthurtme
- [x] push v2 fix
- [x] move all code to /app
- [x] move modals to /screen
- [x] remove modal1 and modal2
- [x] get ci working again
- [x] create a root initial state for redux tests
- [x] figure out auto import relative pathing
- [x] clean up debug index screen
- [x] add keyboard listener to device
- [x] convert other reduxes to new syntax
- [x] fix web for device-info and version-number
- [x] complete device tests for 100% test coverage
- [x] checklist redux
- [x] clean all branches
- [x] clean up all todos
- [x] remove react-scripts-ts without breaking yarn lint
- [x] attempt to replace react-scripts-ts with react-scripts without breaking ci or app center ci
- [x] update to react native 0.59
- [x] infinite scroll image collection
- [x] fix broken ci
- [x] look into [react navigation for web](https://github.com/react-navigation/example-web)
- [x] update to react native 58
- [x] validate commit messages work
- [x] make redux clean
- [x] update dependencies with new redux tools
- [x] figure out why not releasing
- [x] get semantic release and changelog working
- [x] make nav buttons larger
- [x] button icon color
- [x] pull in button and text update
- [x] remove icon && <Component>
- [x] add button colors
- [x] figure out release
- [x] add ios push notifications config
- [x] successful ios archive
- [x] go though all dependencies and move them to contributing
- [x] push ios bundle to itunes
- [x] add icons and splash screens
- [x] increase coverage threshold and add coverall pr report
- [x] fix github ci
- [x] prevent travis from running 2 builds on pr
- [x] rename android to com.eneff.example
- [x] update create-react-app v2 (waiting on template PR)
- [x] add app center
- [x] add firebase native
- [x] figure out mock store
- [x] add tests to all files
- [x] upgrade to react native 0.57
- [x] add explosion to debug
- [x] confirm timestamp from done list
- [x] test debugger
- [x] add debug drag ball
- [x] add precommit commitmsg
- [x] clean up router to use classes, nest auth, next route
- [x] create debug screen with everything
- [x] add text sizing
- [x] keyboard dismiss prevents horizontal scroll
- [x] keyboard avoid prevents flex
- [x] add keyboard dismiss
- [x] add slide
- [x] test deinit nav
- [x] add icon native dependencies