Deliverable 3 More detailed architecture and new functions that provide additional value - Unbot2313/GeoRank GitHub Wiki

Deliverable 3: More detailed architecture and new functions that provide additional value

1 Architecture and data

1.1 Deployment diagram

Untitled Diagram drawio(2)

GeoRank runs as a single Django application on a Linux server. Client devices — desktop and mobile browsers — reach it over HTTP. The server itself talks over HTTP to two external endpoints: the customer website being analyzed, and the Gemini API. GeoRank also uses an n8n workflow for sending automated emails, which connects from an external device.

The changes made to this diagram compared to the previous version were the addition of the "reports" and "notifications" applications proposed and developed for this version. The corresponding libraries were also added after the program update and included in the requirements.txt file. Finally, the external device responsible for running the workflow was added.

Node Technology Version
Client device Browser on Windows, macOS, Linux, Android or iOS Any modern version
GeoRank server Linux —
Python 3.13.9 (requires 3.12 or higher)
uv 0.9.11
git 2.43.0
Application Django, with the analysis and accounts apps 6.0.7
Libraries beautifulsoup4 4.15.0
requests 2.34.2
google-genai 2.16.0
python-dotenv 1.2.2
reportlab 5.0.1
pillow 12.3.0
Database SQLite 3.50.4
External services Analyzed customer website —
Gemini API, model gemini-2.5-flash —
n8n (webhook workflows): analysis-ready report email and password reset email —

1.2 Component diagram

GeoRank_Diagrama_Componentes_Actualizado drawio

Component Diagram — Updated Version

The GeoRank component diagram was updated to reflect the current system architecture.

The previous version contained two components: analysis and accounts. The updated version includes four components: analysis, accounts, reports, and notifications.

The main changes are:

  • Reports: Introduced as a separate component responsible for generating and exporting PDF reports.
  • Notifications: Introduced as a separate component that integrates notification delivery through n8n.
  • Analysis: Continues to handle website analysis, AI visibility scores, recommendations, analysis history, competitor registration, and comparisons.
  • Accounts: Manages registration, authentication, user profiles, password recovery, subscription information, and companies.
  • Dependencies: Updated to represent the interactions between authentication, analysis, PDF generation, and notifications.

The diagram uses UML component notation, including component symbols, provided interfaces, and dashed dependency arrows.

These changes reflect the application's current implementation and improve the representation of its modular architecture.

1.3 Data model

GeoRank data model

Seven tables. analysis_analysis carries two foreign keys: user_id says who owns the run, and competitor_id — which is nullable — distinguishes the user's own sites from competitor sites. accounts_company groups users so that members of the same company can see each other's reports.

Relationship Cardinality Note
userprofile → auth_user 1:1 One profile per user, created on registration
userprofile → company N:1 Nullable, ON DELETE SET NULL. Members of a company share reports
competitor → auth_user N:1 Unique on (user, url), max 10 per user
analysis → auth_user N:1 Owner of the analysis
analysis → competitor N:1 Null for own sites, set for competitor sites
score → analysis 1:1 Visibility, readability and citability
recommendation → analysis N:1 Priority 1-3 and category

2 Corporate Image

2.1 Logo

georank-logo-dark

2.2 Slogan

"Visibility That Drives Growth."

2.3 Color Palette

Color Hex Code Text Color
Light Gray #D0D3D3 Black
Mint Green #97DDBC Black
Green #3DDC91 Black
Dark Green #0E1A19 White
Very Dark Green #070F0F White

2.4 Integrated Visual Identity

The decision behind the colors and identity we have chosen for the project is inspired by the sense of unity and familiarity we seek to offer our suppliers, so that they understand that our purpose is to help them grow. We also aim to implement more neutral colors to allow for easy understanding of the instructions on our website.

2.5 Screenshots

Screenshot 2026-10-12 162135 Screenshot 2026-10-12 162201 Screenshot 2026-10-12 162526

3 Repository

Repository: https://github.com/Unbot2313/GeoRank

All three team members have commits in the repository, and every commit message follows the Conventional Commits format (feat:, fix:, chore:, docs:) describing the change it introduces.

Member GitHub
Tomas Ramirez Galeano @unbot2313
Miguel Angel Alzate Osorno @alzate4664
Alessandro Soccol Mejia @AlessandroSoccol

requirements.txt — lists the 34 pinned packages required to run the project. It is generated from the lockfile, so the versions match the ones the team develops with.

README — contains the instructions to run the project: prerequisites, cloning, installing dependencies, setting the environment variables, applying migrations, creating a superuser and starting the development server, with the command for each step.

4 Video

https://youtu.be/SPCAzEXUa6g

5 Project Management

5.1 Backlog

Each of the tasks completed for this project is properly marked, categorized, and assigned. This can be verified within the following link Backlog

5.2 Weekly Meetings

Recorded on the Weekly Meetings page. Each member answers what they did last week, what they will do this week, and whether there are any obstacles.

5.3 Retrospective

What should we continue doing

  • Splitting the requirements between members and working each one on its own branch with a pull request, which keeps main always working.
  • Holding the weekly meeting, including the sessions with the monitors.

What should we start doing

  • Recording the weekly meetings right after they happen, instead of writing several of them at once later.
  • Inform the project managers about the changes made and the inclusion of new features.

What should we stop doing

  • Hardcoding configuration values in the code. A configuration value was found exposed in the repository and had to be moved to environment variables.
  • Uncoordinate the ways of making commits in the project.
⚠️ **GitHub.com Fallback** ⚠️