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.
- Core album and photo features are functional
- AI service is live and evolving
- Architecture is stable, but APIs and UI may continue to change
β Next focus
- Improving AI-assisted features
- Strengthening CI/CD and deployment reliability
- Enhancing user experience and performance
βββββββββββββββββββββββββββββββ
β 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)| |
β ββββββββββββββββββ ββββββββββββββββββ ββββββββββββββββββββ ββββββββββββββββββββββββββ |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
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.
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 |
ββββββββββββββββββββββββββββ
β 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
- URL:
- https://my-album.azurewebsites.net/ (Angular 8.0)
- https://my-album-react.azurewebsites.net/ (React 16.12) (Inactive)
- 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 (Inactive)
- React
- TypeScript
- .NET Core + SignalR + Entity Framework (Albums, Photos, Comments)
- FastAPI (AI Service)
- OpenAI (current provider)
- Pluggable provider design
- Azure App Service
- GitHub Actions (CI/CD)
MyAlbum now supports a Scheduled Photo Ingestion feature that automatically retrieves photos from external photo providers (like Pexels) based on configured categories and criteria. A scheduler enqueues ingestion tasks daily, a message queue buffers tasks, and a background worker retrieves and stores photos into the MyAlbum database without duplication. This enables automated enrichment of MyAlbum content and decouples scraping logic from the core API.
+------------------+ +----------------------+ +------------------+
| Dagster | | Azure Service Bus | | C# Worker |
| (Scheduler/ | --> | (Task Queue / DLQ) | --> | (.NET, Queue |
| Orchestrator) | | | | Processing) |
+------------------+ +----------------------+ +------------------+
β β
βΌ β
βββββββββββββββββββββββββ β
β WebSPA.React.Identity | β
β (Generate JWT Token) | β
βββββββββββββββββββββββββ β
β JWT
βΌ
ββββββββββββββββββββββββ
β Microservices β
β β
β ββββββββββββββββββββ β
β β Photos Service | |
| | (C#, .NET Core) | |
β ββββββββββββββββββββ |
ββββββββββββββββββββββββ
| Component | Technology |
|---|---|
| Scheduling & Orchestration | Python, Dagster |
| Task Queue | Azure Service Bus |
| Worker / Processing | C# (.NET 10) Worker |
| Photo Provider APIs | Pexels (extendable to Flickr, etc.) |
| Photo API | MyAlbum Photo API (ASP.NET Core) |
| Storage | MyAlbum Database |
| Deployment (Dev) | Docker / Docker Compose |
| Deployment (Cloud) | Azure Container Apps / Azure Services |
Thanks to everyone who has supported this project through ideas, feedback, and testing β€οΈ



