Giter VIP home page Giter VIP logo

42-ft_transcendence's Introduction


42-ft_transcendence jremy's 42 ft_transcendence Score

๐Ÿ“ Welcome to the Web Devlopement !

โš™๏ธ Developed with the software and tools below:

GNU%20Bash HTML5 sharp Vite React Axios tsnode TypeScript Docker Markdown Express JSON

๐Ÿ“ Overview

This project is the final projet of 42 cursus common core.

The ft_transcendence project involved creating a website for online multiplayer Pong gameplay. We implemented real-time gaming features, secure user authentication using OAuth, and a chat system for player communication.


๐Ÿ’ซ Features

  • a chat interface
  • a matchmaking system
  • a friendship relation system
  • notifications alert
  • 2fa with google authenticator
  • spectate mode
  • login with 42 api

๐Ÿ“‚ Project Structure

repo
โ”œโ”€โ”€ Makefile
โ”œโ”€โ”€ README.md
โ”œโ”€โ”€ backend
โ”‚ย ย  โ”œโ”€โ”€ Dockerfile
โ”‚ย ย  โ”œโ”€โ”€ launch.sh
โ”‚ย ย  โ”œโ”€โ”€ launch_test.sh
โ”‚ย ย  โ”œโ”€โ”€ nest-cli.json
โ”‚ย ย  โ”œโ”€โ”€ package-lock.json
โ”‚ย ย  โ”œโ”€โ”€ package.json
โ”‚ย ย  โ”œโ”€โ”€ src
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ app.controller.spec.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ app.controller.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ app.middleware.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ app.module.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ app.service.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ chat
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ ChatRequest.http
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ chat.controller.spec.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ chat.controller.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ chat.module.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ chat.service.spec.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ chat.service.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ dto
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ change-channel.dto.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ create-channel.dto.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ join-channel.dto.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ modify-member.dto.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ mute.dto.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ new-message.dto.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ events
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ decorators
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ EventUser.decorator.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ dtos
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ game-create.dto.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ game-join.dto.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ player-input.dto.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ events.gateway.spec.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ events.gateway.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ events.module.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ guards
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ event.guard.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ interceptors
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ WebSocketUser.interceptor.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ friends
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ friends.controller.spec.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ friends.controller.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ friends.module.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ friends.service.spec.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ friends.service.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ game
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ game-cluster.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ game.controller.spec.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ game.controller.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ game.module.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ game.service.spec.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ game.service.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ game.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ interceptors
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ serialize.interceptor.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ main.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ model
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ channel.entity.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ friend-request.entity.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ member.entity.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ message.entity.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ notification.entity.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ refresh-token.entity.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ saved-game.entity.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ saved-game.subscriber.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ user.entity.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ notification
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ notification-request.subscriber.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ notification.controller.spec.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ notification.controller.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ notification.module.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ notification.service.spec.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ notification.service.ts
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ notification.subscriber.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ pipe
โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ validateID.pipe.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ type.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ typeorm.filter.ts
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ unauthorizedException.filter.ts
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ users
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ auth
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ auth.controller.spec.ts
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ auth.controller.ts
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ auth.module.ts
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ auth.service.spec.ts
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ auth.service.ts
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ authenticated.guard.ts
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ hashPassword.ts
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ decorators
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ current-user.decorator.ts
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ dtos
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ create-user.dto.ts
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ dfa-code.dto.ts
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ login-user.dto.ts
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ request.http
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ user-restricted.dto.ts
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ user.dto.ts
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ username.dto.ts
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ guard
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ 2fa-token.guard.ts
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ File-size.guard.ts
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ”œโ”€โ”€ access-token.guard.ts
โ”‚ย ย  โ”‚ย ย      โ”‚ย ย  โ””โ”€โ”€ refresh-token.guard.ts
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ users.controller.spec.ts
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ users.controller.ts
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ users.module.ts
โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ users.service.spec.ts
โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ users.service.ts
โ”‚ย ย  โ”œโ”€โ”€ test
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ app.e2e-spec.ts
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ jest-e2e.json
โ”‚ย ย  โ”œโ”€โ”€ tsconfig.build.json
โ”‚ย ย  โ””โ”€โ”€ tsconfig.json
โ”œโ”€โ”€ docker-compose.yml
โ”œโ”€โ”€ envmaker.sh
โ”œโ”€โ”€ info
โ”‚ย ย  โ”œโ”€โ”€ Diagramme sans nom.drawio
โ”‚ย ย  โ”œโ”€โ”€ GameArchitecture.drawio
โ”‚ย ย  โ”œโ”€โ”€ chat.drawio
โ”‚ย ย  โ”œโ”€โ”€ db_model.png
โ”‚ย ย  โ”œโ”€โ”€ stack_docker.drawio
โ”‚ย ย  โ””โ”€โ”€ stack_docker.jpg
โ”œโ”€โ”€ jremy.conf
โ”œโ”€โ”€ nginx
โ”‚ย ย  โ”œโ”€โ”€ Dockerfile
โ”‚ย ย  โ”œโ”€โ”€ avatars
โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ 1.png
โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ default.png
โ”‚ย ย  โ””โ”€โ”€ nginx.conf
โ”œโ”€โ”€ package-lock.json
โ”œโ”€โ”€ package.json
โ””โ”€โ”€ vite
    โ”œโ”€โ”€ Dockerfile
    โ”œโ”€โ”€ index.html
    โ”œโ”€โ”€ launch.sh
    โ”œโ”€โ”€ package-lock.json
    โ”œโ”€โ”€ package.json
    โ”œโ”€โ”€ public
    โ”‚ย ย  โ””โ”€โ”€ pong.svg
    โ”œโ”€โ”€ src
    โ”‚ย ย  โ”œโ”€โ”€ App.tsx
    โ”‚ย ย  โ”œโ”€โ”€ ErrorProvider
    โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ ErrorProvider.tsx
    โ”‚ย ย  โ”œโ”€โ”€ assets
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ private.png
    โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ public.png
    โ”‚ย ย  โ”œโ”€โ”€ auth
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ AuthService.tsx
    โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ interceptor.axios.tsx
    โ”‚ย ย  โ”œโ”€โ”€ component
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ 404.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ Debounced.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ DfaForm.css
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ DfaForm.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ Error.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ Footer.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ FriendList.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ InvitedFriends.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ Leaderboard.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ LoginForm.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ Menu.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ ProfilPlayer.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ RegisterForm.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ SearchBar.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ UpdateProfil.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ UserAchievment.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ UserInfoDisplay.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ UsernameDialog.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ chat
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ ChannelBrowse.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ ChannelMemberList.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ ChannelsList.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ ChatDirectMessageList.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ ChatFriendsBrowser.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ ChatMenu.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ ChatMessage.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ ChatPage.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ CreatChannelModal.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ MessageArea.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ ModifyChannelModal.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ MuteMemberModal.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ PasswordDialog.tsx
    โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ game
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ CreateGame.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ FakeGame.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ FinishGames.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ GameHistory.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ GamePage.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ GameScreen.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ”œโ”€โ”€ ListCurrentGames.tsx
    โ”‚ย ย  โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ ResultGame.tsx
    โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ notifications
    โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ notifcationsBar.tsx
    โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ notificationDirectMessage.tsx
    โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ notificationInvitation.tsx
    โ”‚ย ย  โ”‚ย ย      โ”œโ”€โ”€ notificationRequestFriend.tsx
    โ”‚ย ย  โ”‚ย ย      โ””โ”€โ”€ notificationsList.tsx
    โ”‚ย ย  โ”œโ”€โ”€ index.css
    โ”‚ย ย  โ”œโ”€โ”€ main.tsx
    โ”‚ย ย  โ”œโ”€โ”€ socket
    โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ SocketProvider.tsx
    โ”‚ย ย  โ”œโ”€โ”€ token
    โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ token.tsx
    โ”‚ย ย  โ”œโ”€โ”€ types.tsx
    โ”‚ย ย  โ”œโ”€โ”€ userDataProvider
    โ”‚ย ย  โ”‚ย ย  โ””โ”€โ”€ userDataProvider.tsx
    โ”‚ย ย  โ””โ”€โ”€ vite-env.d.ts
    โ”œโ”€โ”€ tsconfig.json
    โ”œโ”€โ”€ tsconfig.node.json
    โ””โ”€โ”€ vite.config.ts

38 directories, 177 files

๐Ÿš€ Getting Started

โœ… Prerequisites

Before you begin, ensure that you have the following prerequisites installed:

  • docker

๐Ÿ–ฅ Installation

  1. Clone the 42-ft_transcendence repository:
git clone https://github.com/jremy42/42-ft_transcendence
  1. Change to the project directory:
cd 42-ft_transcendence
  1. launch application:
make
  1. for normal usage : http://localhost:8080

๐Ÿš€ Deployment Instructions

To deploy the application on your own URL, please follow these steps:

  1. Set the URL in the PUBLIC_URL field to your desired URL in .env file.
  2. Make sure to provide the necessary environment variables for the application to function properly.

To integrate the application with the 42 API, please ensure you have the following environment variables properly configured:

API_CLIENT_ID=
API_CLIENT_SECRET=

Compliant for deployement in aws => you can try here

Compliant for deployement in private webserver => you can try here


๐Ÿค– Docker stack

Nginx :

  • ingress point listening on 443 with ssl
  • reverse proxy for nestjs backend api calls
  • static serve of avatars files (.png) and front-end app file (.js / .html / .css)

Vite :

  • Transpilation and minification from typescript to javascript
  • exits on success

Nest :

  • expose api routes for use in frontend
  • serves as an intermidary between client and postgre Database

PostgreSQL :

  • handle CRUD operations on website database

๐Ÿ—„๏ธ Data Architecture

๐Ÿ‘ Acquired knowledge

  • โœ… Web development: We gained experience in web development by creating a website .

  • โœ… Backend with NestJS: We learned to develop the backend of our website using NestJS, a powerful Node.js framework that helps with building scalable and efficient server-side applications.

  • โœ… Frontend with React and TypeScript: We utilized React, a popular JavaScript library for building user interfaces, and leveraged TypeScript, a statically-typed superset of JavaScript, to develop the frontend of our website. This allowed for component-based development, better UI management, and enhanced type safety.

  • โœ… Real-time multiplayer functionality: We implemented real-time multiplayer features, enabling users to play Pong with each other in real-time through our website, We used Socket.IO, a JavaScript library, to enable real-time communication and data exchange between the server and clients.

  • โœ… User authentication with OAuth and tokens: We implemented an authentication strategy using OAuth and utilized refresh and access tokens for secure user authentication and authorization. Also, We integrated the OAuth system from the 42 intranet, allowing users to log in securely using their 42 credentials.

  • โœ… Chat functionality: We created a chat feature where users can send direct messages to each other, enhancing the interactive experience of our website.

  • โœ… Docker: We utilized Docker to create a containerized environment for our application, allowing for easy setup and deployment across different systems.

  • โœ… PostgreSQL: We used PostgreSQL, an open-source relational database management system, to store and manage our application's data effectively.

  • โœ… Online deployment on a server: We deployed our website online on a server, making it accessible to users over the internet. This involved configuring the server, setting up the necessary dependencies, and deploying our application to ensure it is available for use.

๐Ÿ˜Ž Team :

42-ft_transcendence's People

Contributors

fleblay avatar imhoppy avatar jremy42 avatar

Watchers

 avatar

Forkers

fleblay imhoppy

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.