Skip to content

Share photos/albums, support auto-tag by object detection, developed on .NET Core 5 and Angular 8.0/React 16.12, deployed on Azure/Docker

License

Notifications You must be signed in to change notification settings

NhatTanVu/myalbum

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

My Album logo

My Album

MyAlbum is a modern web application for sharing photo albums and individual photos, enriched with location context via Google Maps and AI-powered assistance.

Users can:
  • Create and share albums
  • Upload and browse photos
  • View photo locations on Google Maps
  • Use an AI assistant to:
    1. Auto-generate image titles and descriptions
    2. Suggest friendly comments based on user-provided hints

The system is built using a microservices architecture, designed to be scalable, extensible, and production-ready.

🚦Status (Active Development)

Codecov AppVeyor

⚠️ This project is under active development

  • Core album and photo features are functional
  • AI service is live and evolving
  • Architecture is stable, but APIs and UI may continue to change

βœ… Current focus

  • Improving AI-assisted features
  • Strengthening CI/CD and deployment reliability
  • Enhancing user experience and performance

🧠 Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚        Web Browser          β”‚
β”‚         (React UI)          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚ HTTPS
               β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚    WebSPA.React.Identity    β”‚
β”‚ - Serves frontend UI        β”‚
β”‚ - Authentication            β”‚
β”‚ - Issues JWT tokens         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚ JWT
               β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                   Microservices                                       β”‚
β”‚                                                                                       β”‚
β”‚ β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚ β”‚ Albums Service β”‚ β”‚ Photos Service β”‚ β”‚ Comments Service | |       AI Service       | |
| |(C#, .NET Core) | |(C#, .NET Core) | |  (C#, .NET Core) | | (Python, FastAPI + LLM)| |
β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ |
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ” Identity & Authentication

WebSPA.React.Identity acts as both:

  • The frontend entry point
  • The authentication authority

Responsibilities:

  • Serves React frontend requests
  • Handles user authentication
  • Issues JWT tokens
  • Acts as a gateway for downstream API calls

All downstream services validate JWT tokens issued by WebSPA.React.Identity.


🧩 Backend Microservices

Each backend service is:

  • Independently deployable
  • Stateless
  • Protected by JWT
  • Documented with Swagger / OpenAPI
Service Responsibility
Albums Album management
Photos Photo upload, metadata, and location
Comments User comments on photos
AI Service Image description & comment suggestion

πŸ€– AI Service Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ React Frontend           β”‚
β”‚ (Generate / Suggest UI)  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚ HTTPS + JWT
             β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚     AI Service API       β”‚
β”‚        (FastAPI)         β”‚
β”‚                          β”‚
β”‚ /image/describe          β”‚
β”‚ /comment/suggest         β”‚
β”‚                          β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
             β”‚
             β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ LLM Provider Layer       β”‚
β”‚ (Pluggable Design)       β”‚
β”‚                          β”‚
β”‚ - OpenAI (current)       β”‚
β”‚ - Future providers       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key design goals

  • Provider-agnostic LLM layer
  • Easy model switching
  • Clean separation between API, prompts, and providers

The AI service enhances user experience by automating repetitive and creative tasks:

  • Image description
    • Auto-generate title and description from image content
  • Comment suggestion
    • Generate friendly comments based on user hints (positive or negative)
  • Extensible architecture
    • Designed to support multiple LLM providers in the future

🌐 Website

πŸ›  Technology Stack

Frontend

  • React
  • TypeScript

Backend

  • .NET Core + SignalR + Entity Framework (Albums, Photos, Comments)
  • FastAPI (AI Service)

AI

  • OpenAI (current provider)
  • Pluggable provider design

Infrastructure

  • Azure App Service
  • GitHub Actions (CI/CD)

Run in Microsoft Visual Studio Community 2019

  1. Setup DB by running 3 scripts in "src/WebSPA/sql"
  2. Open "src/MyAlbum.sln"
  3. Change Default connection string in either:
    1. React with: "src/WebSPA.React.Identity/appsettings.Development.json"
    2. Angular with: "src/WebSPA.Identity/appsettings.Development.json"
  4. Set Startup Projects using menu "Debug->Set Startup Projects..." for Debugging in either:
    1. React with projects: Web Apps/WebSPA.React.Identity and 3 projects in Services folder
    2. Angular with projects: Web Apps/WebSPA.Identity and 3 projects in Services folder
  5. Press F5 for Debugging

Run in Docker

  1. Install Docker.
  2. Open "src/Docker" folder and run:
docker-compose down
docker-compose build
docker-compose up
  1. Open "src/Docker" folder and install this SSL certificate to Local Computer's "Trusted Root Certification Authorities" folder:
File name: my-album.pfx
Password: 2u)TAa
  1. Verify by browsing https://localhost:5002/swagger/ successfully.
  2. Browse the website at http://localhost:5000/

Deploy to Azure

  1. Create 1 Azure App Service and 1 Azure SQL database
  2. Add 2 app settings: "ASPNETCORE_ENVIRONMENT" and "ConnectionStrings:Default" to Azure App Service: App Settings
  3. Deploy to Azure

Screenshots

  1. [Photo] Explore
    Explore Photos

  2. [Photo] World Map
    World Map

  3. [Album] Explore
    Explore Albums

  4. [Album] View
    View Album

  5. [Photo] Add
    Add Photo

  6. [Photo] Edit
    Edit Photo

  7. [Photo] View
    View Photo

  8. [Photo] View >> Object Detection (click on the photo)
    View Photo >> Object Detection

  9. [Photo] View >> Add Comment View Photo >> Add Comment

  10. [Photo] View >> Notify Comment (real-time)
    View Photo >> Update New Comment (real-time)

  11. [Photo] View >> Reply Comment
    View Photo >> Add & View Reply

Supporters πŸ‘

Thanks to everyone who has supported this project through ideas, feedback, and testing ❀️ Stargazers repo roster for @NhatTanVu/myalbum

About

Share photos/albums, support auto-tag by object detection, developed on .NET Core 5 and Angular 8.0/React 16.12, deployed on Azure/Docker

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •