{"id":16545884,"url":"https://github.com/contigen/persist","last_synced_at":"2025-09-03T21:45:04.821Z","repository":{"id":250534828,"uuid":"830763865","full_name":"contigen/persist","owner":"contigen","description":"A contact sharing progressive web app using the Contact Picker API, QR Codes and vCards to embed contact data for contactless/seamless transfer across devices on the Web","archived":false,"fork":false,"pushed_at":"2024-07-28T07:48:50.000Z","size":481,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-11-14T18:54:25.150Z","etag":null,"topics":["contact-picker","qrcode"],"latest_commit_sha":null,"homepage":"https://persist-tau.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/contigen.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2024-07-19T00:23:21.000Z","updated_at":"2024-08-28T06:41:32.000Z","dependencies_parsed_at":"2024-07-28T08:59:12.447Z","dependency_job_id":"ead7f711-1c64-4d0e-acc2-13fb599e9f03","html_url":"https://github.com/contigen/persist","commit_stats":null,"previous_names":["contigen/persist"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/contigen%2Fpersist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/contigen%2Fpersist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/contigen%2Fpersist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/contigen%2Fpersist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/contigen","download_url":"https://codeload.github.com/contigen/persist/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":233899920,"owners_count":18747784,"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":["contact-picker","qrcode"],"created_at":"2024-10-11T19:08:02.089Z","updated_at":"2025-01-14T13:28:48.406Z","avatar_url":"https://github.com/contigen.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cimg src=\"./public/persist.png\" width=89.48655257 height=60 alt='logo for app'\u003e\n\n# Persist\n\nA contact sharing progressive web app using the Contact Picker API, QR Codes and vCards to embed contact data for contactless/seamless transfer across devices on the Web. The app/PWA offers a refined way of sharing contacts during social interactions, events, networking sessions and whatnots.\nIt enables users to select contacts from their phonebook, generate vCard files to import contacts on other devices, and share them via dynamically generated QR codes. \u003cbr/\u003e\nThe PWA is live at [persist-tau.vercel.app](https://persist-tau.vercel.app)\n\n# Features\n\n- Contact Selection with Vibration Feedback: users can select contacts from their phonebook, with vibration feedback provided, via the Vibration API, to confirm their action\n- Generate vCard files to import contacts on other devices\n- Personal and shared contact forms, with local storage persistence\n- Share contacts via dynamically generated QR codes － download \u0026 scan QR Codes in-app\n- Imported contacts' list with link to each contact and local storage persistence\n- Toast notifications for user feedback\n- Progressive Web Application － Installable app\n\n## Technologies\n\n- React\n- TypeScript\n- TailwindCSS for styling\n\n## Gotcha\n\nThe Contact Picker API only works in Chromium Browsers and Safari (requires enabling a feature flag).\nAbility to save contacts directly has been revoked on the Web (Firefox's deprecated Contacts API)\n\n## Misc.\n\nOther transfer protocols were evaluated like the Web Bluetooth API, WebSockets and even the Web NFC API, for contact sharing.\n\u003cbr/\u003e\n\n- **Web Bluetooth API**: The current implementation of the API doesn't allow for P2P connection.\n\n- **WebSockets**: While WebSockets offer real-time communication capabilities, they require a server-side component to handle connections and message exchanges. This adds additional complexity and infrastructure requirements, which were deemed unnecessary for the current app state.\n\n- **Web NFC API**: The Web NFC API enables interaction with NFC tags for contactless data transfer. Although promising, it is not yet widely supported across all devices and browsers, which will limit the app’s accessibility and functionality for users.\n\nQuick Response Codes affords the best compatibility for the current app state: doesn't introduce any server-side effect, convenient for storage.\n\nRegardless, future updates could include:\n\nRemote Contact Sharing via WebSockets: Implementing WebSocket-based contact sharing could enable real-time updates and interactions, allowing users to exchange contact information instantly regardless of location.\n\nExporting Contacts to NFC Tags using Web NFC API for quick and intuitive data transfer.\n\n## Usage\n\nIf you use this project, please provide appropriate credit to acknowledge the original work.\n\nIf this project inspires you to create something, I'd love to hear about it. Please reach out and share your work with me.\n\n### Development dependencies\n\n- `Vite` as the dev server with HMR and some ESLint rules.\n- `VitePWA` to serve the app as a PWA for offline capabilities and native-like app feel\n- `Bun` as the runtime\n\n### Development Scripts\n\nTo start the dev server:\n\n```\nbun install \u0026\u0026 bun run dev\n```\n\nTo build the app and start the prod server:\n\n```\nbun run build \u0026\u0026 bun run preview\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcontigen%2Fpersist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcontigen%2Fpersist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcontigen%2Fpersist/lists"}