{"id":14968545,"url":"https://github.com/sebastix/ccns","last_synced_at":"2025-10-25T11:35:42.007Z","repository":{"id":216722259,"uuid":"742118102","full_name":"Sebastix/CCNS","owner":"Sebastix","description":"Community Curated Nostr Stuff","archived":false,"fork":false,"pushed_at":"2024-10-25T08:51:48.000Z","size":2963,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"develop","last_synced_at":"2024-10-30T03:22:46.368Z","etag":null,"topics":["drupal","nostr"],"latest_commit_sha":null,"homepage":"https://ccns.nostrver.se","language":"PHP","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/Sebastix.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-01-11T19:52:19.000Z","updated_at":"2024-10-25T08:51:52.000Z","dependencies_parsed_at":"2024-02-11T15:43:37.445Z","dependency_job_id":"3944d80d-a9b1-4e30-9a70-c7c122fe7679","html_url":"https://github.com/Sebastix/CCNS","commit_stats":{"total_commits":123,"total_committers":2,"mean_commits":61.5,"dds":0.08130081300813008,"last_synced_commit":"8eee7f24ffac91df4a8d58c161897c780e3c6185"},"previous_names":["sebastix/ccns"],"tags_count":0,"template":false,"template_full_name":"Sebastix/cchs.social","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sebastix%2FCCNS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sebastix%2FCCNS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sebastix%2FCCNS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Sebastix%2FCCNS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Sebastix","download_url":"https://codeload.github.com/Sebastix/CCNS/tar.gz/refs/heads/develop","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238247984,"owners_count":19440879,"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":["drupal","nostr"],"created_at":"2024-09-24T13:40:05.785Z","updated_at":"2025-10-25T11:35:36.967Z","avatar_url":"https://github.com/Sebastix.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"![](https://ccns.sebastix.dev/themes/custom/ccns_theme/images/ccns_logo_color.webp)\n\n# Community Curated Nostr Stuff (CCNS)\n\nCCNS is a Nostr-focused community platform centered around link aggregation and discussion topics. Anyone with a Nostr account is able to post links and start discussions. Those are curated with zaps with a user defined number of sats.\n\n\u003e **Problem**\n\u003e\n\u003e Activity on https://stacker.news/~nostr has decreased significant since the introduction of territories.\n\nThis is a Drupal \u0026 Nostr powered project inspired by HackerNews, [Kbin.pub](http://Kbin.pub), [Lobste.rs](http://Lobste.rs) and [Stacker.news](http://Stacker.news).\n\n![](https://ccns.sebastix.dev/themes/custom/ccns_theme/images/screenshots/202402/01.png)\n![](https://ccns.sebastix.dev/themes/custom/ccns_theme/images/screenshots/202402/02.png)\n![](https://ccns.sebastix.dev/themes/custom/ccns_theme/images/screenshots/202402/03.png)\n\n# Roadmap\n\n---\n\n- [ ] Create content model\n  - [ ] Topic entity\n  - [x] User entity\n  - [x] Link entity\n  - [ ] Comment entity\n  - [x] CCNS member role and permissions\n- [ ] Add content entities and fields to Drupal\n  - [x] Link\n  - [x] User\n  - [ ] Comment\n  - [ ] Topic\n- [x] Add NDK for Nostr integration for authenticating users\n- [x] Integrate Nostr key authentication with the Drupal user management system\n- [x] Add 'crosspost to Nostr' option to broadcast an event with your submitted link (NIP-01)\n- [ ] Add 'crosspost to Nostr' option to broadcast an event with your submitted topic within the CCNS community (NIP-72)\n- [ ] Add threaded comments below links and topics\n- [ ] Integrate zaps (NIP-57)\n  - [ ] For links\n  - [ ] For comments\n- [ ] Setup e-mail notifications with [DANSE](https://www.drupal.org/project/danse)\n- [ ] Add a notifications center with [DANSE](https://www.drupal.org/project/danse)\n- [ ] Integrate tags provided by a taxonomy managed by Drupal\n- [ ] Add a news/blog section\n  - [ ] Add options to crosspost these items to Nostr on behalf of the CCNS account\n- [ ] Add login method with nsecbunker\n- [ ] Add login method with nsec key\n- [ ] Add a way to register a new Nostr account\n\nTo see all items on a Kanban project board, please have a look at https://github.com/users/Sebastix/projects/2.\n\n# Issues and contributions\n\n---\n\nAll contributions and issues are handled in the Github repo.\nThe issue queue: https://github.com/Sebastix/CCNS/issues.\n\n# Telegram group\n\n---\n\nWe have a Telegram group you can join: https://t.me/ccns_community\n\n# Support\n\n---\n\nContact [Sebastian Hagens](https://gitlab.com/Sebastix)\n\nSebastian Hagens is a self-employed creative technologist working as a Drupal \u0026 fullstack webdeveloper and tech consultant from The Netherlands.\n\n**Follow Sebastian on Nostr**\n\nPubkey: `npub1qe3e5wrvnsgpggtkytxteaqfprz0rgxr8c3l34kk3a9t7e2l3acslezefe`\n\nHandle: `sebastian@sebastix.dev`\n\n**Follow CCNS on Nostr**\n\nPubkey: `npub12pj5g0370uz3f49flpz8scs85p8s9c7l6ueutjhkyc3jnggrlafsmmljva`\n\nHandle: `ccns@ccns.sebastix.dev`\n\n# CI/CD with GitLab\n\n---\n\nSee `.gitlab-ci.yml` and https://gitlab.com/sebastix-group/nostr/CCNS/-/pipelines\n\n# Build with Drupal\n\n---\n\n@TODO\n\n## Progressive Web Application\n\n@TODO\n\n## Used Drupal contrib modules\n\n* Config split\n* Drush\n* Raven\n* Backup Migrate\n* Symfony Mailer\n* Admin Toolbar\n* Gin\n* Pathauto\n* Metatag\n* Masquerade\n* Ultimate Cron\n* Advanced CSS/JS Aggregation\n* Flood control\n* Comment delete\n* Comments order\n* Voting API\n* Twig Tweak\n* CKEditor markdown\n* Unique content field validation\n* Config ignore\n* Robots Txt\n* Matomo\n* Field permissions\n* DANSE\n* Honeypot\n\nModules for development only:\n* Coder\n* Devel\n* Webprofiler\n* Drupal Coder\n* Drupal Rector\n\n## Theme\n\nAll theme files are located in `web/themes/custom/ccns_theme`.\n\nTailwindCSS + Daisy UI using Lofi as the base theme (see `web/themes/custom/ccns_theme/tailwind.config.js`).\nThe icons used are from https://heroicons.com/.\n\n- Node version `\u003e=16.9.0`\n\n`cd web/themes/custom/ccns_theme`\n\nInstall all packages:\n\n`npm install`\n\n`npm run build`\n\nOr run `npm run dev` while developing.\n\n## Custom work\n\n### Drupal core doesn't support Javascript ES6 for exporting / importing modules\n\nSupport for exporting / importing modules with Javascript ES6 is a work in progress for Drupal core. I've found another way to create a Javascript singleton instance which can be used by multiple Drupal modules.\nWhy would you use this? For using a store for example, so you can share different states and data between components and pages.\nIn our case we need a global accessible store with the Nostr Dev Kit instance provided by the NDK library.\n\n### CCNS module\n\nCustom module located at `web/modules/custom/ccns` and depends on the `nostr_ndk` module.\n\n### Nostr NDK module\n\nCustom module located at `web/modules/custom/nostr_ndk`.\n\n### Theme hooks\n\n@TODO\n\n## Security checks\n\n@TODO\n- [ ] https://github.com/FriendsOfPHP/security-advisories\n- [ ] https://github.com/fabpot/local-php-security-checker\n\n## Code checks\n\n@TODO\n- [ ] https://www.drupal.org/project/coder\n\n# License\n\n---\n\n`GPL-2.0` GNU General Public License v2.0\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebastix%2Fccns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsebastix%2Fccns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsebastix%2Fccns/lists"}