Deliverable 3 More detailed architecture and new functions that provide additional value - Unbot2313/GeoRank GitHub Wiki
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 | — |
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.
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 |
"Visibility That Drives Growth."
| 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 |
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.
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.
Each of the tasks completed for this project is properly marked, categorized, and assigned. This can be verified within the following link Backlog
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.
- Splitting the requirements between members and working each one on its own branch
with a pull request, which keeps
mainalways working. - Holding the weekly meeting, including the sessions with the monitors.
- 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.
- 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.