# FTC Team 23344 "Technical Turbulence" Website

## Overview
Flask-based website for FTC Team 23344 with a modern dark theme (#000000 pure black background), comprehensive content management system, PostgreSQL database integration, and premium smooth-scrolling animations.

## Recent Changes (November 13, 2025)

### Critical Fix: Persistent Object Storage for Uploaded Files
Fixed the issue where uploaded images (members, mentors, competitions, sponsors) were disappearing after a few hours.

**The Problem:**
- Files were being saved to local filesystem (`static/images/`)
- Local storage in Replit is **ephemeral** and gets cleared periodically
- All uploaded images would vanish after a few hours

**The Solution:**
- Migrated to **Replit Object Storage** (built on Google Cloud Storage)
- All file uploads now go to **persistent, permanent storage**
- Images are served directly from Google's CDN with full URLs

**Technical Implementation:**
- Created `object_storage.py` module using Google Cloud Storage Python client
- Updated all upload routes to use object storage:
  - `add_member()`, `update_member()` - Member/mentor photos
  - `add_competition()`, `edit_competition()` - Competition images
  - `add_sponsor()` - Sponsor logos
- Intelligent fallback: uses local storage if object storage not configured
- Files organized by type: `members/`, `competitions/`, `sponsors/` folders
- Unique UUIDs prevent filename conflicts
- Public URLs stored in database instead of local paths

**Setup Required (See OBJECT_STORAGE_SETUP.md):**
1. Create bucket in Object Storage pane
2. Set `OBJECT_STORAGE_BUCKET` environment variable
3. Restart server

**Dependencies Added:**
- `google-cloud-storage` (v3.5.0)

## Recent Changes (November 12, 2025)

### Admin Panel Enhancement: Competition Editing
Added full CRUD functionality to the competitions admin panel:

**New Features:**
- ✏️ **Edit Competition Cards**: Click the "Edit" button on any competition to modify its details
- **Collapsible Edit Forms**: Each competition now has an inline edit form that expands/collapses
- **Full Field Editing**: Edit season, event name, date, description, awards, and replace images
- **Image Preservation**: Existing images are preserved unless a new one is uploaded
- **Yellow Edit Buttons**: New amber/yellow themed edit buttons next to delete buttons

**Technical Implementation:**
- New `/admin/competition/edit` route in Flask backend
- Inline collapsible forms with JavaScript toggle functionality
- Award text automatically converted between pipe-separated (database) and newline-separated (form) formats
- Retains existing image if no new file uploaded

## Recent Changes (November 8, 2025)

### Latest UI/UX Refinements
Final polish and user experience improvements:

**Hero Section Enhancements:**
- Made hero section full viewport (100vw x 100vh) for immersive experience
- Applied black & white filter (grayscale 100%) to team image
- Added shadow gradient to top of section for smooth transition from navigation
- Darkened overlay gradient for improved text readability

**Button & Interaction Standardization:**
- Unified all buttons to match team CTA style (blue transparent with subtle border)
- Removed blue hover effects, replaced with clean white shadows
- Fixed custom cursor pointer-events to allow navigation bar clicking
- Removed parallax/wavy animations from sponsor cards and static elements

### Design Refinements & Content Additions
Previous updates focused on improving visual balance and adding key content sections:

**Visual Improvements:**
- Removed excessive blue hover effects across all cards and elements
- Replaced blue hover glows with subtle white shadows for cleaner aesthetic
- Made background gradient significantly more prominent (increased opacity from 0.03 to 0.08)
- Disabled header underline animation on hover for simpler interactions

**New Content Sections:**
- **Value Cards**: Added four feature cards under mission statement showcasing core values:
  - STEM Outreach - workshops and demonstrations
  - Mentorship - guiding rookie teams
  - Education - teaching programming and CAD skills
  - Community - local partnerships and collaboration
- **Restructured Team Section**: 
  - Text content now displays on left, team image on right
  - Fully responsive with stacked layout on mobile
  - New CTA button for viewing team members
  - Maintained parallax effects on team image

### Premium Animation & UX Enhancements
Transformed the entire site with smooth scrolling, parallax effects, and grand animations for a premium, modern feel:

**Animation System:**
- **Lenis Smooth Scrolling**: Integrated velocity-based smooth scrolling with 1.2s duration and custom easing
- **GSAP ScrollTrigger**: Properly proxied with Lenis for synchronized scroll-triggered animations
- **Parallax Effects**: Multi-layer parallax on hero images, team photos, and sponsor logos
- **Scroll Animations**: Fade-in and slide-up effects on all major content sections (including new value cards)
- **Magnetic Buttons**: Interactive hover effects with 3D transforms on CTAs
- **Floating Elements**: Subtle continuous animations on cards and member profiles

**Visual Enhancements:**
- **Custom Cursor**: Premium dual-cursor effect (main + follower) on desktop
- **Scroll Progress Bar**: Gradient progress indicator at top of page
- **Animated Gradients**: Shifting blue/purple gradients on stat cards
- **Shimmer Effects**: Animated shine effects on headings and dividers
- **Background Ambience**: Prominent floating gradient orbs for depth

**Performance:**
- All animations use CSS transforms (GPU-accelerated)
- RequestAnimationFrame loop for smooth 60fps
- Mobile-optimized with reduced motion support
- Custom cursor disabled on mobile devices

**Libraries Added:**
- Lenis v1.0.42 for smooth scrolling
- GSAP 3.12.2 + ScrollTrigger for advanced animations
- Feather Icons for value card icons

## Recent Changes (October 3, 2025)

### Admin Panel System
Created a complete admin panel with password-protected access for managing all website content:

**Access:** `/admin/login` (Password: `techturb123`)

**Features:**
- 📊 **Stats Management**: Edit homepage statistics (seasons, members, awards, competitions)
- 👥 **Members/Mentors Management**: Add, edit, remove team members and mentors with profile picture uploads
- 🏆 **Competitions Management**: Add competitions by season with optional images, awards (bullet points), descriptions, event names, and dates
- 💼 **Sponsors Management**: Add/remove sponsors with logo uploads and website URLs

### Database Integration
- Migrated all content from hardcoded templates to PostgreSQL database
- All public pages now pull data dynamically from database
- Data persists across server restarts
- Initial data seeded from existing website content

**Database Schema:**
- `stats` - Homepage statistics
- `members` - Team members with images, roles, names
- `mentors` - Mentors/coaches with images, roles, names
- `competitions` - Competition entries organized by season
- `sponsors` - Sponsor cards with logos and URLs

### Design Improvements
- Pure black (#000000) background throughout
- Cinematic hero section (700px tall) with darkened team image and text overlay
- Light gray text (gray-300) for paragraph content
- Reduced top margins on headers (40px instead of 64px)
- Mobile-responsive with optimized padding (20px/16px)
- Modern cards with 20px border radius and blue accent hover effects

## Project Structure
```
├── app.py                 # Flask routes, database connections, admin system
├── templates/
│   ├── admin/            # Admin panel templates
│   │   ├── login.html
│   │   ├── base.html     # Admin layout with side navigation
│   │   ├── stats.html
│   │   ├── members.html
│   │   ├── competitions.html
│   │   └── sponsors.html
│   ├── base.html         # Public site layout
│   ├── home.html         # Homepage with stats from DB
│   ├── contributors.html # Team members from DB
│   ├── competitions.html # Competitions from DB
│   └── sponsors.html     # Sponsors from DB
├── static/
│   ├── css/styles.css    # All styling
│   ├── js/scripts.js
│   └── images/           # Team photos, logos, uploads
└── replit.md             # This file

```

## Technology Stack
- **Backend**: Flask (Python)
- **Database**: PostgreSQL (Neon-backed via Replit)
- **Session Management**: Flask-Session
- **File Uploads**: Werkzeug secure_filename
- **Frontend**: HTML5, CSS3, JavaScript

## User Preferences
- Pure black (#000000) background theme
- Gray-300 text color for paragraphs (light grayish, not pure white)
- Preserve hero section layered image design (michiana.png + techturb.gif)
- Minimal navbar with blur effect
- Dramatic spacing reduction throughout site
- Mobile-first responsive design

## Database Connection
Environment variables automatically configured:
- `DATABASE_URL`
- `PGHOST`, `PGPORT`, `PGUSER`, `PGPASSWORD`, `PGDATABASE`

## Security Notes
- Admin password currently hardcoded (techturb123) - consider moving to environment variable for production
- Session secret key uses environment variable with fallback
- File uploads use secure_filename to prevent path traversal
- Admin routes protected with session-based authentication

## Future Considerations
- Add admin password management
- Implement image optimization for uploads
- Add bulk operations for members/competitions
- Consider adding revision history for content changes
- Add export/backup functionality for database content
