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:
- Auto-generate image titles and descriptions
- 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)
β οΈ 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
- URL:
- https://my-album.azurewebsites.net/ (Angular 8.0)
- https://my-album-react.azurewebsites.net/ (React 16.12)
- Email: guest@gmail.com (for add/edit photo, album, comment and reply)
- Password: 2u)TAa
- Albums API: https://my-album-album-api.azurewebsites.net/swagger/index.html
- Photos API: https://my-album-photo-api.azurewebsites.net/swagger/index.html
- Comments API: https://my-album-comment-api.azurewebsites.net/swagger/index.html
- AI Service API: https://my-album-ai.azurewebsites.net/docs
π 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
- Setup DB by running 3 scripts in "src/WebSPA/sql"
- Open "src/MyAlbum.sln"
- Change Default connection string in either:
- React with: "src/WebSPA.React.Identity/appsettings.Development.json"
- Angular with: "src/WebSPA.Identity/appsettings.Development.json"
- Set Startup Projects using menu "Debug->Set Startup Projects..." for Debugging in either:
- React with projects: Web Apps/WebSPA.React.Identity and 3 projects in Services folder
- Angular with projects: Web Apps/WebSPA.Identity and 3 projects in Services folder
- Press F5 for Debugging
Run in Docker
- Install Docker.
- Open "src/Docker" folder and run:
docker-compose down docker-compose build docker-compose up - 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 - Verify by browsing https://localhost:5002/swagger/ successfully.
- Browse the website at http://localhost:5000/
Deploy to Azure
- Create 1 Azure App Service and 1 Azure SQL database
- Add 2 app settings: "ASPNETCORE_ENVIRONMENT" and "ConnectionStrings:Default" to Azure App Service:
- Deploy to Azure
Screenshots
[Photo] Explore\
[Photo] World Map\

[Album] Explore\

[Album] View\

[Photo] Add\

[Photo] Edit\

[Photo] View\
[Photo] View >> Object Detection (click on the photo)\
[Photo] View >> Add Comment
[Photo] View >> Notify Comment (real-time)\

[Photo] View >> Reply Comment\

Supporters :clap:
Thanks to everyone who has supported this project through ideas, feedback, and testing β€οΈ
Built With
- c#
- css
- dockerfile
- html
- javascript
- python
- scss
- shell
- tsql
- typescript
Log in or sign up for Devpost to join the conversation.