141 lines
3.5 KiB
Markdown
141 lines
3.5 KiB
Markdown
# Horoscope Web Application
|
|
|
|
## Project Overview
|
|
|
|
This project is a web application that provides daily, weekly, monthly, and yearly horoscopes for the 12 astrological signs. The horoscopes are generated using the Google Gemini API.
|
|
|
|
The application consists of a Python backend built with FastAPI and a React frontend built with Vite and Material UI.
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
horoscope/
|
|
├── backend/
|
|
│ ├── alembic/
|
|
│ ├── .venv/
|
|
│ ├── alembic.ini
|
|
│ ├── config.py
|
|
│ ├── create_admin.py
|
|
│ ├── database.py
|
|
│ ├── horoscope.py
|
|
│ ├── initial_data.py
|
|
│ ├── main.py
|
|
│ ├── models.py
|
|
│ ├── requirements.txt
|
|
│ └── schemas.py
|
|
├── frontend/
|
|
│ └── horoscope-app/
|
|
│ ├── public/
|
|
│ ├── src/
|
|
│ ├── index.html
|
|
│ ├── package.json
|
|
│ └── vite.config.ts
|
|
├── Objectives.md
|
|
└── README.md
|
|
```
|
|
|
|
## Getting Started
|
|
|
|
### Prerequisites
|
|
|
|
- Python 3.10 or higher
|
|
- Node.js and npm
|
|
|
|
### Backend Setup
|
|
|
|
1. Navigate to the `backend` directory:
|
|
```bash
|
|
cd backend
|
|
```
|
|
2. Create and activate a virtual environment:
|
|
```bash
|
|
python3 -m venv .venv
|
|
source .venv/bin/activate
|
|
```
|
|
3. Install the dependencies:
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
4. Run the database migrations:
|
|
```bash
|
|
alembic upgrade head
|
|
```
|
|
5. Create the initial data (signs and admin user):
|
|
```bash
|
|
python initial_data.py
|
|
python create_admin.py
|
|
```
|
|
6. Run the backend server:
|
|
```bash
|
|
uvicorn main:app --reload --host 0.0.0.0
|
|
```
|
|
The backend will be available at `http://localhost:8000`.
|
|
|
|
### Frontend Setup
|
|
|
|
1. Navigate to the `frontend/horoscope-app` directory:
|
|
```bash
|
|
cd frontend/horoscope-app
|
|
```
|
|
2. Install the dependencies:
|
|
```bash
|
|
npm install
|
|
```
|
|
3. Run the frontend server:
|
|
```bash
|
|
npm run dev
|
|
```
|
|
The frontend will be available at `http://localhost:5173`.
|
|
|
|
## Backend
|
|
|
|
### Technologies Used
|
|
|
|
- Python 3
|
|
- FastAPI
|
|
- SQLAlchemy with Alembic
|
|
- SQLite
|
|
- Google Gemini API
|
|
|
|
### API Endpoints
|
|
|
|
- `POST /token`: Login to get a JWT token.
|
|
- `GET /users/me`: Get the current user's information.
|
|
- `GET /signs`: Get a list of all astrological signs.
|
|
- `GET /horoscope/{sign}/{timeline}`: Get a horoscope for a specific sign and timeline.
|
|
- `POST /horoscope/{sign}/{timeline}`: Create a new horoscope for a specific sign and timeline (admin only).
|
|
|
|
### Database Schema
|
|
|
|
The database schema is defined in `backend/models.py` and consists of the following tables:
|
|
- `users`: Stores user information.
|
|
- `signs`: Stores the 12 astrological signs.
|
|
- `user_signs`: A many-to-many table that links users to their signs.
|
|
- `horoscopes`: Stores the generated horoscopes.
|
|
|
|
## Frontend
|
|
|
|
### Technologies Used
|
|
|
|
- React with Vite
|
|
- TypeScript
|
|
- Material UI
|
|
- Axios
|
|
|
|
### Component Structure
|
|
|
|
- `App.tsx`: The main component that sets up the routing.
|
|
- `components/AppBar.tsx`: The top application bar.
|
|
- `components/Login.tsx`: The login form.
|
|
- `components/Home.tsx`: The home page that displays the horoscopes.
|
|
- `services/api.ts`: The Axios instance for making API calls.
|
|
|
|
## Next Steps
|
|
|
|
- Implement the OIDC SSO with Keycloak.
|
|
- Allow users to create accounts and select their signs.
|
|
- Implement the export to PDF, HTML, and Word feature.
|
|
- Add the alchemical "mascot" bonus feature.
|
|
- Write more tests for the backend and frontend.
|
|
- Improve the UI/UX of the application.
|