If you have attended any hackathons in the past, then you know how much time it takes to get a project started: decide on what to build, pick a programming language, pick a web framework, pick a CSS framework. A while later, you might have an initial project up on GitHub and only then can other team members start contributing. Or how about doing something as simple as Sign in with Facebook authentication? You can spend hours on it if you are not familiar with how OAuth 2.0 works.
Even if you are not using this for a hackathon, Laravel Hackathon Starter is sure to save any developer hours or even days of development time and can serve as a learning guide for web developers.
Laravel is a web application framework with expressive, elegant syntax. Laravel attempts to take the pain out of development by easing common tasks used in the majority of web projects, such as authentication, routing, sessions, queueing, and caching.
Laravel Hackathon Starter is a boilerplate application developed with Laravel 5.2 to keep you ahead in hackathons.
xcode-select --install
)sudo apt-get install build-essential
sudo dnf groupinstall "Development Tools"
sudo zypper install --type pattern devel_basis
npm install -g @useoptic/cli
(needed for automatic documentation)Note: If you are new to Laravel, I recommend to watch Laravel From Scratch screencast by Jeffery Way that teaches Laravel 5 from scratch. Alternatively, here is another great tutorial for building a project management app for beginners/intermediate developers - How to build a project management app in Laravel 5.
# Get the project
git clone https://github.com/unicodeveloper/laravel-hackathon-starter.git hackathon-starter-pack
# Change directory
cd hackathon-starter-pack
# Copy .env.example to .env
cp .env.example .env
# Create a database (with mysql or postgresql)
# And update .env file with database credentials
# DB_CONNECTION=mysql
# DB_HOST=127.0.0.1
# DB_DATABASE=laravelhackathon
# DB_USERNAME=root
# DB_PASSWORD=root
# Install Composer dependencies
composer install
# Generate application secure key (in .env file)
php artisan key:generate
# Generate application secure key (in .env file)
php artisan key:generate
php artisan serve
First, download the Laravel Hackathon Starter Pack Installer using Composer:
composer global require "unicodeveloper/hackathon-installer"
Make sure to place the ~/.composer/vendor/bin
directory (or the equivalent directory for your OS) in your PATH so the larathon
executable can be located by your system.
Once installed, the larathon new
command will create a fresh Laravel Hackathon Starter Pack installation in the directory you specify. For instance, larathon new mvp
will create a directory named mvp
containing a fresh Laravel Hackathon Starter Pack installation with all of it's dependencies already installed. This method of installation is much faster than installing via Composer:
larathon new mvp
Alternatively, you may also install Laravel Hackathon Starter Pack by issuing the Composer create-project
command in your terminal:
composer create-project --prefer-dist unicodeveloper/laravel-hackathon-starter hotel
This starter pack includes the following APIs. You will need to obtain appropriate credentials like Client ID, zClient secret, API key, or Username & Password by going through each provider and generate new credentials.
.env
Note: When you ready to deploy to production don't forget to
add your new url to Authorized Javascript origins and Authorized redirect URI,
e.g. http://my-awesome-app.herokuapp.com
and
http://my-awesome-app.herokuapp.com/auth/google/callback
respectively.
The same goes for other providers.
.env
http://localhost:3000
under Site URLNote: After a successful sign in with Facebook, a user will be redirected back to home page with appended hash #_=_
in the URL. It is not a bug. See this Stack Overflow discussion for ways to handle it.
.env
file.env
filer_basicprofile
.env
file
.env
file
.env
file.env
file.env
file.env
file.env
file.env
file.env
file.env
filerun php artisan vendor:publish
Name | Description |
---|---|
config/app.php | Configuration for service providers and facades |
config/auth.php | Configuration for password resets |
config/broadcasting.php | Configuration for broadcasting |
config/cache.php | Configuration for cache generation and storage |
config/cloudder.php | Configuration for cloudinary |
config/compile.php | Configuration for compilation |
config/database.php | Configuration for database drivers |
config/filesystems.php | Configuration for different file systems |
config/github.php | Configuration for github API |
config/mail.php | Configuration for mails |
config/queue.php | Configuration for queue |
config/services.php | Configuration for several services like mailgun etc. |
config/session.php | Configuration for sessions |
config/ttwitter.php | Twitter API config file |
config/twilio.php | Twilio API config file |
config/view.php | Configuration for location of views and view cache |
controllers/AccountController.php | Controller for Account management |
controllers/AviaryController.php | Controller for Aviary API functionality |
controllers/ClockworkController.php | Controller for Clockwork API functionality |
controllers/ContactController.php | Controller for Contact page |
controllers/Controller.php | BaseController |
controllers/GithubController.php | Controller for Github API functionality |
controllers/LastFmController.php | Controller for LastFM API functionality |
controllers/LobController.php | Controller for Lob API functionality. |
controllers/NytController.php | Controller for New York Times API functionality |
controllers/OauthController.php | Controller for Oauthentication |
controllers/PaypalController.php | Controller for Paypal API functionality |
controllers/SteamController.php | Controller for Stream API functionality |
controllers/StripeController.php | Controller for Stripe API functionality |
controllers/TwilioController.php | Controller for Twilio API functionality |
controllers/TwitterController.php | Controller for Twitter API functionality |
controllers/WebScrapingController.php | Controller for Web Scraping. |
controllers/YahooController.php | Controller for Yahoo API functionality |
controllers/user.js | Controller for user account management. |
models/User.php | Model for User. |
public/ | Static assets (fonts, css, js, img). |
public/css/main.css | Main stylesheet for your app. |
resources/views/account/ | Templates for login, password reset, signup, profile. |
views/api/ | Templates for API Examples. |
views/partials/alerts.blade.php | Error, info and success flash notifications. |
views/partials/navbar.blade.php | Navbar partial template. |
views/layouts**/master.blade.php | Base template. |
views/apidashboard.blade.php | API dashboard template. |
views/contact.blade.php | Contact page template. |
views/welcome.blade.php | Home page template. |
.travis.yml | Travis CI integration. |
.env.example | Your API keys, tokens, passwords and database URI. |
composer.json | File for loading all php packages. |
package.json | File for loading all necessary node modules. |
artisan | File for enabling commands to run |
Package | Description |
---|---|
socialite | Sign-in with Facebook, Twitter and Github |
socialite providers | Sign-in with LinkedIn, Instagram |
cloudder | Upload images to Cloudinary |
laravel github | Github API library |
clockwork | Clockwork SMS API library. |
goutte | Scrape web pages using jQuery-style syntax. |
laravel framework | PHP web framework |
Twitter API library | |
twilio | Twilio API library |
lob-php | Lob API library |
lastfm-api-wrapper | Lastfm API library |
phpunit | PHP testing library |
guzzlehttp | Simplified HTTP Request library |
Using Optic, you can use your API like normal, automatically documenting changes in behavior. To enable this, you'll first need to download Optic.
npm install -g @useoptic/cli
Once you've installed Optic, you can start documenting your requests by running api start
. Running this command will create a proxied version of your api, available at localhost:4000 - now, you can use the API like normal here, and Optic will automatically notice differences in the documented behavior, allowing you to automatically create documentation as your API changes.
To view the current documentation of the api, run api spec
at the root directory.
api start # use this to start monitoring your API
api spec # use this to inspect the current documentation of your API
api generate:oas # generates an OpenAPI specification for your currently documented API
For more information about Optic, check out the docs.
Token Mismatch Exception
when submitting a form?You need to add the following hidden input element to your form. This has been added in the existing codebase as part of the CSRF protection.
{!! csrf_field() !!}
Chances are you haven't generated the app key, so run php artisan key:generate
.
Chances are you haven't put your credentials in your .env file.
This section is intended for giving you a detailed explanation about how a particular functionality works. Maybe you are just curious about how it works, or maybe you are lost and confused while reading the code, I hope it provides some guidance to you.
Flash messages allow you to display a message at the end of the request and access it on next request and only next request. For instance, on a failed login attempt, you would display an alert with some error message, but as soon as you refresh that page or visit a different page and come back to the login page, that error message will be gone. It is only displayed once. All flash messages are available in your views via laravel sessions.
A more correct way to be to say "How do I create a new route". The main file routes.php
contains all the routes.
Each route has a callback function associated with it. Sometimes you will see 3 or more arguments
to routes. In cases like that, the first argument is still a URL string, while middle arguments
are what's called middleware. Think of middleware as a door. If this door prevents you from
continuing forward, you won't get to your callback function. One such example is a route that requires authentication.
Route::get('/account', 'UserController@getAccount');
It always goes from left to right. A user visits /account
page. Then auth
middleware
checks if you are authenticated:
Route::get('/account', [
'uses' => 'AccountController@getAccountPage',
'as' => 'account.dashboard',
'middleware' => ['auth']
]);
If you are authenticated, you let this visitor pass through your "door" by calling return $next($request);
in the auth middleware and if you are authenticated, you will be redirected to Account Management page, otherwise you will be redirected to Login page.
Here is a typical workflow for adding new routes to your application. Let's say we are building a page that lists all books from database.
Step 1. Start by defining a route.
Route::get('/books', 'BookController@getBooks');
Step 2. Create a new model Book.php
inside the app directory. You can simply run php artisan make:model Book
namespace App;
class Book
{
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'isbn',
];
}
Step 3. Create a migration file like so: php artisan make:migration create_books_table
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreateBooksTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('books', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('isbn');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('books');
}
}
Step 4. Create a new controller file called BookController
inside the app/Http/Controllers directory. You can simply run php artisan make:controller BookController
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Book;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class BookController extends Controller
{
/**
* Return all books
* @return mixed
*/
public function getBooks()
{
$books = Book::all();
return view('books')->withBooks($books);
}
}
Step 5. Create books.blade.php
template.
@extends('layouts.master')
@section('content')
<div class="main-container">
@include('layouts.partials.alerts')
<div class="page-header">
<h2><i style="color: #f00" class="fa fa-book"></i>All Books</h2>
</div>
<ul>
@foreach ($books as $book)
<li> {{ $book->name }} </li>
@endforeach
</div>
</div>
@stop
That's it!
Once you are ready to deploy your app, you will need to create an account with a cloud platform to host it. These are not the only choices, but they are my top picks. From my experience, Heroku is the easiest to get started with, deployments and custom domain support on free accounts.
heroku login
and enter your Heroku credentialsheroku create
web: vendor/bin/heroku-php-nginx public
or web: vendor/bin/heroku-php-apache2 public
if you prefer to use nginx.heroku addons:add heroku-postgresql:dev
to add a Postgres database to your heroku app from your terminalgit push heroku master
. Done!heroku run php artisan migrate
Note: To install Heroku add-ons your account must be verified.
git push -f openshift master
-f
(force) flag because OpenShift creates a dummy server with the welcome page when you create a new Node.js app. Passing -f
flag will override everything with your Hackathon Starter project repository. Do not run git pull
as it will create unnecessary merge conflicts.git remote add azure [Azure Git URL]
git push azure master
Note: Alternative directions, including how to setup the project with a DevOps pipeline are available at http://ibm.biz/hackstart. A longer version of these instructions with screenshots is available at http://ibm.biz/hackstart2. Also, be sure to check out the Jump-start your hackathon efforts with DevOps Services and Bluemix video.
Thank you for considering contributing to Laravel Hackathon Starter. The contribution guide can be found in the Contribution File
If you discover a security vulnerability within Laravel Hackathon Starter, please send an e-mail to Prosper Otemuyiwa at prosperotemuyiwa@gmail.com. All security vulnerabilities will be promptly addressed.
Why not star the github repo? I'd love the attention! Why not share the link for this repository on Twitter or HackerNews? Spread the word!
Don't forget to follow me on twitter!
Thanks! Prosper Otemuyiwa.
The MIT License (MIT). Please see License File for more information.