A full-stack web application that provides deep analysis of classical paintings, including art movement context, color theory, thematic interpretation, storytelling elements, and esoteric symbolism. Built with modern web technologies and a clean, glassmorphic UI inspired by the original single-page art gallery.
- Next.js 14 with App Router and React 18
- TypeScript for type safety and better developer experience
- Tailwind CSS for utility-first styling with custom glassmorphism effects
- SWR for efficient data fetching and caching
- Next.js Image for optimized image loading
- .NET 8 with ASP.NET Core Web API
- Entity Framework Core 8 for ORM
- Pomelo.EntityFrameworkCore.MySql for MySQL integration
- Swashbuckle/Swagger for API documentation
- MySQL 8.0+ with a relational schema supporting paintings, movements, analyses, and annotations
The Painting Analyzer transforms a static art gallery into an interactive learning platform, allowing users to explore classical paintings through multiple analytical lenses. Each painting includes detailed annotations and five types of analysis: movement context, color composition, themes, storytelling, and esoteric symbolism.
- App Router Structure: Pages for gallery, about, and dynamic painting details
- Component-Based Design: Reusable components for navigation, search, cards, tabs, and annotations
- Type Safety: Full TypeScript definitions mirroring backend DTOs
- Responsive UI: Glassmorphic design with dark theme and smooth interactions
- API Integration: SWR hooks for seamless data fetching with loading/error states
- RESTful API: Clean endpoints for paintings, analyses, and annotations
- Data Models: EF Core entities with proper relationships and navigation properties
- DTOs: Transfer objects optimized for frontend consumption
- CORS Support: Configured for local development with the Next.js frontend
- Database Context: Configured for MySQL with proper table mappings
The MySQL database includes:
movements: Art movements with characteristicspaintings: Core painting metadata linked to movementscolor_analyses,theme_analyses,storytelling_analyses,esoteric_messages: Detailed analysis tablesannotation_markers: Interactive markers for painting annotations
GET /api/paintings- Paginated list with search and filteringGET /api/paintings/{id}- Detailed painting informationGET /api/paintings/{id}/annotations- Annotation markers for a painting
GET /api/analysis/{paintingId}/movement- Movement analysisGET /api/analysis/{paintingId}/color- Color analysisGET /api/analysis/{paintingId}/theme- Theme analysisGET /api/analysis/{paintingId}/storytelling- Storytelling analysisGET /api/analysis/{paintingId}/esoteric- Esoteric analysis
- .NET 8 SDK
- Node.js 18+
- MySQL 8.0+
- Clone and navigate to the backend directory:
cd backend/ArtAnalyzerApi - Restore dependencies:
dotnet restore
- Configure
appsettings.Development.jsonwith your MySQL connection string - Run the API:
The API will be available at
dotnet run
http://localhost:5000
- Clone and navigate to the frontend directory:
cd frontend - Install dependencies:
npm install
- Create
.env.localwith:NEXT_PUBLIC_API_BASE_URL=http://localhost:5000 - Run the development server:
The frontend will be available at
npm run dev
http://localhost:3002
- Create the MySQL database:
CREATE DATABASE art_analyzer;
- Run the schema and seed scripts from the
database/directory
- Gallery View: Searchable and filterable grid of paintings
- Detailed Analysis: Five analytical perspectives for each painting
- Interactive Annotations: Hover over markers to reveal insights
- Responsive Design: Works seamlessly on desktop and mobile
- Type Safety: End-to-end TypeScript integration
- Modern UI: Glassmorphic effects with smooth transitions
- The frontend uses SWR for optimistic UI updates and caching
- CORS is configured to allow the frontend running on localhost:3002
- The API includes Swagger documentation at
/swagger - Database migrations can be added using EF Core tools if needed
- The project structure separates concerns between API, data, and models
This project demonstrates full-stack development capabilities and educational content integration. Feel free to use it as a reference for similar applications.