{"id":31755686,"url":"https://github.com/lgro/reunicorn","last_synced_at":"2025-10-09T19:00:05.641Z","repository":{"id":220407598,"uuid":"751431859","full_name":"LGro/reunicorn","owner":"LGro","description":"Where \u0026 how to get in contact, shared securely and privately, powered by Veilid.","archived":false,"fork":false,"pushed_at":"2025-09-11T13:09:31.000Z","size":17622,"stargazers_count":23,"open_issues_count":38,"forks_count":2,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-10-03T00:13:37.826Z","etag":null,"topics":["coagulate","contacts","dht","location","p2p","privacy","sharing","social","sync","veilid"],"latest_commit_sha":null,"homepage":"https://reunicorn.app","language":"Dart","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LGro.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,"zenodo":null}},"created_at":"2024-02-01T15:48:34.000Z","updated_at":"2025-09-23T21:38:19.000Z","dependencies_parsed_at":"2024-05-13T18:37:30.121Z","dependency_job_id":"3077eecb-e83d-41fc-873a-c77bb10e4f1e","html_url":"https://github.com/LGro/reunicorn","commit_stats":null,"previous_names":["lgro/coagulate-flutter","lgro/coagulate","lgro/reunicorn"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/LGro/reunicorn","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LGro%2Freunicorn","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LGro%2Freunicorn/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LGro%2Freunicorn/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LGro%2Freunicorn/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LGro","download_url":"https://codeload.github.com/LGro/reunicorn/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LGro%2Freunicorn/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279001866,"owners_count":26083226,"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","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["coagulate","contacts","dht","location","p2p","privacy","sharing","social","sync","veilid"],"created_at":"2025-10-09T19:00:00.548Z","updated_at":"2025-10-09T19:00:05.629Z","avatar_url":"https://github.com/LGro.png","language":"Dart","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Reunicorn\n\nReunicorn is a smartphone app to synchronize contact details and share current as well as future locations in a privacy preserving manner for everyone who wants to stay in touch with their peers.\n\nWhen you plan to visit a city, find out immediately who of your old friends you could meet and directly contact them with up-to-date contact details.\n\n**Features:**\n- You can connect with existing contacts in an end-to-end encrypted manner to securely and privately keep each others' contact details up-to-date, right in your smartphone's address book.\n- As soon as your contacts start sharing their addresses, current or future locations, you can see them on a map to plan your travels and coordinate meeting people you care about.\n- You can personalize what you share with whom so that colleagues, friends and lovers each stay up-to-date on what you want them to know and nothing else.\n\nThis [Flutter](flutter.dev) based implementation is derived from [VeilidChat](https://gitlab.com/veilid/veilidchat/).\nAccordingly, the Copyright to all code files belongs to the Veilid developers unless explicitly stated otherwise.\n\nThe map style files `assets/map-style-*.json` originate from https://maps.protomaps.com, so the Copyright belongs to them.\n\n## Development Setup\n\nWhile this is still in development, you must have a clone of the [Veilid](https://gitlab.com/veilid/veilid/) source checked out at `../veilid` relative to the working directory of this repository.\n\nCheck the CI/CD workflows in `.github/` for a compatible development setup.\n\nFor the address search and geocoding to work, you need to provide the environment variable `REUNICORN_MAPTILER_TOKEN` with an API token that can be obtained for free from maptiler.com.\nThe map itself can also be switched to the OSM foundation's server if no MapTiler token is available.\n\n### Building\n\n```\nflutter clean\nflutter pub get\nflutter run -d \u003cDEVICE-ID\u003e\n```\n\nTo (re-)generate all code from templates, run\n```\ndart run build_runner build\n```\n\nTo (re-)generate all app icons, run\n```\ndart run icons_launcher:create\n```\n\n### Testing\n\nUsing `lcov`, run:\n```\nflutter test --coverage\ngenhtml coverage/lcov.info -o coverage/html\nopen coverage/html/index.html\n\n```\n\n### Fastlane\n\nFor Fastlane setup see https://docs.fastlane.tools/\n\nBased on the Gemfile of this repo, you can get fastlane with\n```\nbundle update\n```\n\n### Misc\n\nFor iOS when changing e.g. the `IPHONEOS_DEPLOYMENT_TARGET`, cd into `ios/` and run `pod update`.\n\n## Original User Stories\n\nThese where the initial user stories written before the development of Reunicorn began.\nThey serve as a reminder and reference to what experience we aim to achieve.\n\n### Open app first time\n\nI'd like to set up my profile with all the contact information I want to publish.\nI'd like to define different scopes that can see different subsets of my contact information to shape what is shared with others.\n\nI'd like to see my contacts list with all already securely connected contacts that also have the app.\nIf that's not possible, see highlighted / at top who has the app - not connected yet.\nIf that's not possible, can I at least see most of them after I've connected with the first peer?\n\n### Connect\n\nWhen I click on a contact that I haven't shared with yet, I'd like to see a share menu for all encrypted messengers where I can share the sharing link.\n\nWhen my contact accepts the invitation and shares with me, I'd like to see that highlighted.\n\nWhen someone sends me a share code, I'd like to click on it and have the app automatically pick it up. It should then also ask me if I want to share back and if I say yes automatically do so.\n\nAfter sharing is recognized in the app, I'd like the respective information to be updated.\n\n### See the map\n\nI'd like to see a map where all the locations of my contacts are displayed.\nLocations by the same contact should be visually grouped somehow?!\n\nWhen I click on a pin on the map I'd like to see their name\nwhen I zoom close enough I might also already want to see the initials or name\n\n### Recovery\n\nWhen I loose my phone, I'd like to be able to tell four of my trusted contacts.\nThey should then send me a message, which opens in the app. And after I've received all four, everything should be restored.\n\n### My updates\n\nWhen I update my profile, I'd like all contacts I've shared with to receive the updated information without any unauthorized 3rd party being able to see the update or tie my social network to me / infer the social network.\nI'd like to also see which of my contacts already received my update.\n\n### Unshare\n\nWhen I decide to stop sharing with someone, I'd like them not not be notified and for them to stop receiving any future updates.\n\n### Others updates\n\nWhen ever someone else updates their profile, I'd like to get all the information, even if I'm not online at the same time and without unauthorized parties seeing the details.\n\n### Higher avail / federation\n\nI would like to set up an always on node that I can configure to replicate everything my mobile node replicates.\n\n### Privacy\n\nI'd like nobody to be able to discover my social graph or the contact details I share if they are not intended for them.\nI'd also like to remain anonymous to the peers I do not share my contact details with.\n\n## App links\n\nScan QR code  \n-\u003e `/c/#name~typedRecordKey~psk`\n\nClick/paste profile link  \n-\u003e `/p/#name~pubKey`\n\nClick/paste profile based invite offer  \n-\u003e `/o/#name~typedRecordKey~pubKey`\n\nClick/paste batch invite  \n-\u003e `/b/#label~typedRecordKey~psk~subkeyIndex~subkeyWriter`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flgro%2Freunicorn","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flgro%2Freunicorn","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flgro%2Freunicorn/lists"}