{"id":19151321,"url":"https://github.com/skwzrd/blogger","last_synced_at":"2026-05-17T01:34:45.306Z","repository":{"id":211047733,"uuid":"722449058","full_name":"skwzrd/blogger","owner":"skwzrd","description":"A perfect blog written with Flask.","archived":false,"fork":false,"pushed_at":"2025-03-27T18:57:31.000Z","size":4509,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-27T19:23:23.450Z","etag":null,"topics":["blog","blog-engine","flask","simple","wtforms"],"latest_commit_sha":null,"homepage":"","language":"Python","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/skwzrd.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":"2023-11-23T07:09:26.000Z","updated_at":"2025-03-27T18:57:34.000Z","dependencies_parsed_at":"2024-07-20T06:41:35.058Z","dependency_job_id":"2f1888e3-830b-486a-bc3a-9a9273709a0f","html_url":"https://github.com/skwzrd/blogger","commit_stats":null,"previous_names":["skwzrd/blogger"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/skwzrd/blogger","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skwzrd%2Fblogger","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skwzrd%2Fblogger/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skwzrd%2Fblogger/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skwzrd%2Fblogger/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/skwzrd","download_url":"https://codeload.github.com/skwzrd/blogger/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/skwzrd%2Fblogger/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267585618,"owners_count":24111575,"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-07-28T02:00:09.689Z","response_time":68,"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","blog-engine","flask","simple","wtforms"],"created_at":"2024-11-09T08:14:26.049Z","updated_at":"2026-05-17T01:34:40.273Z","avatar_url":"https://github.com/skwzrd.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# BLOGGER\n\nA simple blog written with Flask. It currently features,\n\n- Markdown post editor which generates HTML automatically\n- Admin account access for CRUD actions\n- Tags\n- Comments\n- File attachments\n- Contact form\n- Documentation for set-up\n- Endpoint rate limiting\n- Flash messages\n- Mobile support\n- Easily customizable CSS\n- RSS Feed\n\n\n## Preview\n\nSee a collection of screenshots [here](resources/README.md).\n\n\n## Set up\n\nThis site was developed against Python 3.10.12, so you should first have that version of Python installed. Other versions (3.11) probably work too.\n\n\n### Linux Environment\n```\ngit clone https://github.com/skwzrd/blogger.git\ncd blogger\npython3 -m venv venv\nsource venv/bin/activate\npip install -r requirements.txt\n\nsudo apt update\nsudo apt install redis-server\nsudo nano /etc/redis/redis.conf # set line `supervised no` to `supervised systemd`\nsudo systemctl restart redis\nsudo systemctl status redis\n\npython3 main.py # development run\n```\n\n\n### Site Configurations\n\n- Create a long, random string in a file called `secret.txt`.\n    - Note: The following does the job, `tr -dc A-Za-z0-9 \u003c/dev/urandom | head -c 64 \u003e secret.txt`\n- Rename `logo_COPY.png` to `logo.png` and configure its variables.\n- Rename `configs_COPY.css` to `configs.css` and configure its variables.\n- Rename `configs_COPY.py` to `configs.py` and configure its variables.\n    - Note: Class variables in `CONSTS` that are all-caps are available in Flask `app.configs['NAME']`.\n- [Install](https://pandoc.org/installing.html) Pandoc.\n- Initialize a new database by running `init_database.py`, or drop-in an existing SQLite database.\n    - Note: When `CONSTS.TESTING = True`, on each request, BLOGGER will check if a new database has to be created.\n- Flush redis records `redis-cli flushall`.\n- Customize your site's styling by modifying the global CSS variables in `/static/css/index.css`\n\n\n### Formatting \u0026 Linting\n\nThese libraries are not including in the production venv, so install them with `pip install djhtml isort black pylint`.\n\n- `djhtml ./templates`\n- `isort . -m 3`\n- `black --line-length=140 --target-version=py310 .`\n- `pylint -d C \u003cmodule_name\u003e`\n\n\n## Hosting on Ubuntu\n\n`sudo nano /etc/systemd/system/blogger.service`\n\n```service\n[Unit]\nDescription=Blogger - Gunicorn Service\nAfter=network.target\n\n[Service]\nUser=user1\nGroup=www-data\n\nWorkingDirectory=/path/to/blogger\nEnvironment=\"PATH=/path/to/venv/bin\"\nExecStart=/path/to/venv/bin/gunicorn -w 2 -b 127.0.0.1:8080 'main:app'\n\nType=simple\nRestart=always\nRestartSec=20\n\n[Install]\nWantedBy=multi-user.target\n```\n\n\n### Permissions\n```\nsudo chmod -R 770 blogger/\nsudo chmod -R 777 blogger/static\n```\n\n\n### Run\n\n```\nsudo systemctl daemon-reload\nsudo systemctl enable blogger.service\nsudo systemctl start blogger.service\nsudo systemctl status blogger.service\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskwzrd%2Fblogger","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fskwzrd%2Fblogger","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fskwzrd%2Fblogger/lists"}