Official website for Flutter Conf Latam - The premier Flutter conference in Latin America.
Flutter Conf Latam Web is the public-facing website for the conference, built with Flutter Web. It provides information about speakers, schedule, venue, sponsors, and ticket sales.
| Feature | Description |
|---|---|
| Home | Hero section, event features, novelties, and collaborations |
| Speakers | Browse speakers with detailed profiles and social links |
| Schedule | Interactive schedule with sessions, workshops, and activities |
| Venue | Event location with maps, amenities, and travel tips |
| Pricing | Ticket tiers and pricing information |
| Gallery | Photo gallery from previous events |
| Organizers | Meet the team and allied communities |
| Contact | Contact form and social media links |
| Privacy & Terms | Legal documents (Privacy Policy, Terms of Service) |
- Flutter SDK: 3.44.0 or higher
- Dart SDK: 3.12.0 or higher
- Firebase CLI:
npm install -g firebase-tools
- Google Chrome: to run in development mode
lib/
├── app.dart
├── bootstrap.dart
├── core/
│ ├── config/ # App configuration
│ ├── dependencies.dart # Signal initialization
│ ├── enums/ # Shared enumerations
│ ├── extensions/ # Dart extension methods
│ ├── providers/ # Shared providers
│ ├── responsive/ # Responsive utilities
│ ├── routes/ # Routing + SeoRouteObserver
│ ├── seo/ # Meta tags, SEO config, structured data
│ ├── services/ # Web local storage and other services
│ ├── social/ # Social media models and providers
│ ├── utils/ # Page preloader and utilities
│ └── widgets/ # Reusable UI components
├── features/ # Feature modules
│ ├── contact/
│ ├── errors/
│ ├── gallery/
│ ├── home/
│ ├── organizers/
│ ├── pricing/
│ ├── privacy_terms/
│ ├── schedule/
│ ├── speakers/
│ ├── splash/
│ └── venue/
├── l10n/ # Localization (en, es)
├── main.dart
└── styles/ # Theme, colors, typography, generated assets
├── core/
├── generated/
└── schemes/
git clone <repository-url>
cd flutterconfwebflutter pub getdart pub global activate flutterfire_cli
flutterfire configure \
--project=<PROJECT_ID> \
--out=lib/firebase_options.dart \
--platforms=webCreate keys.json in the root directory:
{
"COUNTRY_PAGE_URL": "https://example.com/country-page",
"TICKET_PAGE_URL": "https://example.com/tickets",
"CFP_FORM_URL": "https://example.com/call-for-papers",
"APP_STORE_URL": "https://apps.apple.com/app/your-app-id",
"GOOGLE_APP_URL": "https://play.google.com/store/apps/details?id=your.package.name",
"VENUE_MAP_URL": "https://maps.google.com/your-venue-location",
"CONTACT_EMAIL": "contact@example.com",
"FCL_PRIVACY_POLICY_URL": "https://example.com/privacy-policy"
}flutter gen-l10nflutter run -d chrome --dart-define-from-file=keys.json# In flutter_conf_backend directory
firebase emulators:start
# Then run the app (auto-connects to emulators in debug mode)
flutter run -d chrome --dart-define-from-file=keys.jsonflutter build web --release --dart-define-from-file=keys.jsonfirebase deploy --project <PROJECT_ID> --only hostingThe site is optimized for SEO and performance. Key implementations:
- Static meta tags in
index.html— read by all crawlers before JS executes - Dynamic meta tags per route — updated via
SeoRouteObserveron navigation (read by Googlebot) - Open Graph + Twitter Cards — social media previews
- JSON-LD Structured Data — Google rich snippets (event, organization, breadcrumbs)
- Canonical URLs — avoids duplicate content
- Rive asset preloading — critical animations cached before first use
- Loading indicator — spinner shown while Flutter engine loads
Note on crawlers: Dynamic meta tags work for Googlebot (executes JS). Social crawlers (WhatsApp, LinkedIn, Twitter) only read static tags from
index.html— both layers are configured.
Edit lib/core/seo/seo_config.dart:
static const String baseUrl = 'https://flutterconflatam.dev';
static const String defaultImageUrl = 'https://flutterconflatam.dev/icons/Icon-512.png';Add to the routes map in lib/core/seo/seo_config.dart:
final map = <String, dynamic>{
'/nueva-ruta': SeoConfig(
title: 'Nueva Ruta - Flutter Conf Latam',
description: 'Descripción para Google y redes sociales',
keywords: ['flutter', 'conferencia'],
imageUrl: defaultImageUrl,
),
};SeoRouteObserver applies it automatically on navigation.
In lib/core/routes/helpers/seo_route_observer.dart, method _addStructuredDataForRoute:
/*
case '/faq':
MetaTagsManager.addStructuredData(
StructuredDataBuilder.buildFaqData([
FaqItem(question: '¿Cuándo es el evento?', answer: '22-24 Sept 2026'),
]),
);
*/# Check meta tags update on navigation
flutter run -d chrome --dart-define-from-file=keys.json
# DevTools → Elements → <head> — og:title, twitter:card, application/ld+json
# Lighthouse (run on release build)
python3 -m http.server 8080 --directory build/web
# DevTools → Lighthouse → Navigation → Performance + SEO
# Expected: SEO ~95, Performance ~85
# Structured data
# https://search.google.com/test/rich-results┌─────────────────────────────────────────────────────────────────┐
│ flutter_conf_latam (web) │
│ (Presentation Layer) │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ flutter_conf_backend │
│ (Firebase Data Source Implementations) │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ flutter_conf_core │
│ (Domain Layer - Interfaces, Entities, Repositories) │
└─────────────────────────────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────────┐
│ flutter_conf_common │
│ (Result type, Exceptions, Utilities) │
└─────────────────────────────────────────────────────────────────┘
| Package | Purpose |
|---|---|
signals |
Reactive state management |
go_router |
Navigation and routing |
flutter_conf_core |
Domain layer and repositories |
flutter_conf_backend |
Firebase implementations |
flutter_conf_common |
Shared utilities |
firebase_core |
Firebase initialization |
flutter_hooks |
Hook-based widget utilities |
cached_network_image |
Network image caching |
flutter_animate |
Animations |
flutter_layout_grid |
CSS Grid-style layouts |
flutter_staggered_grid_view |
Staggered grid layouts |
flutter_svg |
SVG asset rendering |
google_fonts |
Google Fonts integration |
rive |
Interactive animations |
markdown_widget |
Markdown rendering |
shared_preferences |
Local storage for preferences |
url_launcher |
Open URLs in browser |
timezone |
Timezone-aware date/time |
universal_html |
Web platform APIs |
vector_graphics |
Optimized vector rendering |
Supports English (en) and Spanish (es). Translation files in lib/l10n/arb/.
# Regenerate after editing .arb files
flutter gen-l10n| Package | Description |
|---|---|
flutter_conf_common |
Core utilities, Result type, exceptions |
flutter_conf_core |
Domain layer - Interfaces, entities, repositories |
flutter_conf_backend |
Firebase implementations |
flutter doctorflutter gen-l10nflutterfire configureCreate the file as described in Configure environment variables.
Verify SeoRouteObserver is in the router (lib/core/routes/app_routes.dart):
final route = GoRouter(
observers: [SeoRouteObserver()],
// ...
);- Create a branch from
develop - Make your changes
- Run
flutter analyze - Create a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.