{"id":13555882,"url":"https://github.com/voxpelli/webpage-webmentions","last_synced_at":"2025-10-13T19:30:34.555Z","repository":{"id":10504044,"uuid":"12689184","full_name":"voxpelli/webpage-webmentions","owner":"voxpelli","description":"A hosted Disqus-like comment service that enables WebMention receiving on any kind of site","archived":false,"fork":false,"pushed_at":"2025-09-25T18:57:35.000Z","size":1455,"stargazers_count":77,"open_issues_count":91,"forks_count":14,"subscribers_count":4,"default_branch":"main","last_synced_at":"2025-09-25T20:57:56.789Z","etag":null,"topics":["comments","indieweb","social","webmention"],"latest_commit_sha":null,"homepage":"https://webmention.herokuapp.com/","language":"JavaScript","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/voxpelli.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["voxpelli"]}},"created_at":"2013-09-08T23:11:33.000Z","updated_at":"2025-08-08T04:00:17.000Z","dependencies_parsed_at":"2023-01-13T15:58:58.117Z","dependency_job_id":"1a1bde81-ac8e-47c5-a38c-1009144ac83f","html_url":"https://github.com/voxpelli/webpage-webmentions","commit_stats":null,"previous_names":[],"tags_count":49,"template":false,"template_full_name":null,"purl":"pkg:github/voxpelli/webpage-webmentions","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpelli%2Fwebpage-webmentions","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpelli%2Fwebpage-webmentions/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpelli%2Fwebpage-webmentions/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpelli%2Fwebpage-webmentions/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/voxpelli","download_url":"https://codeload.github.com/voxpelli/webpage-webmentions/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/voxpelli%2Fwebpage-webmentions/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279016920,"owners_count":26085888,"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-13T02:00:06.723Z","response_time":61,"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":["comments","indieweb","social","webmention"],"created_at":"2024-08-01T12:03:28.874Z","updated_at":"2025-10-13T19:30:33.317Z","avatar_url":"https://github.com/voxpelli.png","language":"JavaScript","funding_links":["https://github.com/sponsors/voxpelli"],"categories":["JavaScript","others","JS/ES6"],"sub_categories":[],"readme":"# A WebMention Endpoint\n\n[![IndieWeb](https://img.shields.io/badge/indie-web-FFB100?labelColor=FF5C01)](https://indieweb.org/)\n[![js-semistandard-style](https://img.shields.io/badge/code%20style-semistandard-brightgreen.svg)](https://github.com/voxpelli/eslint-config)\n[![Types in JS](https://img.shields.io/badge/types_in_js-yes-brightgreen)](https://github.com/voxpelli/types-in-js)\n[![Follow @voxpelli@mastodon.social](https://img.shields.io/mastodon/follow/109247025527949675?domain=https%3A%2F%2Fmastodon.social\u0026style=social)](https://mastodon.social/@voxpelli)\n\nA site that receives and embeds [WebMentions](http://indiewebcamp.com/webmention) for other sites. makes the WebMentions embeddable through a javascript, similar to how eg. Disqus works.\n\nA live deploy of this can be found on [webmention.herokuapp.com](https://webmention.herokuapp.com/). One can also sign up to that one rather than deploying ones own if one likes.\n\n## Deploying it yourself?\n\nThen please let me know. So far I'm easiest to reach on Twitter as [@voxpelli](http://twitter.com/voxpelli).\n\n## To install\n\n### Locally\n\n1. Set up a new PostgreSQL database\n2. Run `npm run install-schema` to set up the tables\n3. Set up the environment variables by eg. copying `sample.env` to `.env`\n4. Run `foreman start` or `npm start`\n\n### Heroku\n\n1. Set up a new application\n2. Set up a database for the new application\n3. Set up environment variables using `heroku config`\n4. Push up the code\n5. Use a [One-Off Dyno](https://devcenter.heroku.com/articles/one-off-dynos) to set up the tables: `heroku run npm run install-schema`\n\n## To update\n\n### Locally\n\nJust run `npm run migrate-schema`.\n\n### Heroku\n\n1. Before you push any code you may want to activate the [Maintenance Mode](https://devcenter.heroku.com/articles/maintenance-mode) if it is a breaking update\n2. Push the new code and let Heroku deploy it\n3. Use a [One-Off Dyno](https://devcenter.heroku.com/articles/one-off-dynos) to do the migration: `heroku run npm run migrate-schema`\n4. If you activated the [Maintenance Mode](https://devcenter.heroku.com/articles/maintenance-mode) – then remember to deactivate it as well\n\n## Revert an update\n\nJust run `npm run rollback-schema` locally or, if on Heroku, use a [One-Off Dyno](https://devcenter.heroku.com/articles/one-off-dynos) to do the rollback: `heroku run npm run rollback-schema` And afterwards – of course make sure that you also revert your code to a version that matches the schema – but you already knew that of course :)\n\n## Environment variables\n\nYou can set these up locally by simply copying `sample.env` to `.env` and changing the values in that file.\n\n### Required\n\n* **DATABASE_URL** - a configuration URL for the PostgreSQL database\n* **WEBMENTIONS_COOKIE_SECRET** - a secret for the cookie that will make sure a user stays logged in\n* **WEBMENTIONS_GITHUB_ID** - a GitHub OAuth consumer id, used for logging in with GitHub\n* **WEBMENTIONS_GITHUB_SECRET** - a GitHub OAuth consumer secret\n* **WEBMENTIONS_HOSTNAME** - the hostname of the place your hosting the application on. Used when eg. constructing the callback URL sent to the GitHub API.\n\n### Optional\n\n* **WEBMENTIONS_USER_LIMIT** - the total maximum of users you want to be able to use your application. Defaults to 6.\n* **WEBMENTIONS_DEV_THROTTLING** – in a development environment, enables throttling for local pings made by eg. [webmention-testpinger](https://www.npmjs.org/package/webmention-testpinger) – needed to test throttling mechanism\n* **WEBMENTIONS_DEV_SIGINT_CLEANUP** – enables graceful shutdown on `SIGINT` command\n* **NEW_RELIC_LICENSE_KEY** - the license key for New Relic, if you want to use that\n* **NEW_RELIC_ENABLED** - set to true if you want to use New Relic\n\n## Requirements\n\n* Node.js\n* PostgreSQL (or possibly any other Knex-compatible database like MySQL/MariaDB, SQLite)\n* ([Foreman](http://ddollar.github.io/foreman/) – optional, but recommended in a development environment as this project is built around the `Procfile` and `.env` files that it and Heroku uses. Currently only one process is used though and a backup `.env` parser is provided so not needed.)\n\n## Try it out locally\n\nInstall [webmention-testpinger](https://github.com/voxpelli/node-webmention-testpinger) then do:\n\n```bash\nwebmention-testpinger --endpoint=http://127.0.0.1:5000/api/webmention --target=http://127.0.0.1:5000/\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoxpelli%2Fwebpage-webmentions","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvoxpelli%2Fwebpage-webmentions","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvoxpelli%2Fwebpage-webmentions/lists"}