{"id":38599376,"url":"https://github.com/serebrov/flask-vue-starter","last_synced_at":"2026-01-17T08:32:04.979Z","repository":{"id":35756649,"uuid":"173427863","full_name":"serebrov/flask-vue-starter","owner":"serebrov","description":"Flask REST + Vue.js/typescript template app, docker setup, tests (pytest and jest), linters and code formatting (black and prettier)","archived":false,"fork":false,"pushed_at":"2025-07-23T04:23:41.000Z","size":1533,"stargazers_count":13,"open_issues_count":16,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-07-23T06:16:53.121Z","etag":null,"topics":["black","circleci","docker","flask","jest","mypy","postgresql","prettier","pytest","python","rest","sqlachemy","typescript","vuejs"],"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/serebrov.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,"zenodo":null}},"created_at":"2019-03-02T09:21:04.000Z","updated_at":"2023-12-18T20:14:32.000Z","dependencies_parsed_at":"2025-07-23T06:10:32.613Z","dependency_job_id":"e5120202-5d12-46e7-b851-939b8d1306a3","html_url":"https://github.com/serebrov/flask-vue-starter","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/serebrov/flask-vue-starter","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serebrov%2Fflask-vue-starter","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serebrov%2Fflask-vue-starter/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serebrov%2Fflask-vue-starter/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serebrov%2Fflask-vue-starter/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/serebrov","download_url":"https://codeload.github.com/serebrov/flask-vue-starter/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/serebrov%2Fflask-vue-starter/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28504364,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-17T06:57:29.758Z","status":"ssl_error","status_checked_at":"2026-01-17T06:56:03.931Z","response_time":85,"last_error":"SSL_read: 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":["black","circleci","docker","flask","jest","mypy","postgresql","prettier","pytest","python","rest","sqlachemy","typescript","vuejs"],"created_at":"2026-01-17T08:32:04.739Z","updated_at":"2026-01-17T08:32:04.935Z","avatar_url":"https://github.com/serebrov.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![CircleCI](https://circleci.com/gh/serebrov/flask-vue-starter.svg?style=svg)](https://circleci.com/gh/serebrov/flask-vue-starter)\n\nStarter example app: Flask (SQLAlchemy, PostgreSQL) + Vue.js (Typescript), docker setup for backend and frontend.\n\nBackend is powered by Flask, flask-rest-api, marshmallow and SQLAlchemy to create a solid framework for REST API backend development:\n\n- Application structure\n- Routing\n- Data validation, serialization and de-serialization\n- DB layer with ORM and migrations\n- API documentation with apispec and Swagger\n- Testing with pytest\n\nBackend setup:\n\n- [Flask 3.1](http://flask.pocoo.org/) with Python 3.12\n- [SQLAlchemy 2.0](https://www.sqlalchemy.org/) and [PostgreSQL 13.0](https://www.postgresql.org/)\n- [Marshmallow 4](https://marshmallow.readthedocs.io/) for validation and serialization\n- Testing with [pytest](https://docs.pytest.org/en/latest/)\n- Linting with [mypy](http://mypy-lang.org/), [flake8](http://flake8.pycqa.org/en/latest/) and [black](https://github.com/ambv/black)\n- Code formatting with [black](https://github.com/ambv/black)\n\nFrontend setup:\n\n- [Vue.js 2.6](https://v2.vuejs.org/) with [vue-cli 4.0](https://cli.vuejs.org/)\n- [Typescript 3.4.5](https://www.typescriptlang.org/)\n- [axios](https://github.com/axios/axios) for HTTP requests\n- [bootstrap-vue](https://bootstrap-vue.js.org/) for UI\n- Testing with [jest](https://jestjs.io/)\n- Linting with typescript, eslint and prettier\n- Code formatting with prettier\n\nNote: on linux, to fix permissions between host / docker shared containers, it is necessary to export `$UID` and `$GID` variables, this can be done in ~/.bashrc or ~/.zshrc.\nThis is because UID and GID are shell variables, not env variables.\nIt allows to have dependencies (python venv and node.js node_modules shared from the container to the host, so we can have IDE completion on the host, or just easily access the dependencies from the editor).\nSee also: https://github.com/docker/compose/issues/2380.\n\nBackend dependencies are in `backend/venv` and frontend dependencies are in the `frontend/node_modules`.\n\n# Local Setup\n\n- Rebuild images / reinstall dependencies: `make build`\n- Run docker compose setup: `make up`\n- Create the initial DB (once the setup is running): `make recreate-local-db`\n- Run linters: `make lint`\n- Run tests: `make test`\n\nReformat sources: `make format-code`.\n\n# Backend DB Migrations\n\nDB migrations are handled by [alembic](https://alembic.sqlalchemy.org/en/latest/autogenerate.html) and [Flask-Migrate](https://flask-migrate.readthedocs.io/en/latest/).\n\n`Flask-Migrate` runs migrations in the context of flask application, to use it, run `make backend-bash` and then use one of the following commands:\n\n- `flask db migrate -m \"change description\"` - generate new migrations from models\n- `flask db upgrade` - apply migrations to the database\n- `flask db downgrade` - downgrade the database\n- `flask db --help` - get help and list of available commands\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fserebrov%2Fflask-vue-starter","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fserebrov%2Fflask-vue-starter","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fserebrov%2Fflask-vue-starter/lists"}