Skip to content

JohnPetros/alienator

Repository files navigation

Alienator πŸ‘½


πŸ–₯️ About the project

Alienator is a web game where the user should guess the character name of Alienator, the boss of the game.

The user should send their question to Alienator who answers whether the question is correct or not as well as tips at sometimes to help them. The user has up to 15 attempts to guess it correctly.

The goal of developing this project was learn the features of HTMX, an amazing web technology that gives you access to AJAX without JavaScript, as well as _hyperscript, an easy lib to execute JavaScript code directly in HTML (similiar to Tailwind but for JS 😜).

⏹️ Demonstration

Preview of the application

✨ Features

User

  • The game should be switch between 3 states: ready to start and running
  • The user should start the game by a button if the game is ready to start
  • The user should send a question to Alienator by a form if the game is running
  • The user should not stop the game if it is running, that means the game only ends after the user wins or loses
  • The user should start as many games as they want

Alienator

  • Alienator should think the name of a character as the game starts
  • Alienator should avoid giving simple yes or no answers
  • Alienator should answers user's question but he can never reveal the character he thought of
  • Alienator should give user some hints in some of his asnwers to help them to guess it correclty
  • Alienator should congratulate user if they manage to guess the character's name
  • Alienator should mock the user if the cannot guess the character's name
  • Alienator should say the name of the character as the game ends regardless whether the user won or lost
  • Alienator should not answers not friendly family questions
  • The Alienator's cat should inform the user how many attempts are left (this number should be updated with each question)
  • The "wisdom" of Alienator shoud come from an AI

Game state

  • The left attempts and The history of the user and Alienator "chat" should be saved while the game is running
  • The history should empty and the attempts should reset to 15 if the game is ready to start

Layout

  • The layout and the game behavior should adapt to the user device regardless of its size

βš™οΈ Architecture

πŸ› οΈ Technologies and tools

  • HTMX to make requests to the server directly on the HTML

  • Hyperscript to make some components interactive

  • Python Flask to build the server

  • Gemini Ai to serve as the "wisdom" of Alienator

  • Tailwind to style the app

  • Flowbite UI to build static accessible ui components with tailwind

For more details about the project's dependencies like specific versions of each dependency, see package.json and requirements.txt


πŸš€ How to run the application?

In the hardest way πŸ˜”

πŸ”§ Prerequisites

Before download the project you will need install some tools:

  • [pip] to install python packages
  • npm, yarn or pnpm (I'll use pnpm) to install node packages

Besides that, it is good to have some tool to write the code like VSCode

Also it is pivotal setting the environment variables on the .env file before running the application. See the .env.example file to know which variables should be set

πŸ“Ÿ Running the aplication

# Clone this repo
$ git clone https://github.com/JohnPetros/alienator.git .

# Install the python dependencies
$ pip install -r requirements.txt

# Install the node dependencies
$ pnpm install

# Run the application on a development environment
$ pnpm dev

Probably the aplication will be running on http://localhost:5000


In the (Docker) easiest way πŸ˜„

πŸ“Ÿ Running the aplication

πŸ”§ Prerequisites

# Run
$ docker compose up --build

Probably the aplication will be running on http://localhost:5000

🚚 Deploy

This application's deploy was made using Rende plataform, which means you can use the running application accessing this link.


🀝 how to Contribute

# Fork this repo
$ git clone https://github.com/JohnPetros/alienator.git

# Create a nem branch for the new feature
$ git checkout -b new-feature

# Commit your changes:
$ git commit -m 'feat: <New Feature>'

# Push your branch:
$ git push origin new-feature

You must replace new-feature with the name the feature you are adding

You can also open a new issue about some problem, question or sugestion for the project. I will be happy to help as well as improve this application


πŸ“ Licence

This application is under MIT Licence. See the licence file to get more details about it.


Made with πŸ’œ by John Petros πŸ‘‹πŸ»