├── 2018
├── .editorconfig
├── .env.example
├── .gitattributes
├── .gitignore
├── app
│ ├── Console
│ │ └── Kernel.php
│ ├── Exceptions
│ │ ├── ApiCommunicationException.php
│ │ ├── Handler.php
│ │ ├── InvalidMeetupEventException.php
│ │ └── TwitterApiCommunicationException.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Auth
│ │ │ │ ├── ForgotPasswordController.php
│ │ │ │ ├── LoginController.php
│ │ │ │ ├── RegisterController.php
│ │ │ │ ├── ResetPasswordController.php
│ │ │ │ └── VerificationController.php
│ │ │ ├── ContactController.php
│ │ │ ├── Controller.php
│ │ │ ├── HomeController.php
│ │ │ └── TalksController.php
│ │ ├── Kernel.php
│ │ └── Middleware
│ │ │ ├── Authenticate.php
│ │ │ ├── CheckForMaintenanceMode.php
│ │ │ ├── EncryptCookies.php
│ │ │ ├── RedirectIfAuthenticated.php
│ │ │ ├── TrimStrings.php
│ │ │ ├── TrustProxies.php
│ │ │ └── VerifyCsrfToken.php
│ ├── Mail
│ │ └── ContactSubmitted.php
│ ├── Meetup.php
│ ├── Presenters
│ │ └── TweetPresenter.php
│ ├── Providers
│ │ ├── AppServiceProvider.php
│ │ ├── AuthServiceProvider.php
│ │ ├── BroadcastServiceProvider.php
│ │ ├── EventServiceProvider.php
│ │ ├── RouteServiceProvider.php
│ │ └── ServicesServiceProvider.php
│ ├── Services
│ │ ├── MeetupDotCom.php
│ │ └── Twitter.php
│ ├── Sponsor.php
│ ├── Talk.php
│ ├── User.php
│ └── UserProfile.php
├── artisan
├── bootstrap
│ ├── app.php
│ ├── cache
│ │ └── .gitignore
│ └── helpers.php
├── composer.json
├── composer.lock
├── config
│ ├── app.php
│ ├── auth.php
│ ├── broadcasting.php
│ ├── cache.php
│ ├── contact.php
│ ├── database.php
│ ├── debugbar.php
│ ├── filesystems.php
│ ├── hashing.php
│ ├── logging.php
│ ├── mail.php
│ ├── queue.php
│ ├── services.php
│ ├── session.php
│ └── view.php
├── database
│ ├── .gitignore
│ ├── factories
│ │ ├── MeetupFactory.php
│ │ ├── SponsorFactory.php
│ │ ├── TalkFactory.php
│ │ ├── UserFactory.php
│ │ └── UserProfileFactory.php
│ ├── migrations
│ │ ├── 2014_10_12_000000_create_users_table.php
│ │ ├── 2014_10_12_000001_create_user_profiles_table.php
│ │ ├── 2014_10_12_100000_create_password_resets_table.php
│ │ ├── 2017_06_14_224930_create_meetups_table.php
│ │ ├── 2017_06_15_224148_create_talks_table.php
│ │ └── 2017_06_24_164832_create_sponsors_table.php
│ └── seeds
│ │ ├── DatabaseSeeder.php
│ │ ├── MeetupsTableSeeder.php
│ │ ├── SponsorsTableSeeder.php
│ │ ├── TalksTableSeeder.php
│ │ └── UsersTableSeeder.php
├── package-lock.json
├── package.json
├── phpunit.xml
├── public
│ ├── .DS_Store
│ ├── .htaccess
│ ├── css
│ │ └── app.css
│ ├── favicon.ico
│ ├── img
│ │ ├── android-browser-icon.png
│ │ ├── avatars
│ │ │ ├── chris.jpg
│ │ │ ├── lawrence.jpg
│ │ │ ├── neo.jpg
│ │ │ ├── ore.jpg
│ │ │ ├── stephen.jpg
│ │ │ └── vanessa.jpg
│ │ ├── community.jpg
│ │ ├── conference.svg
│ │ ├── contribute.jpg
│ │ ├── empty.svg
│ │ ├── favicon.png
│ │ ├── file-search.svg
│ │ ├── heart.svg
│ │ ├── jumbo.jpg
│ │ ├── logo-icon.png
│ │ ├── logo.png
│ │ ├── logo@2x.png
│ │ ├── photo-placeholder.png
│ │ ├── speaker.jpg
│ │ ├── sponsor-andela.png
│ │ ├── sponsor-ck.png
│ │ ├── sponsor-devcenter.png
│ │ ├── sponsor-findworka.png
│ │ ├── sponsor-gigalayer.png
│ │ ├── sponsor-nexmo.png
│ │ ├── sponsor-pusher.png
│ │ ├── sponsor-scotch.png
│ │ ├── sprite.svg
│ │ ├── talks.jpg
│ │ ├── track-placeholder.png
│ │ └── under-construction.svg
│ ├── index.php
│ ├── js
│ │ └── app.js
│ ├── mix-manifest.json
│ ├── robots.txt
│ ├── svg
│ │ ├── 403.svg
│ │ ├── 404.svg
│ │ ├── 500.svg
│ │ └── 503.svg
│ └── videos
│ │ ├── .gitignore
│ │ └── readme.md
├── readme.md
├── resources
│ ├── css
│ │ └── app.css
│ ├── img
│ │ ├── android-browser-icon.png
│ │ ├── community.jpg
│ │ ├── conference.svg
│ │ ├── contribute.jpg
│ │ ├── empty.svg
│ │ ├── favicon.png
│ │ ├── file-search.svg
│ │ ├── heart.svg
│ │ ├── jumbo.jpg
│ │ ├── logo-icon.png
│ │ ├── logo.png
│ │ ├── logo@2x.png
│ │ ├── photo-placeholder.png
│ │ ├── speaker.jpg
│ │ ├── sponsor-andela.png
│ │ ├── sponsor-ck.png
│ │ ├── sponsor-devcenter.png
│ │ ├── sponsor-findworka.png
│ │ ├── sponsor-gigalayer.png
│ │ ├── sponsor-nexmo.png
│ │ ├── sponsor-pusher.png
│ │ ├── sponsor-scotch.png
│ │ ├── sprite.svg
│ │ ├── talks.jpg
│ │ ├── track-placeholder.png
│ │ └── under-construction.svg
│ ├── js
│ │ ├── app.js
│ │ ├── bootstrap.js
│ │ ├── components
│ │ │ ├── ContactFormComponent.vue
│ │ │ ├── JumboComponent.vue
│ │ │ ├── LearnComponent.vue
│ │ │ ├── SlackInviterComponent.vue
│ │ │ ├── SpeakerCallComponent.vue
│ │ │ ├── SpeakerComponent.vue
│ │ │ ├── SponsorsComponent.vue
│ │ │ ├── TinyLetterSubscribeComponent.vue
│ │ │ └── TweetComponent.vue
│ │ └── utilities
│ │ │ ├── mobileCheck.js
│ │ │ ├── parallaxBackgroundImage.js
│ │ │ ├── smoothScroll.js
│ │ │ ├── snackbar.js
│ │ │ ├── toggleContactModal.js
│ │ │ └── validEmail.js
│ ├── lang
│ │ └── en
│ │ │ ├── auth.php
│ │ │ ├── pagination.php
│ │ │ ├── passwords.php
│ │ │ └── validation.php
│ └── views
│ │ ├── emails
│ │ └── contact.blade.php
│ │ ├── index.blade.php
│ │ ├── layouts
│ │ └── app.blade.php
│ │ ├── partials
│ │ ├── contact-modal.blade.php
│ │ ├── footer.blade.php
│ │ ├── gtm.blade.php
│ │ ├── nav.blade.php
│ │ └── popups.blade.php
│ │ └── talks.blade.php
├── routes
│ ├── api.php
│ ├── channels.php
│ ├── console.php
│ └── web.php
├── server.php
├── storage
│ ├── app
│ │ ├── .gitignore
│ │ └── public
│ │ │ └── .gitignore
│ ├── debugbar
│ │ └── .gitignore
│ ├── framework
│ │ ├── .gitignore
│ │ ├── cache
│ │ │ ├── .gitignore
│ │ │ └── data
│ │ │ │ └── .gitignore
│ │ ├── sessions
│ │ │ └── .gitignore
│ │ ├── testing
│ │ │ └── .gitignore
│ │ └── views
│ │ │ └── .gitignore
│ └── logs
│ │ └── .gitignore
├── tailwind.js
├── tests
│ ├── CreatesApplication.php
│ ├── Feature
│ │ └── ExampleTest.php
│ ├── TestCase.php
│ └── Unit
│ │ └── ExampleTest.php
├── todo.md
└── webpack.mix.js
├── 2019
├── .editorconfig
├── .env.example
├── .gitattributes
├── .gitignore
├── .styleci.yml
├── app
│ ├── Console
│ │ └── Kernel.php
│ ├── Events
│ │ └── TicketRegistrationComplete.php
│ ├── Exceptions
│ │ └── Handler.php
│ ├── Http
│ │ ├── Controllers
│ │ │ ├── Api
│ │ │ │ ├── SlackInviteController.php
│ │ │ │ └── SpeakersController.php
│ │ │ ├── Auth
│ │ │ │ ├── ForgotPasswordController.php
│ │ │ │ ├── LoginController.php
│ │ │ │ ├── RegisterController.php
│ │ │ │ ├── ResetPasswordController.php
│ │ │ │ └── VerificationController.php
│ │ │ ├── CodeOfConductController.php
│ │ │ ├── Controller.php
│ │ │ ├── HomeController.php
│ │ │ └── RegistrationWebhookController.php
│ │ ├── Kernel.php
│ │ ├── Middleware
│ │ │ ├── Authenticate.php
│ │ │ ├── CheckForMaintenanceMode.php
│ │ │ ├── EncryptCookies.php
│ │ │ ├── RedirectIfAuthenticated.php
│ │ │ ├── TrimStrings.php
│ │ │ ├── TrustProxies.php
│ │ │ └── VerifyCsrfToken.php
│ │ └── Requests
│ │ │ └── WebhookRequest.php
│ ├── Listeners
│ │ └── SendSponsorContactOptInNotification.php
│ ├── Notifications
│ │ └── VerifySponsorshipContactOptIn.php
│ ├── Providers
│ │ ├── AppServiceProvider.php
│ │ ├── AuthServiceProvider.php
│ │ ├── BroadcastServiceProvider.php
│ │ ├── EventServiceProvider.php
│ │ └── RouteServiceProvider.php
│ ├── TicketUser.php
│ └── User.php
├── artisan
├── bootstrap
│ ├── app.php
│ └── cache
│ │ └── .gitignore
├── composer.json
├── composer.lock
├── config
│ ├── app.php
│ ├── auth.php
│ ├── broadcasting.php
│ ├── cache.php
│ ├── database.php
│ ├── filesystems.php
│ ├── hashing.php
│ ├── logging.php
│ ├── mail.php
│ ├── queue.php
│ ├── services.php
│ ├── session.php
│ ├── tito.php
│ └── view.php
├── database
│ ├── .gitignore
│ ├── factories
│ │ └── UserFactory.php
│ ├── migrations
│ │ ├── 2014_10_12_000000_create_users_table.php
│ │ ├── 2014_10_12_100000_create_password_resets_table.php
│ │ ├── 2019_08_19_000000_create_failed_jobs_table.php
│ │ └── 2019_09_29_133502_create_ticket_user_table.php
│ └── seeders
│ │ └── DatabaseSeeder.php
├── package-lock.json
├── package.json
├── phpunit.xml
├── public
│ ├── .DS_Store
│ ├── .htaccess
│ ├── css
│ │ └── app.css
│ ├── favicon.ico
│ ├── img
│ │ ├── .DS_Store
│ │ ├── android-browser-icon.png
│ │ ├── arrow.png
│ │ ├── arrow.svg
│ │ ├── community-slant-1.png
│ │ ├── community-slant-2.png
│ │ ├── community.jpg
│ │ ├── facebook.png
│ │ ├── github.png
│ │ ├── logo-colored.png
│ │ ├── logo.png
│ │ ├── no-photo.png
│ │ ├── play.png
│ │ ├── play.svg
│ │ ├── sample-icons
│ │ │ ├── sponsor1.png
│ │ │ ├── sponsor2.png
│ │ │ ├── sponsor3.png
│ │ │ ├── sponsor4.png
│ │ │ ├── sponsor5.png
│ │ │ ├── sponsor6.png
│ │ │ ├── sponsor7.png
│ │ │ └── sponsor8.png
│ │ ├── speaker-stage.png
│ │ ├── speaker1.png
│ │ ├── speaker2.png
│ │ ├── speaker3.png
│ │ ├── speaker4.png
│ │ ├── speaker5.png
│ │ ├── speaker6.png
│ │ ├── sponsor-ay.png
│ │ ├── sponsor-ck-icon.png
│ │ ├── sponsor-ck.png
│ │ ├── sponsor-laravel.png
│ │ ├── sponsor-pusher.png
│ │ ├── sponsor.png
│ │ ├── twitter.png
│ │ └── video.png
│ ├── index.php
│ ├── js
│ │ └── app.js
│ ├── mix-manifest.json
│ ├── robots.txt
│ └── videos
│ │ ├── bg.mp4
│ │ ├── bg.ogv
│ │ └── bg.webm
├── resources
│ ├── js
│ │ ├── app.js
│ │ ├── bootstrap.js
│ │ └── components
│ │ │ ├── ScheduleComponent.vue
│ │ │ ├── SlackInviteComponent.vue
│ │ │ └── SpeakersComponent.vue
│ ├── lang
│ │ └── en
│ │ │ ├── auth.php
│ │ │ ├── pagination.php
│ │ │ ├── passwords.php
│ │ │ └── validation.php
│ ├── sass
│ │ ├── _components.scss
│ │ ├── _variables.scss
│ │ ├── app.scss
│ │ └── pages
│ │ │ ├── _home.scss
│ │ │ └── _single.scss
│ └── views
│ │ ├── layouts
│ │ └── front.blade.php
│ │ ├── pages
│ │ ├── code-of-conduct.blade.php
│ │ └── home.blade.php
│ │ └── partials
│ │ ├── footer.blade.php
│ │ ├── gtm.blade.php
│ │ └── nav.blade.php
├── routes
│ ├── api.php
│ ├── channels.php
│ ├── console.php
│ └── web.php
├── server.php
├── storage
│ ├── app
│ │ ├── .gitignore
│ │ └── public
│ │ │ └── .gitignore
│ ├── framework
│ │ ├── .gitignore
│ │ ├── cache
│ │ │ ├── .gitignore
│ │ │ └── data
│ │ │ │ └── .gitignore
│ │ ├── sessions
│ │ │ └── .gitignore
│ │ ├── testing
│ │ │ └── .gitignore
│ │ └── views
│ │ │ └── .gitignore
│ └── logs
│ │ └── .gitignore
├── tests
│ ├── Bootstrap.php
│ ├── CreatesApplication.php
│ ├── Feature
│ │ └── ExampleTest.php
│ ├── TestCase.php
│ └── Unit
│ │ └── ExampleTest.php
├── todo.md
└── webpack.mix.js
├── .gitignore
├── LICENSE
├── current
└── deploy.sh
/.gitignore:
--------------------------------------------------------------------------------
1 | /.idea
2 |
--------------------------------------------------------------------------------
/2018/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | indent_style = space
8 | indent_size = 4
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | trim_trailing_whitespace = false
13 |
14 | [*.yml]
15 | indent_size = 2
16 |
--------------------------------------------------------------------------------
/2018/.env.example:
--------------------------------------------------------------------------------
1 | APP_NAME=Laravel
2 | APP_ENV=local
3 | APP_KEY=
4 | APP_DEBUG=true
5 | APP_URL=http://localhost
6 |
7 | LOG_CHANNEL=stack
8 |
9 | DB_CONNECTION=mysql
10 | DB_HOST=127.0.0.1
11 | DB_PORT=3306
12 | DB_DATABASE=homestead
13 | DB_USERNAME=homestead
14 | DB_PASSWORD=secret
15 |
16 | BROADCAST_DRIVER=log
17 | CACHE_DRIVER=file
18 | QUEUE_CONNECTION=sync
19 | SESSION_DRIVER=file
20 | SESSION_LIFETIME=120
21 |
22 | REDIS_HOST=127.0.0.1
23 | REDIS_PASSWORD=null
24 | REDIS_PORT=6379
25 |
26 | MAIL_DRIVER=smtp
27 | MAIL_HOST=smtp.mailtrap.io
28 | MAIL_PORT=2525
29 | MAIL_USERNAME=null
30 | MAIL_PASSWORD=null
31 | MAIL_ENCRYPTION=null
32 |
33 | PUSHER_APP_ID=
34 | PUSHER_APP_KEY=
35 | PUSHER_APP_SECRET=
36 | PUSHER_APP_CLUSTER=mt1
37 |
38 | MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
39 | MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
40 |
--------------------------------------------------------------------------------
/2018/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 | *.css linguist-vendored
3 | *.scss linguist-vendored
4 | *.js linguist-vendored
5 | CHANGELOG.md export-ignore
6 |
--------------------------------------------------------------------------------
/2018/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | /public/hot
3 | /public/storage
4 | /storage/*.key
5 | /vendor
6 | .env
7 | .phpunit.result.cache
8 | Homestead.json
9 | Homestead.yaml
10 | npm-debug.log
11 | yarn-error.log
12 | .env.bak
13 |
--------------------------------------------------------------------------------
/2018/app/Console/Kernel.php:
--------------------------------------------------------------------------------
1 | command('inspire')
28 | // ->hourly();
29 | }
30 |
31 | /**
32 | * Register the commands for the application.
33 | *
34 | * @return void
35 | */
36 | protected function commands()
37 | {
38 | $this->load(__DIR__.'/Commands');
39 |
40 | require base_path('routes/console.php');
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/2018/app/Exceptions/ApiCommunicationException.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/2018/app/Http/Controllers/Auth/LoginController.php:
--------------------------------------------------------------------------------
1 | middleware('guest')->except('logout');
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/2018/app/Http/Controllers/Auth/RegisterController.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
41 | }
42 |
43 | /**
44 | * Get a validator for an incoming registration request.
45 | *
46 | * @param array $data
47 | * @return \Illuminate\Contracts\Validation\Validator
48 | */
49 | protected function validator(array $data)
50 | {
51 | return Validator::make($data, [
52 | 'name' => ['required', 'string', 'max:255'],
53 | 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
54 | 'password' => ['required', 'string', 'min:6', 'confirmed'],
55 | ]);
56 | }
57 |
58 | /**
59 | * Create a new user instance after a valid registration.
60 | *
61 | * @param array $data
62 | * @return \App\User
63 | */
64 | protected function create(array $data)
65 | {
66 | return User::create([
67 | 'name' => $data['name'],
68 | 'email' => $data['email'],
69 | 'password' => Hash::make($data['password']),
70 | ]);
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/2018/app/Http/Controllers/Auth/ResetPasswordController.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/2018/app/Http/Controllers/Auth/VerificationController.php:
--------------------------------------------------------------------------------
1 | middleware('auth');
38 | $this->middleware('signed')->only('verify');
39 | $this->middleware('throttle:6,1')->only('verify', 'resend');
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/2018/app/Http/Controllers/ContactController.php:
--------------------------------------------------------------------------------
1 | validate([
20 | 'email' => 'required|email',
21 | 'name' => 'required|string|between:5,100',
22 | 'message' => 'required|string|between:100,2000',
23 | ]);
24 |
25 | $to = config('contact.to');
26 |
27 | // TODO: Make this an event instead. This is so we can hook other listeners.
28 | Mail::to($to['email'], $to['name'])->send(new ContactSubmitted(
29 | collect([
30 | 'name' => $request->get('name'),
31 | 'replyTo' => $request->get('email'),
32 | 'message' => $request->get('message'),
33 | 'email' => config('contact.from.email'),
34 | ])
35 | ));
36 |
37 | return response()->json(['success' => true]);
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/2018/app/Http/Controllers/Controller.php:
--------------------------------------------------------------------------------
1 | get();
20 |
21 | $tweets = Twitter::searchWithFallbackQuery()->get('tweets');
22 |
23 | $tweet = $tweets->isNotEmpty() ? new TweetPresenter($tweets->random()) : false;
24 |
25 | return view('index', compact('sponsors', 'tweet'));
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/2018/app/Http/Controllers/TalksController.php:
--------------------------------------------------------------------------------
1 | first()->get('details'));
13 |
14 | return view('talks', compact('meetups'));
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/2018/app/Http/Middleware/Authenticate.php:
--------------------------------------------------------------------------------
1 | expectsJson()) {
18 | return route('login');
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/2018/app/Http/Middleware/CheckForMaintenanceMode.php:
--------------------------------------------------------------------------------
1 | check()) {
21 | return redirect('/home');
22 | }
23 |
24 | return $next($request);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/2018/app/Http/Middleware/TrimStrings.php:
--------------------------------------------------------------------------------
1 | data = $data;
25 | }
26 |
27 | /**
28 | * Build the message.
29 | *
30 | * @return $this
31 | */
32 | public function build()
33 | {
34 | return $this->markdown('emails.contact')
35 | ->with($this->data->toArray())
36 | ->from($this->data->get('email'), $this->data->get('name'))
37 | ->replyTo($this->data->get('replyTo'))
38 | ->subject('Laravel Nigeria New Message');
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/2018/app/Presenters/TweetPresenter.php:
--------------------------------------------------------------------------------
1 | tweet = new Collection([
28 | 'original' => $tweet,
29 | 'user_name' => $tweet->user->name,
30 | 'user_screen_name' => $tweet->user->screen_name,
31 | 'text' => $tweet ? TwitterApi::linkify($tweet->text) : '',
32 | 'user_profile_link' => $tweet ? TwitterApi::linkUser($tweet->user) : '',
33 | 'user_avatar' => $tweet ? Twitter::avatar($tweet->user, 'bigger') : '',
34 | ]);
35 | }
36 |
37 | /**
38 | * Get a key from the tweet collection.
39 | *
40 | * @param string $key
41 | * @return mixed
42 | */
43 | public function get(string $key)
44 | {
45 | return $this->tweet->get($key);
46 | }
47 |
48 | /**
49 | * Returns an array representation of the Tweet.
50 | *
51 | * @return array
52 | */
53 | public function toArray(): array
54 | {
55 | return $this->tweet->toArray();
56 | }
57 |
58 | /**
59 | * Returns a Collection representation of the Tweet.
60 | *
61 | * @return \Illuminate\Support\Collection
62 | */
63 | public function toCollection(): \Illuminate\Support\Collection
64 | {
65 | return $this->tweet;
66 | }
67 |
68 | /**
69 | * Json serialisable data.
70 | *
71 | * @return array
72 | */
73 | public function jsonSerialize(): array
74 | {
75 | return $this->toArray();
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/2018/app/Providers/AppServiceProvider.php:
--------------------------------------------------------------------------------
1 | loadDevelopmentServiceProviders();
17 |
18 | $this->loadPublicConfigItems();
19 | }
20 |
21 | /**
22 | * Register any application services.
23 | *
24 | * @return void
25 | */
26 | public function register()
27 | {
28 | }
29 |
30 | /**
31 | * Load the service providers that should only be available in development environment.
32 | *
33 | * @return void
34 | */
35 | protected function loadDevelopmentServiceProviders()
36 | {
37 | if (app()->environment('local')) {
38 | app()->register(\Barryvdh\Debugbar\ServiceProvider::class);
39 | }
40 | }
41 |
42 | /**
43 | * Load the configuration items to make available to JavaScript.
44 | *
45 | * @return void
46 | */
47 | protected function loadPublicConfigItems()
48 | {
49 | $appConfigKeys = [
50 | 'name', 'url', 'twitter', 'welcome_message', 'jumbo_videos', 'cfp_link'
51 | ];
52 |
53 | view()->share('lnConfig', json_encode([
54 | 'app' => array_only(config('app'), $appConfigKeys)
55 | ]));
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/2018/app/Providers/AuthServiceProvider.php:
--------------------------------------------------------------------------------
1 | 'App\Policies\ModelPolicy',
17 | ];
18 |
19 | /**
20 | * Register any authentication / authorization services.
21 | *
22 | * @return void
23 | */
24 | public function boot()
25 | {
26 | $this->registerPolicies();
27 |
28 | //
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/2018/app/Providers/BroadcastServiceProvider.php:
--------------------------------------------------------------------------------
1 | [
19 | SendEmailVerificationNotification::class,
20 | ],
21 | ];
22 |
23 | /**
24 | * Register any events for your application.
25 | *
26 | * @return void
27 | */
28 | public function boot()
29 | {
30 | parent::boot();
31 |
32 | //
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/2018/app/Providers/RouteServiceProvider.php:
--------------------------------------------------------------------------------
1 | mapApiRoutes();
39 |
40 | $this->mapWebRoutes();
41 |
42 | //
43 | }
44 |
45 | /**
46 | * Define the "web" routes for the application.
47 | *
48 | * These routes all receive session state, CSRF protection, etc.
49 | *
50 | * @return void
51 | */
52 | protected function mapWebRoutes()
53 | {
54 | Route::middleware('web')
55 | ->namespace($this->namespace)
56 | ->group(base_path('routes/web.php'));
57 | }
58 |
59 | /**
60 | * Define the "api" routes for the application.
61 | *
62 | * These routes are typically stateless.
63 | *
64 | * @return void
65 | */
66 | protected function mapApiRoutes()
67 | {
68 | Route::prefix('api')
69 | ->middleware('api')
70 | ->namespace($this->namespace)
71 | ->group(base_path('routes/api.php'));
72 | }
73 | }
74 |
--------------------------------------------------------------------------------
/2018/app/Providers/ServicesServiceProvider.php:
--------------------------------------------------------------------------------
1 | loadMeetupCommunityDetails();
19 | }
20 |
21 | /**
22 | * Register any application services.
23 | *
24 | * @return void
25 | */
26 | public function register()
27 | {
28 | $this->app->bind('App\\Services\\MeetupDotCom', function () {
29 | return new MeetupDotCom([
30 | 'key' => config('services.meetup.key'),
31 | 'urlName' => config('services.meetup.urlName'),
32 | ]);
33 | });
34 | }
35 |
36 | /**
37 | * Loads some global view variables.
38 | *
39 | * @return void
40 | */
41 | protected function loadMeetupCommunityDetails()
42 | {
43 | try {
44 | view()->share(
45 | 'meetup__next_event',
46 | Meetup::groupDetailsWithNextEvent()->get('next_event')
47 | );
48 | } catch (\Exception $e) {
49 | // Possibly a database connection error happened
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/2018/app/Sponsor.php:
--------------------------------------------------------------------------------
1 | 'int',
30 | ];
31 |
32 | /**
33 | * Indicates if the model should be timestamped.
34 | *
35 | * @var bool
36 | */
37 | public $timestamps = false;
38 |
39 | /**
40 | * Get all the sponsors.
41 | *
42 | * @param $query
43 | * @return mixed
44 | */
45 | public function scopeOrderedByLevel($query)
46 | {
47 | return $query->orderBy('level', 'desc');
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/2018/app/User.php:
--------------------------------------------------------------------------------
1 | hasOne(UserProfile::class);
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/2018/app/UserProfile.php:
--------------------------------------------------------------------------------
1 | 'array',
34 | ];
35 |
36 | /**
37 | * The accessors to append to the model's array form.
38 | *
39 | * @var array
40 | */
41 | protected $appends = [
42 | 'fullName',
43 | ];
44 |
45 | /**
46 | * Get the users full name.
47 | *
48 | * @return string
49 | */
50 | public function getFullNameAttribute(): string
51 | {
52 | return "{$this->attributes['first_name']} {$this->attributes['last_name']}";
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/2018/artisan:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 | make(Illuminate\Contracts\Console\Kernel::class);
34 |
35 | $status = $kernel->handle(
36 | $input = new Symfony\Component\Console\Input\ArgvInput,
37 | new Symfony\Component\Console\Output\ConsoleOutput
38 | );
39 |
40 | /*
41 | |--------------------------------------------------------------------------
42 | | Shutdown The Application
43 | |--------------------------------------------------------------------------
44 | |
45 | | Once Artisan has finished running, we will fire off the shutdown events
46 | | so that any final work may be done by the application before we shut
47 | | down the process. This is the last thing to happen to the request.
48 | |
49 | */
50 |
51 | $kernel->terminate($input, $status);
52 |
53 | exit($status);
54 |
--------------------------------------------------------------------------------
/2018/bootstrap/app.php:
--------------------------------------------------------------------------------
1 | singleton(
30 | Illuminate\Contracts\Http\Kernel::class,
31 | App\Http\Kernel::class
32 | );
33 |
34 | $app->singleton(
35 | Illuminate\Contracts\Console\Kernel::class,
36 | App\Console\Kernel::class
37 | );
38 |
39 | $app->singleton(
40 | Illuminate\Contracts\Debug\ExceptionHandler::class,
41 | App\Exceptions\Handler::class
42 | );
43 |
44 | /*
45 | |--------------------------------------------------------------------------
46 | | Return The Application
47 | |--------------------------------------------------------------------------
48 | |
49 | | This script returns the application instance. The instance is given to
50 | | the calling script so we can separate the building of the instances
51 | | from the actual running of the application and sending responses.
52 | |
53 | */
54 |
55 | return $app;
56 |
--------------------------------------------------------------------------------
/2018/bootstrap/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/2018/bootstrap/helpers.php:
--------------------------------------------------------------------------------
1 | {$line}
";
17 | }
18 | }
19 |
20 | return $paragraphs;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/2018/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "laravel/laravel",
3 | "type": "project",
4 | "description": "The Laravel Framework.",
5 | "keywords": [
6 | "framework",
7 | "laravel"
8 | ],
9 | "license": "MIT",
10 | "require": {
11 | "php": "^7.1.3",
12 | "fideloper/proxy": "^4.0",
13 | "laravel-frontend-presets/tailwindcss": "^0.7.0",
14 | "laravel/framework": "5.7.*",
15 | "laravel/tinker": "^1.0",
16 | "thujohn/twitter": "^2.2"
17 | },
18 | "require-dev": {
19 | "barryvdh/laravel-debugbar": "^3.2",
20 | "beyondcode/laravel-dump-server": "^1.0",
21 | "filp/whoops": "^2.0",
22 | "fzaninotto/faker": "^1.4",
23 | "mockery/mockery": "^1.0",
24 | "nunomaduro/collision": "^2.0",
25 | "phpunit/phpunit": "^7.0"
26 | },
27 | "config": {
28 | "optimize-autoloader": true,
29 | "preferred-install": "dist",
30 | "sort-packages": true
31 | },
32 | "extra": {
33 | "laravel": {
34 | "dont-discover": [
35 | "barryvdh/laravel-debugbar"
36 | ]
37 | }
38 | },
39 | "autoload": {
40 | "psr-4": {
41 | "App\\": "app/"
42 | },
43 | "classmap": [
44 | "database/seeds",
45 | "database/factories"
46 | ],
47 | "files": [
48 | "bootstrap/helpers.php"
49 | ]
50 | },
51 | "autoload-dev": {
52 | "psr-4": {
53 | "Tests\\": "tests/"
54 | }
55 | },
56 | "minimum-stability": "dev",
57 | "prefer-stable": true,
58 | "scripts": {
59 | "post-autoload-dump": [
60 | "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
61 | "@php artisan package:discover --ansi"
62 | ],
63 | "post-root-package-install": [
64 | "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
65 | ],
66 | "post-create-project-cmd": [
67 | "@php artisan key:generate --ansi"
68 | ]
69 | }
70 | }
71 |
--------------------------------------------------------------------------------
/2018/config/broadcasting.php:
--------------------------------------------------------------------------------
1 | env('BROADCAST_DRIVER', 'null'),
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Broadcast Connections
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may define all of the broadcast connections that will be used
26 | | to broadcast events to other systems or over websockets. Samples of
27 | | each available type of connection are provided inside this array.
28 | |
29 | */
30 |
31 | 'connections' => [
32 |
33 | 'pusher' => [
34 | 'driver' => 'pusher',
35 | 'key' => env('PUSHER_APP_KEY'),
36 | 'secret' => env('PUSHER_APP_SECRET'),
37 | 'app_id' => env('PUSHER_APP_ID'),
38 | 'options' => [
39 | 'cluster' => env('PUSHER_APP_CLUSTER'),
40 | 'encrypted' => true,
41 | ],
42 | ],
43 |
44 | 'redis' => [
45 | 'driver' => 'redis',
46 | 'connection' => 'default',
47 | ],
48 |
49 | 'log' => [
50 | 'driver' => 'log',
51 | ],
52 |
53 | 'null' => [
54 | 'driver' => 'null',
55 | ],
56 |
57 | ],
58 |
59 | ];
60 |
--------------------------------------------------------------------------------
/2018/config/contact.php:
--------------------------------------------------------------------------------
1 | [
5 | 'name' => env('CONTACT_MSG_SEND_TO_NAME', 'Neo Ighodaro'),
6 | 'email' => env('CONTACT_MSG_SEND_TO_EMAIL', 'neo@creativitykills.co'),
7 | ],
8 |
9 | 'from' => [
10 | 'email' => env('CONTACT_MSG_SEND_FROM_EMAIL', 'neo@creativitykills.co'),
11 | ],
12 | ];
13 |
--------------------------------------------------------------------------------
/2018/config/filesystems.php:
--------------------------------------------------------------------------------
1 | env('FILESYSTEM_DRIVER', 'local'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Default Cloud Filesystem Disk
21 | |--------------------------------------------------------------------------
22 | |
23 | | Many applications store files both locally and in the cloud. For this
24 | | reason, you may specify a default "cloud" driver here. This driver
25 | | will be bound as the Cloud disk implementation in the container.
26 | |
27 | */
28 |
29 | 'cloud' => env('FILESYSTEM_CLOUD', 's3'),
30 |
31 | /*
32 | |--------------------------------------------------------------------------
33 | | Filesystem Disks
34 | |--------------------------------------------------------------------------
35 | |
36 | | Here you may configure as many filesystem "disks" as you wish, and you
37 | | may even configure multiple disks of the same driver. Defaults have
38 | | been setup for each driver as an example of the required options.
39 | |
40 | | Supported Drivers: "local", "ftp", "sftp", "s3", "rackspace"
41 | |
42 | */
43 |
44 | 'disks' => [
45 |
46 | 'local' => [
47 | 'driver' => 'local',
48 | 'root' => storage_path('app'),
49 | ],
50 |
51 | 'public' => [
52 | 'driver' => 'local',
53 | 'root' => storage_path('app/public'),
54 | 'url' => env('APP_URL').'/storage',
55 | 'visibility' => 'public',
56 | ],
57 |
58 | 's3' => [
59 | 'driver' => 's3',
60 | 'key' => env('AWS_ACCESS_KEY_ID'),
61 | 'secret' => env('AWS_SECRET_ACCESS_KEY'),
62 | 'region' => env('AWS_DEFAULT_REGION'),
63 | 'bucket' => env('AWS_BUCKET'),
64 | 'url' => env('AWS_URL'),
65 | ],
66 |
67 | ],
68 |
69 | ];
70 |
--------------------------------------------------------------------------------
/2018/config/hashing.php:
--------------------------------------------------------------------------------
1 | 'bcrypt',
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Bcrypt Options
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may specify the configuration options that should be used when
26 | | passwords are hashed using the Bcrypt algorithm. This will allow you
27 | | to control the amount of time it takes to hash the given password.
28 | |
29 | */
30 |
31 | 'bcrypt' => [
32 | 'rounds' => env('BCRYPT_ROUNDS', 10),
33 | ],
34 |
35 | /*
36 | |--------------------------------------------------------------------------
37 | | Argon Options
38 | |--------------------------------------------------------------------------
39 | |
40 | | Here you may specify the configuration options that should be used when
41 | | passwords are hashed using the Argon algorithm. These will allow you
42 | | to control the amount of time it takes to hash the given password.
43 | |
44 | */
45 |
46 | 'argon' => [
47 | 'memory' => 1024,
48 | 'threads' => 2,
49 | 'time' => 2,
50 | ],
51 |
52 | ];
53 |
--------------------------------------------------------------------------------
/2018/config/view.php:
--------------------------------------------------------------------------------
1 | [
17 | resource_path('views'),
18 | ],
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Compiled View Path
23 | |--------------------------------------------------------------------------
24 | |
25 | | This option determines where all the compiled Blade templates will be
26 | | stored for your application. Typically, this is within the storage
27 | | directory. However, as usual, you are free to change this value.
28 | |
29 | */
30 |
31 | 'compiled' => env(
32 | 'VIEW_COMPILED_PATH',
33 | realpath(storage_path('framework/views'))
34 | ),
35 |
36 | ];
37 |
--------------------------------------------------------------------------------
/2018/database/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite
2 |
--------------------------------------------------------------------------------
/2018/database/factories/MeetupFactory.php:
--------------------------------------------------------------------------------
1 | define(App\Meetup::class, function (Faker $faker) {
6 | static $event_id;
7 |
8 | if ($event_id) {
9 | // Quite specific to Laravel Nigeria's meetup page and its events...
10 | $event_id = $event_id === 238642730 ? 240522436 : rand(100000000, 999999999);
11 | }
12 |
13 | $meetup_name = config('services.meetup.urlName');
14 |
15 | return [
16 | 'event_id' => $event_id ?: $event_id = 238642730,
17 | 'link' => "https://www.meetup.com/{$meetup_name}/events/{$event_id}/",
18 | ];
19 | });
20 |
--------------------------------------------------------------------------------
/2018/database/factories/SponsorFactory.php:
--------------------------------------------------------------------------------
1 | define(App\Sponsor::class, function (Faker $faker) {
6 | return [
7 | 'name' => $faker->company,
8 | 'description' => $faker->realText(90),
9 | 'level' => rand(1, 10),
10 | 'responsible_for' => $faker->realText(20),
11 | 'link' => $faker->url,
12 | 'logo' => $faker->imageUrl(100, 30),
13 | ];
14 | });
15 |
--------------------------------------------------------------------------------
/2018/database/factories/TalkFactory.php:
--------------------------------------------------------------------------------
1 | define(App\Talk::class, function (Faker $faker) {
6 | return [
7 | 'user_id' => App\User::inRandomOrder()->first()->id,
8 | 'meetup_id' => App\Meetup::inRandomOrder()->first()->id,
9 | 'topic' => $faker->sentence,
10 | 'overview' => $faker->paragraphs(3, true),
11 | 'accepted' => (bool) rand(0, 1),
12 | 'video_url' => $faker->url,
13 | 'slides_url' => $faker->url,
14 | ];
15 | });
16 |
--------------------------------------------------------------------------------
/2018/database/factories/UserFactory.php:
--------------------------------------------------------------------------------
1 | define(App\User::class, function (Faker $faker) {
17 | return [
18 | 'email' => $faker->unique()->safeEmail,
19 | // 'email_verified_at' => now(),
20 | 'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
21 | 'remember_token' => str_random(10),
22 | ];
23 | });
24 |
--------------------------------------------------------------------------------
/2018/database/factories/UserProfileFactory.php:
--------------------------------------------------------------------------------
1 | define(App\UserProfile::class, function (Faker $faker) {
6 | return [
7 | 'first_name' => $faker->firstName,
8 | 'last_name' => $faker->lastName,
9 | 'gender' => rand(0, 1) ? 'Male' : 'Female',
10 | 'bio' => $faker->realText(200),
11 | 'stack' => json_encode(['php', 'laravel', 'vue']),
12 | 'job' => "{$faker->jobTitle}, {$faker->company}",
13 | 'social_links' => ['twitter' => '#', 'facebook' => '#'],
14 | 'avatar' => 'https://randomuser.me/api/portraits/men/' . rand(50, 80) . '.jpg',
15 | ];
16 | });
17 |
--------------------------------------------------------------------------------
/2018/database/migrations/2014_10_12_000000_create_users_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('email')->unique();
19 | $table->string('password');
20 | $table->rememberToken();
21 | $table->timestamps();
22 |
23 | $table->softDeletes();
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('users');
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/2018/database/migrations/2014_10_12_000001_create_user_profiles_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->unsignedInteger('user_id');
19 | $table->string('first_name');
20 | $table->string('last_name');
21 | $table->string('gender')->nullable();
22 | $table->string('bio', 300)->nullable();
23 | $table->json('stack')->nullable();
24 | $table->string('avatar')->default('/img/nophoto.png');
25 | $table->string('job')->nullable();
26 | $table->json('social_links')->nullable();
27 | $table->timestamps();
28 | $table->softDeletes();
29 |
30 | $table->foreign('user_id')->references('id')->on('users');
31 | });
32 | }
33 |
34 | /**
35 | * Reverse the migrations.
36 | *
37 | * @return void
38 | */
39 | public function down()
40 | {
41 | Schema::dropIfExists('user_profiles');
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/2018/database/migrations/2014_10_12_100000_create_password_resets_table.php:
--------------------------------------------------------------------------------
1 | string('email')->index();
18 | $table->string('token');
19 | $table->timestamp('created_at')->nullable();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::dropIfExists('password_resets');
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/2018/database/migrations/2017_06_14_224930_create_meetups_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->unsignedInteger('event_id')->unique();
19 | $table->string('link');
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::dropIfExists('meetups');
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/2018/database/migrations/2017_06_15_224148_create_talks_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->unsignedInteger('user_id');
19 | $table->unsignedInteger('meetup_id');
20 | $table->string('topic');
21 | $table->string('overview', 1000);
22 | $table->string('video_url')->nullable();
23 | $table->string('slides_url')->nullable();
24 | $table->boolean('accepted')->default(false);
25 | $table->timestamps();
26 | $table->softDeletes();
27 |
28 | $table->foreign('user_id')->references('id')->on('users');
29 | $table->foreign('meetup_id')->references('id')->on('meetups');
30 | });
31 | }
32 |
33 | /**
34 | * Reverse the migrations.
35 | *
36 | * @return void
37 | */
38 | public function down()
39 | {
40 | Schema::dropIfExists('talks');
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/2018/database/migrations/2017_06_24_164832_create_sponsors_table.php:
--------------------------------------------------------------------------------
1 | string('name');
18 | $table->string('description', 100)->nullable();
19 | $table->unsignedSmallInteger('level')->default(1);
20 | $table->string('responsible_for', 100)->nullable();
21 | $table->string('link');
22 | $table->string('logo');
23 | });
24 | }
25 |
26 | /**
27 | * Reverse the migrations.
28 | *
29 | * @return void
30 | */
31 | public function down()
32 | {
33 | Schema::dropIfExists('sponsors');
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/2018/database/seeds/DatabaseSeeder.php:
--------------------------------------------------------------------------------
1 | call([
15 | UsersTableSeeder::class,
16 | MeetupsTableSeeder::class,
17 | SponsorsTableSeeder::class,
18 | TalksTableSeeder::class,
19 | ]);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/2018/database/seeds/MeetupsTableSeeder.php:
--------------------------------------------------------------------------------
1 | create();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/2018/database/seeds/TalksTableSeeder.php:
--------------------------------------------------------------------------------
1 | create();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/2018/database/seeds/UsersTableSeeder.php:
--------------------------------------------------------------------------------
1 | create()->each(function ($user) {
15 | $user->profile()->save(factory(App\UserProfile::class)->make());
16 | });
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/2018/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "scripts": {
4 | "dev": "npm run development",
5 | "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
6 | "watch": "npm run development -- --watch",
7 | "watch-poll": "npm run watch -- --watch-poll",
8 | "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
9 | "prod": "npm run production",
10 | "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
11 | },
12 | "devDependencies": {
13 | "axios": "^0.18",
14 | "copy-webpack-plugin": "^4.6.0",
15 | "cross-env": "^5.1",
16 | "imagemin-mozjpeg": "^8.0.0",
17 | "imagemin-webpack-plugin": "^2.3.0",
18 | "laravel-mix": "^2.1.14",
19 | "laravel-mix-purgecss": "^2.2",
20 | "laravel-mix-tailwind": "^0.1.0",
21 | "lodash": "^4.17.13",
22 | "popper.js": "^1.12",
23 | "resolve-url-loader": "^2.3.1",
24 | "sass": "^1.15.2",
25 | "sass-loader": "^7.1.0",
26 | "tailwindcss": "^0.7.3",
27 | "vue": "^2.5.17",
28 | "vue-moment": "^4.0.0"
29 | },
30 | "dependencies": {
31 | "vue-owl-carousel": "^2.0.3"
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/2018/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
13 | ./tests/Unit
14 |
15 |
16 |
17 | ./tests/Feature
18 |
19 |
20 |
21 |
22 | ./app
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/2018/public/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/.DS_Store
--------------------------------------------------------------------------------
/2018/public/.htaccess:
--------------------------------------------------------------------------------
1 |
2 |
3 | Options -MultiViews -Indexes
4 |
5 |
6 | RewriteEngine On
7 |
8 | # Handle Authorization Header
9 | RewriteCond %{HTTP:Authorization} .
10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
11 |
12 | # Redirect Trailing Slashes If Not A Folder...
13 | RewriteCond %{REQUEST_FILENAME} !-d
14 | RewriteCond %{REQUEST_URI} (.+)/$
15 | RewriteRule ^ %1 [L,R=301]
16 |
17 | # Handle Front Controller...
18 | RewriteCond %{REQUEST_FILENAME} !-d
19 | RewriteCond %{REQUEST_FILENAME} !-f
20 | RewriteRule ^ index.php [L]
21 |
22 |
--------------------------------------------------------------------------------
/2018/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/favicon.ico
--------------------------------------------------------------------------------
/2018/public/img/android-browser-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/android-browser-icon.png
--------------------------------------------------------------------------------
/2018/public/img/avatars/chris.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/avatars/chris.jpg
--------------------------------------------------------------------------------
/2018/public/img/avatars/lawrence.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/avatars/lawrence.jpg
--------------------------------------------------------------------------------
/2018/public/img/avatars/neo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/avatars/neo.jpg
--------------------------------------------------------------------------------
/2018/public/img/avatars/ore.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/avatars/ore.jpg
--------------------------------------------------------------------------------
/2018/public/img/avatars/stephen.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/avatars/stephen.jpg
--------------------------------------------------------------------------------
/2018/public/img/avatars/vanessa.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/avatars/vanessa.jpg
--------------------------------------------------------------------------------
/2018/public/img/community.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/community.jpg
--------------------------------------------------------------------------------
/2018/public/img/contribute.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/contribute.jpg
--------------------------------------------------------------------------------
/2018/public/img/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/favicon.png
--------------------------------------------------------------------------------
/2018/public/img/heart.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2018/public/img/jumbo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/jumbo.jpg
--------------------------------------------------------------------------------
/2018/public/img/logo-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/logo-icon.png
--------------------------------------------------------------------------------
/2018/public/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/logo.png
--------------------------------------------------------------------------------
/2018/public/img/logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/logo@2x.png
--------------------------------------------------------------------------------
/2018/public/img/photo-placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/photo-placeholder.png
--------------------------------------------------------------------------------
/2018/public/img/speaker.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/speaker.jpg
--------------------------------------------------------------------------------
/2018/public/img/sponsor-andela.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/sponsor-andela.png
--------------------------------------------------------------------------------
/2018/public/img/sponsor-ck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/sponsor-ck.png
--------------------------------------------------------------------------------
/2018/public/img/sponsor-devcenter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/sponsor-devcenter.png
--------------------------------------------------------------------------------
/2018/public/img/sponsor-findworka.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/sponsor-findworka.png
--------------------------------------------------------------------------------
/2018/public/img/sponsor-gigalayer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/sponsor-gigalayer.png
--------------------------------------------------------------------------------
/2018/public/img/sponsor-nexmo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/sponsor-nexmo.png
--------------------------------------------------------------------------------
/2018/public/img/sponsor-pusher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/sponsor-pusher.png
--------------------------------------------------------------------------------
/2018/public/img/sponsor-scotch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/sponsor-scotch.png
--------------------------------------------------------------------------------
/2018/public/img/talks.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/talks.jpg
--------------------------------------------------------------------------------
/2018/public/img/track-placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/public/img/track-placeholder.png
--------------------------------------------------------------------------------
/2018/public/index.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 |
10 | define('LARAVEL_START', microtime(true));
11 |
12 | /*
13 | |--------------------------------------------------------------------------
14 | | Register The Auto Loader
15 | |--------------------------------------------------------------------------
16 | |
17 | | Composer provides a convenient, automatically generated class loader for
18 | | our application. We just need to utilize it! We'll simply require it
19 | | into the script here so that we don't have to worry about manual
20 | | loading any of our classes later on. It feels great to relax.
21 | |
22 | */
23 |
24 | require __DIR__.'/../vendor/autoload.php';
25 |
26 | /*
27 | |--------------------------------------------------------------------------
28 | | Turn On The Lights
29 | |--------------------------------------------------------------------------
30 | |
31 | | We need to illuminate PHP development, so let us turn on the lights.
32 | | This bootstraps the framework and gets it ready for use, then it
33 | | will load up this application so that we can run it and send
34 | | the responses back to the browser and delight our users.
35 | |
36 | */
37 |
38 | $app = require_once __DIR__.'/../bootstrap/app.php';
39 |
40 | /*
41 | |--------------------------------------------------------------------------
42 | | Run The Application
43 | |--------------------------------------------------------------------------
44 | |
45 | | Once we have the application, we can handle the incoming request
46 | | through the kernel, and send the associated response back to
47 | | the client's browser allowing them to enjoy the creative
48 | | and wonderful application we have prepared for them.
49 | |
50 | */
51 |
52 | $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
53 |
54 | $response = $kernel->handle(
55 | $request = Illuminate\Http\Request::capture()
56 | );
57 |
58 | $response->send();
59 |
60 | $kernel->terminate($request, $response);
61 |
--------------------------------------------------------------------------------
/2018/public/mix-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "/js/app.js": "/js/app.js?id=8f94480444ffca9e0334",
3 | "/css/app.css": "/css/app.css?id=e595d7fc243b673b7743"
4 | }
5 |
--------------------------------------------------------------------------------
/2018/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/2018/public/videos/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 | !readme.md
4 |
--------------------------------------------------------------------------------
/2018/public/videos/readme.md:
--------------------------------------------------------------------------------
1 | ## Video files
2 |
3 | The video files are available here: https://www.dropbox.com/sh/tmwntdsatwq0da9/AAB-JH4yMdLaexMsrVXIZCyya?dl=0
4 |
--------------------------------------------------------------------------------
/2018/resources/img/android-browser-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/android-browser-icon.png
--------------------------------------------------------------------------------
/2018/resources/img/community.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/community.jpg
--------------------------------------------------------------------------------
/2018/resources/img/contribute.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/contribute.jpg
--------------------------------------------------------------------------------
/2018/resources/img/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/favicon.png
--------------------------------------------------------------------------------
/2018/resources/img/heart.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/2018/resources/img/jumbo.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/jumbo.jpg
--------------------------------------------------------------------------------
/2018/resources/img/logo-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/logo-icon.png
--------------------------------------------------------------------------------
/2018/resources/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/logo.png
--------------------------------------------------------------------------------
/2018/resources/img/logo@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/logo@2x.png
--------------------------------------------------------------------------------
/2018/resources/img/photo-placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/photo-placeholder.png
--------------------------------------------------------------------------------
/2018/resources/img/speaker.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/speaker.jpg
--------------------------------------------------------------------------------
/2018/resources/img/sponsor-andela.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/sponsor-andela.png
--------------------------------------------------------------------------------
/2018/resources/img/sponsor-ck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/sponsor-ck.png
--------------------------------------------------------------------------------
/2018/resources/img/sponsor-devcenter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/sponsor-devcenter.png
--------------------------------------------------------------------------------
/2018/resources/img/sponsor-findworka.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/sponsor-findworka.png
--------------------------------------------------------------------------------
/2018/resources/img/sponsor-gigalayer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/sponsor-gigalayer.png
--------------------------------------------------------------------------------
/2018/resources/img/sponsor-nexmo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/sponsor-nexmo.png
--------------------------------------------------------------------------------
/2018/resources/img/sponsor-pusher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/sponsor-pusher.png
--------------------------------------------------------------------------------
/2018/resources/img/sponsor-scotch.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/sponsor-scotch.png
--------------------------------------------------------------------------------
/2018/resources/img/talks.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/talks.jpg
--------------------------------------------------------------------------------
/2018/resources/img/track-placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2018/resources/img/track-placeholder.png
--------------------------------------------------------------------------------
/2018/resources/js/app.js:
--------------------------------------------------------------------------------
1 | /**
2 | * First we will load all of this project's JavaScript dependencies which
3 | * includes Vue and other libraries. It is a great starting point when
4 | * building robust, powerful web applications using Vue and Laravel.
5 | */
6 |
7 | require('./bootstrap');
8 |
9 | window.Vue = require('vue');
10 |
11 | Vue.use(require('vue-moment'));
12 |
13 | /**
14 | * The following block of code may be used to automatically register your
15 | * Vue components. It will recursively scan this directory for the Vue
16 | * components and automatically register them with their "basename".
17 | *
18 | * Eg. ./components/ExampleComponent.vue ->
19 | */
20 |
21 | // const files = require.context('./', true, /\.vue$/i)
22 | // files.keys().map(key => Vue.component(key.split('/').pop().split('.')[0], files(key).default))
23 |
24 | Vue.component('jumbo', require('./components/JumboComponent.vue'));
25 | Vue.component('single-tweet', require('./components/TweetComponent.vue'));
26 | Vue.component('learn-laravel', require('./components/LearnComponent.vue'));
27 | Vue.component('single-speaker', require('./components/SpeakerComponent.vue'));
28 | Vue.component('contact-form', require('./components/ContactFormComponent.vue'));
29 | Vue.component('sponsors-slider', require('./components/SponsorsComponent.vue'));
30 | Vue.component('speaker-call', require('./components/SpeakerCallComponent.vue'));
31 | Vue.component('slack-inviter', require('./components/SlackInviterComponent.vue'));
32 | Vue.component('tinyletter-subscribe', require('./components/TinyLetterSubscribeComponent.vue'));
33 |
34 | /**
35 | * Next, we will create a fresh Vue application instance and attach it to
36 | * the page. Then, you may begin adding components to this application
37 | * or customize the JavaScript scaffolding to fit your unique needs.
38 | */
39 |
40 | const app = new Vue({
41 | el: '#app'
42 | });
43 |
--------------------------------------------------------------------------------
/2018/resources/js/bootstrap.js:
--------------------------------------------------------------------------------
1 | import snackbar from './utilities/snackbar';
2 |
3 | window._ = require('lodash');
4 | // window.Popper = require('popper.js').default;
5 |
6 | try {
7 | window.$ = window.jQuery = require('jquery');
8 |
9 | require('./utilities/smoothScroll');
10 | require('./utilities/toggleContactModal');
11 | require('./utilities/parallaxBackgroundImage');
12 |
13 | // Override the alert function...its too meh!
14 | window.alert = (msg, type) => snackbar(msg, type || 'error');
15 | } catch (e) {
16 | //
17 | }
18 |
19 | /**
20 | * We'll load the axios HTTP library which allows us to easily issue requests
21 | * to our Laravel back-end. This library automatically handles sending the
22 | * CSRF token as a header based on the value of the "XSRF" token cookie.
23 | */
24 |
25 | window.axios = require('axios');
26 |
27 | window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
28 |
29 | /**
30 | * Next we will register the CSRF Token as a common header with Axios so that
31 | * all outgoing HTTP requests automatically have it attached. This is just
32 | * a simple convenience so we don't have to attach every token manually.
33 | */
34 |
35 | let token = document.head.querySelector('meta[name="csrf-token"]');
36 |
37 | if (token) {
38 | window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
39 | } else {
40 | console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
41 | }
42 |
43 | /**
44 | * Echo exposes an expressive API for subscribing to channels and listening
45 | * for events that are broadcast by Laravel. Echo and event broadcasting
46 | * allows your team to easily build robust real-time web applications.
47 | */
48 |
49 | // import Echo from 'laravel-echo'
50 |
51 | // window.Pusher = require('pusher-js');
52 |
53 | // window.Echo = new Echo({
54 | // broadcaster: 'pusher',
55 | // key: process.env.MIX_PUSHER_APP_KEY,
56 | // cluster: process.env.MIX_PUSHER_APP_CLUSTER,
57 | // encrypted: true
58 | // });
59 |
--------------------------------------------------------------------------------
/2018/resources/js/components/LearnComponent.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
Learn Laravel
6 | Enjoy plenty educational resources to start off with Laravel and PHP.
7 |
8 |
9 |

10 |
11 | We are currently working on this. Meanwhile, you can take amazing courses at
12 | Laracasts.
18 |
19 |
20 |
21 |
22 |
23 |
24 |
31 |
--------------------------------------------------------------------------------
/2018/resources/js/components/SlackInviterComponent.vue:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
24 |
25 |
26 |
60 |
--------------------------------------------------------------------------------
/2018/resources/js/components/SpeakerCallComponent.vue:
--------------------------------------------------------------------------------
1 |
2 |
20 |
21 |
22 |
32 |
33 |
34 |
46 |
47 |
--------------------------------------------------------------------------------
/2018/resources/js/components/SponsorsComponent.vue:
--------------------------------------------------------------------------------
1 |
2 |
35 |
36 |
37 |
42 |
43 |
44 |
57 |
58 |
--------------------------------------------------------------------------------
/2018/resources/js/components/TinyLetterSubscribeComponent.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
Stay up to date
6 |
Want us to email you occassionally with some Laravel News?
7 |
35 |
36 |
37 |
38 |
39 |
40 |
49 |
50 |
81 |
82 |
--------------------------------------------------------------------------------
/2018/resources/js/utilities/mobileCheck.js:
--------------------------------------------------------------------------------
1 | export default function() {
2 | let mobileCheck = false;
3 | (function(a) {
4 | if (
5 | /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(
6 | a
7 | ) ||
8 | /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(
9 | a.substr(0, 4)
10 | )
11 | )
12 | mobileCheck = true;
13 | })(navigator.userAgent || navigator.vendor || window.opera);
14 | return mobileCheck;
15 | }
16 |
--------------------------------------------------------------------------------
/2018/resources/js/utilities/parallaxBackgroundImage.js:
--------------------------------------------------------------------------------
1 | (() => {
2 | $(document).ready(() => {
3 | const div = $('*[parallax]');
4 |
5 | const movementStrength = 15;
6 | const height = movementStrength / $(window).height();
7 | const width = movementStrength / $(window).width();
8 |
9 | $(window).resize(() => div.css('background-position', 'center center'));
10 |
11 | div.mousemove(e => {
12 | const pageWidth = $(window).width();
13 | const pageHeight = $(window).width();
14 |
15 | if (pageWidth >= 768) {
16 | const pageX = e.pageX - pageWidth / 2;
17 | const pageY = e.pageY - pageHeight / 2;
18 | const newvalueX = width * pageX * -1 - 2;
19 | const newvalueY = height * pageY * -1 - 50;
20 | div.css('background-position', `${newvalueX}px ${newvalueY}px`);
21 | }
22 | });
23 | });
24 | })();
25 |
--------------------------------------------------------------------------------
/2018/resources/js/utilities/smoothScroll.js:
--------------------------------------------------------------------------------
1 | $(document).ready(() => {
2 | $('[smooth-scroll] a').on('click', function() {
3 | if ($(this).attr('href') !== '#') {
4 | $('.active').removeClass('active');
5 | $(this).closest('li').addClass('active');
6 |
7 | $('.' + $(this).attr("class")).parent('li').addClass('active');
8 |
9 | try {
10 | $('html, body').stop().animate({
11 | scrollTop: $($(this).attr('href').replace('/', '')).offset().top
12 | }, 400);
13 | } catch (e) {
14 | //
15 | return true;
16 | }
17 |
18 | return false;
19 | }
20 | });
21 | });
22 |
--------------------------------------------------------------------------------
/2018/resources/js/utilities/snackbar.js:
--------------------------------------------------------------------------------
1 | /**
2 | * Snackbar is the notification function to display quick notifications on the site.
3 | *
4 | * @param message
5 | */
6 | export default (message, type = 'error') => {
7 | let snackbar = document.getElementById('snackbar');
8 | snackbar.innerHTML = message;
9 | snackbar.className = `show ${type}`;
10 | setTimeout(() => (snackbar.className = snackbar.className.replace(`show ${type}`, '')), 3000);
11 | };
12 |
--------------------------------------------------------------------------------
/2018/resources/js/utilities/toggleContactModal.js:
--------------------------------------------------------------------------------
1 | window.toggleContactModal = () => $('#contact-modal').toggleClass('show');
2 |
--------------------------------------------------------------------------------
/2018/resources/js/utilities/validEmail.js:
--------------------------------------------------------------------------------
1 | export default function(email) {
2 | const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
3 | return re.test(email);
4 | }
5 |
--------------------------------------------------------------------------------
/2018/resources/lang/en/auth.php:
--------------------------------------------------------------------------------
1 | 'These credentials do not match our records.',
17 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/2018/resources/lang/en/pagination.php:
--------------------------------------------------------------------------------
1 | '« Previous',
17 | 'next' => 'Next »',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/2018/resources/lang/en/passwords.php:
--------------------------------------------------------------------------------
1 | 'Passwords must be at least six characters and match the confirmation.',
17 | 'reset' => 'Your password has been reset!',
18 | 'sent' => 'We have e-mailed your password reset link!',
19 | 'token' => 'This password reset token is invalid.',
20 | 'user' => "We can't find a user with that e-mail address.",
21 |
22 | ];
23 |
--------------------------------------------------------------------------------
/2018/resources/views/emails/contact.blade.php:
--------------------------------------------------------------------------------
1 | @component('mail::message')
2 | Hello,
3 |
4 | {{ $message }}
5 |
6 | Thanks,
7 | {{ config('app.name') }}
8 | @endcomponent
9 |
--------------------------------------------------------------------------------
/2018/resources/views/partials/contact-modal.blade.php:
--------------------------------------------------------------------------------
1 |
15 |
--------------------------------------------------------------------------------
/2018/resources/views/partials/footer.blade.php:
--------------------------------------------------------------------------------
1 |
27 |
--------------------------------------------------------------------------------
/2018/resources/views/partials/gtm.blade.php:
--------------------------------------------------------------------------------
1 | {{-- Google Tag Manager --}}
2 | @if (config('services.google_tag_manager.id'))
3 |
4 |
5 | @endif
6 |
--------------------------------------------------------------------------------
/2018/resources/views/partials/nav.blade.php:
--------------------------------------------------------------------------------
1 |
33 |
--------------------------------------------------------------------------------
/2018/routes/api.php:
--------------------------------------------------------------------------------
1 | name('contact');
15 |
--------------------------------------------------------------------------------
/2018/routes/channels.php:
--------------------------------------------------------------------------------
1 | id === (int) $id;
16 | });
17 |
--------------------------------------------------------------------------------
/2018/routes/console.php:
--------------------------------------------------------------------------------
1 | comment(Inspiring::quote());
18 | })->describe('Display an inspiring quote');
19 |
--------------------------------------------------------------------------------
/2018/routes/web.php:
--------------------------------------------------------------------------------
1 | name('talks');
15 | Route::get('/', 'HomeController')->name('index');
16 |
--------------------------------------------------------------------------------
/2018/server.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 |
10 | $uri = urldecode(
11 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
12 | );
13 |
14 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the
15 | // built-in PHP web server. This provides a convenient way to test a Laravel
16 | // application without having installed a "real" web server software here.
17 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
18 | return false;
19 | }
20 |
21 | require_once __DIR__.'/public/index.php';
22 |
--------------------------------------------------------------------------------
/2018/storage/app/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !public/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/2018/storage/app/public/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/2018/storage/debugbar/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/2018/storage/framework/.gitignore:
--------------------------------------------------------------------------------
1 | config.php
2 | routes.php
3 | schedule-*
4 | compiled.php
5 | services.json
6 | events.scanned.php
7 | routes.scanned.php
8 | down
9 |
--------------------------------------------------------------------------------
/2018/storage/framework/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !data/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/2018/storage/framework/cache/data/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/2018/storage/framework/sessions/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/2018/storage/framework/testing/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/2018/storage/framework/views/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/2018/storage/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/2018/tests/CreatesApplication.php:
--------------------------------------------------------------------------------
1 | make(Kernel::class)->bootstrap();
19 |
20 | return $app;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/2018/tests/Feature/ExampleTest.php:
--------------------------------------------------------------------------------
1 | get('/');
18 |
19 | $response->assertStatus(200);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/2018/tests/TestCase.php:
--------------------------------------------------------------------------------
1 | assertTrue(true);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/2018/todo.md:
--------------------------------------------------------------------------------
1 | ## Todo List
2 |
3 | [ ] Use an event instead of the Mail class directly `app/Http/Controllers/ContactController.php`.
4 | [ ] Jobs portal.
5 | [ ] Learning portal.
6 | [ ] Create Twitter app for the Laravel Nigeria application.
7 | [ ] Team page with contribution instructions.
8 | [ ] Administrative panel to manage users and talks.
9 | [ ] Meetup feedback popup with link to leave review and photos.
10 |
--------------------------------------------------------------------------------
/2018/webpack.mix.js:
--------------------------------------------------------------------------------
1 | const mix = require('laravel-mix');
2 | const ImageminPlugin = require('imagemin-webpack-plugin').default;
3 | const CopyWebpackPlugin = require('copy-webpack-plugin');
4 | const imageminMozjpeg = require('imagemin-mozjpeg');
5 |
6 | require('laravel-mix-tailwind');
7 | require('laravel-mix-purgecss');
8 |
9 | /**
10 | * Webpack config
11 | */
12 |
13 | mix.webpackConfig({
14 | plugins: [
15 | new CopyWebpackPlugin([{ from: 'resources/img', to: 'img' }]),
16 | new ImageminPlugin({
17 | test: /\.(jpe?g|png|gif)$/i,
18 | plugins: [imageminMozjpeg({ quality: 70 })]
19 | })
20 | ]
21 | });
22 |
23 | /*
24 | |--------------------------------------------------------------------------
25 | | Mix Asset Management
26 | |--------------------------------------------------------------------------
27 | |
28 | | Mix provides a clean, fluent API for defining some Webpack build steps
29 | | for your Laravel application. By default, we are compiling the Sass
30 | | file for the application as well as bundling up all the JS files.
31 | |
32 | */
33 |
34 | mix.js('resources/js/app.js', 'public/js')
35 | .postCss('resources/css/app.css', 'public/css')
36 | .tailwind()
37 | .options({ processCssUrls: false })
38 | .purgeCss({ whitelistPatternsChildren: [/CommunityInviter$/] });
39 |
40 | if (mix.inProduction()) {
41 | mix.version();
42 | }
43 |
--------------------------------------------------------------------------------
/2019/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | end_of_line = lf
6 | insert_final_newline = true
7 | indent_style = space
8 | indent_size = 4
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | trim_trailing_whitespace = false
13 |
14 | [*.{yml,yaml}]
15 | indent_size = 2
16 |
--------------------------------------------------------------------------------
/2019/.env.example:
--------------------------------------------------------------------------------
1 | APP_NAME=Laravel
2 | APP_ENV=local
3 | APP_KEY=
4 | APP_DEBUG=true
5 | APP_URL=http://localhost
6 |
7 | TITO_WEBHOOK_URL="webhook"
8 | TITO_TICKET_CONFIRMATION_SLUG=
9 |
10 | LOG_CHANNEL=stack
11 |
12 | DB_CONNECTION=mysql
13 | DB_HOST=127.0.0.1
14 | DB_PORT=3306
15 | DB_DATABASE=laravel
16 | DB_USERNAME=root
17 | DB_PASSWORD=
18 |
19 | BROADCAST_DRIVER=log
20 | CACHE_DRIVER=file
21 | QUEUE_CONNECTION=sync
22 | SESSION_DRIVER=file
23 | SESSION_LIFETIME=120
24 |
25 | REDIS_HOST=127.0.0.1
26 | REDIS_PASSWORD=null
27 | REDIS_PORT=6379
28 |
29 | MAIL_DRIVER=smtp
30 | MAIL_HOST=smtp.mailtrap.io
31 | MAIL_PORT=2525
32 | MAIL_USERNAME=null
33 | MAIL_PASSWORD=null
34 | MAIL_ENCRYPTION=null
35 |
36 | AWS_ACCESS_KEY_ID=
37 | AWS_SECRET_ACCESS_KEY=
38 | AWS_DEFAULT_REGION=us-east-1
39 | AWS_BUCKET=
40 |
41 | GOOGLE_TAG_MANAGER_ID=
42 |
43 | SLACK_TOKEN=
44 | SLACK_HOSTNAME=
45 |
46 | PUSHER_APP_ID=
47 | PUSHER_APP_KEY=
48 | PUSHER_APP_SECRET=
49 | PUSHER_APP_CLUSTER=mt1
50 |
51 | MIX_PUSHER_APP_KEY="${PUSHER_APP_KEY}"
52 | MIX_PUSHER_APP_CLUSTER="${PUSHER_APP_CLUSTER}"
53 |
--------------------------------------------------------------------------------
/2019/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 | *.css linguist-vendored
3 | *.scss linguist-vendored
4 | *.js linguist-vendored
5 | CHANGELOG.md export-ignore
6 |
--------------------------------------------------------------------------------
/2019/.gitignore:
--------------------------------------------------------------------------------
1 | /node_modules
2 | /public/hot
3 | /public/storage
4 | /storage/*.key
5 | /vendor
6 | /.idea
7 | .env
8 | .env.backup
9 | .phpunit.result.cache
10 | Homestead.json
11 | Homestead.yaml
12 | npm-debug.log
13 | yarn-error.log
14 |
--------------------------------------------------------------------------------
/2019/.styleci.yml:
--------------------------------------------------------------------------------
1 | php:
2 | preset: laravel
3 | disabled:
4 | - unused_use
5 | finder:
6 | not-name:
7 | - index.php
8 | - server.php
9 | js:
10 | finder:
11 | not-name:
12 | - webpack.mix.js
13 | css: true
14 |
--------------------------------------------------------------------------------
/2019/app/Console/Kernel.php:
--------------------------------------------------------------------------------
1 | command('inspire')
28 | // ->hourly();
29 | }
30 |
31 | /**
32 | * Register the commands for the application.
33 | *
34 | * @return void
35 | */
36 | protected function commands()
37 | {
38 | $this->load(__DIR__.'/Commands');
39 |
40 | require base_path('routes/console.php');
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/2019/app/Events/TicketRegistrationComplete.php:
--------------------------------------------------------------------------------
1 | ticketUser = $ticketUser;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/2019/app/Exceptions/Handler.php:
--------------------------------------------------------------------------------
1 | validate(['email' => 'required|email']);
17 |
18 | return response()->json(
19 | json_decode(Slack::invite($data['email']), true)
20 | );
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/2019/app/Http/Controllers/Auth/ForgotPasswordController.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/2019/app/Http/Controllers/Auth/LoginController.php:
--------------------------------------------------------------------------------
1 | middleware('guest')->except('logout');
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/2019/app/Http/Controllers/Auth/RegisterController.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
41 | }
42 |
43 | /**
44 | * Get a validator for an incoming registration request.
45 | *
46 | * @param array $data
47 | * @return \Illuminate\Contracts\Validation\Validator
48 | */
49 | protected function validator(array $data)
50 | {
51 | return Validator::make($data, [
52 | 'name' => ['required', 'string', 'max:255'],
53 | 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
54 | 'password' => ['required', 'string', 'min:8', 'confirmed'],
55 | ]);
56 | }
57 |
58 | /**
59 | * Create a new user instance after a valid registration.
60 | *
61 | * @param array $data
62 | * @return \App\User
63 | */
64 | protected function create(array $data)
65 | {
66 | return User::create([
67 | 'name' => $data['name'],
68 | 'email' => $data['email'],
69 | 'password' => Hash::make($data['password']),
70 | ]);
71 | }
72 | }
73 |
--------------------------------------------------------------------------------
/2019/app/Http/Controllers/Auth/ResetPasswordController.php:
--------------------------------------------------------------------------------
1 | middleware('guest');
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/2019/app/Http/Controllers/Auth/VerificationController.php:
--------------------------------------------------------------------------------
1 | middleware('auth');
38 | $this->middleware('signed')->only('verify');
39 | $this->middleware('throttle:6,1')->only('verify', 'resend');
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/2019/app/Http/Controllers/CodeOfConductController.php:
--------------------------------------------------------------------------------
1 | ['title' => 'Code of Conduct']]);
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/2019/app/Http/Controllers/Controller.php:
--------------------------------------------------------------------------------
1 | $this->sponsors(),
13 | 'page' => ['title' => "Nigeria's biggest PHP conference"]
14 | ]);
15 | }
16 |
17 | private function sponsors(): array
18 | {
19 | return [
20 | [
21 | 'image' => 'img/sponsor-ay.png',
22 | 'link' => 'https://corporate.aboutyou.de/en/?utm_source=laravel-nigeria&utm_medium=referral&utm_campaign=tech',
23 | 'title' => 'Laravel Nigeria Sponsor - ABOUT YOU GmbH',
24 | ],
25 | [
26 | 'image' => 'img/sponsor-pusher.png',
27 | 'link' => 'https://pusher.com',
28 | 'title' => 'Laravel Nigeria Sponsor - Pusher',
29 | ],
30 | [
31 | 'image' => 'img/sponsor-laravel.png',
32 | 'link' => 'https://laravel.com',
33 | 'title' => 'Laravel Nigeria Sponsor - Laravel',
34 | ],
35 | [
36 | 'image' => 'img/sponsor-ck-icon.png',
37 | 'link' => 'https://creativitykills.co',
38 | 'title' => 'Laravel Nigeria Sponsor - CreativityKills',
39 | ],
40 | ];
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/2019/app/Http/Middleware/Authenticate.php:
--------------------------------------------------------------------------------
1 | expectsJson()) {
18 | return route('login');
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/2019/app/Http/Middleware/CheckForMaintenanceMode.php:
--------------------------------------------------------------------------------
1 | check()) {
21 | return redirect('/home');
22 | }
23 |
24 | return $next($request);
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/2019/app/Http/Middleware/TrimStrings.php:
--------------------------------------------------------------------------------
1 | except[] = config('tito.webhook_url');
30 |
31 | return parent::inExceptArray($request);
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/2019/app/Http/Requests/WebhookRequest.php:
--------------------------------------------------------------------------------
1 | $this->webhookName()]);
16 | Log::info('[Webhook] Payload', $this->all());
17 |
18 | $allowedWebhooks = (array) config('tito.allowed_webhooks');
19 |
20 | return in_array($this->webhookName(), $allowedWebhooks);
21 | }
22 |
23 | public function rules(): array
24 | {
25 | if ($this->isRegistrationWebhook()) {
26 | return $this->registrationRules();
27 | }
28 |
29 | return [];
30 | }
31 |
32 | public function isRegistrationWebhook(): bool
33 | {
34 | return Str::startsWith($this->webhookName(), 'registration.');
35 | }
36 |
37 | protected function registrationRules(): array
38 | {
39 | return [
40 | 'tickets.*.slug' => 'required|string',
41 | 'tickets.*.reference' => 'required|string',
42 | 'tickets.*.name' => 'required|string',
43 | 'tickets.*.email' => 'required|email',
44 | 'tickets.*.responses' => 'required|array',
45 | 'tickets.*.responses.*' => 'required|string',
46 | 'event.id' => 'required|integer',
47 | 'event.slug' => 'required|string',
48 | ];
49 | }
50 |
51 | private function webhookName(): string
52 | {
53 | return (string) $this->header('X-Webhook-Name');
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/2019/app/Listeners/SendSponsorContactOptInNotification.php:
--------------------------------------------------------------------------------
1 | ticketUser->sendOptInConfirmationNotification();
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/2019/app/Notifications/VerifySponsorshipContactOptIn.php:
--------------------------------------------------------------------------------
1 | verificationUrl($notifiable);
28 |
29 | return (new MailMessage)
30 | ->subject(Lang::get('Laravel Nigeria: Verify Opt-in'))
31 | ->line(Lang::get('You specified you would like to be contacted by our sponsors regarding job oppurtunities and more. Please click below to confirm this.'))
32 | ->action(Lang::get('Sure, Sign me up'), $verificationUrl)
33 | ->line(Lang::get('If you do not want to hear about new oppurtunities and more, no further action is required.'));
34 | }
35 |
36 | /**
37 | * @param mixed $notifiable
38 | * @return string
39 | */
40 | protected function verificationUrl($notifiable)
41 | {
42 | return URL::temporarySignedRoute(
43 | 'sponsor.optin.verify',
44 | Carbon::now()->addMinutes(Config::get('tito.verification.expire', 60)),
45 | [
46 | 'id' => $notifiable->getKey(),
47 | 'hash' => sha1($notifiable->getEmailForVerification()),
48 | ]
49 | );
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/2019/app/Providers/AppServiceProvider.php:
--------------------------------------------------------------------------------
1 | 'App\Policies\ModelPolicy',
17 | ];
18 |
19 | /**
20 | * Register any authentication / authorization services.
21 | *
22 | * @return void
23 | */
24 | public function boot()
25 | {
26 | $this->registerPolicies();
27 |
28 | //
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/2019/app/Providers/BroadcastServiceProvider.php:
--------------------------------------------------------------------------------
1 | [
21 | SendEmailVerificationNotification::class,
22 | ],
23 | TicketRegistrationComplete::class => [
24 | SendSponsorContactOptInNotification::class,
25 | ],
26 | ];
27 |
28 | /**
29 | * Register any events for your application.
30 | *
31 | * @return void
32 | */
33 | public function boot()
34 | {
35 | parent::boot();
36 |
37 | //
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/2019/app/Providers/RouteServiceProvider.php:
--------------------------------------------------------------------------------
1 | configureRateLimiting();
39 |
40 | $this->routes(function () {
41 | Route::middleware('web')
42 | ->namespace($this->namespace)
43 | ->group(base_path('routes/web.php'));
44 |
45 | Route::prefix('api')
46 | ->middleware('api')
47 | ->namespace($this->namespace)
48 | ->group(base_path('routes/api.php'));
49 | });
50 | }
51 |
52 | /**
53 | * Configure the rate limiters for the application.
54 | *
55 | * @return void
56 | */
57 | protected function configureRateLimiting()
58 | {
59 | RateLimiter::for('api', function (Request $request) {
60 | return Limit::perMinute(60)->by(optional($request->user())->id ?: $request->ip());
61 | });
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/2019/app/TicketUser.php:
--------------------------------------------------------------------------------
1 | 'bool',
28 | 'opted_in_to_be_contacted' => 'bool',
29 | ];
30 |
31 | public function __construct(array $attributes = [])
32 | {
33 | $this->marketingContactOptInConfirmation($attributes['responses'] ?? []);
34 |
35 | if (isset($attributes['responses'])) {
36 | unset($attributes['responses']);
37 | }
38 |
39 | parent::__construct($attributes);
40 | }
41 |
42 | private function marketingContactOptInConfirmation(array $responses): void
43 | {
44 | $this->attributes['opt_in_confirmed'] = false;
45 |
46 | if (!$confirmationSlug = config('tito.ticket_confirmation_slug')) {
47 | $this->attributes['opted_in_to_be_contacted'] = false;
48 | return;
49 | }
50 |
51 | $confirmation = $responses[$confirmationSlug] ?? false;
52 | $confirmed = $confirmation ? strtolower($confirmation) === 'yes' : false;
53 |
54 | $this->attributes['opted_in_to_be_contacted'] = $confirmed;
55 | }
56 |
57 | public function sendOptInConfirmationNotification(): void
58 | {
59 | $this->notify(new VerifySponsorshipContactOptIn($this));
60 | }
61 |
62 | public function getEmailForVerification(): string
63 | {
64 | return $this->email;
65 | }
66 | }
67 |
--------------------------------------------------------------------------------
/2019/app/User.php:
--------------------------------------------------------------------------------
1 | 'datetime',
38 | ];
39 | }
40 |
--------------------------------------------------------------------------------
/2019/artisan:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env php
2 | make(Illuminate\Contracts\Console\Kernel::class);
34 |
35 | $status = $kernel->handle(
36 | $input = new Symfony\Component\Console\Input\ArgvInput,
37 | new Symfony\Component\Console\Output\ConsoleOutput
38 | );
39 |
40 | /*
41 | |--------------------------------------------------------------------------
42 | | Shutdown The Application
43 | |--------------------------------------------------------------------------
44 | |
45 | | Once Artisan has finished running, we will fire off the shutdown events
46 | | so that any final work may be done by the application before we shut
47 | | down the process. This is the last thing to happen to the request.
48 | |
49 | */
50 |
51 | $kernel->terminate($input, $status);
52 |
53 | exit($status);
54 |
--------------------------------------------------------------------------------
/2019/bootstrap/app.php:
--------------------------------------------------------------------------------
1 | singleton(
30 | Illuminate\Contracts\Http\Kernel::class,
31 | App\Http\Kernel::class
32 | );
33 |
34 | $app->singleton(
35 | Illuminate\Contracts\Console\Kernel::class,
36 | App\Console\Kernel::class
37 | );
38 |
39 | $app->singleton(
40 | Illuminate\Contracts\Debug\ExceptionHandler::class,
41 | App\Exceptions\Handler::class
42 | );
43 |
44 | /*
45 | |--------------------------------------------------------------------------
46 | | Return The Application
47 | |--------------------------------------------------------------------------
48 | |
49 | | This script returns the application instance. The instance is given to
50 | | the calling script so we can separate the building of the instances
51 | | from the actual running of the application and sending responses.
52 | |
53 | */
54 |
55 | return $app;
56 |
--------------------------------------------------------------------------------
/2019/bootstrap/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/2019/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "laravel/laravel",
3 | "type": "project",
4 | "description": "The Laravel Framework.",
5 | "keywords": [
6 | "framework",
7 | "laravel"
8 | ],
9 | "license": "MIT",
10 | "require": {
11 | "php": "^7.3|^8.0",
12 | "danrovito/laravelslackinvite": "^1.1",
13 | "fideloper/proxy": "^4.0",
14 | "guzzlehttp/guzzle": "^7.0.1",
15 | "laravel/framework": "^8.0",
16 | "laravel/tinker": "^2.0",
17 | "laravel/ui": "^3.0"
18 | },
19 | "require-dev": {
20 | "facade/ignition": "^2.3.6",
21 | "fzaninotto/faker": "^1.4",
22 | "mockery/mockery": "^1.0",
23 | "nunomaduro/collision": "^5.0",
24 | "phpunit/phpunit": "^9.0"
25 | },
26 | "config": {
27 | "optimize-autoloader": true,
28 | "preferred-install": "dist",
29 | "sort-packages": true
30 | },
31 | "extra": {
32 | "laravel": {
33 | "dont-discover": []
34 | }
35 | },
36 | "autoload": {
37 | "psr-4": {
38 | "App\\": "app/",
39 | "Database\\Factories\\": "database/factories/",
40 | "Database\\Seeders\\": "database/seeders/"
41 | },
42 | "classmap": [
43 | "database/factories"
44 | ]
45 | },
46 | "autoload-dev": {
47 | "psr-4": {
48 | "Tests\\": "tests/"
49 | }
50 | },
51 | "minimum-stability": "dev",
52 | "prefer-stable": true,
53 | "scripts": {
54 | "post-autoload-dump": [
55 | "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
56 | "@php artisan package:discover --ansi"
57 | ],
58 | "post-root-package-install": [
59 | "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
60 | ],
61 | "post-create-project-cmd": [
62 | "@php artisan key:generate --ansi"
63 | ]
64 | }
65 | }
66 |
--------------------------------------------------------------------------------
/2019/config/broadcasting.php:
--------------------------------------------------------------------------------
1 | env('BROADCAST_DRIVER', 'null'),
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Broadcast Connections
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may define all of the broadcast connections that will be used
26 | | to broadcast events to other systems or over websockets. Samples of
27 | | each available type of connection are provided inside this array.
28 | |
29 | */
30 |
31 | 'connections' => [
32 |
33 | 'pusher' => [
34 | 'driver' => 'pusher',
35 | 'key' => env('PUSHER_APP_KEY'),
36 | 'secret' => env('PUSHER_APP_SECRET'),
37 | 'app_id' => env('PUSHER_APP_ID'),
38 | 'options' => [
39 | 'cluster' => env('PUSHER_APP_CLUSTER'),
40 | 'useTLS' => true,
41 | ],
42 | ],
43 |
44 | 'redis' => [
45 | 'driver' => 'redis',
46 | 'connection' => 'default',
47 | ],
48 |
49 | 'log' => [
50 | 'driver' => 'log',
51 | ],
52 |
53 | 'null' => [
54 | 'driver' => 'null',
55 | ],
56 |
57 | ],
58 |
59 | ];
60 |
--------------------------------------------------------------------------------
/2019/config/filesystems.php:
--------------------------------------------------------------------------------
1 | env('FILESYSTEM_DRIVER', 'local'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Default Cloud Filesystem Disk
21 | |--------------------------------------------------------------------------
22 | |
23 | | Many applications store files both locally and in the cloud. For this
24 | | reason, you may specify a default "cloud" driver here. This driver
25 | | will be bound as the Cloud disk implementation in the container.
26 | |
27 | */
28 |
29 | 'cloud' => env('FILESYSTEM_CLOUD', 's3'),
30 |
31 | /*
32 | |--------------------------------------------------------------------------
33 | | Filesystem Disks
34 | |--------------------------------------------------------------------------
35 | |
36 | | Here you may configure as many filesystem "disks" as you wish, and you
37 | | may even configure multiple disks of the same driver. Defaults have
38 | | been setup for each driver as an example of the required options.
39 | |
40 | | Supported Drivers: "local", "ftp", "sftp", "s3"
41 | |
42 | */
43 |
44 | 'disks' => [
45 |
46 | 'local' => [
47 | 'driver' => 'local',
48 | 'root' => storage_path('app'),
49 | ],
50 |
51 | 'public' => [
52 | 'driver' => 'local',
53 | 'root' => storage_path('app/public'),
54 | 'url' => env('APP_URL').'/storage',
55 | 'visibility' => 'public',
56 | ],
57 |
58 | 's3' => [
59 | 'driver' => 's3',
60 | 'key' => env('AWS_ACCESS_KEY_ID'),
61 | 'secret' => env('AWS_SECRET_ACCESS_KEY'),
62 | 'region' => env('AWS_DEFAULT_REGION'),
63 | 'bucket' => env('AWS_BUCKET'),
64 | 'url' => env('AWS_URL'),
65 | ],
66 |
67 | ],
68 |
69 | ];
70 |
--------------------------------------------------------------------------------
/2019/config/hashing.php:
--------------------------------------------------------------------------------
1 | 'bcrypt',
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Bcrypt Options
23 | |--------------------------------------------------------------------------
24 | |
25 | | Here you may specify the configuration options that should be used when
26 | | passwords are hashed using the Bcrypt algorithm. This will allow you
27 | | to control the amount of time it takes to hash the given password.
28 | |
29 | */
30 |
31 | 'bcrypt' => [
32 | 'rounds' => env('BCRYPT_ROUNDS', 10),
33 | ],
34 |
35 | /*
36 | |--------------------------------------------------------------------------
37 | | Argon Options
38 | |--------------------------------------------------------------------------
39 | |
40 | | Here you may specify the configuration options that should be used when
41 | | passwords are hashed using the Argon algorithm. These will allow you
42 | | to control the amount of time it takes to hash the given password.
43 | |
44 | */
45 |
46 | 'argon' => [
47 | 'memory' => 1024,
48 | 'threads' => 2,
49 | 'time' => 2,
50 | ],
51 |
52 | ];
53 |
--------------------------------------------------------------------------------
/2019/config/services.php:
--------------------------------------------------------------------------------
1 | [
18 | 'domain' => env('MAILGUN_DOMAIN'),
19 | 'secret' => env('MAILGUN_SECRET'),
20 | 'endpoint' => env('MAILGUN_ENDPOINT', 'api.mailgun.net'),
21 | ],
22 |
23 | 'postmark' => [
24 | 'token' => env('POSTMARK_TOKEN'),
25 | ],
26 |
27 | 'ses' => [
28 | 'key' => env('AWS_ACCESS_KEY_ID'),
29 | 'secret' => env('AWS_SECRET_ACCESS_KEY'),
30 | 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'),
31 | ],
32 |
33 | 'google_tag_manager' => [
34 | 'id' => env('GOOGLE_TAG_MANAGER_ID'),
35 | ],
36 |
37 | 'slack' => [
38 | 'token' => env('SLACK_TOKEN'),
39 | 'hostname' => env('SLACK_HOSTNAME', 'laravelnigeria')
40 | ],
41 |
42 | ];
43 |
--------------------------------------------------------------------------------
/2019/config/tito.php:
--------------------------------------------------------------------------------
1 | env('TITO_WEBHOOK_URL', 'webhook'),
5 |
6 | // Usually a "Yes" or "No" question attached to the ticket...
7 | 'ticket_confirmation_slug' => env('TITO_TICKET_CONFIRMATION_SLUG'),
8 |
9 | 'verification' => [
10 | 'expire' => env('TITO_SPONSOR_CONTACT_VERIFICATION_EMAIL_LINK_EXPIRE', 1440),
11 | ],
12 |
13 | 'allowed_webhooks' => [
14 | // "checkin.created",
15 | // "ticket.created",
16 | // "ticket.completed",
17 | // "ticket.reassigned",
18 | // "ticket.updated",
19 | // "ticket.unsnoozed",
20 | // "ticket.unvoided",
21 | // "ticket.voided",
22 | // "registration.started",
23 | // "registration.filling",
24 | // "registration.updated",
25 | // "registration.finished",
26 | "registration.completed",
27 | // "registration.cancelled",
28 | ],
29 |
30 | ];
31 |
--------------------------------------------------------------------------------
/2019/config/view.php:
--------------------------------------------------------------------------------
1 | [
17 | resource_path('views'),
18 | ],
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Compiled View Path
23 | |--------------------------------------------------------------------------
24 | |
25 | | This option determines where all the compiled Blade templates will be
26 | | stored for your application. Typically, this is within the storage
27 | | directory. However, as usual, you are free to change this value.
28 | |
29 | */
30 |
31 | 'compiled' => env(
32 | 'VIEW_COMPILED_PATH',
33 | realpath(storage_path('framework/views'))
34 | ),
35 |
36 | ];
37 |
--------------------------------------------------------------------------------
/2019/database/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite
2 | *.sqlite-journal
3 |
--------------------------------------------------------------------------------
/2019/database/factories/UserFactory.php:
--------------------------------------------------------------------------------
1 | define(User::class, function (Faker $faker) {
20 | return [
21 | 'name' => $faker->name,
22 | 'email' => $faker->unique()->safeEmail,
23 | 'email_verified_at' => now(),
24 | 'password' => '$2y$10$92IXUNpkjO0rOQ5byMi.Ye4oKoEa3Ro9llC/.og/at2.uheWG/igi', // password
25 | 'remember_token' => Str::random(10),
26 | ];
27 | });
28 |
--------------------------------------------------------------------------------
/2019/database/migrations/2014_10_12_000000_create_users_table.php:
--------------------------------------------------------------------------------
1 | bigIncrements('id');
18 | $table->string('name');
19 | $table->string('email')->unique();
20 | $table->timestamp('email_verified_at')->nullable();
21 | $table->string('password');
22 | $table->rememberToken();
23 | $table->timestamps();
24 | });
25 | }
26 |
27 | /**
28 | * Reverse the migrations.
29 | *
30 | * @return void
31 | */
32 | public function down()
33 | {
34 | Schema::dropIfExists('users');
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/2019/database/migrations/2014_10_12_100000_create_password_resets_table.php:
--------------------------------------------------------------------------------
1 | string('email')->index();
18 | $table->string('token');
19 | $table->timestamp('created_at')->nullable();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::dropIfExists('password_resets');
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/2019/database/migrations/2019_08_19_000000_create_failed_jobs_table.php:
--------------------------------------------------------------------------------
1 | bigIncrements('id');
18 | $table->text('connection');
19 | $table->text('queue');
20 | $table->longText('payload');
21 | $table->longText('exception');
22 | $table->timestamp('failed_at')->useCurrent();
23 | });
24 | }
25 |
26 | /**
27 | * Reverse the migrations.
28 | *
29 | * @return void
30 | */
31 | public function down()
32 | {
33 | Schema::dropIfExists('failed_jobs');
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/2019/database/migrations/2019_09_29_133502_create_ticket_user_table.php:
--------------------------------------------------------------------------------
1 | bigIncrements('id');
18 | $table->string('slug');
19 | $table->string('reference');
20 | $table->string('name');
21 | $table->string('email');
22 | $table->unsignedBigInteger('event_id');
23 | $table->string('event_slug');
24 | $table->boolean('opt_in_confirmed')->default(false);
25 | $table->boolean('opted_in_to_be_contacted')->default(false);
26 | $table->timestamps();
27 |
28 | $table->unique(['email', 'event_id']);
29 | });
30 | }
31 |
32 | /**
33 | * Reverse the migrations.
34 | *
35 | * @return void
36 | */
37 | public function down()
38 | {
39 | Schema::dropIfExists('ticket_users');
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/2019/database/seeders/DatabaseSeeder.php:
--------------------------------------------------------------------------------
1 | call(UsersTableSeeder::class);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/2019/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "scripts": {
4 | "dev": "npm run development",
5 | "development": "cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
6 | "watch": "npm run development -- --watch",
7 | "watch-poll": "npm run watch -- --watch-poll",
8 | "hot": "cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
9 | "prod": "npm run production",
10 | "production": "cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --no-progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
11 | },
12 | "devDependencies": {
13 | "axios": "^0.19.2",
14 | "bootstrap": "^4.6.0",
15 | "cross-env": "^5.1",
16 | "jquery": "^3.6.0",
17 | "laravel-mix": "^4.0.7",
18 | "lodash": "^4.17.21",
19 | "popper.js": "^1.16.1",
20 | "resolve-url-loader": "2.3.1",
21 | "sass": "^1.35.2",
22 | "sass-loader": "7.*",
23 | "vue": "^2.6.14",
24 | "vue-template-compiler": "^2.6.14"
25 | },
26 | "dependencies": {
27 | "sweetalert": "^2.1.2",
28 | "wowjs": "^1.1.3"
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/2019/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
13 | ./tests/Unit
14 |
15 |
16 |
17 | ./tests/Feature
18 |
19 |
20 |
21 |
22 | ./app
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/2019/public/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/.DS_Store
--------------------------------------------------------------------------------
/2019/public/.htaccess:
--------------------------------------------------------------------------------
1 |
2 |
3 | Options -MultiViews -Indexes
4 |
5 |
6 | RewriteEngine On
7 |
8 | # Handle Authorization Header
9 | RewriteCond %{HTTP:Authorization} .
10 | RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
11 |
12 | # Redirect Trailing Slashes If Not A Folder...
13 | RewriteCond %{REQUEST_FILENAME} !-d
14 | RewriteCond %{REQUEST_URI} (.+)/$
15 | RewriteRule ^ %1 [L,R=301]
16 |
17 | # Handle Front Controller...
18 | RewriteCond %{REQUEST_FILENAME} !-d
19 | RewriteCond %{REQUEST_FILENAME} !-f
20 | RewriteRule ^ index.php [L]
21 |
22 |
--------------------------------------------------------------------------------
/2019/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/favicon.ico
--------------------------------------------------------------------------------
/2019/public/img/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/.DS_Store
--------------------------------------------------------------------------------
/2019/public/img/android-browser-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/android-browser-icon.png
--------------------------------------------------------------------------------
/2019/public/img/arrow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/arrow.png
--------------------------------------------------------------------------------
/2019/public/img/arrow.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/2019/public/img/community-slant-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/community-slant-1.png
--------------------------------------------------------------------------------
/2019/public/img/community-slant-2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/community-slant-2.png
--------------------------------------------------------------------------------
/2019/public/img/community.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/community.jpg
--------------------------------------------------------------------------------
/2019/public/img/facebook.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/facebook.png
--------------------------------------------------------------------------------
/2019/public/img/github.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/github.png
--------------------------------------------------------------------------------
/2019/public/img/logo-colored.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/logo-colored.png
--------------------------------------------------------------------------------
/2019/public/img/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/logo.png
--------------------------------------------------------------------------------
/2019/public/img/no-photo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/no-photo.png
--------------------------------------------------------------------------------
/2019/public/img/play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/play.png
--------------------------------------------------------------------------------
/2019/public/img/play.svg:
--------------------------------------------------------------------------------
1 |
17 |
--------------------------------------------------------------------------------
/2019/public/img/sample-icons/sponsor1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/sample-icons/sponsor1.png
--------------------------------------------------------------------------------
/2019/public/img/sample-icons/sponsor2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/sample-icons/sponsor2.png
--------------------------------------------------------------------------------
/2019/public/img/sample-icons/sponsor3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/sample-icons/sponsor3.png
--------------------------------------------------------------------------------
/2019/public/img/sample-icons/sponsor4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/sample-icons/sponsor4.png
--------------------------------------------------------------------------------
/2019/public/img/sample-icons/sponsor5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/sample-icons/sponsor5.png
--------------------------------------------------------------------------------
/2019/public/img/sample-icons/sponsor6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/sample-icons/sponsor6.png
--------------------------------------------------------------------------------
/2019/public/img/sample-icons/sponsor7.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/sample-icons/sponsor7.png
--------------------------------------------------------------------------------
/2019/public/img/sample-icons/sponsor8.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/sample-icons/sponsor8.png
--------------------------------------------------------------------------------
/2019/public/img/speaker-stage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/speaker-stage.png
--------------------------------------------------------------------------------
/2019/public/img/speaker1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/speaker1.png
--------------------------------------------------------------------------------
/2019/public/img/speaker2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/speaker2.png
--------------------------------------------------------------------------------
/2019/public/img/speaker3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/speaker3.png
--------------------------------------------------------------------------------
/2019/public/img/speaker4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/speaker4.png
--------------------------------------------------------------------------------
/2019/public/img/speaker5.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/speaker5.png
--------------------------------------------------------------------------------
/2019/public/img/speaker6.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/speaker6.png
--------------------------------------------------------------------------------
/2019/public/img/sponsor-ay.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/sponsor-ay.png
--------------------------------------------------------------------------------
/2019/public/img/sponsor-ck-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/sponsor-ck-icon.png
--------------------------------------------------------------------------------
/2019/public/img/sponsor-ck.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/sponsor-ck.png
--------------------------------------------------------------------------------
/2019/public/img/sponsor-laravel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/sponsor-laravel.png
--------------------------------------------------------------------------------
/2019/public/img/sponsor-pusher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/sponsor-pusher.png
--------------------------------------------------------------------------------
/2019/public/img/sponsor.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/sponsor.png
--------------------------------------------------------------------------------
/2019/public/img/twitter.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/twitter.png
--------------------------------------------------------------------------------
/2019/public/img/video.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/img/video.png
--------------------------------------------------------------------------------
/2019/public/index.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 |
10 | define('LARAVEL_START', microtime(true));
11 |
12 | if (file_exists(__DIR__.'/../storage/framework/maintenance.php')) {
13 | require __DIR__.'/../storage/framework/maintenance.php';
14 | }
15 |
16 | /*
17 | |--------------------------------------------------------------------------
18 | | Register The Auto Loader
19 | |--------------------------------------------------------------------------
20 | |
21 | | Composer provides a convenient, automatically generated class loader for
22 | | our application. We just need to utilize it! We'll simply require it
23 | | into the script here so that we don't have to worry about manual
24 | | loading any of our classes later on. It feels great to relax.
25 | |
26 | */
27 |
28 | require __DIR__.'/../vendor/autoload.php';
29 |
30 | /*
31 | |--------------------------------------------------------------------------
32 | | Turn On The Lights
33 | |--------------------------------------------------------------------------
34 | |
35 | | We need to illuminate PHP development, so let us turn on the lights.
36 | | This bootstraps the framework and gets it ready for use, then it
37 | | will load up this application so that we can run it and send
38 | | the responses back to the browser and delight our users.
39 | |
40 | */
41 |
42 | $app = require_once __DIR__.'/../bootstrap/app.php';
43 |
44 | /*
45 | |--------------------------------------------------------------------------
46 | | Run The Application
47 | |--------------------------------------------------------------------------
48 | |
49 | | Once we have the application, we can handle the incoming request
50 | | through the kernel, and send the associated response back to
51 | | the client's browser allowing them to enjoy the creative
52 | | and wonderful application we have prepared for them.
53 | |
54 | */
55 |
56 | $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
57 |
58 | $response = $kernel->handle(
59 | $request = Illuminate\Http\Request::capture()
60 | );
61 |
62 | $response->send();
63 |
64 | $kernel->terminate($request, $response);
65 |
--------------------------------------------------------------------------------
/2019/public/mix-manifest.json:
--------------------------------------------------------------------------------
1 | {
2 | "/js/app.js": "/js/app.js",
3 | "/css/app.css": "/css/app.css"
4 | }
5 |
--------------------------------------------------------------------------------
/2019/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/2019/public/videos/bg.mp4:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/videos/bg.mp4
--------------------------------------------------------------------------------
/2019/public/videos/bg.ogv:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/videos/bg.ogv
--------------------------------------------------------------------------------
/2019/public/videos/bg.webm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/laravelnigeria/website/adde114769b9b963a567b9e80ab83b440b070781/2019/public/videos/bg.webm
--------------------------------------------------------------------------------
/2019/resources/js/app.js:
--------------------------------------------------------------------------------
1 | import swal from 'sweetalert';
2 |
3 | require('./bootstrap');
4 | window.Vue = require('vue');
5 |
6 | // Ignore the custom tito button HTML
7 | Vue.config.ignoredElements = ['tito-button'];
8 |
9 | // Load Vue components...
10 | Vue.component('schedule', require('./components/ScheduleComponent.vue').default);
11 | Vue.component('speakers', require('./components/SpeakersComponent.vue').default);
12 | Vue.component('slack-invite', require('./components/SlackInviteComponent.vue').default);
13 |
14 | const app = new Vue({ el: '#app' });
15 |
--------------------------------------------------------------------------------
/2019/resources/js/bootstrap.js:
--------------------------------------------------------------------------------
1 | window._ = require('lodash');
2 | window.WOW = require('wowjs').WOW;
3 |
4 | /**
5 | * We'll load jQuery and the Bootstrap jQuery plugin which provides support
6 | * for JavaScript based Bootstrap features such as modals and tabs. This
7 | * code may be modified to fit the specific needs of your application.
8 | */
9 |
10 | try {
11 | window.Popper = require('popper.js').default;
12 | window.$ = window.jQuery = require('jquery');
13 |
14 | new WOW().init();
15 |
16 | require('bootstrap');
17 | } catch (e) {}
18 |
19 | /**
20 | * We'll load the axios HTTP library which allows us to easily issue requests
21 | * to our Laravel back-end. This library automatically handles sending the
22 | * CSRF token as a header based on the value of the "XSRF" token cookie.
23 | */
24 |
25 | window.axios = require('axios');
26 | window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';
27 |
28 | /**
29 | * Next we will register the CSRF Token as a common header with Axios so that
30 | * all outgoing HTTP requests automatically have it attached. This is just
31 | * a simple convenience so we don't have to attach every token manually.
32 | */
33 |
34 | let token = document.head.querySelector('meta[name="csrf-token"]');
35 |
36 | if (token) {
37 | window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;
38 | } else {
39 | console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');
40 | }
41 |
42 | /**
43 | * Echo exposes an expressive API for subscribing to channels and listening
44 | * for events that are broadcast by Laravel. Echo and event broadcasting
45 | * allows your team to easily build robust real-time web applications.
46 | */
47 |
48 | // import Echo from 'laravel-echo'
49 |
50 | // window.Pusher = require('pusher-js');
51 |
52 | // window.Echo = new Echo({
53 | // broadcaster: 'pusher',
54 | // key: process.env.MIX_PUSHER_APP_KEY,
55 | // cluster: process.env.MIX_PUSHER_APP_CLUSTER,
56 | // encrypted: true
57 | // });
58 |
--------------------------------------------------------------------------------
/2019/resources/js/components/ScheduleComponent.vue:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
{{ (duration ? duration.start : 'Not Set') }}
9 |
13 |
{{ duration.end }}
17 |
18 |
22 |
23 |
24 |
25 | {{ details ? details.title : 'Not yet set' }}
26 |
27 |
31 | {{ details.overview }}
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
46 |
--------------------------------------------------------------------------------
/2019/resources/lang/en/auth.php:
--------------------------------------------------------------------------------
1 | 'These credentials do not match our records.',
17 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/2019/resources/lang/en/pagination.php:
--------------------------------------------------------------------------------
1 | '« Previous',
17 | 'next' => 'Next »',
18 |
19 | ];
20 |
--------------------------------------------------------------------------------
/2019/resources/lang/en/passwords.php:
--------------------------------------------------------------------------------
1 | 'Your password has been reset!',
17 | 'sent' => 'We have e-mailed your password reset link!',
18 | 'token' => 'This password reset token is invalid.',
19 | 'user' => "We can't find a user with that e-mail address.",
20 |
21 | ];
22 |
--------------------------------------------------------------------------------
/2019/resources/sass/_variables.scss:
--------------------------------------------------------------------------------
1 | // Body
2 | $body-bg: #fff;
3 |
4 | // Typography
5 | $font-family-sans-serif: 'Open Sans', 'Karla', 'Nunito', sans-serif;
6 | $font-size-base: 1rem;
7 | $line-height-base: 1.6;
8 |
9 | // Colors
10 | $deepGreen: rgba(0, 83, 83, 0.95);
11 | $lightGreen: #01baba;
12 | $primary: #01baba;
13 | $blue: #3490dc;
14 | $indigo: #6574cd;
15 | $purple: #9561e2;
16 | $pink: #f66d9b;
17 | $red: #e3342f;
18 | $orange: #f6993f;
19 | $yellow: #ffed4a;
20 | $green: #38c172;
21 | $teal: #4dc0b5;
22 | $cyan: #6cb2eb;
23 | $white: #ffffff;
24 |
--------------------------------------------------------------------------------
/2019/resources/sass/app.scss:
--------------------------------------------------------------------------------
1 | // Fonts
2 | @import url('https://fonts.googleapis.com/css?family=Nunito|Karla|Open+Sans:400,600');
3 |
4 | // Variables
5 | @import 'variables';
6 |
7 | // Bootstrap
8 | @import '~bootstrap/scss/bootstrap';
9 |
10 | // Globals
11 | @import 'components';
12 |
13 | // Pages
14 | @import 'pages/home';
15 | @import 'pages/single';
16 |
17 | #navigation-bar {
18 | #navDropdown {
19 | height: 100vh !important;
20 | overflow: hidden;
21 | margin-top: -66px;
22 | padding-top: 66px;
23 | ul {
24 | display: flex;
25 | height: 100%;
26 | align-items: center;
27 | justify-content: center;
28 | }
29 | @media only screen and (min-width: 992px) {
30 | height: inherit !important;
31 | }
32 | }
33 | .navbar-toggler:hover,
34 | .navbar-toggler:focus {
35 | outline: none;
36 | }
37 |
38 | .ham {
39 | cursor: pointer;
40 | -webkit-tap-highlight-color: transparent;
41 | transition: transform 400ms;
42 | user-select: none;
43 | @media only screen and (min-width: 992px) {
44 | display: none;
45 | }
46 | }
47 | .hamRotate.active {
48 | transform: rotate(45deg);
49 | }
50 | .line {
51 | fill: none;
52 | stroke: #fff;
53 | stroke-width: 5.5;
54 | stroke-linecap: round;
55 | transition: stroke-dasharray 400ms, stroke-dashoffset 400ms;
56 | }
57 | .ham1 {
58 | .top {
59 | stroke-dasharray: 40 160;
60 | }
61 | .middle {
62 | stroke-dasharray: 40 142;
63 | transform-origin: 50%;
64 | transition: transform 400ms;
65 | }
66 | .bottom {
67 | stroke-dasharray: 40 85;
68 | transform-origin: 50%;
69 | transition: transform 400ms, stroke-dashoffset 400ms;
70 | }
71 | &.active {
72 | .top {
73 | stroke-dashoffset: -64px;
74 | }
75 | .middle {
76 | transform: rotate(90deg);
77 | }
78 | .bottom {
79 | stroke-dashoffset: -64px;
80 | }
81 | }
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/2019/resources/sass/pages/_single.scss:
--------------------------------------------------------------------------------
1 | .single-jumbo-wrapper {
2 | padding: 180px 0 180px;
3 | background-color: $deepGreen;
4 | h2 {
5 | color: white;
6 | font-size: 30px;
7 | text-align: center;
8 | width: 85%;
9 | margin: 0 auto;
10 | text-transform: uppercase;
11 | font-weight: 600;
12 | line-height: 1.5;
13 | @media only screen and (min-width: 768px) {
14 | font-size: 40px;
15 | }
16 | }
17 | .faqs-green-div {
18 | width: 35px;
19 | height: 5px;
20 | background-color: #01baba;
21 | border-radius: 100px;
22 | display: block;
23 | margin: 15px auto 0;
24 | }
25 | }
26 | .single-page-text {
27 | .white-wrap {
28 | font-size: 15px;
29 | line-height: 1.7rem;
30 | background-color: #f5f5f5;
31 | margin: -80px auto 0;
32 | justify-content: center;
33 | border-radius: 10px 10px 0 0;
34 | padding: 16px;
35 | @media only screen and (min-width: 768px) {
36 | background: white;
37 | font-size: 17px;
38 | line-height: 2.2rem;
39 | padding: 50px;
40 | margin-bottom: 80px;
41 | background-color: #f9f9f9;
42 | border-radius: 10px;
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/2019/resources/views/partials/gtm.blade.php:
--------------------------------------------------------------------------------
1 | @if ($gtmId = config('services.google_tag_manager.id'))
2 |
3 |
4 | @endif
5 |
--------------------------------------------------------------------------------
/2019/resources/views/partials/nav.blade.php:
--------------------------------------------------------------------------------
1 |
24 |
--------------------------------------------------------------------------------
/2019/routes/api.php:
--------------------------------------------------------------------------------
1 | post('/slack/invite', 'Api\SlackInviteController');
18 |
--------------------------------------------------------------------------------
/2019/routes/channels.php:
--------------------------------------------------------------------------------
1 | id === (int) $id;
16 | });
17 |
--------------------------------------------------------------------------------
/2019/routes/console.php:
--------------------------------------------------------------------------------
1 | comment(Inspiring::quote());
18 | })->describe('Display an inspiring quote');
19 |
--------------------------------------------------------------------------------
/2019/routes/web.php:
--------------------------------------------------------------------------------
1 | name('sponsor.optin.verify');
6 | Route::post(config('tito.webhook_url'), 'RegistrationWebhookController@handle');
7 | Route::get('/code-of-conduct', 'CodeOfConductController')->name('code-of-conduct');
8 | Route::redirect('/cfp', 'https://laravelnigeria.typeform.com/to/rosG3K');
9 | Route::get('/', 'HomeController')->name('index');
10 |
--------------------------------------------------------------------------------
/2019/server.php:
--------------------------------------------------------------------------------
1 |
8 | */
9 |
10 | $uri = urldecode(
11 | parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)
12 | );
13 |
14 | // This file allows us to emulate Apache's "mod_rewrite" functionality from the
15 | // built-in PHP web server. This provides a convenient way to test a Laravel
16 | // application without having installed a "real" web server software here.
17 | if ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {
18 | return false;
19 | }
20 |
21 | require_once __DIR__.'/public/index.php';
22 |
--------------------------------------------------------------------------------
/2019/storage/app/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !public/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/2019/storage/app/public/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/2019/storage/framework/.gitignore:
--------------------------------------------------------------------------------
1 | config.php
2 | routes.php
3 | schedule-*
4 | compiled.php
5 | services.json
6 | events.scanned.php
7 | routes.scanned.php
8 | down
9 |
--------------------------------------------------------------------------------
/2019/storage/framework/cache/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !data/
3 | !.gitignore
4 |
--------------------------------------------------------------------------------
/2019/storage/framework/cache/data/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/2019/storage/framework/sessions/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/2019/storage/framework/testing/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/2019/storage/framework/views/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/2019/storage/logs/.gitignore:
--------------------------------------------------------------------------------
1 | *
2 | !.gitignore
3 |
--------------------------------------------------------------------------------
/2019/tests/Bootstrap.php:
--------------------------------------------------------------------------------
1 | createApplication()->make(Kernel::class);
27 |
28 | $commands = [
29 | 'config:cache',
30 | 'event:cache',
31 | ];
32 |
33 | foreach ($commands as $command) {
34 | $console->call($command);
35 | }
36 | }
37 |
38 | public function executeAfterLastTest(): void
39 | {
40 | array_map('unlink', glob('bootstrap/cache/*.phpunit.php'));
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/2019/tests/CreatesApplication.php:
--------------------------------------------------------------------------------
1 | make(Kernel::class)->bootstrap();
19 |
20 | return $app;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/2019/tests/Feature/ExampleTest.php:
--------------------------------------------------------------------------------
1 | get('/');
18 |
19 | $response->assertStatus(200);
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/2019/tests/TestCase.php:
--------------------------------------------------------------------------------
1 | assertTrue(true);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/2019/todo.md:
--------------------------------------------------------------------------------
1 | # TODO
2 |
3 | - [x] Code of conduct page
4 | - [x] Copy content of the site
5 | - [x] YouTube page
6 | - [x] Tito embedding
7 | - [x] Video background of the header
8 | - [x] Slack integration
9 | - [x] Change icons and swap sponsor logos (AY, Laravel, Pusher, CreativityKills)
10 | - [x] Speaker topic (pop up mobile / change on desktop)
11 | - [x] Submit talk link
12 |
13 | * [] Upload old videos to YouTube
14 |
--------------------------------------------------------------------------------
/2019/webpack.mix.js:
--------------------------------------------------------------------------------
1 | const mix = require('laravel-mix');
2 |
3 | /*
4 | |--------------------------------------------------------------------------
5 | | Mix Asset Management
6 | |--------------------------------------------------------------------------
7 | |
8 | | Mix provides a clean, fluent API for defining some Webpack build steps
9 | | for your Laravel application. By default, we are compiling the Sass
10 | | file for the application as well as bundling up all the JS files.
11 | |
12 | */
13 |
14 | mix.js('resources/js/app.js', 'public/js').sass('resources/sass/app.scss', 'public/css');
15 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2010-2016 David Majda
2 |
3 | Permission is hereby granted, free of charge, to any person
4 | obtaining a copy of this software and associated documentation
5 | files (the "Software"), to deal in the Software without
6 | restriction, including without limitation the rights to use,
7 | copy, modify, merge, publish, distribute, sublicense, and/or sell
8 | copies of the Software, and to permit persons to whom the
9 | Software is furnished to do so, subject to the following
10 | conditions:
11 |
12 | The above copyright notice and this permission notice shall be
13 | included in all copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 | OTHER DEALINGS IN THE SOFTWARE.
23 |
--------------------------------------------------------------------------------
/current:
--------------------------------------------------------------------------------
1 | 2019
--------------------------------------------------------------------------------
/deploy.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | if [[ -d "./.git" ]]; then
3 | git pull origin master
4 | fi
5 |
6 | if [[ -z $1 ]] || [[ ! -d $1 ]]; then
7 | echo "Specify directory to deploy to..."
8 | exit
9 | fi
10 |
11 | cd $1
12 |
13 | composer install --no-interaction
14 |
15 | php artisan optimize
16 | php artisan migrate --force
17 |
18 | php artisan cache:clear
19 |
20 | php artisan config:clear
21 | php artisan config:cache
22 |
23 | php artisan route:clear
24 | php artisan route:cache
25 |
--------------------------------------------------------------------------------