Skip to content

Releases: Null-Pointers2-0/JoinProject

v1.3.0

Choose a tag to compare

@gery25 gery25 released this 11 Jun 19:39
b626627

What's Changed

  • fix(footer): added mailto to the footer email by @Bogdan2005-19 in #183
  • 180 fixdashboard rename chart labels to reflect view counts by @gery25 in #185
  • 176 styleprofile add colored borders and visual hierarchy to settings cards by @gery25 in #184
  • 177 refactorsidebar remove non functional search input by @NorbertAguilera in #186
  • feat(history): add viewing history display #182 by @Karu174 in #188
  • feat(recommendations): fix duplicates and implement carousel in series details by @Karu174 in #189
  • feat(admin): add system logs tab and restrict platform tracking to logged-in users by @Karu174 in #193
  • 181 featprofile add complete user profile display with demographic data by @gery25 in #190
  • 181 featprofile add complete user profile display with demographic data by @gery25 in #194
  • 181 featprofile add complete user profile display with demographic data by @gery25 in #195
  • Dev by @gery25 in #196

Full Changelog: v1.2.0...v1.3.0

v1.2.0

Choose a tag to compare

@gery25 gery25 released this 24 May 16:53
ad28ebd

✨ Highlights

📊 Analytics Dashboard

  • Interactive dashboard with dynamic charts for data visualization.
  • Date and platform filtering for view segmentation.
  • CSV data export with downloadable reports.

🖼️ Catalog with Posters

  • Movies and series display posters fetched from the API.
  • Poster path editing from the staff admin panel.
  • Intelligent content merging to eliminate duplicates.
  • Platform filtering to see which services offer each title.

👥 Permission & Role Management

  • Complete role CRUD (Admin, Staff, Consumer).
  • Session invalidation in under 1 second on permission changes.
  • Double validation for critical administrative actions.
  • Immutable audit log (#135) for all permission changes.

💬 Social System

  • Community reviews and ratings for each title.
  • Aggregated average scores per content.
  • Genre-based content recommendations.

🔄 Redirect & Tracking

  • Internal click tracking for streaming platforms (#24).
  • Redirect without leaving the application domain.

📋 Reports & GDPR

  • Autonomous generation of segmented and anonymized market reports.
  • Automatic anonymization of personal data in CSV exports.
  • GDPR-compliant data exports for external platforms.

🔐 Administration

  • Credential emailing when creating users.
  • User creation with role assignment from the admin panel.
  • Role-based intelligent redirect after login.
  • Staff Admin panel for managing users and platforms.

🌍 Internationalization

  • Full translations for Catalan (ca), Spanish (es), and English (en).
  • Updated all text in HTML templates and .py files.

🗄️ Infrastructure

  • Migration to PostgreSQL with Neon support.
  • Database cloning to local SQLite for development.
  • Automated DB backup.
  • Comparison between DB and API to update outdated content.
  • Stable deployment on Render with Docker.

🛠️ Tech Stack

Layer Technology
Framework Django 6.0.3
Language Python 3.13
Database PostgreSQL (SQLite in dev)
Task Scheduler APScheduler 3.11.2
Static Files WhiteNoise 6.4.0
HTTP Client requests 2.32.5
Images Pillow 12.2.0
Environment python-dotenv 1.2.2
Containers Docker + Docker Compose
CI/CD GitHub Actions → Render

🐛 Bug Fixes

  • Duplicate contents in catalog search
  • Incorrect platform filtering
  • Test failures with the new database
  • Merge conflicts in Content Management and CriticalRefactors
  • User profile: incorrect admin login
  • Star rating visuals
  • Render deployment failures

📦 How to Deploy

git checkout main
git pull origin main
docker compose up --build

Make sure your .env has the required variables:
API_KEY_8080=<your_key>
API_KEY_8081=<your_key>
API_KEY_8082=<your_key>
DATABASE_URL=postgres://user:pass@db:5432/joinproject_db
DJANGO_DEBUG=False
THEMOVIEDB_API_KEY=<your_key>
Full Changelog: v1.1.0...v1.2.0 (1.1.0...v1.2.0)
Contributors

  • @Karu174 — User permission management (#132-#135), audit log, social reviews, redirect tracking
  • @NorbertAguilera — Posters, DB clone, content merge, translations, tests, DB comparison
  • @gery25 — Dashboard, analytics, CSV export, login-redirect, security restrictions, reports, GDPR
  • @Bogdan2005-19 — DB refactor, Docker/Render deployment, admin features, credential emails, CI/CD

What's Changed

  • Html refactor branch by @Bogdan2005-19 in #108
  • 23 featcontent UI display movieseries details and available platforms by @Bogdan2005-19 in #110
  • fix(home): Search catlog does not show duplicates by @Bogdan2005-19 in #111
  • 21 featcontent implement search system and detailed content view by @NorbertAguilera in #112
  • Quality metrics TEST by @Bogdan2005-19 in #113
  • fix(profile-api): resolve AttributeError in profile API and include favorite series by @Karu174 in #115
  • 104 featdatabase actualize the database as the uml by @NorbertAguilera in #116
  • fix: Localy fixed db work + testing render PR prewiew by @Bogdan2005-19 in #118
  • feat(data-base): add the visualitzations table by @gery25 in #137
  • Merge pull request #137 from Null-Pointers2-0/19-featexport-generate-… by @gery25 in #138
  • 19 featexport generate and download csv reports by @gery25 in #139
  • 17 featanalytics implement admin dashboard and csv data export by @gery25 in #140
  • 20 featadmin UI implement data filtering by date and platform by @gery25 in #141
  • fix: Changed settings to use sqlite on debug by @Bogdan2005-19 in #143
  • 18 featadmin UI create interactive analytics dashboard by @gery25 in #144
  • 20 featadmin UI implement data filtering by date and platform by @gery25 in #145
  • 17 featanalytics implement admin dashboard and csv data export by @gery25 in #146
  • fix(render): Making dynamic port asignment and use unicorn by @Bogdan2005-19 in #148
  • feat(social): implement community reviews, ratings and movie recommendations #25 (#34, #35, #36) by @Karu174 in #149
  • Fix/star rating visuals by @Karu174 in #150
  • feat(reports): automatic anonymization of personal data in CSV export and here tests by @gery25 in #162
  • feat(legal): GDPR compliant anonymization for external platform exports by @gery25 in #163
  • feature(admin): Implemented admin users creation and deletion by @Bogdan2005-19 in #151
  • feat(DB_backup): added the db backup with instructions comented by @NorbertAguilera in #153
  • Redirect role Implemented to restrict staff and admin access (First merge PR151) by @Bogdan2005-19 in #155
  • 120 featreports autonomous generation of segmented and anonymized market reports by @gery25 in #164
  • feat(redirect): implement internal tracking for platform clicks without external redirection #24 by @Karu174 in #165
  • Critical refactors by @Bogdan2005-19 in #161
  • 124 featcatalog content poster selection and merging by @NorbertAguilera in #167
  • Feat/user permission management by @Karu174 in #169
  • fix (translations): actualized all the translations from the html files by @NorbertAguilera in #171
  • 172 fixtranslations update translations from py by @NorbertAguilera in #174
  • Dev by @gery25 in #175

Full Changelog: 1.1.0...v1.2.0

v1.1.0

Choose a tag to compare

@gery25 gery25 released this 30 Apr 14:15
bebdbb0

What's Changed

  • fix (isikawatools) :Update issues_histogram.yml by @NorbertAguilera in #93
  • 11 featautomatize integrate the ishikawatools by @gery25 in #94
  • feat(profile): subscription platform management UI by @gery25 in #95
  • feat(followed-ui): add Followed page with movies & series view by @gery25 in #96
  • 97 featfooter privacity add privacity info on footer by @gery25 in #98
  • 23 featcontent UI display movieseries details and available platforms by @Bogdan2005-19 in #99
  • fix(profile): Followed series in profile page now redirect correctly by @Bogdan2005-19 in #106
  • Dev by @NorbertAguilera in #103

Full Changelog: v1.0.0...1.1.0

v1.0.0

Choose a tag to compare

@gery25 gery25 released this 22 Apr 18:30
aedd1d1

🎬 JoinProject v1.0.0 — First Official Release

JoinProject is a multi-platform streaming content aggregator. It connects to multiple independent streaming service APIs, consolidates their catalogs (movies & series) into a unified database, and presents users with a single interface to browse, filter and discover content across platforms.

Caution

The streaming APIs are not yet publicly deployed. The three backend API instances (ports 8080, 8081, 8082) that power the catalog synchronisation are part of a separate service repository (Models-de-proc-s-26) which has not been published or hosted publicly at the time of this release. As a result, the automatic catalog sync on startup will not work unless you run the API containers locally yourself. See the Setup & Run section for instructions.


✨ What's included in this release

🏠 Home Page

  • Paginated movie catalog (10 items per page) powered by Django's Paginator.
  • Real-time filtering by genre, director and age rating directly from the home page.
  • Full-text search by title (icontains query).
  • Fully responsive card-based layout following the project Style Guide.

📚 Content Catalog

  • Dedicated /catalog/ route with the same search and multi-filter capabilities as the home page.
  • Separate detail page (/movie/<id>/) for each movie, including genre-based content recommendations (up to 5 similar titles).

🔄 API Integration & Automatic Synchronisation

  • On server startup, the application automatically fetches and stores the full catalog from 3 independent streaming API instances (ports 8080, 8081, 8082) using API key authentication (X-API-KEY header).
  • Synced data includes: Directors, Genres, Age Ratings, Movies and Series — all stored locally in the application's database.
  • A background cron job (APScheduler) re-syncs the catalog every night at 03:00 AM without requiring any manual intervention.
  • Each API instance is tracked independently in the database (API model, keyed by port), so per-source data provenance is preserved.

🎞️ Movies & Series Models

  • Movie: title, synopsis, year, rating, expiry date, director, genre, age rating, source API.
  • Series: title, synopsis, start/end year, total seasons, rating, expiry date, director, genre, age rating, country, language, source API.
  • Genre-based similarity engine for movie recommendations (get_similar_by_genre()).

👤 User System

  • Registration & Login/Logout with Django's built-in authentication system and a custom CustomUser model.
  • Avatar upload: users can set a profile picture (stored under /media/avatars/).
  • User Profile dashboard with watchlist grid, subscription section and history view.
  • Secure profile API endpoint (/api/user/profile/) — login required — returning personal info and followed content IDs in JSON format.
  • User settings page for profile management.

🌍 Internationalisation (i18n)

  • Full multi-language support out of the box: Spanish (es, default), English (en) and Catalan (ca).
  • Translation files compiled and ready for all three locales.

🐳 Docker & Deployment

  • Dockerfile with collectstatic baked into the build step — no manual asset compilation required on deploy.
  • docker-compose.yml to run the Django application on port 8000.
  • WhiteNoise middleware configured for serving compressed static files in production without a separate web server.
  • Continuous Deployment to Render via GitHub Actions, including automatic database migrations on each deploy.
  • ALLOWED_HOSTS and CSRF_TRUSTED_ORIGINS pre-configured for the Render deployment URL.

🔐 Admin & Sync Logging

  • Django Admin interface available with the SyncLog model to inspect each synchronisation run (status, timing, records created/updated).

🛠️ Tech Stack

Layer Technology
Framework Django 6.0.3
Language Python 3.13
Database SQLite (dev)
Task Scheduler APScheduler 3.11.2 + django-apscheduler 0.7.0
Static Files WhiteNoise 6.4.0
HTTP Client requests 2.32.5
Image Handling Pillow 12.2.0
Environment Config python-dotenv 1.2.2
Containerisation Docker + Docker Compose
CI/CD GitHub Actions → Render
Streaming APIs Node.js (external, via Git submodule)

⚙️ Setup & Run

Prerequisites

  • Python 3.13+
  • Docker & Docker Compose (optional, for containerised run)
  • The three streaming API containers running on ports 8080, 8081 and 8082

Local setup

# 1. Clone the repository (with submodule)
git clone --recurse-submodules <repo-url>
cd JoinProject

# 2. Create and activate a virtual environment
python -m venv .venv
source .venv/bin/activate

# 3. Install dependencies
pip install -r requirements.txt

# 4. Configure environment variables
cp .env.example .env
# Edit .env and fill in your API keys:
#   API_KEY_8080=<your_key>
#   API_KEY_8081=<your_key>
#   API_KEY_8082=<your_key>

# 5. Apply migrations
python manage.py migrate

# 6. Run the development server
python manage.py runserver

On startup, the catalog is fetched automatically. Visit http://127.0.0.1:8000.

Docker setup

docker compose up --build

Visit http://localhost:8000.


🔑 Environment Variables

Variable Description
API_KEY_8080 API key for the streaming API instance on port 8080
API_KEY_8081 API key for the streaming API instance on port 8081
API_KEY_8082 API key for the streaming API instance on port 8082
DJANGO_DEBUG Set to False in production (default: True)

Important: API keys must be active and not expired in each API instance's database. Expired keys will cause 403 API invalid responses and no data will be synced.


⚠️ Known Limitations

  • Streaming APIs not publicly available: The backend API service (Models-de-proc-s-26) has not been deployed publicly. Catalog synchronisation (movies, series, directors, genres, age ratings) will fail with connection errors unless the API containers are running locally. To use the full application, clone and run the API project separately following its own README.
  • The application uses SQLite as its database. For production workloads, migration to PostgreSQL is recommended.
  • The SECRET_KEY in settings.py must be replaced with a strong, randomly generated key before any public deployment.
  • DEBUG = True is the default. Always set DJANGO_DEBUG=False in production environments.
  • User watchlist and subscription features are partially implemented (UI scaffolding is in place, but the underlying platform-linking model is pending).
  • The movie detail page template (movie_detail.html) is referenced in views.py but the full template design is a work in progress.

🐛 Bug Fixes included since initial development

  • Fixed TypeError: Cannot read properties of undefined (reading 'length') in the Node.js API middleware (token_validator.js) caused by incorrect array destructuring — was causing all API calls to return 500 instead of proper 401/403 responses.
  • Fixed CSRF verification failures in production (Render deployment).
  • Fixed static files not being served in production (WhiteNoise integration).
  • Fixed "Clear Filters" button on the home page redirecting to the wrong URL.
  • Restored missing views (home, catalog_view, movie_detail, user_setting, api_user_profile) that had been accidentally removed during a merge.