{"id":23629621,"url":"https://github.com/id-olson/full_stack_group_webapp","last_synced_at":"2026-04-24T12:34:09.446Z","repository":{"id":269390607,"uuid":"907226330","full_name":"id-olson/full_stack_group_webapp","owner":"id-olson","description":"sudoku player","archived":false,"fork":false,"pushed_at":"2024-12-23T07:53:53.000Z","size":1021,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-01T14:01:33.862Z","etag":null,"topics":["docker","fullstack-development","pipeline"],"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/id-olson.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}},"created_at":"2024-12-23T05:45:38.000Z","updated_at":"2024-12-23T07:53:56.000Z","dependencies_parsed_at":"2024-12-23T08:41:15.042Z","dependency_job_id":null,"html_url":"https://github.com/id-olson/full_stack_group_webapp","commit_stats":null,"previous_names":["id-olson/full_stack_group_webapp"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/id-olson/full_stack_group_webapp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/id-olson%2Ffull_stack_group_webapp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/id-olson%2Ffull_stack_group_webapp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/id-olson%2Ffull_stack_group_webapp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/id-olson%2Ffull_stack_group_webapp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/id-olson","download_url":"https://codeload.github.com/id-olson/full_stack_group_webapp/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/id-olson%2Ffull_stack_group_webapp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32224208,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-24T10:26:35.452Z","status":"ssl_error","status_checked_at":"2026-04-24T10:25:27.643Z","response_time":64,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: 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":["docker","fullstack-development","pipeline"],"created_at":"2024-12-28T01:16:21.277Z","updated_at":"2026-04-24T12:34:09.429Z","avatar_url":"https://github.com/id-olson.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"### Details\nThis repository is from a 6-person group project in Software Engineering, which I took in the spring of my junior year (2024). We developed a sudoku webapp, which created new puzzles, saved changes to them, checked them for completion, and allowed a user to restore saved in-progress puzzles. It was fully containerized in Docker and fully pipelined with coverage testing in GitLab. I mainly worked on designing and implementing the database schema for Tables and Players. This began by drawing a schema, then defining it in SQL, and finally implementing Django for the tables. I also helped debug integration issues with the features we developed. The project's container accesses a UW Computer Systems Lab domain that is no longer active, but this repository still includes the raw code itself, as well as a comprehensive display of our group's commitment to agile principles.\n\n# Sudoku by Logic Luminaries\n\n[![pipeline](https://git.doit.wisc.edu/cdis/cs/courses/cs506/sp2024/team/mondaywednesdaylecture/T_10/logicluminaries/badges/main/pipeline.svg)](https://git.doit.wisc.edu/cdis/cs/courses/cs506/sp2024/team/mondaywednesdaylecture/T_10/logicluminaries/-/pipelines)\n[![coverage](https://git.doit.wisc.edu/cdis/cs/courses/cs506/sp2024/team/mondaywednesdaylecture/T_10/logicluminaries/badges/main/coverage.svg?job=unit_test_backend)](https://git.doit.wisc.edu/cdis/cs/courses/cs506/sp2024/team/mondaywednesdaylecture/T_10/logicluminaries/-/graphs/main/charts)\n[![Python Version](https://img.shields.io/badge/python-3.12-blue)](https://docs.python.org/3.12/)\n[![Django Version](https://img.shields.io/badge/django-5.0.2-green)](https://docs.djangoproject.com/en/5.0/releases/5.0.2/)\n[![React Version](https://img.shields.io/badge/react-18.0.2-blue)](https://react.dev/)\n[![MySQL Version](https://img.shields.io/badge/mysql-8.0-orange)](https://www.mysql.com/)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![Code Style: Prettier](https://img.shields.io/badge/code_style-prettier-b129b4.svg?style=flat-square)](https://prettier.io/)\n\n![Logo](./documentation/images/LLLogo.jpg)\n\n## Requirements and Specification Document\n\n### Project Abstract\n\nThe Sudoku game software is a straightforward and engaging puzzle application suitable for _all skill levels_. It has an intuitive interface, with options to choose different difficulty levels. Key features include hints for assistance and a timer for tracking game duration. The game involves filling a 9x9 grid so that each column, row, and 3x3 subgrid contains all digits from 1 to 9. This project aims to provide a fun and challenging experience for users, enhancing their problem-solving skills and concentration.\n\n\u003c!-- This was the example paragraph that is being commented out.\nThis is an example paragraph written in markdown. You can use *italics*, **bold**, and other formatting options. You can also \u003cu\u003euse inline html\u003c/u\u003e to format your text. The example sections included in this document are not necessarily all the sections you will want, and it is possible that you won't use all the one's provided. It is your responsibility to create a document that adequately conveys all the information about your project specifications and requirements.\n--\u003e\n\u003c!--Please view this file's source to see `\u003c!--comments-\u003e` with guidance on how you might use the different sections of this document. --\u003e\n\n### Customer\n\n\u003c!--A brief description of the customer for this software, both in general (the population who might eventually use such a system) and specifically for this document (the customer(s) who informed this document). Every project will have a customer from the CS506 instructional staff. Requirements should not be derived simply from discussion among team members. Ideally your customer should not only talk to you about requirements but also be excited later in the semester to use the system.--\u003e\n\nThe target customers for this Sudoku game software are puzzle enthusiasts of all ages and skill levels. It appeals to those who enjoy logical challenges and brain exercises, ranging from casual players seeking a fun pastime to serious puzzle solvers looking to test their skills. The game's user-friendly design make it accessible and engaging for a wide audience.\n\n### User Requirements\n\n\u003c!--This section lists the behavior that the users see. This information needs to be presented in a logical, organized fashion. It is most helpful if this section is organized in outline form: a bullet list of major topics (e.g., one for each kind of user, or each major piece of system functionality) each with some number of subtopics.--\u003e\n\n\u003c!-- Here is a user requirements sample from [Crookshanks](https://learning-oreilly-com.ezproxy.library.wisc.edu/library/view/practical-software-development/9781484206201/9781484206218_Ch02.xhtml):--\u003e\n\n| ID              | Description                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |\n| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| [SRS-001](#117) | When user visits the homepage of the application, the frontend software SHALL display a homepage which is substantially similar to the figma wireframe of the homepage                                                                                                                                                                                                                                                                                                                                             |\n| [SRS-002](#118) | When user visits the homepage of the application, the frontend software SHALL present the user with a series of options, represented as buttons with text contained Login and Register                                                                                                                                                                                                                                                                                                                             |\n| [SRS-003](#119) | When the User clicks \"Sign up\" or \"Register\" the software shall go to the User Sign up Page or the Register Page.                                                                                                                                                                                                                                                                                                                                                                                                  |\n| [SRS-004](#120) | When the user arrives at \"Register\" page there must be 3 text box inputs one for username, one for email and one for password. There also must be a button that shall get the user to the \"Sign up\" Page.                                                                                                                                                                                                                                                                                                          |\n| [SRS-005](#121) | When the user arrives at \"Login\" page there must be 2 text box inputs one for email and one for password. There also must be a button that shall get the user to the \"Sign up\" Page and there must also be a \"Submit\" button.                                                                                                                                                                                                                                                                                      |\n| [SRS-006](#122) | If user clicks the \"Submit\" button on the \"Sign Up\" Page there shall appear a green confirmation message.                                                                                                                                                                                                                                                                                                                                                                                                           |\n| [SRS-007](#123) | If the user clicks the submit button on the Sign in page then the page shall correctly authenticate and go to the Games page.                                                                                                                                                                                                                                                                                                                                                                                      |\n| [SRS-008](#124) | The Games page must have The text \"Welcome, [user]\" as well as the cards that have their own respective buttons that the user can choose between which game they would like to play.                                                                                                                                                                                                                                                                                                                               |\n| [SRS-009](#125) | When the User has chosen a game, by clicking on the respective button. Both games Killer Sudoku and Normal Sudoku. The software shall take the user to Game Mode Selection Page where there are two buttons: New Game and Load Saved Game                                                                                                                                                                                                                                                                          |\n| [SRS-010](#126) | If the user choose Load game the Software Shall go to the list of Saved Games.                                                                                                                                                                                                                                                                                                                                                                                                                                     |\n| [SRS-011](#127) | If the User choose Create new Game, the software shall go to another page and ask if the game difficulty that they want is easy medium or hard in the form of buttons.                                                                                                                                                                                                                                                                                                                                             |\n| [SRS-012](#128) | In both cases where the user clicked on a button, that generated a board. One case for if they chose difficult on a new board or if they chose a saved game. The software must show a 9x9 grid where the user can input numbers by clicking on a cell and then must be able to click on a number pop up in order to replace or put the number on the cell. The Board must be generated as a Sudoku board where all the Blue numbers are un editable and all the numbers that are inputted thereafter are editable. |\n| [SRS-013](#129) | On the Sudoku board page there should be a submit button in relation to when all the numbers of the board are submitted.                                                                                                                                                                                                                                                                                                                                   |\n| [SRS-014](#130) | On every page frontend page minus the home page. There must exist a Banner at the top that leads back to your logged in page.                                                                                                                                                                                                                                                                                                                                                                                      |\n\n\u003c!--\u003cdiv align=\"center\"\u003e\u003csmall\u003e\u003ci\u003eExcerpt from Crookshanks Table 2-2 showing example user requirements for a timekeeping system\u003c/i\u003e\u003c/small\u003e\u003c/div\u003e--\u003e\n\n\u003c!-- this is example that is being commented out\n- You\n  - Can\n    - Use\n- Bullet\n  - Points\n    - In\n    - Markdown\n--\u003e\n\n### Use Cases \u0026 User Stories\n\n\u003c!--Use cases and user stories that support the user requirements in the previous section. The use cases should be based off user stories. Every major scenario should be represented by a use case, and every use case should say something not already illustrated by the other use cases. Diagrams (such as sequence charts) are encouraged. Ask the customer what are the most important use cases to implement by the deadline. You can have a total ordering, or mark use cases with “must have,” “useful,” or “optional.” For each use case you may list one or more concrete acceptance tests (concrete scenarios that the customer will try to see if the use case is implemented).--\u003e\n\n\u003c!-- Here is a sample user story from [Clean Agile](https://learning-oreilly-com.ezproxy.library.wisc.edu/library/view/clean-agile-back/9780135782002/ch03.xhtml#ch03lev1sec1) using a markdown block quote:\n\n\u003e As the driver of a car, in order to increase my velocity, I will press my foot harder on the accelerator pedal. --\u003e\n\n\u003c!--\n1. You\n   1. Can\n      1. Also\n2. Use\n   1. Numbered\n      1. Lists\n--\u003e\n\nSee ![Requirements.md](documentation/Requirements.md) for User Stories list.\n\n- Issues 1-18 Setting up communitcation, choosing roles, choosing stack, setting up gitlab to our liking\n- Issues 19-21 Installing software and getting set up with React, MySQL, and Django\n- Issues 22-53 Defining backend models, frontend interface, integrating the two\n- Issues 54-60 Making adjustments to previous definitions after completing walking skeleton, implementing styling\n- Issues 61-69 Adding integrated functionality to walking skeleton, coverage testing for generation algorithm\n- Issues 70-72 Completing frontend/backend/database data transfer, expanding coverage testing, adding win screen\n- Issues 73-84 Adding continous deployment, static analysis, screens, improving algo, and saving initial state\n- Issues 85-97 Handling blue/black, rework UI, fix, show progress, and handle duplicate emails\n- Issues 98-107 Implement and add killer Sudoku variant, killer tests, 100% coverage, sphinx docs\n- Issues 108-134 Refactor, update views, add badges, more coments, adding final diagrams and research\n\n#### Main Epics\n\n| ID     | Description                                                                                | Priority | Status   |\n| ------ | ------------------------------------------------------------------------------------------ | -------- | -------- |\n| EPIC#1 | Generate, Backend, 9x9 grid of puzzle and solution                                         | High     | Complete |\n| EPIC#2 | Provide, Backend, variaing levels of difficulty                                            | High     | Complete |\n| EPIC#3 | Store the values, Data Wrangler, of the the puzzle grid and solution in the MySQL Database | High     | Complete |\n| EPIC#4 | Create an Interface, front end, where a user can solve the puzzle                          | Med      | Complete |\n| EPIC#5 | (Stretch Goals) Support multiple variants of Sudoku, such as killer, etc.                  | Low      | Open     |\n| EPIC#6 | (Stretch goal) Include tools for solving, such as pencil marking, coloring, and hinting.   | Low      | Open     |\n\n### User Interface Requirements\n\n\u003c!--Describes any customer user interface requirements including graphical user interface requirements as well as data exchange format requirements. This also should include necessary reporting and other forms of human readable input and output. This should focus on how the feature or product and user interact to create the desired workflow. Describing your intended interface as “easy” or “intuitive” will get you nowhere unless it is accompanied by details.--\u003e\n\nLink to Figma prototype board: [Prototype](https://www.figma.com/file/sHQWq1l1Ohp6OeOpo6M7Uj/Sudoku-Prototype?type=design\u0026node-id=0%3A1\u0026mode=design\u0026t=vHhiSbuQ8qf681xa-1)\n\nIntentionally designed with accessibility and simplicity in mind (contrasting colors that are colorblind friendly, large and easy to read typeface). Lots of sudoku apps on the web are needlessly complicated, ours will not be. This site is a simple place to solve boards, no more, no less, and the design should reflect that.\n\n\u003c!--NOTE: Please include illustrations or screenshots of what your user interface would look like -- even if they’re rough -- and interleave it with your description.--\u003e\n\n\u003c!-- Images can be included with `![alt_text](image_path)` --\u003e\n\n### Security Requirements\n\n\u003c!--Discuss what security requirements are necessary and why. Are there privacy or confidentiality issues? Is your system vulnerable to denial-of-service attacks?--\u003e\nAs of now there is an issue where games pages are accessible to non-users, however they cannot load or save boards without an account to post to the database. So, those pages that are accessible are ultimately useless without logging in anyways.\n\n### System Requirements, Installation, and Usage\n\n\u003c!--List here all of the external entities, other than users, on which your system will depend. For example, if your system inter-operates with sendmail, or if you will depend on Apache for the web server, or if you must target both Unix and Windows, list those requirements here. List also memory requirements, performance/speed requirements, data capacity requirements, if applicable.--\u003e\n\nYou need at least 4 GB of RAM, a 64-bit kernel with CPU support for virtualization, and a Docker Desktop installed. Then run these commands:\n\n``` sh\nssh -L localhost:8000:localhost:8000 -L localhost:3000:localhost:3000 \u003cusername\u003e@cs506-team-10.cs.wisc.edu\ncd /nobackup/\ndocker login registry.doit.wisc.edu -u \u003cGAT\u003e -p \u003cGAT\u003e\ngit config --global credential.helper store\ngit clone https://\u003cGAT\u003e@git.doit.wisc.edu/cdis/cs/courses/cs506/sp2024/team/mondaywednesdaylecture/T_10/logicluminaries.git\ncd logicluminaries/\ndocker compose -p sudoku up\n```\n\n### Specification\n\n\u003c!--A detailed specification of the system. UML, or other diagrams, such as finite automata, or other appropriate specification formalisms, are encouraged over natural language.--\u003e\n\n\u003c!--Include sections, for example, illustrating the database architecture (with, for example, an ERD).--\u003e\n\n\u003c!--Included below are some sample diagrams, including some example tech stack diagrams.--\u003e\n\n#### Technology Stack\n\nThe following is the tech stack for our Sudoku project\n\n```mermaid\nflowchart RL\nsubgraph Front End\n    A(JavaScript: React)\nend\n\nsubgraph Back End\n    B(Python: Django with \\nDjango Rest Framework)\nend\n\nsubgraph Database\n    C[(MySQL)]\nend\n\nsubgraph Testing\n    D(Unit Testing: Django's built-in test framework)\n    E(Integration Testing: Django REST Framework's testing tools)\nend\n\nsubgraph CI_CD\n    F(GitLab CI)\nend\n\nA \u003c--\u003e|\"REST API\"| B\nB \u003c--\u003e|Django ORM| C\nB --\u003e|Testing| D\nB --\u003e|Testing| E\nB --\u003e F\n```\n\n#### Database\n\n---\n\n## ERD for SudokuDB\n\n![ERD image](./documentation/images/Sudoku%20DB%20Schema_updated.png)\n\n#### Class Diagram\n\n```mermaid\n---\ntitle: Class Diagram for Sudoku Program\n---\nclassDiagram\n    class Sudoku {\n        - List[List[int]] board\n        - String difficulty\n        + Sudoku(String difficulty)\n        + float sudoku_status()\n        + bool solve_sudoku()\n        + void _generate_sudoku()\n    }\n    class KillerSudoku {\n        - Dictionary cages\n        + KillerSudoku(String difficulty)\n        + bool is_cage_valid(int cage_id)\n        + void _generate_sudoku()\n    }\n    Sudoku \u003c|-- KillerSudoku\n\n```\n\n#### Flowchart\n\n```mermaid\n---\ntitle: Sudoku Game Operation Flowchart\n---\ngraph TD;\n    Start([Start]) --\u003e Select_Difficulty[/Select Difficulty/];\n    Select_Difficulty --\u003e Generate_Board[Generate Sudoku Board];\n    Generate_Board --\u003e Play_Game[Play Game];\n    Play_Game --\u003e Validate_Board{Validate Board};\n    Validate_Board --\u003e|Valid| Process_Valid_Board[Process Valid Board];\n    Validate_Board --\u003e|Invalid| Error_Message[/Error Message/];\n    Process_Valid_Board --\u003e Check_Completion[Check Completion];\n    Check_Completion --\u003e|Complete| Game_Won[Game Won];\n    Check_Completion --\u003e|Incomplete| Play_Game;\n    Game_Won --\u003e Display_Congratulations[/Display Congratulations/];\n    Display_Congratulations --\u003e End([End]);\n    Error_Message --\u003e End;\n```\n\n#### Behavior\n\n```mermaid\n---\ntitle: Sudoku Board State Diagram\n---\nstateDiagram\n    [*] --\u003e Idle\n    Idle --\u003e Playing : Start Game\n    Playing --\u003e Check : Place Number\n    Check --\u003e Playing : No Conflict\n    Check --\u003e Error : Number Conflict\n    Error --\u003e Playing : Correct Error\n    Playing --\u003e Won : Complete Board\n    Won --\u003e [*]\n```\n\n#### Sequence Diagram\n\n```mermaid\nsequenceDiagram\n\nparticipant ReactFrontend as React Frontend\nparticipant DjangoBackend as Django Backend\nparticipant MySQL as MySQL Database\n\nReactFrontend -\u003e\u003e DjangoBackend: HTTP Request (e.g., GET /api/new_board?difficulty=easy)\nactivate DjangoBackend\n\nDjangoBackend -\u003e\u003e MySQL: Query (e.g., Generate New Board)\nactivate MySQL\n\nMySQL --\u003e\u003e DjangoBackend: Board Data\ndeactivate MySQL\n\nDjangoBackend --\u003e\u003e ReactFrontend: JSON Response (Board)\ndeactivate DjangoBackend\n\nReactFrontend -\u003e\u003e DjangoBackend: HTTP Request (e.g., POST /api/save_board)\nactivate DjangoBackend\n\nDjangoBackend -\u003e\u003e MySQL: Update Board State\nactivate MySQL\n\nMySQL --\u003e\u003e DjangoBackend: Save Confirmation\ndeactivate MySQL\n\nDjangoBackend --\u003e\u003e ReactFrontend: JSON Response (Save Status)\ndeactivate DjangoBackend\n\n```\n\n### Standards \u0026 Conventions\n\nSee CodingStandardsDocument for a list of our design paradigms.\n\n\u003c!--Here you can document your coding standards and conventions. This includes decisions about naming, style guides, etc.--\u003e\n\n## Scrum Masters and Product Owners:\n\n| Sprints | PO    | SM     |\n| ------- | ----- | ------ |\n| 0       | Grace | Carlos |\n| 1       | Grace | Carlos |\n| 2       | Isaac | Nima   |\n| 3       | Bella | Claire |\n\n## Roles:\n\n| Roles                          | Major Role | Minor Role |\n| ------------------------------ | ---------- | ---------- |\n| Backend Engineer               | Claire     | Carlos     |\n| Frontend Engineer              | Bella      | Grace      |\n| Data Wrangler                  | Isaac      | Bella      |\n| Algorithm Engineer             | Nima       | Isaac      |\n| Integration Manager            | Grace      | Nima       |\n| QA Tester / Jack of All Trades | Carlos     | Claire     |\n\n- Every member should write code using test driven devolopment\n- Every member should write their own documentation in how to do stuff (so that another person can follow the instructions)\n\n\n## Project status\n\nHealthy and progressing towards completion.\n\n\u003c!--If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers.--\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fid-olson%2Ffull_stack_group_webapp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fid-olson%2Ffull_stack_group_webapp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fid-olson%2Ffull_stack_group_webapp/lists"}