Chessbutbetter is a website where you can play chess against a friend locally or against an AI. I worked on it for my A-Level Computer Science Project alongside a 350 page document and received 69/70 marks.
View Demo
Table of Contents
Instructions on setting up the project
- Create a new heroku project
- Install and setup the MySQL and PostgreSQL extensions on heroku
- Clone the repo
- Post the code to the heroku project either through Github or the HerokuCLI
Distributed under the MIT License. See LICENSE.md
for more information.
- http://www.learningaboutelectronics.com/Articles/How-to-specify-the-Python-runtime-version-in-heroku.php
- https://auth0.com/blog/sqlalchemy-orm-tutorial-for-python-developers/
- https://chessboardjs.com/index.html
- https://devcenter.heroku.com/articles/free-dyno-hours
- https://devcenter.heroku.com/articles/procfile
- https://devcenter.heroku.com/articles/python-runtimes
- https://devcenter.heroku.com/articles/sqlite3
- https://docs.gunicorn.org/en/stable/run.html
- https://docs.python.org/3/library/profile.html
- https://docs.python.org/3/library/sqlite3.html
- https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning#:~:text=Alpha%E2%80%93beta%20pruning%20is%20a,%2C%20Go%2C%20etc.).
- https://en.wikipedia.org/wiki/Git
- https://en.wikipedia.org/wiki/Shannon_number#:~:text=This%20includes%20some%20illegal%20positions,positions%20following%20captures%20and%20promotions.&text=After%20each%20player%20has%20moved,that%20could%20have%20been%20played.
- https://errorsfixing.com/sqlite3-operationalerror-no-such-table-on-heroku/
- https://flask-login.readthedocs.io/en/latest/
- https://flask-login.readthedocs.io/en/latest/
- https://flask-session.readthedocs.io/en/latest/
- https://flask-socketio.readthedocs.io/en/latest/
- https://flask.palletsprojects.com/en/2.0.x/api/#sessions
- https://flask.palletsprojects.com/en/2.0.x/tutorial/
- https://fonts.google.com/
- https://getbootstrap.com/docs/5.0/
- https://gist.github.com/PolBaladas/07bfcdefb5c1c57cdeb5
- https://github.com/CoreyMSchafer/code_snippets/blob/master/Python/Flask_Blog/07-User-Account-Profile-Pic/flaskblog/templates/layout.html
- eventlet/eventlet#702
- https://github.com/hack4impact/flask-base/blob/159d963bcfa5d3060ed0a3923295545c48dc4f55/requirements.txt#L26
- miguelgrinberg/Flask-SocketIO#194
- miguelgrinberg/Flask-SocketIO#702
- https://github.com/sintezcs/flask-threads
- https://jinja.palletsprojects.com/en/3.0.x/intro/
- https://medium.com/@gil.palikaras/build-a-chat-web-app-with-mern-stack-and-socket-io-8f33d151c62c
- https://medium.com/@rohanjdev/how-to-use-socket-io-with-flask-heroku-af9909e2e9a4
- https://medium.com/@tiff.sage/client-side-session-vs-server-side-session-d506f5408e8c#:~:text=Server%2Dside%20sessions%20allow%20for,to%20the%20same%20web%20server.&text=Client%2Dside%20sessions%20stores%20all,is%20stored%20in%20a%20cookie.
- https://medium.com/analytics-vidhya/how-to-use-flask-login-with-sqlite3-9891b3248324
- https://medium.com/swlh/implement-a-websocket-using-flask-and-socket-io-python-76afa5bbeae1
- https://pynative.com/python-mysql-select-query-to-fetch-data/
- https://socket.io/
- https://socket.io/docs/v4/
- https://stackabuse.com/using-sqlalchemy-with-flask-and-postgresql/
- https://stackoverflow.com/questions/62811289/gunicorn-worker-timeout-in-django-request-hosted-on-cloud-foundry
- https://stackoverflow.com/questions/6463035/wtforms-getting-the-errors
- https://stackoverflow.com/questions/6918493/in-python-why-use-logging-instead-of-print
- https://stackoverflow.com/questions/7023052/configure-flask-dev-server-to-be-visible-across-the-network
- https://stackoverflow.com/questions/7478366/create-dynamic-urls-in-flask-with-url-for
- https://stackoverflow.com/questions/8081455/socket-io-on-heroku-client-side-code
- https://stackoverflow.com/questions/9822313/remote-connect-to-cleardb-heroku-database
- https://stackoverflow.com/questions/11774265/how-do-you-access-the-query-string-in-flask-routes
- https://stackoverflow.com/questions/30842031/attributeerror-mysqlcursor-object-has-no-attribute-commit/30842174
- https://stackoverflow.com/questions/31395856/django-deploying-an-application-on-heroku-with-sqlite3-as-the-database
- https://stackoverflow.com/questions/32372353/how-to-create-a-db-file-in-sqlite3-using-a-schema-file-from-within-python
- https://stackoverflow.com/questions/34498819/socket-io-works-with-localhost-but-not-on-heroku-server
- https://stackoverflow.com/questions/34671217/in-flask-what-is-request-args-and-how-is-it-used
- https://stackoverflow.com/questions/36543145/how-can-i-test-if-gunicorn-is-working-and-communicating-with-nginx
- https://stackoverflow.com/questions/37942703/heroku-socket-io-client-always-connects-to-localhost
- https://stackoverflow.com/questions/40216311/reading-in-environment-variables-from-an-environment-file
- https://stackoverflow.com/questions/42210816/socket-io-and-node-js-not-working-on-heroku
- https://stackoverflow.com/questions/51049744/deploying-python-socket-io-app-using-flask-on-heroku-without-frontend
- https://stackoverflow.com/questions/56039541/how-to-save-sessions-in-a-postgres-database
- https://stackoverflow.com/questions/57849784/problem-with-unable-to-preventdefault-due-to-target-being-treated-as-pass
- https://stackoverflow.com/questions/58589138/error-class-uri-eventlet-invalid-or-not-found
- https://stackoverflow.com/questions/60991897/websocket-transport-not-available-install-eventlet-or-gevent-and-gevent-websock
- https://stackoverflow.com/questions/61175274/chessboard-js-board-image-is-not-showing-up-in-browser
- https://stackoverflow.com/questions/61625290/flask-make-a-button-direct-to-another-page
- https://stackoverflow.com/questions/62688256/sqlalchemy-exc-nosuchmoduleerror-cant-load-plugin-sqlalchemy-dialectspostgre
- https://stackoverflow.com/questions/62796071/bootstrap-footer-doesnt-stick-to-the-bottom-of-the-page
- https://stackoverflow.com/questions/63948287/bootstrap-5-navbar-align-items-right
- https://stackoverflow.com/questions/65220083/relation-does-not-exist-in-flask-sqlalchemy-although-create-function-called
- https://stackoverflow.com/questions/67409452/gunicorn-importerror-cannot-import-name-already-handled-from-eventlet-wsgi
- https://testdriven.io/blog/flask-sessions/
- https://testdriven.io/blog/flask-sessions/#sessions
- https://towardsdatascience.com/deploy-a-flask-app-on-heroku-and-connect-it-to-a-jawsdb-mysql-database-10e762bc9160
- https://towardsdatascience.com/switch-case-statements-are-coming-to-python-d0caf7b2bfd3
- https://towardsdatascience.com/virtual-environments-104c62d48c54
- https://usefulangle.com/post/278/html-disable-pull-to-refresh-with-css
- https://wtforms.readthedocs.io/en/stable/validators/
- https://www.365chess.com/
- https://www.chessprogramming.org/Minimax
- https://www.cleardb.com/blog/entry%3Fid%3Dcommon-problems-2
- https://www.codementor.io/@adityamalviya/python-flask-mysql-connection-rxblpje73
- https://www.freecodecamp.org/news/use-svg-images-in-css-html/
- https://www.geeksforgeeks.org/
- https://www.geeksforgeeks.org/minimax-algorithm-in-game-theory-set-1-introduction/
- https://www.geeksforgeeks.org/minimax-algorithm-in-game-theory-set-4-alpha-beta-pruning/
- https://www.heroku.com/
- https://www.postgresqltutorial.com/postgresql-python/
- https://www.pythonpool.com/match-case-python/
- https://www.shanelynn.ie/asynchronous-updates-to-a-webpage-with-flask-and-socket-io/
- https://www.skillset.com/questions/sql-injection-can-be-tested-with-apostrophe#:~:text=The%20apostrophe%20or%20single%20quote,be%20interpreted%20by%20the%20server
- https://www.w3schools.com/howto/howto_css_center-vertical.asp
- https://www.w3schools.com/sql/sql_datatypes.asp
- https://www.w3schools.com/sql/sql_unique.asp
- https://www.youtube.com/watch?v=803Ei2Sq-Zs&list=PL-osiE80TeTs4UjLw5MM6OjgkjFeUxCYH&index=9
- https://www.youtube.com/watch?v=UIJKdCIEXUQ&list=PL-osiE80TeTs4UjLw5MM6OjgkjFeUxCYH&index=3