Initial commit: Flutter app + PHP/MySQL backend on Hostinger

Replaces Firebase with a self-hosted PHP/MySQL API served from
winded.prymsolutions.com. Includes full backend (schema, auth, events,
teams, brackets, suggestions, stats, media, file upload) and updated
Flutter repositories and domain models.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-14 20:13:57 -07:00
commit b239ae3e5f
208 changed files with 19187 additions and 0 deletions
@@ -0,0 +1,73 @@
import '../domain/highlight.dart';
import '../domain/media_link.dart';
/// Repository for the Media screen content.
///
/// All content is static for the MVP — social handles and highlight metadata
/// rarely change and don't justify a Firestore round-trip. Future Phase 2
/// work can swap these getters for a Firestore-backed source if needed
/// (e.g. an admin-editable `media_links` collection).
class MediaRepository {
const MediaRepository();
/// Social media accounts featured at the top of the Media screen.
static const List<MediaLink> socialLinks = <MediaLink>[
MediaLink(
platform: SocialPlatform.instagram,
handle: '@windedfc_official',
url: 'https://instagram.com/windedfc_official',
displayName: 'Instagram',
),
MediaLink(
platform: SocialPlatform.youtube,
handle: 'Winded FC',
url: 'https://youtube.com/@windedfc',
displayName: 'YouTube',
),
MediaLink(
platform: SocialPlatform.twitter,
handle: '@windedfc',
url: 'https://twitter.com/windedfc',
displayName: 'Twitter / X',
),
MediaLink(
platform: SocialPlatform.tiktok,
handle: '@windedfc',
url: 'https://tiktok.com/@windedfc',
displayName: 'TikTok',
),
];
/// Highlight reels surfaced in the Media screen feed. Ordered newest first
/// to match how the UI presents them.
static final List<Highlight> highlights = <Highlight>[
Highlight(
id: 'highlight_summer_kickoff_final',
title: 'Summer Kickoff 7v7 Final Highlights',
description:
'Green Eagles vs. Red Lions went the distance — extra time, a '
'goal-line clearance, and a winner from 30 yards. Catch every '
'turning point from the championship match.',
youtubeUrl: 'https://youtube.com/watch?v=winded_summer_final',
publishedAt: DateTime(2026, 5, 10),
),
Highlight(
id: 'highlight_best_goals_may_2026',
title: 'Best Goals of the Month May 2026',
description:
'Ten goals, one tape. Volleys, scorpion kicks, and a half-pitch '
'lob — our community voted, and these are the May standouts.',
youtubeUrl: 'https://youtube.com/watch?v=winded_may_goals',
publishedAt: DateTime(2026, 5, 6),
),
Highlight(
id: 'highlight_wednesday_pickup',
title: 'Wednesday Night Pick-Up Top Moments',
description:
'No standings, no pressure — just the best plays from this week\'s '
'open run at Riverside Park. Bring cleats and friends next time.',
youtubeUrl: 'https://youtube.com/watch?v=winded_wed_pickup',
publishedAt: DateTime(2026, 4, 30),
),
];
}