{"id":18615729,"url":"https://github.com/jshwi/jss","last_synced_at":"2025-10-11T23:11:08.591Z","repository":{"id":36963141,"uuid":"412523332","full_name":"jshwi/jss","owner":"jshwi","description":"A Flask web app","archived":false,"fork":false,"pushed_at":"2025-10-06T18:09:16.000Z","size":5946,"stargazers_count":6,"open_issues_count":21,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-10-06T20:23:50.816Z","etag":null,"topics":["blog","development","flask","pwa","webapp"],"latest_commit_sha":null,"homepage":"https://jshwisolutions.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/jshwi.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2021-10-01T15:36:04.000Z","updated_at":"2025-08-02T11:48:44.000Z","dependencies_parsed_at":"2023-09-22T09:47:53.671Z","dependency_job_id":"6e64c569-4e4e-4733-bb04-9122367d6a22","html_url":"https://github.com/jshwi/jss","commit_stats":null,"previous_names":[],"tags_count":76,"template":false,"template_full_name":null,"purl":"pkg:github/jshwi/jss","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jshwi%2Fjss","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jshwi%2Fjss/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jshwi%2Fjss/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jshwi%2Fjss/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jshwi","download_url":"https://codeload.github.com/jshwi/jss/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jshwi%2Fjss/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279009353,"owners_count":26084578,"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-10-11T02:00:06.511Z","response_time":55,"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","development","flask","pwa","webapp"],"created_at":"2024-11-07T03:31:36.367Z","updated_at":"2025-10-11T23:11:08.585Z","avatar_url":"https://github.com/jshwi.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!--suppress HtmlDeprecatedAttribute --\u003e\n\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://raw.githubusercontent.com/jshwi/jss/master/assets/img/safari-pinned-tab.svg\" alt=\"jss\" width=\"30%\"/\u003e\n\u003c/p\u003e\n\n[![License](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Build](https://github.com/jshwi/jss/actions/workflows/build.yaml/badge.svg)](https://github.com/jshwi/jss/actions/workflows/build.yaml)\n[![CodeQL](https://github.com/jshwi/jss/actions/workflows/codeql-analysis.yml/badge.svg)](https://github.com/jshwi/jss/actions/workflows/codeql-analysis.yml)\n[![pre-commit.ci status](https://results.pre-commit.ci/badge/github/jshwi/jss/master.svg)](https://results.pre-commit.ci/latest/github/jshwi/jss/master)\n[![codecov.io](https://codecov.io/gh/jshwi/jss/branch/master/graph/badge.svg)](https://codecov.io/gh/jshwi/jss)\n[![readthedocs.org](https://readthedocs.org/projects/jss/badge/?version=latest)](https://jss.readthedocs.io/en/latest/?badge=latest)\n[![python3.9](https://img.shields.io/badge/python-3.9-blue.svg)](https://www.python.org/downloads/release/python-390)\n[![Black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat\u0026labelColor=ef8336)](https://pycqa.github.io/isort/)\n[![docformatter](https://img.shields.io/badge/%20formatter-docformatter-fedcba.svg)](https://github.com/PyCQA/docformatter)\n[![prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg?style=flat-square)](https://github.com/prettier/prettier)\n[![pylint](https://img.shields.io/badge/linting-pylint-yellowgreen)](https://github.com/PyCQA/pylint)\n[![Security Status](https://img.shields.io/badge/security-bandit-yellow.svg)](https://github.com/PyCQA/bandit)\n[![Known Vulnerabilities](https://snyk.io/test/github/jshwi/jss/badge.svg)](https://snyk.io/test/github/jshwi/jss/badge.svg)\n\n## A Flask webapp\n\n### Install\n\n```shell\n  $ docker compose build\n```\n\n### Development\n\nhttp://localhost:5000\n\n```shell\n  $ npm run init:dev\n  $ docker compose up dev\n```\n\n### Production\n\nhttps://localhost:443\n\n```shell\n  $ docker compose up production\n```\n\n## Documentation\n\n- Source documentation [here](https://jshwi.github.io/jss/)\n\n## Features\n\n### Progressive Web Application\n\n- Mobile support\n- Installable as a standalone app\n\n### User Accounts\n\n- Single admin user (Can only be created by root user via the commandline)\n  - Access to site configuration\n    - change favicon\n  - Access to UI for viewing database\n- Signing up\n  - Email verification\n- Log in\n  - Password reset functionality\n- Logged in (including admin)\n  - Editable user profiles\n  - Functionality to follow other users\n  - Functionality to message other users\n  - Allow changing of username (while still being able to find user by old username)\n\n### Blog Posts\n\n- CREATE, READ, UPDATE, DELETE, or \"CRUD\"\n- Posting, updating, and deleting posts restricted to authorized users\n- All posts are timestamped\n- Markdown support with syntax highlighting (see list of languages [here](https://github.com/jshwi/jss/blob/master/.github/LEXERS.md))\n- Pagination support\n- Support for versioning and rolling back changes\n\n### Configurable\n\n- Toggle dark mode\n\n### Translation\n\n- See list of languages [here](https://github.com/jshwi/jss/blob/master/app/translations/LANGUAGES.md)\n\n### Integrations\n\n- Stripe payment option\n- Gravatar for user avatars\n\n### Error handling\n\n- Support for emailing errors\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjshwi%2Fjss","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjshwi%2Fjss","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjshwi%2Fjss/lists"}