{"id":13672752,"url":"https://github.com/rrebase/knboard","last_synced_at":"2025-04-28T03:32:56.322Z","repository":{"id":37350963,"uuid":"245634880","full_name":"rrebase/knboard","owner":"rrebase","description":"Kanban boards with React \u0026 Django.","archived":true,"fork":false,"pushed_at":"2022-06-11T19:45:41.000Z","size":32516,"stargazers_count":666,"open_issues_count":31,"forks_count":185,"subscribers_count":16,"default_branch":"master","last_synced_at":"2024-11-11T11:44:54.604Z","etag":null,"topics":["django","react"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/rrebase.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-03-07T13:09:09.000Z","updated_at":"2024-11-05T18:34:39.000Z","dependencies_parsed_at":"2022-08-09T14:23:33.384Z","dependency_job_id":null,"html_url":"https://github.com/rrebase/knboard","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/rrebase%2Fknboard","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rrebase%2Fknboard/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rrebase%2Fknboard/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rrebase%2Fknboard/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rrebase","download_url":"https://codeload.github.com/rrebase/knboard/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251246394,"owners_count":21558762,"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":["django","react"],"created_at":"2024-08-02T09:01:46.330Z","updated_at":"2025-04-28T03:32:51.313Z","avatar_url":"https://github.com/rrebase.png","language":"TypeScript","funding_links":[],"categories":["TypeScript"],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003eKanban boards - SPA with React \u0026 Django\u003c/h1\u003e\n\n\u003ch2 align=\"center\"\u003e⚠️ Archived as it's no longer updated 🥲\u003c/h1\u003e\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com)\n[![Code of Conduct](https://img.shields.io/badge/code%20of-conduct-ff69b4.svg?style=flat-square)](https://github.com/rrebase/knboard/blob/master/CODE_OF_CONDUCT.md)\n\n[![CircleCI](https://circleci.com/gh/rrebase/knboard.svg?style=svg)](https://circleci.com/gh/rrebase/knboard)\n[![Maintainability](https://api.codeclimate.com/v1/badges/1dc1d840640dad52e38f/maintainability)](https://codeclimate.com/github/rrebase/knboard/maintainability)\n[![Test Coverage](https://api.codeclimate.com/v1/badges/1dc1d840640dad52e38f/test_coverage)](https://codeclimate.com/github/rrebase/knboard/test_coverage)\n\n## Quality 💪\n\n- Auto formatted with Prettier and Black\n- Tested with Jest, Pytest and Cypress\n- Continuous Integration\n\n## Built using a Modern stack 💎\n\n### Frontend\n\n- Typescript\n- React with functional components and hooks\n- Redux Toolkit\n- Components \u0026 styling with Material-UI and Emotion\n- Drag \u0026 Drop using react-beautiful-dnd\n- Unit tests with React Testing Library\n- Integration tests with Cypress\n\n### Backend\n\n- Django REST framework for a powerful API\n- Django ORM for interacting with the database\n- PostgreSQL\n- Unit tests with Pytest\n\n### Infra\n\n- Blazing fast Nginx\n- Dockerized production setup\n- Continuous integration with CircleCI\n- Server setup and deployment with Ansible\n\n## Motivation 🎯\n\n- Code samples for blog posts\n- Implementing Auto DevOps\n- Playing with tools that are free for open source\n- Styling with Emotion\n\n## Features ✨\n\n- Multiple kanban boards\n- Drag \u0026 drop tasks\n- CRUD for tasks, labels \u0026 columns\n- Edit task descriptions with Markdown\n- Manage board members\n- Update your profile \u0026 pick an avatar\n\n## Development setup 🛠\n\nSteps to locally setup development after cloning the project.\n\nNote: `docker-compose` is currently only used for production.\n\n### Django\n\nHave Python 3.8 installed and in PATH.\nInstalling Python: https://realpython.com/installing-python/\n\n```sh\npython3 --version\n# Python 3.8.2\n```\n\n```sh\ncd backend\npython3 -m venv .venv\nsource .venv/bin/activate\n\n# Windows users\n# .venv/scripts/activate\n\npip install -r requirements/local.txt\n\n# Windows users, if you encounter pg_config error:\n# 1) Install PostgresSQL and use the solution at https://stackoverflow.com/a/58440598/1262198\n\n# Need to have Docker and Docker Compose installed\n# Start PostgreSQL and other services via Docker Compose\ndocker-compose -f services.yml up --d\n\npython manage.py migrate\npython manage.py createsuperuser --username admin --email a@a.com\npython manage.py loaddata avatars\npython manage.py runserver\n```\n\n- API root available at `http://localhost:8000/api/`\n- Admin available at `http://localhost:8000/backdoor/`\n\n### React\n\n- [Node.js](https://nodejs.org) v12 or greater\n- [Yarn](https://yarnpkg.com/) v1 or greater\n\n```sh\nnode --version\n# v12.16\nyarn --version\n# 1.22.4\n```\n\n```sh\ncd frontend\nyarn install\nyarn start\n```\n\nReact app is now accessible at `http://localhost:3000`\n\n### Quality tools\n\nCheck formatting \u0026 quality with eslint\n\n```sh\nyarn lint\n```\n\nRun Jest tests\n\n```sh\nyarn test\n```\n\nRun Cypress tests\n\n```sh\nyarn cypress run\n```\n\nDebug Cypress tests\n\n```sh\nnpx cypress open\n```\n\nRun Python tests\n\n```sh\npython -m pytest\n```\n\nCheck formatting with Black\n\n```sh\nblack --exclude .venv .\n```\n\n## Articles\n\n- [Full Guide to Testing Javascript \u0026 React](https://www.rrebase.com/posts/full-guide-to-testing-javascript-react)\n- [Deploying knboard to DigitalOcean with Ansible](https://www.rrebase.com/posts/deploying-knboard-to-digitalocean-with-ansible)\n\n## License\n\nLicensed under the MIT license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frrebase%2Fknboard","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frrebase%2Fknboard","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frrebase%2Fknboard/lists"}