Add complete frontend implementation and Docker deployment setup

- Implement React frontend with TypeScript and Tailwind CSS
- Add scrappbook.de-inspired UI design with photo galleries
- Implement authentication, photo viewing, and download features
- Add Docker Swarm configuration with Traefik reverse proxy
- Set up Drone CI/CD pipeline for automated deployments
- Add monitoring stack with Prometheus and Grafana
- Create comprehensive deployment documentation
- Add simple local development setup with docker-compose.local.yml

Features:
- Password-protected galleries with expiration warnings
- Responsive photo grid with lightbox viewer
- Bulk download functionality
- Hot reload development environment
- Email testing with Mailhog
- Production-ready deployment scripts

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-07-06 20:23:13 +02:00
parent 032bbae50d
commit 6c82958c79
73 changed files with 10611 additions and 2 deletions
+94
View File
@@ -0,0 +1,94 @@
// Event/Gallery types
export interface Event {
id: number;
slug: string;
event_type: string;
event_name: string;
event_date: string;
host_email: string;
admin_email: string;
welcome_message?: string;
color_theme?: string;
share_link: string;
created_at: string;
expires_at: string;
is_active: boolean;
is_archived: boolean;
archive_path?: string;
archived_at?: string;
}
export interface GalleryInfo {
event_name: string;
event_type: string;
event_date: string;
expires_at: string;
is_active: boolean;
is_expired: boolean;
}
export interface Photo {
id: number;
filename: string;
url: string;
thumbnail_url?: string;
type: 'collage' | 'individual';
size: number;
uploaded_at: string;
}
export interface GalleryData {
event: {
id: number;
event_name: string;
event_type: string;
event_date: string;
welcome_message?: string;
color_theme?: string;
expires_at: string;
};
photos: Photo[];
}
export interface GalleryStats {
total_photos: number;
total_views: number;
total_downloads: number;
unique_visitors: number;
}
// Auth types
export interface AdminUser {
id: number;
username: string;
email: string;
}
export interface LoginResponse {
token: string;
user: AdminUser;
}
export interface GalleryAuthResponse {
token: string;
event: {
id: number;
event_name: string;
event_type: string;
event_date: string;
welcome_message?: string;
color_theme?: string;
expires_at: string;
};
}
// API Error type
export interface ApiError {
error: string;
errors?: Array<{
type: string;
msg: string;
path: string;
location: string;
}>;
}