Inspiration

Long ago, Sudoku was my only escape from the hell known as high school. While in school, I would lose myself in these puzzles for hours trying to figure them out while simultaneously fighting boredom in class. Lately, I've been meaning to make a multiplayer Sudoku app to share with my friends since there didn't seem to be a lot of them on the Internet, and I wanted to improve upon the ones that were there. I made it into a web app because I wanted the Sudoku app to be cross platform so it could be more widely accessible.

It is called Friendoku because "Sudoku with Friends" and "Multiplayer Co-op Sudoku" are too long and generic.

What it does

It lets you collaborate on a Sudoku puzzle in real time with other people. Lobbies are created by hosts who have the ability to reset the grid and change the puzzle. People can join these lobbies if they have the link to them. Currently there is no limit as to how many people can be in a lobby.

Each lobby has the standard Sudoku grid and entry/validation mechanisms.

How we built it

I built it with NodeJS, Socker.io, and Express in addition to a lot of sleep deprivation. I started on the front-end first and based my back end off of what my front end needed.

Challenges we ran into

I wasn't sure how best to implement the backend. I tried frameworks like Appwrite and Firebase but gave up on them because they seemed too complex for my purposes. The front end was also a pain in the butt to code, but it became easier over time as I wrote more functions to break the puzzle down into abstractions. In general, it was challenging to think about logistics regarding the security, efficiency, and functionality of the application. Plus, debugging took away a significant amount of my time.

Accomplishments that we're proud of

I built it in 3 days and it actually works, sort of. Probably one of the most impressive things I've made in my life, and I now get to play Sudoku with friends over the internet.

What we learned

I learned how to implement stuff like JWTs in my application to authenticate anonymous users, although it was rather simple and maybe a little redundant. I also learned to use EJS files to make dynamic HTML files and directories.

What's next for Friendoku

Mostly planning on implementing public lobbies next, but this is the full list of stuff I have planned: Client side:

  • [ ] display their selected blocks (lastSelected)
  • [ ] make the modals look a bit nicer

Stuff to store in the DB:

  • [ ] timestamp
  • [ ] difficulty of puzzle
  • [ ] public or not

Stuff to think about:

  • [ ] user limit
  • [ ] actually make public lobbies
  • [ ] passwords
  • [ ] client and server side checks/validations
  • [ ] maybe store notes
  • [ ] expiration date for lobbies
  • [ ] make public lobbies expire when host leaves for at least 5? minutes (tbd)

Built With

Share this project:

Updates