DEV Community

jConn4177
jConn4177

Posted on

Building UltimateTracker - A Modern Web App for Tournament Management

In the world of competitive gaming, organizing and tracking tournaments can be a formidable task. UltimateTracker is a web application built to streamline this process. This post explores the technical aspects of creating this app using a stack comprising ReactJS, Flask, Formik, PostgreSQL, and more.

Tech Stack Overview

  • Frontend: ReactJS, React-Dom, React-Bootstrap, Formik
  • Backend: Flask, Flask-Restful, SQLAlchemy, Flask-JWT-Extended, Flask-Bcrypt
  • Database: PostgreSQL
  • State Management: React-Redux, @reduxjs/toolkit
  • Others: Python-dotenv, Marshmallow, Datetime, Flask-Cors

Backend: Flask with SQLAlchemy and Flask-Restful

The backend of UltimateTracker is built with Flask, offering a lightweight and efficient server. SQLAlchemy, an ORM (Object-Relational Mapping) tool, is used for database interactions. Flask-Restful simplifies the creation of REST APIs.

Database Models

We defined several models, such as User, Tournament, and Match, using SQLAlchemy. These models handle data related to users, tournaments, and matches respectively.

class Tournament(db.Model, SerializerMixin):
    __tablename__ = 'tournaments'
    # ... fields ...
    serialize_rules = ('-matches', '-registrations')
Enter fullscreen mode Exit fullscreen mode

API Endpoints

Flask-Restful resources were created for handling different entities like users and tournaments. These resources are then added to routes in routes.py.

api.add_resource(TournamentResource, '/tournaments/<int:id>')
Enter fullscreen mode Exit fullscreen mode

Frontend: ReactJS with Formik and React-Bootstrap

ReactJS, known for its component-based architecture, is used for the frontend. Formik assists in form handling, while React-Bootstrap offers styled React components.

Routing with React-Router-Dom

React-Router-Dom handles navigation within the app. The RouterProvider from React-Router-Dom is used to define routes in App.jsx.

const router = createBrowserRouter([
    {
        path: "/",
        element: <Home />,
        // ... other routes ...
    }
]);
Enter fullscreen mode Exit fullscreen mode

State Management with React-Redux and @reduxjs/toolkit

React-Redux, along with @reduxjs/toolkit, is used for global state management. This setup efficiently manages states like user authentication and tournament data.

Handling Forms with Formik

Formik is instrumental in managing form states and validations. For instance, the creation of new tournaments is managed using Formik in CreateNewTournament.jsx.

<Formik initialValues={{ /* initial values */ }} onSubmit={handleSubmit}>
    {/* Form content */}
</Formik>
Enter fullscreen mode Exit fullscreen mode

Challenges and Solutions

Challenge: Complex State Management

Managing the state of various components and API calls was complex. React-Redux, along with @reduxjs/toolkit, provided a streamlined way to handle this.

Challenge: Form Validation and Handling

Formik was instrumental in simplifying form handling and validation, especially in cases like tournament creation and user registration.

Conclusion

Building UltimateTracker was a comprehensive exercise in full-stack development. Utilizing a blend of technologies like ReactJS, Flask, and Redux, along with supportive libraries and tools, allowed us to create a robust and user-friendly app for tournament management.

Stay tuned for further updates and expansions to UltimateTracker as I continue to enhance its features and capabilities!


For more information, insights, or to contribute to the project, feel free to reach out or visit our GitHub repository. Your feedback and contributions are always welcome!

https://github.com/jConn4177/UltimateTrackerV2

Top comments (0)