This noble project, first wrought by the esteemed craftsman JosΓ© Lopes (known throughout the realm as @MIBismuth), was christened in days of yore as "HS-WebApp" and didst flourish under his skilled hand (consult ye the ancient scrolls preserved in the legacy branch for proof of these bygone times).
Verily, this humble creation served as the cornerstone most foundational in the construction of the grand Hacker League project. Through great toil and scholarly pursuit, the project hath been most triumphantly transmuted from the primitive tongue of vanilla JavaScript unto the more refined and courtly language of React, thereby achieving superior maintainability and providing a most pleasant experience for all who venture forth to use it.
- HS-API - Flask REST API backend for managing HackerSchool members and projects
- Interactive Leaderboard with team and individual classifications
- Multiple Point Types: Total, PJ (Journey Points), and PCC (Community Contribution Points)
- Dynamic Controls: Inline dropdown menus for classification type and point filtering
- Medal System: π₯π₯π₯ποΈ for top 5 positions with position-specific colors
- Statistics Dashboard: Total participants, active teams, and total points
- Expandable History: Click rows to see recent activity with "See more" navigation
- Real-time Sorting: Sort by Total Points, PJ Points, or PCC Points
- Comprehensive Activity Log: View all point attributions across teams and individuals
- Advanced Filtering: Filter by entity type (Teams/Individuals), points type (PJ/PCC), and specific entities
- Chronological Sorting: Automatically sorted from most recent to oldest entries
- Pagination: Navigate through large datasets with 10 items per page
- Expandable Details: Click rows to see full activity descriptions
- Personal Profile Management: Edit user information, upload logos
- Logo Upload: Local file upload with Base64 storage and persistence
- Team Selection: Multi-team membership with checkbox interface
- Profile Data: Display member number, join date, IST ID, roles, and additional info
- Edit Mode: Toggle between view and edit modes with form validation
- Secure Login/Logout: Cookie and local storage support
- Mock User System: Available for development testing (admin, alexchen, mariasantos, davidkim)
- Session Management: Persistent login state
- Role Management: Admin and user roles with appropriate permissions
- Complete CRUD Operations: Create, edit, and delete users
- Team Assignment: Add users to multiple teams with coordinator role selection
- Create New Teams: Inline team creation when adding users
- Role Management: Assign and manage user roles (member, dev, rh, admin, sysadmin, etc.)
- Profile Management: Edit IST ID, name, email, and other user details
- Pagination: Navigate through user lists efficiently
- Form Validation: Complete validation with error handling
- Award Points: Create point entries for team members
- Multi-User Selection: Award points to multiple users at once
- Points Types: Support for PJ (Project), PCC (Community Contribution), and PS (Special) points
- Edit & Delete: Modify or remove existing point entries
- Chronological Sorting: View entries from most recent to oldest
- Team Integration: Automatic team member fetching for point attribution
- Pagination: Navigate through large point history datasets
- Frontend: React 18 with React Router v6
- Backend API: Flask REST API with SQLite database (HS-API)
- Local Backend: Node.js/Express server for admin operations
- State Management: React Context API with hooks
- Styling: CSS3 with responsive design and custom color scheme
- Authentication: Cookie-based session management with Fenix OAuth integration
- API Communication: Axios with CORS support
- File Handling: FileReader API for local image uploads
src/
βββ components/
β βββ Admin/
β β βββ AdminPanel.jsx
β β βββ UserManagement/
β β β βββ UserManagement.jsx
β β β βββ UserManagement.css
β β βββ PointsHistory/
β β β βββ PointsHistory.jsx
β β β βββ PointsHistory.css
β β βββ ContentManagement/
β β βββ HallOfFameAdmin.jsx
β β βββ SeasonAdmin.jsx
β β βββ HackNightAdmin.jsx
β βββ Auth/
β β βββ LoginForm.jsx
β β βββ Auth.css
β βββ History/
β β βββ History.jsx
β β βββ History.css
β βββ Layout/
β β βββ Navbar.jsx
β β βββ Navbar.css
β βββ Leaderboard/
β β βββ LeaderboardTable.jsx
β β βββ Leaderboard.css
β βββ Profile/
β β βββ UserProfile.jsx
β β βββ Profile.css
β βββ HallOfFame/
β β βββ HallOfFame.jsx
β β βββ HallOfFame.css
β βββ Modal/
β β βββ Modal.jsx
β β βββ Modal.css
β βββ Pagination/
β β βββ Pagination.jsx
β β βββ Pagination.css
β βββ PrivateRoute.jsx
βββ contexts/
β βββ AuthContext.jsx
βββ pages/
β βββ LeaderboardPage.jsx
β βββ HistoryPage.jsx
β βββ ProfilePage.jsx
β βββ HallOfFamePage.jsx
β βββ AdminPage.jsx
βββ services/
β βββ apiService.js
β βββ memberService.js
β βββ projectService.js
β βββ taskService.js
β βββ projectParticipationService.js
βββ App.jsx
βββ index.js
- Node.js (v14 or higher)
- npm or yarn
- Python 3.11+ (for HS-API)
- pip or uv (Python package manager)
-
Clone the repositories
# Clone the main web app git clone https://github.com/HackerSchool/Hacker-League.git cd Hacker-League/HS-WebApp # Clone the API (in a separate location) git clone https://github.com/HackerSchool/HS-API.git
-
Setup Backend API (HS-API)
cd HS-API # Install dependencies (using uv or pip) uv sync # or: pip install -r requirements.txt # Run database migrations flask db upgrade # Start the API server flask run --port 8080
-
Setup Local Backend Server
cd HS-WebApp/backend npm install npm start -
Setup Frontend
cd HS-WebApp npm install npm start -
Open your browser
- Frontend:
http://localhost:3000 - Flask API:
http://localhost:8080 - Local Backend: Port varies (check backend logs)
- Frontend:
The application uses Fenix OAuth for authentication. Users can log in using their IST TΓ©cnico credentials.
For development/testing purposes, the backend includes populated test data with various users and teams.
npm run build- Primary Dark:
#2b2a28(Dark gray) - Primary Green:
#6dba76(Green) - Primary Blue:
#156082(Blue) - Text: White for contrast
- Accent:
#90EE90(Light green for username)
# Run tests
npm test
# Run tests with coverage
npm test -- --coveragenpm run buildThe build folder contains static files that can be deployed to:
- Netlify
- Vercel
- GitHub Pages
- AWS S3
- Decider: GonΓ§alo Fecha
- Developers: AndrΓ© Caseiro, AndrΓ© Santos, Armando GonΓ§alves, GonΓ§alo Azevedo
- Technical Expert: JosΓ© Lopes, Filipe PiΓ§arra
- Game Design: JoΓ£o Rodrigues, Filipe Vaz
- Logo Design: Francisco GonΓ§alves
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Pls Pls Pls remember to update README and rest of documentation, if existing.
This project is licensed under the MIT License. Feel free to fork, modify, and share your improvements!
If you encounter any issues or have questions:
- Check the Issues page
- Create a new issue with detailed information
- Contact the development team
