A modern film archiving and social platform with AI-powered features
Features • Tech Stack • Installation • Usage • AI Features
Social Film Platform is a web application built with ASP.NET Core MVC for film enthusiasts to catalog, review, and share movies. Features vintage cinema aesthetic with modern functionality and AI-powered tag suggestions.
- Movie Archive - Database with genres, actors, trailers, and images
- Personal Diaries - Curated film collections with tags and categories
- Review System - Write, edit, and vote on reviews
- AI Integration - Automatic suggestions using Google Gemini
- Multi-Role System - Admin, Editor, and User roles
- Vintage UI/UX - Classic Hollywood-inspired design
Movies
- CRUD operations
- Search by title, director, genre
- Sort by popularity or date
- Upload posters, embed trailers
- Associate with actors
Actors
- Profile pages with biography
- Filmography listings
- Photo uploads
Diaries (Movie Lists)
- Public/private collections
- Tag and category system
- Vote on diaries
- AI-powered suggestions
Reviews
- Rich-text reviews (up to 2000 chars)
- Like/Dislike voting
- Edit/delete capabilities
- Moderation tools
Organization
- Genres: Action, Sci-Fi, Drama, Comedy, Thriller, Romance, Animation, Horror
- User-defined tags and categories
| Role | Permissions |
|---|---|
| Admin | Full access: manage all content, users, and settings |
| Editor | Create/edit/delete movies, actors, genres; moderate reviews |
| User | Create diaries, write reviews, vote on content |
The platform integrates Google Gemini Flash AI for intelligent content suggestions.
- Diary Analysis: When editing a diary, click "Suggest with AI"
- Content Processing: The AI analyzes:
- Movie titles in the diary
- Diary name and description
- Common themes and genres
- Smart Suggestions: Receives 3 relevant tags + 3 categories
- One-Click Apply: Add suggestions directly to your diary
For a diary containing Fight Club, Pulp Fiction, and Mulholland Drive:
{
"tags": ["Psychological Thriller", "Cult Classics", "Mind-Bending"],
"categories": ["Thriller", "Drama", "Neo-Noir"]
}User Request → DiariesController.SuggestTags()
↓
Extract movie titles from diary
↓
Build context-aware prompt
↓
Google Gemini API call
↓
Parse JSON response
↓
Return tags + categories
API Configuration: Set Gemini:ApiKey in appsettings.json or User Secrets
- Framework: ASP.NET Core 9.0 MVC
- Language: C# 13.0
- ORM: Entity Framework Core 9.0
- Database: MySQL 8.0 (via Pomelo.EntityFrameworkCore.MySql)
- Authentication: ASP.NET Core Identity with role-based authorization
- UI Framework: Bootstrap 5
- Rich Text Editor: Quill.js
- Icons: Bootstrap Icons
- Fonts: Google Fonts (Cinzel, Playfair Display, Lato)
- JavaScript: Vanilla JS with Fetch API
- AI Service: Google Gemini Flash API
- XSS Protection: HtmlSanitizer (Ganss.Xss)
- Image Uploads: Custom file handling with GUID naming
- Pattern: MVC (Model-View-Controller)
- Dependency Injection: Built-in ASP.NET Core DI
- Razor Pages: For Identity UI
- View Components: Partial views for reusable UI
- .NET 9.0 SDK
- MySQL 8.0+
- Visual Studio 2022 or VS Code
- Google Gemini API Key (free tier available)
git clone https://github.com/dariabulacu/SocialFilmPlatform.git
cd SocialFilmPlatform- Create a MySQL database:
CREATE DATABASE socialfilmplatform CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;- Update
appsettings.json:
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost;Database=socialfilmplatform;User=root;Password=YOUR_PASSWORD;"
}
}Add your Gemini API key:
{
"Gemini": {
"ApiKey": "YOUR_GEMINI_API_KEY"
}
}Get API Key: Google AI Studio
cd SocialFilmPlatform
dotnet ef database updateThis will:
- Create all database tables
- Seed initial data (users, movies, actors, genres)
dotnet runNavigate to: https://localhost:5001
The database is seeded with test accounts:
| Role | Password | |
|---|---|---|
| Admin | admin@test.com | Admin1! |
| Editor | editor@test.com | Editor1! |
| User | user@test.com | User1! |
Warning: Change these passwords in production!
- Navigate to Movies → Add Movie
- Fill required fields (title, director, description, date, score, genre)
- Optional: Upload poster, add trailer URL
- Click Save Movie
- Go to Diaries → Create New
- Enter name, description, public/private toggle
- Add movies from movie detail pages
- Use AI Suggest for auto-generated tags
- Go to movie detail page
- Use rich text editor in Critiques section
- Click Publish
- Vote on other reviews
SocialFilmPlatform/
├── Controllers/ # MVC Controllers
│ ├── MoviesController.cs
│ ├── DiariesController.cs
│ ├── ActorsController.cs
│ ├── ReviewsController.cs
│ └── ...
├── Models/ # Data Models
│ ├── Movie.cs
│ ├── Diary.cs
│ ├── Review.cs
│ ├── ApplicationUser.cs
│ └── SeedData.cs
├── Views/ # Razor Views
│ ├── Movies/
│ ├── Diaries/
│ ├── Actors/
│ └── Shared/
├── Services/ # Business Logic
│ ├── IAiService.cs
│ └── GeminiAiService.cs
├── Data/ # EF Core Context
│ ├── ApplicationDbContext.cs
│ └── Migrations/
├── wwwroot/ # Static Files
│ ├── css/
│ ├── js/
│ └── images/
└── Program.cs # App Entry Point
- Many-to-Many: Movies ↔ Actors (via
ActorMovie) - Many-to-Many: Diaries ↔ Movies (via
MovieDiary) - Many-to-Many: Diaries ↔ Tags/Categories
- One-to-Many: Movie → Reviews, User → Diaries
var sanitizer = new HtmlSanitizer();
movie.Description = sanitizer.Sanitize(movie.Description);[Authorize(Roles = "Editor,Admin")]
public IActionResult New() { ... }- Built-in anti-forgery tokens on all forms
[ValidateAntiForgeryToken]on POST actions
- Entity Framework parameterized queries
- No raw SQL execution
GET /Movies/Index- List all movies (paginated)GET /Movies/Show/{id}- Movie detailsPOST /Movies/New- Create moviePOST /Movies/Edit/{id}- Update moviePOST /Movies/Delete/{id}- Delete movie
GET /Diaries/Index- Public diariesGET /Diaries/MyDiaries- User's diariesPOST /Diaries/SuggestTags- AI suggestions (JSON response)
POST /Reviews/New- Submit reviewPOST /Reviews/Vote- Like/dislike review (JSON response)
The application automatically seeds test data:
- 3 user roles
- 6 test users
- 8 genres
- 6 actors
- 7 movies
- 5 sample diaries
- 3 sample reviews