{"id":21105653,"url":"https://github.com/kosyachniy/web","last_synced_at":"2025-05-17T09:40:18.113Z","repository":{"id":37924427,"uuid":"175517075","full_name":"kosyachniy/web","owner":"kosyachniy","description":"Template Full Stack application","archived":false,"fork":false,"pushed_at":"2023-09-13T18:35:34.000Z","size":3051,"stargazers_count":6,"open_issues_count":5,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2023-09-13T21:35:27.704Z","etag":null,"topics":["api","docker","fullstack","javascript","nginx","python","template","webapp"],"latest_commit_sha":null,"homepage":"https://web.kosyachniy.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/kosyachniy.png","metadata":{"files":{"readme":"README.md","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}},"created_at":"2019-03-13T23:59:54.000Z","updated_at":"2024-04-14T20:24:19.424Z","dependencies_parsed_at":"2024-04-14T20:23:58.059Z","dependency_job_id":"84267063-a367-4c7b-abb0-251d30a362b7","html_url":"https://github.com/kosyachniy/web","commit_stats":null,"previous_names":[],"tags_count":0,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kosyachniy%2Fweb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kosyachniy%2Fweb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kosyachniy%2Fweb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kosyachniy%2Fweb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kosyachniy","download_url":"https://codeload.github.com/kosyachniy/web/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254688895,"owners_count":22112514,"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":["api","docker","fullstack","javascript","nginx","python","template","webapp"],"created_at":"2024-11-20T00:08:44.708Z","updated_at":"2025-05-17T09:40:17.301Z","avatar_url":"https://github.com/kosyachniy.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Template full stack application\n[![.github/workflows/deploy.yml](https://github.com/kosyachniy/web/actions/workflows/deploy.yml/badge.svg)](https://github.com/kosyachniy/web/actions/workflows/deploy.yml)\n\n## Description\nWeb-app on JS with Python JSON-RPC API\n\nForm | Side | Stack | Language | Path\n---|---|---|---|---\nAPI | Back-end | FastAPI | Python | ``` api/ ```\nWeb app | Front-end | React | JavaScript | ``` web/ ```\nTelegram bot | Back-end | AIOGram | Python | ``` tg/ ```\niOS | Front-end | React Native | JavaScript | planned\nAndroid | Front-end | React Native | JavaScript | planned\n\n### Stack\n\u003ctable\u003e\n    \u003cthead\u003e\n        \u003ctr\u003e\n            \u003cth\u003eSide\u003c/th\u003e\n            \u003cth\u003eLogo\u003c/th\u003e\n            \u003cth\u003eTechnology\u003c/th\u003e\n            \u003cth\u003eVersion\u003c/th\u003e\n        \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd rowspan=\"5\" align=\"center\"\u003eDevOps\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/docker_logo.png?raw=true\" alt=\"Docker\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/docker_name.png?raw=true\" alt=\"Docker\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e20.10.21\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/nginx_logo.png?raw=true\" alt=\"NGINX\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/nginx_name.png?raw=true\" alt=\"NGINX\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e1.23\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/letsencrypt_logo.png?raw=true\" alt=\"Let's Encrypt\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/letsencrypt_name.png?raw=true\" alt=\"Let's Encrypt\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/grafana_logo.png?raw=true\" alt=\"Grafana\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/grafana_name.png?raw=true\" alt=\"Grafana\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e9.2.5\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/prometheus_logo.png?raw=true\" alt=\"Prometheus\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e2.40.1\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd rowspan=\"5\" align=\"center\"\u003eBack-end\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/python_logo.png?raw=true\" alt=\"Python\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/python_name.png?raw=true\" alt=\"Python\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e3.10\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/fastapi_logo.png?raw=true\" alt=\"FastAPI\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/fastapi_name.png?raw=true\" alt=\"FastAPI\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e0.87\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/mongodb_logo.png?raw=true\" alt=\"MongoDB\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/mongodb_name.png?raw=true\" alt=\"MongoDB\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e6.0\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/redis_logo.png?raw=true\" alt=\"Redis\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/redis_name.png?raw=true\" alt=\"Redis\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e7.0\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/socketio_logo.png?raw=true\" alt=\"Socket.IO\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/socketio_name.png?raw=true\" alt=\"Socket.IO\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd rowspan=\"6\" align=\"center\"\u003eFront-end\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/javascript_logo.png?raw=true\" alt=\"JavaScript\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003enode 19.1\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/reactjs_logo.png?raw=true\" alt=\"ReactJS\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/reactjs_name.png?raw=true\" alt=\"ReactJS\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e18.2\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/nextjs_name.png?raw=true\" alt=\"Next.js\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e13.0.3\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/redux_logo.png?raw=true\" alt=\"Redux\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/redux_name.png?raw=trueg\" alt=\"Redux\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e4.2\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/bootstrap_logo.png?raw=true\" alt=\"Bootstrap\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/bootstrap_name.png?raw=true\" alt=\"Bootstrap\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e5.2.1\u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd align=\"center\"\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/ckeditor_logo.png?raw=true\" alt=\"CKEditor\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd\u003e\u003cimg src=\"https://github.com/kosyachniy/dev/blob/main/media/logos/png/ckeditor_name.png?raw=true\" alt=\"CKEditor\" height=\"50\" /\u003e\u003c/td\u003e\n            \u003ctd align=\"center\"\u003e5\u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n\n## Run\n[Before starting, you can learn how to configure the server →](https://github.com/kosyachniy/dev/blob/main/server/SERVER.md)\n\n\u003ctable\u003e\n    \u003cthead\u003e\n        \u003ctr\u003e\n            \u003cth\u003elocal\u003c/th\u003e\n            \u003cth\u003eprod\u003c/th\u003e\n        \u003c/tr\u003e\n    \u003c/thead\u003e\n    \u003ctbody\u003e\n        \u003ctr\u003e\n            \u003ctd valign=\"top\"\u003e\n                1. Configure \u003ccode\u003e .env \u003c/code\u003e from \u003ccode\u003e base.env \u003c/code\u003e and add:\n                \u003cpre\u003e\n# Type\n# LOCAL / TEST / DEV / PRE / PROD\nMODE=LOCAL\u003cbr /\u003e\n\n\\# Links\nPROTOCOL=http\nEXTERNAL_HOST=localhost\nEXTERNAL_PORT=80\nDATA_PATH=./data\n                \u003c/pre\u003e\n            \u003c/td\u003e\n            \u003ctd valign=\"top\"\u003e\n                1. Configure \u003ccode\u003e .env \u003c/code\u003e from \u003ccode\u003e base.env \u003c/code\u003e and add:\n                \u003cpre\u003e\n\\# Type\n\\# LOCAL / TEST / DEV / PRE / PROD\nMODE=PROD\n\n\\# Links\nPROTOCOL=https\nEXTERNAL_HOST=web.kosyachniy.com\nWEB_PORT=8201\nAPI_PORT=8202\nJOBS_PORT=8203\nTG_PORT=8204\nDB_PORT=8205\nREDIS_PORT=8206\nPROMETHEUS_PORT=8207\nGRAFANA_PORT=8208\nDATA_PATH=~/web/data # or change to global path, for example: ~/data/web\n                \u003c/pre\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                2. \u003ccode\u003e make dev \u003c/code\u003e\n            \u003c/td\u003e\n            \u003ctd\u003e\n                2. \u003ccode\u003e make run \u003c/code\u003e\n            \u003c/td\u003e\n        \u003c/tr\u003e\n        \u003ctr\u003e\n            \u003ctd\u003e\n                3. Open ` http://localhost/ `\n            \u003c/td\u003e\n            \u003ctd\u003e\n                3. Open ` https://web.kosyachniy.com/ ` (your link)\n            \u003c/td\u003e\n        \u003c/tr\u003e\n    \u003c/tbody\u003e\n\u003c/table\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkosyachniy%2Fweb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkosyachniy%2Fweb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkosyachniy%2Fweb/lists"}