{"id":15288726,"url":"https://github.com/neurophant/lazycms","last_synced_at":"2026-03-04T11:31:20.304Z","repository":{"id":248004159,"uuid":"827479086","full_name":"neurophant/lazycms","owner":"neurophant","description":"Minimalistic CMS in Python with Markdown content","archived":false,"fork":false,"pushed_at":"2024-07-11T18:22:22.000Z","size":6,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-11-29T04:58:22.709Z","etag":null,"topics":["cms","cms-framework","fastapi","markdown"],"latest_commit_sha":null,"homepage":"","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/neurophant.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-11T18:15:45.000Z","updated_at":"2024-07-11T18:42:06.000Z","dependencies_parsed_at":"2024-07-11T21:38:11.835Z","dependency_job_id":null,"html_url":"https://github.com/neurophant/lazycms","commit_stats":null,"previous_names":["neurophant/lazycms"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/neurophant/lazycms","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neurophant%2Flazycms","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neurophant%2Flazycms/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neurophant%2Flazycms/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neurophant%2Flazycms/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/neurophant","download_url":"https://codeload.github.com/neurophant/lazycms/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/neurophant%2Flazycms/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30078979,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T08:01:56.766Z","status":"ssl_error","status_checked_at":"2026-03-04T08:00:42.919Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["cms","cms-framework","fastapi","markdown"],"created_at":"2024-09-30T15:52:28.458Z","updated_at":"2026-03-04T11:31:20.282Z","avatar_url":"https://github.com/neurophant.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"Lazy CMS\n========\n\nMinimalistic CMS in Python with Markdown content\n\nFeatures\n--------\n\n* No storages, simple file structure\n* Markdown content with images\n* Static auto-collection\n* Simple pagination\n\nRequirements\n------------\n\n* Python 3.12\n* FastAPI 0.111.0\n* Jinja2 3.1.4\n* Markdown 3.6\n* PyYAML 6.0.1\n* python-slugify 8.0.4\n* pydantic 2.8.2\n\nInstall\n-------\n\n.. code-block:: bash\n\n    python3.12 -m venv venv\n    source venv/bin/activate\n    pip install lazycms\n\nUsage\n-----\n\nExample project structure:\n\n* project/\n    * static/\n        * content/ - empty directory, static content will be collected here\n        * theme/ - your theme css/js\n    * storage/ - your file storage directory\n        * article-1/ - entity (article) directory\n            * content.md - your article\n            * meta.yml - entity metadata\n            * picture.jpeg - picture for your article\n            * preview.md - entity article miniature for index page\n        * article-2/\n            * content.md\n            * meta.yml\n            * picture.jpeg\n            * preview.md\n    * templates/ - Jinja2 templates directory\n        * index.html - entity index template with **entity** and **paginator** context objects\n        * entity.html - entity template with **entity** context object\n    * app.py - CMS code\n    * app.yml - CMS config\n\nproject/storage/article-1/content.md:\n\n.. code-block:: markdown\n\n    # Article 1\n\n    ![Article 1]({{slug_url}}/picture.jpeg \"Article 1\")\n\n    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n    aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n    Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur\n    sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\nproject/storage/article-1/preview.md:\n\n.. code-block:: markdown\n\n    ![Article 1]({{slug_url}}/picture.jpeg \"Article 1\")\n\n    # Article 1\n\n    Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna\n    aliqua. Ut enim ad minim veniam...\n\nproject/storage/article-1/meta.yml:\n\n.. code-block:: yaml\n\n    timestamp: !!timestamp 2024-01-01T17:00:00Z\n    title: Article 1\n    content: content.md\n    preview: preview.md\n    images:\n        - picture.jpeg\n    tags:\n        - article\n        - test\n\nproject/templates/index.html:\n\n.. code-block:: html\n\n    {% for entity in entities %}\n        \u003carticle\u003e\n            {{ entity.preview|safe }}\n        \u003c/article\u003e\n    {% endfor %}\n\n    {% if paginator.page \u003e 1 %}\n        \u003ca href=\"/?page={{ paginator.page - 1 }}\"\u003ePrev\u003c/a\u003e\n    {% else %}\n        Prev\n    {% endif %}\n    {% if paginator.page \u003c paginator.page_count %}\n        \u003ca href=\"/?page={{ paginator.page + 1 }}\"\u003eNext\u003c/a\u003e\n    {% else %}\n        Next\n    {% endif %}\n\nproject/templates/entity.html:\n\n.. code-block:: html\n\n    \u003carticle\u003e\n        {{ entity.content|safe }}\n    \u003c/article\u003e\n\nproject/app.yml:\n\n.. code-block:: yaml\n\n    # Storage config\n    storage_type: FILE\n    storage_path: ./storage\n    storage_meta: meta.yml\n    # Static config\n    static_path: ./static\n    static_url: /static\n    # Static collected content config\n    collect_path: ./static/content\n    collect_url: /static/content\n    # Templates\n    templates_path: ./templates\n    # Pagination\n    paginate: 10\n\nproject/app.py:\n\n.. code-block:: python\n\n    from lazycms import LazyCMS\n\n\n    cms = LazyCMS(config_path='app.yml')\n\nRun:\n\n.. code-block:: bash\n\n    uvicorn app:cms.app --reload\n\nhttp://localhost:8000 - index page\n\nhttp://localhost:8000/2024-01-01-article-1 - Article 1 page\n\nhttp://localhost:8000/2024-01-02-article-2 - Article 2 page\n\nTests\n-----\n\nTBD\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneurophant%2Flazycms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fneurophant%2Flazycms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fneurophant%2Flazycms/lists"}