{"id":22941719,"url":"https://github.com/plaidweb/publ","last_synced_at":"2025-08-23T14:35:01.182Z","repository":{"id":42535230,"uuid":"127061540","full_name":"PlaidWeb/Publ","owner":"PlaidWeb","description":"Flexible publishing system for the web","archived":false,"fork":false,"pushed_at":"2025-07-01T17:47:08.000Z","size":11315,"stargazers_count":40,"open_issues_count":99,"forks_count":4,"subscribers_count":6,"default_branch":"main","last_synced_at":"2025-07-27T16:59:45.613Z","etag":null,"topics":["blog-engine","cms","flask-application","hacktoberfest","hacktoberfest2020","hacktoberfest2021","html-template","python3","site-generator"],"latest_commit_sha":null,"homepage":"http://publ.beesbuzz.biz/","language":"Python","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/PlaidWeb.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","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},"funding":{"github":"fluffy-critter","open_collective":null,"ko_fi":"fluffycritter","tidelift":null,"community_bridge":null,"custom":"https://liberapay.com/PlaidWeb"}},"created_at":"2018-03-28T00:30:42.000Z","updated_at":"2025-07-01T17:47:05.000Z","dependencies_parsed_at":"2023-02-09T13:15:44.301Z","dependency_job_id":"85d04db9-eb8d-4229-a4be-2de2bea11b18","html_url":"https://github.com/PlaidWeb/Publ","commit_stats":{"total_commits":1153,"total_committers":3,"mean_commits":384.3333333333333,"dds":0.006071118820468291,"last_synced_commit":"9ef209e03a6c5b08f23e1a0dcd021c645167bd3c"},"previous_names":[],"tags_count":141,"template":false,"template_full_name":null,"purl":"pkg:github/PlaidWeb/Publ","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PlaidWeb%2FPubl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PlaidWeb%2FPubl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PlaidWeb%2FPubl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PlaidWeb%2FPubl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PlaidWeb","download_url":"https://codeload.github.com/PlaidWeb/Publ/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PlaidWeb%2FPubl/sbom","scorecard":{"id":110576,"data":{"date":"2025-08-11","repo":{"name":"github.com/PlaidWeb/Publ","commit":"4a2091d0fea8c2bd38ef657089bd90ddb18e02e2"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5,"checks":[{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":10,"reason":"14 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/16 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 16 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-15T12:07:21.392Z","repository_id":42535230,"created_at":"2025-08-15T12:07:21.392Z","updated_at":"2025-08-15T12:07:21.392Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271752125,"owners_count":24814750,"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-08-23T02:00:09.327Z","response_time":69,"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":["blog-engine","cms","flask-application","hacktoberfest","hacktoberfest2020","hacktoberfest2021","html-template","python3","site-generator"],"created_at":"2024-12-14T13:44:48.251Z","updated_at":"2025-08-23T14:35:01.158Z","avatar_url":"https://github.com/PlaidWeb.png","language":"Python","funding_links":["https://github.com/sponsors/fluffy-critter","https://ko-fi.com/fluffycritter","https://liberapay.com/PlaidWeb"],"categories":[],"sub_categories":[],"readme":"# Publ\n\nA personal publishing platform. Like a static publishing system, only dynamic.\n\n## Motivation\n\nI make a lot of different things — comics, music, art, code, games — and none of\nthe existing content management systems I found quite satisfied my use cases.\nEither they don't allow enough flexibility in the sorts of content that they can\nprovide, or the complexity in managing the content makes it more complicated than\nsimply hand-authoring a site.\n\nI wanted to bring the best of the classic static web to a more dynamic\npublishing system; scheduled posts, private posts, category-based templates, and\nbuilt-in support for image renditions (including thumbnails, high-DPI support,\nand image galleries). And I want to do it all using simple Markdown files\norganized in a sensible file hierarchy.\n\n## Basic tenets\n\n* Containerized web app that's deployable with little friction (hopefully)\n* Do one thing (present heterogeneous content), do it well (hopefully)\n* Use external tools for site content editing\n* Be CDN-friendly\n* High-DPI images and image sets as first-class citizens\n* Interoperate with everything that's open for interoperation (especially [IndieWeb](http://indieweb.org))\n\n## See it in action\n\nThe main demonstration site is at https://beesbuzz.biz/ — it is of course a\nwork in progress! The documentation site for Publ itself (which is also a work in progress) lives at https://publ.beesbuzz.biz/\n\n## Operating requirements\n\nI am designing this to work in any WSGI-capable environment with a supported\nversion of Python. This means that it will, for example, be deployable on any\nshared hosting which has Passenger support (such as Dreamhost), as well as on\nHeroku, Google AppEngine, S3, or any other simple containerized deployment\ntarget.\n\nThe file system is the ground truth for all site data, and while it does use a\ndatabase as a content index, the actual choice of database doesn't matter all\nthat much. A typical deployment will use SQLite, but MySQL, Postgres, Oracle,\nand Cockroach are also supported.\n\n## Developing Publ\n\nIn order to develop Publ itself, you'll need to install its dependencies; see\nthe [getting started\nguide](http://publ.beesbuzz.biz/manual/328-Getting-started) for more\ninformation. In particular, make sure you have compatible versions of\n[Python](https://python.org/) and [Poetry](https://python-poetry.org/)\ninstalled, and, if on Windows, you'll probably need to install the [Visual C++\nbuild tools](https://visualstudio.microsoft.com/downloads/).\n\nAs far as developing Publ itself goes, cloning this repository and running\n`./runTests.sh` (Linux/macOS/etc.) or `wintests.cmd` (Windows) should get you up\nand running. The runtime manual test suite site lives in `tests/` (with the\nactual site content in `content/`, `templates/` and `static/`).\n\nFor developing CLI functionality, you'll have to override the `FLASK_APP`\nenvironment variable to be `test_app.py`.\n\n## Additional resources\n\nThe [Publ-site](https://github.com/PlaidWeb/Publ-site) repository stores all of\nthe templates, site content, and configuration for the [Publ\nsite](https://publ.beesbuzz.biz).\n\nThe\n[Publ-templates-beesbuzz.biz](https://github.com/PlaidWeb/Publ-templates-beesbuzz.biz)\nrepository provides a stripped-down sample site based on [my personal\nhomepage](https://beesbuzz.biz).\n\n## Authors\n\nIn order of first contribution:\n\n* [fluffy](https://github.com/fluffy-critter)\n* [karinassuni](https://github.com/karinassuni)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplaidweb%2Fpubl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fplaidweb%2Fpubl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fplaidweb%2Fpubl/lists"}