{"id":17222693,"url":"https://github.com/marksteve/usapan","last_synced_at":"2026-04-18T17:01:36.406Z","repository":{"id":138471352,"uuid":"444994047","full_name":"marksteve/usapan","owner":"marksteve","description":"A no-frills comments widget powered by Firebase","archived":false,"fork":false,"pushed_at":"2022-01-15T07:37:08.000Z","size":381,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-25T16:21:24.660Z","etag":null,"topics":["comments","disqus","firebase","firebase-auth","firestore","react","serverless","vite"],"latest_commit_sha":null,"homepage":"https://usapan.marksteve.com","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/marksteve.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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":"2022-01-06T00:46:34.000Z","updated_at":"2023-03-08T04:44:38.000Z","dependencies_parsed_at":null,"dependency_job_id":"814f8c17-8609-45e0-9bcb-002ac45ccff4","html_url":"https://github.com/marksteve/usapan","commit_stats":{"total_commits":26,"total_committers":1,"mean_commits":26.0,"dds":0.0,"last_synced_commit":"df01edcec12c9c2a485279ca143d26374df2871a"},"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/marksteve/usapan","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marksteve%2Fusapan","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marksteve%2Fusapan/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marksteve%2Fusapan/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marksteve%2Fusapan/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marksteve","download_url":"https://codeload.github.com/marksteve/usapan/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marksteve%2Fusapan/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31976805,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-18T16:27:12.723Z","status":"ssl_error","status_checked_at":"2026-04-18T16:27:11.140Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["comments","disqus","firebase","firebase-auth","firestore","react","serverless","vite"],"created_at":"2024-10-15T04:06:07.730Z","updated_at":"2026-04-18T17:01:36.389Z","avatar_url":"https://github.com/marksteve.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Usapan\nA no-frills comments widget powered by Firebase\n\n_Usapan is the Filipino word for discussion_\n\n## Features\n- Unstyled\n- Serverless\n- Nested comments\n- Abuse protection through [App Check](https://firebase.google.com/docs/app-check)\n\n## Usage\n1. Set up a Firebase project.\n2. Enable the Google sign-in provider.\n3. Set up Firestore security rules. Check out `firestore.rules.example` in the repository.\n4. Add a web app to the project and note its config.\n5. (Optional) [Set up App Check](https://firebase.google.com/docs/app-check/web/recaptcha-provider) from the Firebase console. You don't need to do step 3. The widget initializes App Check if you supply the reCAPTCHA site key.\n6. Add the following code in your page:\n\n    ```\n    \u003cscript type=\"module\"\u003e\n      import usapan from 'https://unpkg.com/usapan@0.2.0/dist/usapan.es.js'\n      usapan({\n        el: document.querySelector('#comments'), // Element to render comments \n        firebaseConfig: { ... },                 // Your Firebase config\n        firestoreCollection: 'usapan',           // Root Firestore collection\n        pageId: 'my-page',                       // Unique page identifier\n        recaptchaSiteKey: '...',                 // reCAPTCHA v3 site key for App Check\n      })\n    \u003c/script\u003e\n    ```\n7. (Optional) Load the default stylesheet:\n\n    ```\n    \u003clink href=\"https://unpkg.com/usapan@0.2.0/dist/style.css\" rel=\"stylesheet\" /\u003e\n    ```\n\n## Todo\n\n- [x] Permalinks\n- [ ] Reactions\n- [ ] Anonymous mode\n- [ ] Reduce bundle size\n  - [x] Switch from React to Preact\n  - [ ] Add Cloudflare as alternative storage option\n- [ ] Moderation\n\n## Demo\n\n[https://usapan.marksteve.com](https://usapan.marksteve.com)\n\n## Development\n\n\n```\nnpm i\nnpm run dev\n```\n\n## Release\n\n```\nnpm version \u003cmajor|minor|patch\u003e\nnpm publish\n```\n\nExample page is automatically deployed on merge to main.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarksteve%2Fusapan","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarksteve%2Fusapan","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarksteve%2Fusapan/lists"}