# bhavi0128/personality-classifier architecture

> Architecture diagram of the GitHub repository bhavi0128/personality-classifier, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/bhavi0128/personality-classifier
- Repository: https://github.com/bhavi0128/personality-classifier

## Overview

This is a Streamlit personality-insights app: users can describe themselves in text or answer a short quiz, then see a personality result and related visual insights and recommendations. Text classification is handled by a separate classifier that loads a trained model artifact; the training script builds and saves that artifact. The classifier also contains recommendation and feedback functionality. Source excerpts are partial, so the graph omits uncertain details of result rendering, quiz scoring, and feedback persistence wiring.

Main entry points: [`app.py`](https://github.com/bhavi0128/personality-classifier/blob/main/app.py) (Streamlit app), [`PersonalityClassifier.py`](https://github.com/bhavi0128/personality-classifier/blob/main/PersonalityClassifier.py) (Personality classifier), [`personality_model.pkl`](https://github.com/bhavi0128/personality-classifier/blob/main/personality_model.pkl) (Trained model), [`train_model.py`](https://github.com/bhavi0128/personality-classifier/blob/main/train_model.py) (Model trainer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_experience["User experience"]
  node_app["Streamlit app<br/>[app.py]"]
  node_text_input["Text analysis<br/>[app.py]"]
  node_quiz["Personality quiz<br/>[app.py]"]
  node_result_views["Results and charts<br/>[app.py]"]
end

subgraph group_classification["Classification"]
  node_classifier["Personality classifier"]
  node_text_cleaning["Text cleaning"]
  node_recommendations["Recommendations"]
  node_feedback["Feedback state"]
end

subgraph group_modeling["Model training and state"]
  node_trainer["Model trainer<br/>[train_model.py]"]
  node_model_artifact["Trained model"]
end

node_user(("User"))

node_user -->|"uses"| node_app
node_app -->|"collects text"| node_text_input
node_app -->|"presents quiz"| node_quiz
node_text_input -->|"requests prediction"| node_classifier
node_classifier -->|"cleans text"| node_text_cleaning
node_classifier -->|"loads model"| node_model_artifact
node_trainer -->|"saves model"| node_model_artifact
node_app -->|"renders results"| node_result_views
node_app -->|"requests recommendations"| node_recommendations
node_classifier -->|"provides items"| node_recommendations
node_classifier -->|"loads and saves"| node_feedback

click node_app "https://github.com/bhavi0128/personality-classifier/blob/main/app.py"
click node_text_input "https://github.com/bhavi0128/personality-classifier/blob/main/app.py"
click node_quiz "https://github.com/bhavi0128/personality-classifier/blob/main/app.py"
click node_result_views "https://github.com/bhavi0128/personality-classifier/blob/main/app.py"
click node_classifier "https://github.com/bhavi0128/personality-classifier/blob/main/PersonalityClassifier.py"
click node_text_cleaning "https://github.com/bhavi0128/personality-classifier/blob/main/PersonalityClassifier.py"
click node_recommendations "https://github.com/bhavi0128/personality-classifier/blob/main/PersonalityClassifier.py"
click node_feedback "https://github.com/bhavi0128/personality-classifier/blob/main/PersonalityClassifier.py"
click node_trainer "https://github.com/bhavi0128/personality-classifier/blob/main/train_model.py"
click node_model_artifact "https://github.com/bhavi0128/personality-classifier/blob/main/personality_model.pkl"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_app,node_text_input,node_quiz,node_result_views,node_user toneBlue
class node_classifier,node_text_cleaning,node_recommendations,node_feedback toneAmber
class node_trainer,node_model_artifact toneMint
```

## Components

### User experience

- [Streamlit app](https://github.com/bhavi0128/personality-classifier/blob/main/app.py): `app.py`
- [Text analysis](https://github.com/bhavi0128/personality-classifier/blob/main/app.py): `app.py`
- [Personality quiz](https://github.com/bhavi0128/personality-classifier/blob/main/app.py): `app.py`
- [Results and charts](https://github.com/bhavi0128/personality-classifier/blob/main/app.py): `app.py`

### Classification

- [Personality classifier](https://github.com/bhavi0128/personality-classifier/blob/main/PersonalityClassifier.py): `PersonalityClassifier.py`
- [Text cleaning](https://github.com/bhavi0128/personality-classifier/blob/main/PersonalityClassifier.py): `PersonalityClassifier.py`
- [Recommendations](https://github.com/bhavi0128/personality-classifier/blob/main/PersonalityClassifier.py): `PersonalityClassifier.py`
- [Feedback state](https://github.com/bhavi0128/personality-classifier/blob/main/PersonalityClassifier.py): `PersonalityClassifier.py`

### Model training and state

- [Model trainer](https://github.com/bhavi0128/personality-classifier/blob/main/train_model.py): `train_model.py`
- [Trained model](https://github.com/bhavi0128/personality-classifier/blob/main/personality_model.pkl): `personality_model.pkl`

### Other components

- **User**

## Connections

- User → Streamlit app: uses
- Streamlit app → Text analysis: collects text
- Streamlit app → Personality quiz: presents quiz
- Text analysis → Personality classifier: requests prediction
- Personality classifier → Text cleaning: cleans text
- Personality classifier → Trained model: loads model
- Model trainer → Trained model: saves model
- Streamlit app → Results and charts: renders results
- Streamlit app → Recommendations: requests recommendations
- Personality classifier → Recommendations: provides items
- Personality classifier → Feedback state: loads and saves
