{"id":22552844,"url":"https://github.com/rosesonfire/tic-tac-toe","last_synced_at":"2026-04-11T18:03:14.888Z","repository":{"id":55331810,"uuid":"326375018","full_name":"rosesonfire/tic-tac-toe","owner":"rosesonfire","description":"A simple Tic Tac Toe app with NextJS, Redux, Redux-observables, GraphQL, Apollo, Redis and Docker-compose.","archived":false,"fork":false,"pushed_at":"2021-01-05T18:08:30.000Z","size":7812,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-02-02T11:11:17.532Z","etag":null,"topics":["apollo","docker-compose","flexbox","graphql","nextjs","reactjs","redux","redux-observable","rxjs"],"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/rosesonfire.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}},"created_at":"2021-01-03T09:57:00.000Z","updated_at":"2021-01-05T18:08:32.000Z","dependencies_parsed_at":"2022-08-16T07:40:24.462Z","dependency_job_id":null,"html_url":"https://github.com/rosesonfire/tic-tac-toe","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/rosesonfire%2Ftic-tac-toe","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rosesonfire%2Ftic-tac-toe/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rosesonfire%2Ftic-tac-toe/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rosesonfire%2Ftic-tac-toe/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rosesonfire","download_url":"https://codeload.github.com/rosesonfire/tic-tac-toe/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246010052,"owners_count":20709054,"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":["apollo","docker-compose","flexbox","graphql","nextjs","reactjs","redux","redux-observable","rxjs"],"created_at":"2024-12-07T18:07:43.868Z","updated_at":"2026-04-11T18:03:14.828Z","avatar_url":"https://github.com/rosesonfire.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Tic Tac Toe\n\nA simple tic tac toe game with\n- React\n- Redux\n- Redux-obervables\n- GraphQL\n- NextJS\n- Redis\n\n\u003cimg src=\"tic_tac_toe.gif\" width=\"600\"/\u003e\n\nForked code from my other project: [Understand Qur'an](https://github.com/rosesonfire/understand-quran)\n\n# Features\n\n1. Persist play state on page reload\n1. Shows game logs\n1. [Static site generation with NextJS](front-end/README.md#Static-site-generation-with-NextJS)\n\n# Requirements for development\n\n1. Docker (^18.03.1)\n1. Docker Compose (^1.27.3)\n\n# Quick start\n\n```bash\n# Runs all services\n./start\n\n# View logs\n./logs\n\n# Once front-end is up you can access the site via http://localhost:3000\n```\n\n# Tech used\n\n## Languages\n\n1. \u003cimg src=\"icons/javascript.svg\" height=\"16\"/\u003e Javascript\n1. \u003cimg src=\"icons/typescript.svg\" height=\"16\"/\u003e Typescript\n1. \u003cimg src=\"icons/shellscript.png\" height=\"16\"/\u003e Shell script\n1. \u003cimg src=\"icons/css.png\" height=\"16\"/\u003e CSS\n1. \u003cimg src=\"icons/sass.png\" height=\"16\"/\u003e SCSS\n1. \u003cimg src=\"icons/yml.png\" height=\"16\"/\u003e YAML\n1. \u003cimg src=\"icons/graph_ql.png\" height=\"16\"/\u003e GraphQL\n\n## Frameworks and libraries\n1. \u003cimg src=\"icons/react.png\" height=\"16\"/\u003e ReactJS\n1. \u003cimg src=\"icons/nextjs.jpeg\" height=\"16\"/\u003e NextJS\n    - With static site generation\n1. \u003cimg src=\"icons/redux.svg\" height=\"16\"/\u003e Redux\n    - Reselect\n    - React Redux\n    - Redux Toolkit\n    - Next Redux Wrapper\n1. \u003cimg src=\"icons/rxjs.png\" height=\"16\"/\u003e RxJS\n1. \u003cimg src=\"icons/redux_observable.gif\" height=\"16\"/\u003e Redux Observable\n1. \u003cimg src=\"icons/docker.jpeg\" height=\"16\"/\u003e Docker\n1. \u003cimg src=\"icons/docker_compose.png\" height=\"16\"/\u003e Docker Compose\n1. \u003cimg src=\"icons/stylelint.png\" height=\"16\"/\u003e Stylelint\n1. \u003cimg src=\"icons/eslint.png\" height=\"16\"/\u003e Eslint\n1. \u003cimg src=\"icons/webpack.png\" height=\"16\"/\u003e Webpack\n1. \u003cimg src=\"icons/apollo_server.svg\" height=\"16\"/\u003e Apollo server express\n1. \u003cimg src=\"icons/apollo_client.jpg\" height=\"16\"/\u003e Apollo client\n\n## Conventions\n1. [Suite CSS](https://suitcss.github.io/)\n1. [Ducks pattern](https://github.com/erikras/ducks-modular-redux)\n\n# Services\n\n- [front-end](front-end/README.md): the React front end\n- [api-server](api-server/README.md): a graphQL server for serving the data\n- [redis](redis/README.md): a Redis server for storing the temporary data\n\n# Production\n\nSet `ENV=production` in [.env](.env).\n\n## URLs\n\n- front-end: http://localhost:3000\n- api-server: http://localhost:4000\n- redis: http://localhost:6379 (Same as development)\n- [Static site generation](front-end/README.md#Static-site-generation-with-NextJS)\n\n# Development\n\nSet `ENV=development` in [.env](.env).\n\n## URLs\n\n- front-end: http://localhost:3001\n- api-server: http://localhost:4001\n- redis: http://localhost:6379 (Same as production)\n\n## Debug\n\n- [front-end](front-end/README.md#debug)\n- [api-server](api-server/README.md#debug)\n\n# Commands\n\n## Run services\n\n```bash\n./start [\u003cservice name\u003e]\n```\n\n## Restart services\n\n```bash\n./restart \u003cservice name\u003e\n```\n\n## Stop a service\n\n```bash\n./stop \u003cservice name\u003e\n```\n\n## Stop all services and remove containers\n\n```bash\n./killall\n```\n\n## View logs\n\n```bash\n./logs \u003cservice name\u003e\n```\n\n## Shell into services\n\n```bash\n./shell \u003cservice name\u003e\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frosesonfire%2Ftic-tac-toe","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frosesonfire%2Ftic-tac-toe","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frosesonfire%2Ftic-tac-toe/lists"}