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')
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>')
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 ...
}
]);
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>
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!
Top comments (0)