Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions src/app/app.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ export class AppComponent implements OnInit {
]
conferencePages = [
{ title: 'Open Spaces', url: '/app/tabs/tracks/open-spaces', icon: 'people-circle-outline' },
{ title: 'Lightning Talks', url: '/app/tabs/lightning-talks', icon: 'flash-outline' },
{ title: 'Sprints', url: '/app/tabs/sprints', icon: 'rocket-outline' },
]
expoPages = [
Expand Down
11 changes: 11 additions & 0 deletions src/app/pages/lightning-talks/lightning-talks-routing.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { NgModule } from '@angular/core';
import { Routes, RouterModule } from '@angular/router';
import { LightningTalksPage } from './lightning-talks.page';

const routes: Routes = [{ path: '', component: LightningTalksPage }];

@NgModule({
imports: [RouterModule.forChild(routes)],
exports: [RouterModule],
})
export class LightningTalksPageRoutingModule {}
11 changes: 11 additions & 0 deletions src/app/pages/lightning-talks/lightning-talks.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { NgModule } from '@angular/core';
import { CommonModule } from '@angular/common';
import { IonicModule } from '@ionic/angular';
import { LightningTalksPageRoutingModule } from './lightning-talks-routing.module';
import { LightningTalksPage } from './lightning-talks.page';

@NgModule({
imports: [CommonModule, IonicModule, LightningTalksPageRoutingModule],
declarations: [LightningTalksPage]
})
export class LightningTalksPageModule {}
96 changes: 96 additions & 0 deletions src/app/pages/lightning-talks/lightning-talks.page.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
<ion-header class="ion-no-border">
<ion-toolbar>
<ion-buttons slot="start">
<ion-menu-button [color]="liveUpdateService.needsUpdate ? 'primary' : 'medium'"></ion-menu-button>
<ion-badge *ngIf="liveUpdateService.needsUpdate" size=sm>1</ion-badge>
</ion-buttons>
<ion-title>Lightning Talks</ion-title>
</ion-toolbar>
</ion-header>

<ion-content>
<div class="lt-hero">
<ion-icon name="flash" class="lt-hero-icon"></ion-icon>
<h1>Lightning Talks</h1>
<p>5 minutes. Any topic. Your moment.</p>
</div>

<ion-card class="lt-card">
<ion-card-content>
<h2>What's a Lightning Talk?</h2>
<p>
A maximum of 5 minutes on any topic of interest to other Python people.
It doesn't have to be about something you wrote — it can be something you learned,
or a technique you think other people will be interested in.
</p>
<p>
You know that thing at work that everyone comes to you for help with? <strong>Talk about that!</strong>
</p>
<p>
You know that thing you just learned that helped you out? <strong>Talk about that!</strong>
</p>
<p>
You know that thing you always wish you understood, but haven't figured out yet? <strong>Talk about that!</strong>
</p>
<p>Slides are encouraged but not required!</p>

<ion-button expand="block" color="primary" (click)="signUp()">
<ion-icon slot="start" name="create-outline"></ion-icon>
Sign Up for a Lightning Talk
</ion-button>
</ion-card-content>
</ion-card>

<ion-card class="encourage-card">
<ion-card-header>
<ion-card-title>Think you can't do one?</ion-card-title>
</ion-card-header>
<ion-card-content>
<ion-list lines="none">
<ion-item>
<ion-icon slot="start" name="school-outline" color="primary"></ion-icon>
<ion-label class="ion-text-wrap">
<strong>"Everyone already knows that"</strong>
<p>No, they don't. Even if they do, it's interesting to hear your explanation.</p>
</ion-label>
</ion-item>
<ion-item>
<ion-icon slot="start" name="bulb-outline" color="primary"></ion-icon>
<ion-label class="ion-text-wrap">
<strong>"I'm not an expert at anything"</strong>
<p>You don't have to be an expert, just interested enough to talk for 5 minutes. You can even do 1 minute!</p>
</ion-label>
</ion-item>
<ion-item>
<ion-icon slot="start" name="heart-outline" color="primary"></ion-icon>
<ion-label class="ion-text-wrap">
<strong>"It's scary talking in front of people"</strong>
<p>Folks at PyCon US are super-friendly and always welcoming of new speakers. Everyone is nervous — even people you think aren't.</p>
</ion-label>
</ion-item>
<ion-item>
<ion-icon slot="start" name="sparkles-outline" color="primary"></ion-icon>
<ion-label class="ion-text-wrap">
<strong>"My idea isn't good enough"</strong>
<p>It's a better idea than you think. Are there really any bad ideas for lightning talks? :)</p>
</ion-label>
</ion-item>
</ion-list>
</ion-card-content>
</ion-card>

<ion-list lines="full">
<ion-list-header>
<ion-label>More Info</ion-label>
</ion-list-header>
<ion-item button="true" (click)="openUrl('https://us.pycon.org/2026/events/lightning-talks/')" detail="true">
<ion-icon slot="start" name="globe-outline" color="primary"></ion-icon>
<ion-label>
<h2>Lightning Talks on pycon.org</h2>
<p>Full details, schedule, and sign-up</p>
</ion-label>
</ion-item>
</ion-list>

<div style="height: 80px"></div>
</ion-content>
61 changes: 61 additions & 0 deletions src/app/pages/lightning-talks/lightning-talks.page.scss
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
.lt-hero {
display: flex;
flex-direction: column;
align-items: center;
padding: 48px 24px 32px;
background: linear-gradient(180deg, #3B3EA9 23.5%, #101136 53.29%);
color: #fff;
text-align: center;

.lt-hero-icon {
font-size: 56px;
color: #FFD779;
margin-bottom: 12px;
}

h1 {
margin: 0;
font-size: 1.6rem;
font-weight: 700;
}

p {
margin: 8px 0 0;
font-size: 0.95rem;
opacity: 0.85;
}
}

.lt-card {
margin: -16px 20px 16px;
border-radius: 16px;
box-shadow: 0 8px 32px rgba(16, 17, 54, 0.15);
position: relative;
z-index: 1;

ion-card-content {
padding: 24px;
}

h2 {
font-size: 1.15rem;
font-weight: 700;
margin: 0 0 12px;
}

p {
font-size: 0.95rem;
line-height: 1.5;
margin-bottom: 12px;
color: var(--ion-text-color);
}
}

.encourage-card {
margin: 0 20px;
border-radius: 16px;

ion-card-title {
font-size: 1.1rem;
}
}
19 changes: 19 additions & 0 deletions src/app/pages/lightning-talks/lightning-talks.page.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { Component } from '@angular/core';
import { LiveUpdateService } from '../../providers/live-update.service';

@Component({
selector: 'app-lightning-talks',
templateUrl: './lightning-talks.page.html',
styleUrls: ['./lightning-talks.page.scss'],
})
export class LightningTalksPage {
constructor(public liveUpdateService: LiveUpdateService) {}

signUp() {
window.open('https://us.pycon.org/2026/events/lightning-talks/', '_system', 'location=yes');
}

openUrl(url: string) {
window.open(url, '_system', 'location=yes');
}
}
9 changes: 9 additions & 0 deletions src/app/pages/tabs-page/tabs-page-routing.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,15 @@ const routes: Routes = [
}
]
},
{
path: 'lightning-talks',
children: [
{
path: '',
loadChildren: () => import('../lightning-talks/lightning-talks.module').then(m => m.LightningTalksPageModule)
}
]
},
{
path: 'session-types',
children: [
Expand Down
Loading