{"id":20773978,"url":"https://github.com/efefurkankarakaya/library-app","last_synced_at":"2026-03-06T04:33:37.317Z","repository":{"id":192922252,"uuid":"649449080","full_name":"efefurkankarakaya/library-app","owner":"efefurkankarakaya","description":"A book library app built on React Native and Realm","archived":false,"fork":false,"pushed_at":"2023-09-15T23:42:44.000Z","size":9549,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-14T21:34:46.424Z","etag":null,"topics":["expo","react-native","realm","typescript"],"latest_commit_sha":null,"homepage":"","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/efefurkankarakaya.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-06-04T21:45:03.000Z","updated_at":"2025-03-03T11:51:40.000Z","dependencies_parsed_at":null,"dependency_job_id":"668d28bb-5948-4883-9be7-2bd62d1233ed","html_url":"https://github.com/efefurkankarakaya/library-app","commit_stats":null,"previous_names":["efefurkankarakaya/library-app"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/efefurkankarakaya/library-app","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efefurkankarakaya%2Flibrary-app","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efefurkankarakaya%2Flibrary-app/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efefurkankarakaya%2Flibrary-app/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efefurkankarakaya%2Flibrary-app/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/efefurkankarakaya","download_url":"https://codeload.github.com/efefurkankarakaya/library-app/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/efefurkankarakaya%2Flibrary-app/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263684065,"owners_count":23495615,"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":["expo","react-native","realm","typescript"],"created_at":"2024-11-17T12:27:53.840Z","updated_at":"2026-03-06T04:33:37.276Z","avatar_url":"https://github.com/efefurkankarakaya.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Library App\n\nA book library application built on React Native and Realm.\n\n\u003cimg src=\"./docs/screenshots/libraryapp_home.png\" width=\"381\" /\u003e\n\n## Technologies\n\n- \u003ca href=\"https://reactnative.dev/\"\u003eReact Native\u003c/a\u003e (v0.71.8)\n- \u003ca href=\"https://react.dev/\"\u003eReact\u003c/a\u003e (v18.2.0)\n- \u003ca href=\"https://www.mongodb.com/docs/realm/sdk/react-native/\"\u003eRealm\u003c/a\u003e (v11.10.1)\n- \u003ca href=\"https://www.typescriptlang.org/\"\u003eTypescript\u003c/a\u003e (v4.9.4)\n- \u003ca href=\"https://expo.dev/\"\u003eExpo CLI\u003c/a\u003e (v48.0.18)\n- \u003ca href=\"https://redux-toolkit.js.org/\"\u003eRedux Toolkit\u003c/a\u003e (v1.9.5)\n- \u003ca href=\"https://github.com/software-mansion/react-native-gesture-handler\"\u003eReact Native Gesture Handler\u003c/a\u003e (v2.9.0)\n- \u003ca href=\"https://github.com/software-mansion/react-native-screens\"\u003eReact Native Screens\u003c/a\u003e (v3.20.0)\n- \u003ca href=\"https://github.com/software-mansion/react-native-svg\"\u003eReact Native SVG\u003c/a\u003e (v13.4.0)\n- \u003ca href=\"https://www.npmjs.com/package/moment-timezone\"\u003eMoment Timezone\u003c/a\u003e (v0.5.43)\n- \u003ca href=\"https://jestjs.io/\"\u003eJest\u003c/a\u003e (v29.2.1)\n\n## Dependencies\n\n- \u003ca href=\"https://nodejs.org/en\"\u003eNode.js 18.16.0 LTS\u003c/a\u003e\n- \u003ca href=\"https://brew.sh/\"\u003eBrew\u003c/a\u003e (to install pods and watchman)\n- \u003ca href=\"https://www.ruby-lang.org/en/\"\u003eRuby\u003c/a\u003e (optional, for pods)\n- \u003ca href=\"https://developer.android.com/studio\"\u003eAndroid Studio\u003c/a\u003e (to install SDKs and emulator)\n- \u003ca href=\"https://developer.apple.com/xcode/\"\u003eXcode\u003c/a\u003e (to build iOS)\n- \u003ca href=\"https://www.oracle.com/tr/java/technologies/javase/jdk11-archive-downloads.html\"\u003eJava Development Kit (JDK) 11\u003c/a\u003e\n\n## How To Run?\n\n### On Emulator\n\n- Run `$ npm install` to install dependencies.\n- Then `$ npm run {ios | android}` to run application on specified platform.\n\n### On Real Device\n\n- Run `$ npm install` to install dependencies.\n- Connect mobile device via `USB` and make sure `USB Debugging` is allowed on your phone.\n- Then `$ npm run {ios | android} --localhost`\n\n## Possible Problems and Solutions\n\n### $ npm run android → android/gradlew exited with non-zero code: 1\n\nProbably, you have a different version of JDK than expected. According to the \u003ca href=\"https://reactnative.dev/docs/environment-setup?guide=native\u0026platform=android\"\u003edocumentation\u003c/a\u003e, the most compatible and suggested version is JDK11.\n\nYou can find the JDK11 installer by clicking \u003ca href=\"https://www.oracle.com/tr/java/technologies/javase/jdk11-archive-downloads.html\"\u003ehere\u003c/a\u003e.\n\n### $ npm run android → Build failed: SDK location not found.\n\n- Create a file named `local.properties` under `android/` folder in project.\n- Set inside `sdk.dir = {YOUR_SDK_PATH}`\n- Then run `$ npm run android`\n\n### $ npx expo start → Missing Realm constructor.\n\n```\n ERROR  Error: Missing Realm constructor. Did you run \"pod install\"? Please see https://docs.mongodb.com/realm/sdk/react-native/install/ for troubleshooting, js engine: hermes\n\n ERROR  Invariant Violation: \"main\" has not been registered. This can happen if:\n* Metro (the local dev server) is run from the wrong folder. Check if Metro is running, stop it and restart it in the current project.\n* A module failed to load due to an error and `AppRegistry.registerComponent` wasn't called., js engine: hermes\n```\n\nIn a Realm project, you can't use `$ npx expo start`. Realm uses customized native codes and because of that it requires platform builds. This command does not create builds (also does not use existing ones) and that explains why it fails.\n\nYou need to run the project using by \u003cbr /\u003e\n`$ npx expo run:ios` \u003cbr /\u003e\nor \u003cbr /\u003e\n`$ npx expo run:android`\n\nIn `package.json` these scripts are already defined like below: \u003cbr /\u003e\n`$ npm run ios` → `$ npx expo run:ios` \u003cbr /\u003e\n`$ npm run android` → `$ npx expo run:android`\n\nFeel free to use both ways, but don't forget to use the correct scripts which create and use the platform builds.\n\n## Registration\n\n### As a Privileged User (aka: SU, Super User)\n\nAll you need to do is using an e-mail address that ends with `@protonmail.com`\n\n### As a Regular User\n\nJust sign up with an e-mail address that does not end with `@protonmail.com`\n\n## Use Cases\n\n### Case 1: Librarian\n\nConsider that you are a librarian, you need to create entries of books. \u003cbr /\u003e\n\nYou should be able to:\n\n- Access to full CRUD operations (create, read, update and delete) for books.\n- Upload image.\n- Take photograph.\n- Change image of a book.\n- Change any detail of book.\n- Save changes.\n\nTherefore, a basic case should be like:\n\n- User signs up with an e-mail address that ends with `@protonmail.com` to be privileged user.\n- User logs in.\n- User swipes right to create a new book. \u003cbr /\u003e\n  \u003cimg src=\"./docs/gifs/swipe_right.gif\" width=\"294.5\" height=\"639\"\u003e\n- User takes a photograph of a book.\n- User enters details of the book.\n- User saves the book.\n- User sees the book in home, and keep goes create new books.\n- User swipes right again.\n- User picks an book image from gallery.\n- User enters details of the book. \u003cbr /\u003e\n  `...`\n\n### Case 2: Regular Library User\n\nConsider that you are a user of a library application and you want to borrow some books.\n\nYou should be able to:\n\n- Access book data.\n- Borrow or put back books.\n\nTherefore, a basic case should be like:\n\n- User signs up with their personal information.\n- User logs in and sees the books.\n- User taps on a book that interested in.\n- User taps on `Borrow` button. \u003cbr /\u003e\n  `... (after a while)`\n- User wants to return the book, logs in the app.\n- User goes to `My Books` screen.\n- User taps on the book, that they want to return.\n- User taps on `Put Back` button in detail screen.\n\n## Screenshots\n\n### Login\n\n\u003cimg src=\"./docs/screenshots/libraryapp_login.png\" width=\"381\"/\u003e\n\n### Sign Up\n\n\u003cimg src=\"./docs/screenshots/libraryapp_signup.png\" width=\"381\"/\u003e\n\n### Sign Up (onChange)\n\n\u003cimg src=\"./docs/screenshots/libraryapp_signup_event.png\" width=\"381\" /\u003e\n\n### Sign Up (onSubmit)\n\n\u003cimg src=\"./docs/screenshots/libraryapp_signup_event2.png\" width=\"381\" /\u003e\n\n### Home\n\n\u003cimg src=\"./docs/screenshots/libraryapp_home.png\" width=\"381\" /\u003e\n\n### Details (w/ SU Privileges)\n\n\u003cimg src=\"./docs/screenshots/libraryapp_details_su.png\" width=\"381\" /\u003e\n\n### My Books (Borrowed)\n\n\u003cimg src=\"./docs/screenshots/libraryapp_mybooks.png\" /\u003e\n\n### Camera (Requires SU Privileges)\n\n\u003cimg src=\"./docs/screenshots/libraryapp_camera.png\" width=\"381\" /\u003e\n\n### Camera (onImagePick)\n\n\u003cimg src=\"./docs/screenshots/libraryapp_onimagepick.png\" width=\"381\" /\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fefefurkankarakaya%2Flibrary-app","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fefefurkankarakaya%2Flibrary-app","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fefefurkankarakaya%2Flibrary-app/lists"}