{"id":15024570,"url":"https://github.com/janoodleftw/timy-messenger","last_synced_at":"2025-05-15T11:08:10.155Z","repository":{"id":44686856,"uuid":"212085971","full_name":"janoodleFTW/timy-messenger","owner":"janoodleFTW","description":"Timy - open source mobile app for groups to communicate and organize themselves. Built with flutter.","archived":false,"fork":false,"pushed_at":"2023-01-09T11:56:55.000Z","size":15561,"stargazers_count":2101,"open_issues_count":21,"forks_count":458,"subscribers_count":64,"default_branch":"master","last_synced_at":"2025-05-15T11:08:09.315Z","etag":null,"topics":["android","app","firebase","flutter","ios","kotlin","messaging","messenger","swift"],"latest_commit_sha":null,"homepage":"","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/janoodleFTW.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-10-01T12:06:13.000Z","updated_at":"2025-05-05T04:35:53.000Z","dependencies_parsed_at":"2023-02-08T10:45:33.188Z","dependency_job_id":null,"html_url":"https://github.com/janoodleFTW/timy-messenger","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janoodleFTW%2Ftimy-messenger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janoodleFTW%2Ftimy-messenger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janoodleFTW%2Ftimy-messenger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/janoodleFTW%2Ftimy-messenger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/janoodleFTW","download_url":"https://codeload.github.com/janoodleFTW/timy-messenger/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254328384,"owners_count":22052632,"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":["android","app","firebase","flutter","ios","kotlin","messaging","messenger","swift"],"created_at":"2024-09-24T20:00:34.162Z","updated_at":"2025-05-15T11:08:10.123Z","avatar_url":"https://github.com/janoodleFTW.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Timy app\n\n[![Build Status](https://app.bitrise.io/app/1777d1ca81df02fb/status.svg?token=JR4pw9Z3dElWNrDmy3ImLA\u0026branch=master)](https://app.bitrise.io/app/1777d1ca81df02fb)\n\nAn amazing open-source group messaging app build with flutter. ✨\n\n# Main Features\n\n- Multiple groups (similar to Teams in Slack).\n- Multiple *open or private* channels within groups.\n- Sharing of photos and photo collections.\n- React to messages with emoji. \n- Push-notifications for the message and channel updates.\n- Specific channels for events (e.g. containing date, venue).\n- Editing of event channels.\n- Calendar for all upcoming and past events aggregated over all groups and channels.\n- English and German localization.\n- RSVP for events.\n\n\n![screenshots](./timy.png)\n\n\n\n\n\n# Project Structure\n\nThis is a Flutter mobile app targeting Android and iOS.\n\nThe code for the Flutter app is contained in the folder `lib` and the\ndifferent native apps are in `android` and `ios`. Extra project assets are in\n`assets` and `fonts`.\n\nAs well, this repo hosts a series of Firebase config files and cloud functions.\n\nThe documentation for Firebase part is inside the `firebase` folder.\n\n\n# Prerequisites \u0026 Getting Started\n\n## Client \n\nTo build and run the mobile apps you’ll need to install [Flutter](https://flutter.dev) and its dependencies. To verify your installation run in the project’s root directory:**‌**\n\n```\n$ flutter doctor\n```\n\nThe app is optimised for Android and iOS phones in portrait mode.\n\n**IMPORTANT:** The project only supports Flutter version 1.10.5, you will have to change your configuration to it.\nWe cannot make sure that other Flutter versions will work.\n\n```\n$ flutter version 1.10.5\n```\n\n**Note:** Additionally you’ll need to setup the backend and add the GoogleService-Info of your Firebase app to your clients as described below.\n\n## Backend (Firebase)\n\nThe backend is build using Firebase’s `node.js` SDK. All files are provided in the `firebase` folder. To deploy the code create an app and install the firebase CLI (See steps 1 \u0026 2 in [Getting started](https://firebase.google.com/docs/functions/get-started)).\n\n*Note: The following steps assume you’re using Firebases’ free `Spark Plan`. Therefore we’re performing the configuration manually.*\n\n### B1. Setup sign-in method \u0026 adding users\n\nAn initial sign-in method needs to be configured.\n\n- Select your project in [console.firebase.google.com](https://console.firebase.google.com). \n- Navigate to `Authentication` \n- Select `Sign-in methods` and activate `Email / Password`.\n\n**Adding a user**\n\nCurrently, users need to be added *manually*.  \n\n- In firebase navigate to `Authentication` and select `Users`. \n- Then `Add user`. \n\nPlease copy the `User-UID` of the created user. We’ll need to add this ID to a group in the next step.\n\n*Note: You’ll need to have at least one user configured to use the app.*\n\n### B2. Configure firebase app\n\nNext, you’ll need to configure your firebase app for Flutter as described in [Add Firebase to an App / Flutter](https://firebase.google.com/docs/flutter/setup)\n\n**iOS**\n\n- Enter iOS-Bundle-ID: `de.janoodle.circlesApp.debug`\n- Download and rename `GoogleService-Info.plist` to  `GoogleService-Info-Dev.plist`.\n- Copy file to `ios/Runner/Firebase`.\n\n*NOTE: If you’re building for release you’ll additionally need to add a GoogleService-Info-Prod.plist pointing to your production Firebase app.*\n\n**Android**\n\nFollow the instructions in `android/README.md`.\n\n### B3. Create and setup database\nIn the firebase console select `Database` under `Develop`  and create a Cloud Firestore Database. Setup database in `test mode` if you don't want to care about access permissions now.\n\nAt this point, **you need to run and perform login once** on the App, it will create a user document inside the `users` collection.\n\n**You will see an empty screen. To fix that, continue this setup.** You may need to restart the app after the setup is done.\n\n**Create group collection**\n\n- Select the database you’ve just created.\n- `Create collection` and name it `groups`.\n- Add your first group with the following properties:\n\n| name | type | value |\n|:--|:--|:--|\n| abbreviation | string | TE |\n| color | string | ffffff |\n| members | array | *User-UID we’ve retrieved in **Adding a user*** above |\n| name | string | test |\n\nWe’ve now setup our first test group. In addition to this step, we’ll need to setup a default `Channel` (e.g. something similar to `#general` in Slack).\n\n**Add the new created Group id to the User document**\n\n- Select the User you have now on your database.\n- Add a new field named `joinedGroups` and make it type `Array`\n- Add an entry in this array, with the value equal to the Group document id from Firestore.\n\n**Create channel sub-collection**\n\n- In the `groups` collection select the newly created group.  \n- `Create collection` within the group called `channels`.\n- Add your first channel with the following properties:\n\n| name | type | value |\n|:--|:--|:--|\n| name | string | general |\n| type | string | TOPIC |\n| visibility | string | OPEN |\n\n**Your Firestore database should look like this (with different ids)**\n\n![screenshots](./firestore-1.png)\n![screenshots](./firestore-2.png)\n![screenshots](./firestore-3.png)\n![screenshots](./firestore-4.png)\n\t\n### B4. Deploy firebase functions \n\nNavigate to the `firebase` directory and deploy all functions using:\n\n```\n$ firebase deploy --only functions\n```\n\nSome features of the app can be used without Cloud Functions running, but some others will not work.\nWe recommend you to perform this step to enjoy all features.\n\n### B5. Final steps\n\nLogin with the user you’ve created above.\n\nNext create your first `event` to setup the *calendar collection* in our backend. \n\n**Create an event**\n\n- In the app select the hamburger menu\n- Hit the `+` sign next to `Events`\n- Enter any data you like and hit `Create` \n\nAt the root level of your database you should now see a collection called `calendar` in your firebase console.\n\nNow we’re ready to deploy all other parts of our backend using:\n\n```\n$ firebase deploy\n```\n\n\n# Deployment\n\nThe app is setup to work with a development and production environment. We suggest you create a different Firebase app for each environment. \n\nWhen building for release the app will automatically use the production configuration that you’ve configured in step `B3`.\n\n# External resources\n\n- [Timy Messenger in itsallwidgets.com](https://itsallwidgets.com/timy-messenger)\n- [Building a Messaging App in Flutter — Part I: Project Structure](https://beltran.work/blog/building-a-messaging-app-in-flutter-part-i-project-structure/)\n- [Building a Messaging App in Flutter — Part II: Main Method](https://beltran.work/blog/building-a-messaging-app-in-flutter-part-ii-main-method/)\n- [Building a Messaging App in Flutter — Part III: Redux](https://beltran.work/blog/building-a-messaging-app-in-flutter-part-iii-redux/)\n\n# About\n\nThe concept for Timy was created and developed by [kaalita](https://github.com/kaalita) and [philippmoeser](https://github.com/philippmoeser).\nThe initial version is a MVP messaging app focusing on organising events among groups.\n\nWe hope this project can be a reference or building block for your next flutter app. 🚀\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjanoodleftw%2Ftimy-messenger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjanoodleftw%2Ftimy-messenger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjanoodleftw%2Ftimy-messenger/lists"}