Skip to content

vitalyiegorov/suuudokuuu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Stand With Ukraine

Suuudokuuu

Sudoku game to help Ukraine win the war against russia.

Unique. modern, open source React Native / Expo Sudoku game with a lot of features.

Feel free to create an issue, feature request or pull request if you have any suggestions or ideas.

Play now! Do not hesitate

Play directly in your browser! Download on the App Store Download on the Play Market

Play directly in your browser!]

Features

Monorepo architecture

Project is using a monorepo approach with TurboRepo to manage multiple packages in a single repository.

Internalization(i18n)

The app supports multiple languages, which is detected by expo-localization including:

  • Ukrainian
  • English
  • French
  • German
  • Spanish

i18n is implemented using Lingui library

App versioning and release management

The app uses semantic versioning to manage versions with conventional commits meaning each commit and pull request has a strict format, which allows to generate beautiful changelogs and release notes automatically.

A github PR workflow has a step to validate the PR title using commitlint to ensure that the PR title follows the conventional commits format.

Users can automatically see current app version on home page using expo-constants

Native versions

App uses fingerprint runtimeVersion policy ensure that expo-updates are applied to the correct version of the app.

To automate user-facing app version app.cofig.js takes it from the package.json file of the app package, which is updated automatically by lerna.

Expo tutorial on app versioning

Release management

The app uses lerna to manage versions of the packages in the monorepo, generate changelogs for each package if it was changed, and create Github releases.

Enterprise-grade CI/CD

EAS over the air updates are used to deliver the PRs and production updates to the users, 2 channels are used:

  • development - for the pull requests
  • production - for the master branch

All changes are represented as pull requests, each pipeline runs:

These strict rules ensure that the code is of high quality, secure, and maintainable. Also this is very helpful for Copilot and other AI tools

Pull requests

Each pull request creates an EAS preview for the iOS, Android and Web platforms, all info is published as comments to the PR, and web deployment is created.

Master branch

Each commit to the master branch:

  • creates an EAS OTA update for the iOS, Android and Web production platforms.
  • creates a new GitHub release with the changelog for the release

Production Web is hosted on Vercel, maybe we will migrate to EAS hosting when it becomes stable.

Each commit

Special manual GitHub Workflow is used to build and publish the app to the stores.

For the iOS app is published ti the TestFlight, for the Play Market it is published to the internal testing track.

Then after manual review the app can be published to the production track.

Internal distribution and testing

For testing on real devices special manual GitHub Workflow is used to build the app for internal distribution.

You need to register your device in the Expo dashboard to be able to install the development build.

Register your IOS device

Auto-candidates

The app supports auto-candidates mode, which allows you to fill the candidates automatically based on the current state of the board.

Web keyboard support

Use your arrow keys to navigate through the Sudoku board, press any number 1-9 to fill the cell.

Tab activates auto-candidate mode

Sharing puzzles

You can share the current puzzle with your friends via a link, which will open the app with the same puzzle, score, mistakes and timer.

Expo - Sharing

Expo - Linking

Expo - Router

Theming support

You can switch between light and dark themes, OS/Browser theme is detected automatically initially.

React navigation theming

React native - Appearance

React native - useColorTheme

Universal links

Sharing a link to https://suuudokuuu.com/ will open the app on your device if it is installed, otherwise it will open the web version of the app.

Expo iOS Universal Links

Expo - Android Linking

Expo - iOS Linking

Animation

The app uses react-native-reanimated for smooth animations and transitions.

Cell text animations are implemented using single SharedValue to optimize the performance, prop flag triggers the animation.

Packages

  • app - React Native / Expo application package
  • generator - Sudoku puzzle generator
  • app-tests - Maestro tests for the app package