{"id":18622341,"url":"https://github.com/marcanuy/keraban","last_synced_at":"2025-04-11T03:31:15.745Z","repository":{"id":40467182,"uuid":"133421568","full_name":"marcanuy/keraban","owner":"marcanuy","description":"An inflexible, opinionated CMS.","archived":false,"fork":false,"pushed_at":"2023-10-19T15:53:11.000Z","size":2055,"stargazers_count":5,"open_issues_count":1,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-25T08:42:30.419Z","etag":null,"topics":["cms","django","dynamic-website","wagtail"],"latest_commit_sha":null,"homepage":"http://keraban.marcanuy.com","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/marcanuy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"contributing.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-05-14T21:07:23.000Z","updated_at":"2024-05-29T08:51:19.000Z","dependencies_parsed_at":"2023-01-24T14:31:09.843Z","dependency_job_id":null,"html_url":"https://github.com/marcanuy/keraban","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcanuy%2Fkeraban","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcanuy%2Fkeraban/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcanuy%2Fkeraban/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/marcanuy%2Fkeraban/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/marcanuy","download_url":"https://codeload.github.com/marcanuy/keraban/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248335428,"owners_count":21086589,"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":["cms","django","dynamic-website","wagtail"],"created_at":"2024-11-07T04:16:33.457Z","updated_at":"2025-04-11T03:31:13.657Z","avatar_url":"https://github.com/marcanuy.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# keraban\nAn inflexible, opinionated CMS based on Wagtail. \n\nDesign a corporate website and give your client an user to\nkeep the content they desire up to date.\n\nSee it live! http://keraban.marcanuy.com/\n\nThe Keraban website is an example of what a typical site looks like,\nthe site itself its made with it.\n\n\u003c!-- markdown-toc start - Don't edit this section. Run M-x markdown-toc-refresh-toc --\u003e\n**Table of Contents**\n\n- [keraban](#keraban)\n- [Goals](#goals)\n    - [Design Principles](#design-principles)\n- [Explanation](#explanation)\n- [Features](#features)\n- [Notes](#notes)\n- [Installation](#installation)\n- [Running locally](#running-locally)\n    - [Admin](#admin)\n- [Customize content](#customize-content)\n- [Deploy](#deploy)\n    - [1. Set up production webserver](#1-set-up-production-webserver)\n        - [Webfaction](#webfaction)\n    - [2. Customize production environment](#2-customize-production-environment)\n- [How to](#how-to)\n    - [Add a Page to main menu](#add-a-page-to-main-menu)\n    - [Add a feature](#add-a-feature)\n    - [Change Business info](#change-business-info)\n        - [Change business data](#change-business-data)\n        - [Add business social network](#add-business-social-network)\n- [Models](#models)\n- [To do](#to-do)\n- [Credits](#credits)\n- [Ideas and Questions](#ideas-and-questions)\n\n\u003c!-- markdown-toc end --\u003e\n\n# Goals\n\n- Build and deploy websites that **can be easily maintained by non\ndeveloper users**.\n- Implementation of web best practices with special focus on Google's\n  supported schema.org content types and [enhancements](https://developers.google.com/search/docs/guides/search-gallery#enhancements).\n\n## Design Principles\n\n- Consistent look \u0026 feel through all web pages\n- *Semantic web*: Schema.org meta tags and html5\n- Optimized for Search Engines (SEO, Google's richsnippets)\n- Fully responsive\n- Add / Remove / Edit pages from Backend by end users\n\n# Explanation\n\nMost corporate websites shares the same content structure, their needs\ntypically consist of the following pages:\n\n- homepage\n- photo gallery\n- features\n- testimonials\n- contact\n\nThis structure is most seen in websites for:\n\n- Clinics\n- Dentists\n- Business\n- Any organization that has a physical address and offer some kind of\n  service.\n\n# Features\n\n- Based on Wagtail (Django CMS)\n  - Amazing back-end\n- Fully Responsive (Bootstrap 4 grid system)\n- Icons (FontAwesome \u003chttps://fontawesome.com/v4.7.0/icons/\u003e)\n- SEO\n  - Using Schema.org\n  - Social Markup \u003chttps://developers.google.com/webmasters/social-markup\u003e\n  - Knowledge Graph card with details about the business\n    \u003chttps://developers.google.com/search/docs/data-types/local-business\u003e\n  - Implementation of Google's advised [enhancements](https://developers.google.com/search/docs/guides/search-gallery#enhancements)\n\t- **Corporate Contact** - Your corporate contact information\n      displayed in the Google Knowledge panel.\n\t  ![panel](https://developers.google.com/search/docs/data-types/images/corporateContacts01.png)\n    - **Logo** - Your organization's logo in search results and Google Knowledge Graph.\n\t  ![logo](https://developers.google.com/search/docs/data-types/images/logo01.png)\n    - **Social Profile** - Your social profile information displayed on Google Knowledge panels.\n\t  ![social](https://developers.google.com/search/docs/data-types/images/social-profiles01.png)\n\t- **Breadcrumbs** - \"Breadcrumb trails on a page indicate the page's position in the site hierarchy. \"\n\t  ![breadcrumb](https://developers.google.com/search/docs/data-types/images/breadcrumb.png)\n  - Local Business Content Type\n\t- Business details displayed prominently in the Knowledge Graph card.\n      ![business](https://developers.google.com/search/docs/data-types/images/local-business02.png)\n- SASS with Bootstrap variables available\n- Contact form with \u003chttps://formspree.io/\u003e (doesn't need email server\n  configuration)\n- Google Maps in Location page\n  - \u003chttps://developers.google.com/maps/documentation/embed/guide\u003e\n- Autogenerated sitemap with all pages available: */sitemap.xml*\n  - \u003chttp://docs.wagtail.io/en/v2.1/reference/contrib/sitemaps.html\u003e\n- meta tags and OpenGraph, Twitter, and Google Plus properties by **django-meta**\n\n# Notes\n\n- static files: **whitenoise**\n\t- locally with `runserver` and\n\t- in production\n- environment variables: **django-dotenv**\n- media: **django-storages**\n- google analytics: **django-analytical**\n- database \n  - develoment: sqlite3\n  - production: [dj-database-url](https://github.com/kennethreitz/dj-database-url)\n  \n# Installation\n\n1. Create a virtual environment:\n\n\t    python3.6 -m venv ~/.virtualenvs/keraban/\n\t\n2. Clone the repo:\n\n    \tgit clone git@github.com:marcanuy/keraban.git\n\n3. Use new site:\n\n    \tcd keraban\n        echo `pwd` \u003e ~/.virtualenvs/keraban/.project\n    \tsource ~/.virtualenvs/keraban/bin/activate\n\n4. Install deps\n\n\t\tpip3 install -r requirements.txt\n\n5. Generate site CSS\n\n    \tmake compile-sass\n\t\n6. Generate database\n\n\t\t./manage.py migrate\n\n7. Load website data with a fixture\n\n        ./manage.py load_initial_data\n\n\n# Running locally\n\n    ./manage.py runserver\n\n## Admin\n\n\u003chttp://localhost:8000/admin/login/?next=/admin/\u003e\n\nSuper admin credentials:\n\n- user: admin\n- pass: mypass1234\n\n##  Customize content\n\n1. Adjust your site hostname at http://localhost:8000/admin/sites/ \n2. Edit pages with your content\n\n# Deploy\n\n## 1. Set up production webserver\n\nConsidering you have already customized your website locally, this\nsection describes how to set up your webserver with the new site.\n\nSkip it to next step if you already use another one.\n\n### Webfaction\n\n[Webfaction](https://www.webfaction.com/?aid=28835) is a shared\nhosting environment with support for Python and Django.\n\n1. Create a new\n   [app](https://my.webfaction.com/new-application?aid=28835).\n   - Fill form data:\n\t - Name: myapp_keraban\n\t - App Category: mod_wsgi\n\t - App type: Django 2.0.5 (mod_wsgi 4.6.4/Python3.6)\n\t - Hit Save button\n2. Access server through SSH after looking up your server address\n   \n\t    ssh webfactionserver\n\t\tcd webapps/proaprado_keraban\n\n3. If you are installing it Create a virtualenv\n\n\t\tpython3.6 -m venv ~/.virtualenvs/myapp_keraban\n\n4. Remove the Python interpreter installed by default to use the one\n   from virtualenv and the default django app\n\n\t\trm -r lib/\n\t\trm -r myproject/myproject/\n\t\t\n5. Set up Apache to serve your website, edit\n   **~/webapps/myapp_keraban/apache2/conf/httpd.conf** and change\n   these keys (add the first one and modify the second one). Change\n   **myuser** with your webfaction user:\n\n\t\tWSGIPythonHome /home/myuser/.virtualenvs/myapp_keraban\n\t\tWSGIDaemonProcess myapp_keraban processes=2 threads=12 python-path=/home/myuser/webapps/myapp_keraban/myproject\n\t\tWSGIScriptAlias / /home/myuser/webapps/proaprado_keraban/myproject/keraban/wsgi.py\n\t\t\n\t- **Python version should match the modwsgi used by Apache or it\n      won't work**\n\n6. Copy the contents of your local modified keraban instance to **webfaction:webapps/myapp_keraban/myproject/**\n\n7. Restart Apache\n\n\t\t./myapp_keraban/apache2/bin/restart\n\n## 2. Customize production environment\n\nAdjust server after getting the files on the server:\n\n1. Copy `/_env.skeleton` to `/.env` (or set up environment variables)\n2. Customize `/.env` with your environment variables values\n   - `.env` is processed by \u003chttps://github.com/jpadilla/django-dotenv\u003e\n   - Choose to use `keraban.settings.production` as the `DJANGO_SETTINGS_MODULE`\n   - Adjust ALLOWED_HOSTS by setting `DJANGO_ALLOWED_HOSTS`\n   - Set up Amazon S3: \n\t - Create an user with programmatic access\n\t\t - Create group for that user with **AmazonS3FullAccess** as the\n\t\t attached policy\n\t\t - \tgenerate a key with IAM\n               \u003chttps://console.aws.amazon.com/iam/home\u003e)\n\t - Then you can fill the following keys for handling media\n\t\t - AWS_ACCESS_KEY_ID\n\t\t - AWS_SECRET_ACCESS_KEY\n\t\t - AWS_REGION\n\t\t - AWS_STORAGE_BUCKET_NAME (will be created if not exists)\n   - Get Google maps api key\n     \u003chttps://developers.google.com/maps/documentation/embed/get-api-key\u003e\n\t to fill GOOGLE_MAP_API_KEY and restrict its usage accepting\n     requests from your website at \u003chttps://console.developers.google.com/apis/credentials\u003e\n\n# How to\n\n## Add a Page to main menu\n\nIn **Admin** go to **Page / Edit / Promote** and select **Show in menus**.\n\n## Add a feature\n\nIn **Admin** go to **Page / Home**, locate the **Features index page**\nand **Add Child Page**.\n\n## Change Business info\n\n### Change business data\n\nIn **Admin** go to **Business Misc / Organization** and **Edit**\nBusiness info.\n\n### Add business social network\n\nIn **Admin** go to **Business Misc / Social Networks** and locate the\nbutton **Add Social Profiles**.\n\n# Models\n\n![models](docs/keraban_models.png?raw=true)\n\n# To do\n\n- change featurettes to a flexible streamfield of alternating pages\n- add boostrap form classes to contact form template\n- make carousel on homepage hero items\n- add business opening hours snippet\n- business data and social profiles as settings? \u003chttp://docs.wagtail.io/en/v2.0/reference/contrib/settings.html\u003e\n- add sharing on social buttons \u003chttps://github.com/fcurella/django-social-share#templates\u003e\n- footer with icons and list (similar to\n  \u003chttps://stackoverflow.com/q/48519250/1165509\u003e and \u003chttps://getbootstrap.com/docs/4.0/examples/pricing/\u003e)\n- Possibility to use any numbers of featurettes pages in homepage (ListBlock)\n  implementing it as a StreamBlock\n- add favicon\n- extend support for more specific Organization types \u003chttp://schema.org/Organization\u003e\n- better integration of location page and business data address/location\n- submit it to \u003chttps://madewithwagtail.org/developers/torchbox/\u003e\n\n# Credits\n\n- Powered by https://wagtail.io\n- Inspired by the amazing Wagtail Bakery Demo\n  \u003chttps://github.com/wagtail/bakerydemo/\u003e\n- Galleries layout based on \u003chttps://tutorialzine.com/2018/03/3-amazing-bootstrap-4-gallery-templates\u003e\n  \n# Ideas and Questions\n\n- \u003chttps://twitter.com/marcanuy/\u003e\n- \u003chttps://github.com/marcanuy/keraban/issues\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcanuy%2Fkeraban","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmarcanuy%2Fkeraban","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmarcanuy%2Fkeraban/lists"}