Back to articles

Building a Full-Stack App with SvelteKit and a Serverless Laravel API

AuthorMajd Muhtaseb07/05/202512 minutes
Building a Full-Stack App with SvelteKit and a Serverless Laravel API

Introduction

This tutorial outlines building a full-stack application leveraging the strengths of SvelteKit and Laravel, deployed in a serverless environment. SvelteKit offers a fantastic developer experience for building fast and interactive frontends, while Laravel provides a robust and feature-rich backend framework. By deploying the Laravel API as a serverless function, we can achieve scalability and cost-efficiency.

Setting up the Laravel API

First, we need a Laravel project. Use Composer to create a new project:

composer create-project laravel/laravel api
cd api

Next, define a simple API endpoint, for example, retrieving a list of products. Create a controller:

php artisan make:controller ProductController

In app/Http/Controllers/ProductController.php:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ProductController extends Controller
{
    public function index()
    {
        $products = [
            ['id' => 1, 'name' => 'Product A', 'price' => 20],
            ['id' => 2, 'name' => 'Product B', 'price' => 30],
        ];

        return response()->json($products);
    }
}

Define the route in routes/api.php:

<?php

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProductController;

Route::middleware('api')->group(function () {
    Route::get('/products', [ProductController::class, 'index']);
});

This API can be deployed to a serverless environment like AWS Lambda using services like Bref or Laravel Vapor. Configuration for serverless deployment depends on the chosen platform.

Creating the SvelteKit Frontend

Now, let's set up the SvelteKit frontend.

npm create svelte@latest frontend
cd frontend
npm install

Create a page to fetch and display the products from the Laravel API. In src/routes/+page.svelte:

<script>
  let products = [];

  async function getProducts() {
    const res = await fetch('YOUR_LARAVEL_API_ENDPOINT/api/products'); // Replace with your actual API endpoint
    products = await res.json();
  }

  getProducts();
</script>

<h1>Products</h1>

{#each products as product (product.id)}
  <div>
    {product.name} - ${product.price}
  </div>
{/each}

Remember to replace YOUR_LARAVEL_API_ENDPOINT with the actual URL where your Laravel API is deployed.

Running the Application

Start the SvelteKit development server:

npm run dev

Open your browser and navigate to the SvelteKit application's URL (usually http://localhost:5173). You should see the list of products fetched from your Laravel API.

Conclusion

This tutorial demonstrated how to combine SvelteKit and a serverless Laravel API to build a modern and scalable full-stack application. By utilizing the strengths of both frameworks and serverless deployment, you can create efficient and cost-effective solutions. Remember to handle error scenarios and implement proper authentication and authorization for production environments. Further improvements could include using a database within the Laravel API and adding more complex UI components in SvelteKit.