PHPackages                             esfredderick/rilt-psql-blank-starter-kit - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Framework](/categories/framework)
4. /
5. esfredderick/rilt-psql-blank-starter-kit

ActiveProject[Framework](/categories/framework)

esfredderick/rilt-psql-blank-starter-kit
========================================

The skeleton application for the Laravel framework.

v1.0.0(1mo ago)00MITPHPPHP ^8.2CI passing

Since May 7Pushed 1mo agoCompare

[ Source](https://github.com/esfredderickmx/rilt-psql-blank-starter-kit)[ Packagist](https://packagist.org/packages/esfredderick/rilt-psql-blank-starter-kit)[ RSS](/packages/esfredderick-rilt-psql-blank-starter-kit/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (1)Dependencies (16)Versions (2)Used By (0)

Laravel Starter Kit — Inertia React + PostgreSQL
================================================

[](#laravel-starter-kit--inertia-react--postgresql)

An opinionated Laravel starter kit built on **PostgreSQL schemas**, **Inertia v3 + React 19**, and an **action-based architecture**. Designed for developers who want clear domain boundaries, type safety across the full stack, and sensible defaults from day one.

Stack
-----

[](#stack)

LayerTechnologyBackendLaravel 13, PHP 8.4FrontendReact 19, TypeScript, Inertia v3DatabasePostgreSQL (named schemas)StylingTailwind CSS v4, shadcn/uiType BridgeLaravel Wayfinder (dev-next)TestingPest 4Static AnalysisLarastan (PHPStan), ESLint, PrettierCode StyleLaravel PintGetting Started
---------------

[](#getting-started)

> Requires PHP 8.2+, PostgreSQL, Node.js, and **pnpm**.

Create your app using [Laravel installer](https://laravel.com/docs/13.x/starter-kits#community-maintained-starter-kits):

```
laravel new my-app --using=esfredderick/rilt-psql-blank-starter-kit
```

### Initial setup

[](#initial-setup)

```
cd example-app

# runs migrations using your own db credentials
composer setup

# runs the dev server
composer dev
```

Architecture Overview
---------------------

[](#architecture-overview)

Important

This section describes the **conventions and patterns** embedded in this starter kit — not automatic behaviors. They define how the codebase is structured and how new features should be built. Detailed guidelines live in `.ai/guidelines/project-architecture.md`.

### PostgreSQL Schemas as Domain Boundaries

[](#postgresql-schemas-as-domain-boundaries)

Tables live in named schemas instead of the default `public` schema. Treat each schema as a domain boundary and keep schema, table, and folder examples placeholder-based so each application can choose its own domain names. Schemas are created via dedicated migrations, and models declare their table with schema-qualified names:

```
protected $table = '{domain}.{table}';
```

The [`esfredderick/useful-artisan-commands`](https://github.com/esfredderickmx/useful-artisan-commands) package automatically creates the database and migration schema when they don't exist during migration commands - no application service provider setup required while Laravel package discovery is enabled. When Laravel framework table defaults need to move into named schemas, run `php artisan schemas:config-defaults` from the same package to schema-qualify the relevant configuration defaults.

### Domain-Driven Directory Structure

[](#domain-driven-directory-structure)

Database schemas and table concerns mirror into PHP namespaces and frontend directories. Models stay directly under the domain namespace, and route files are grouped by domain:

```
app/
  Actions/{Domain}/{Subdomain}/
  Data/{Domain}/{Subdomain}/
  Exceptions/{Domain}/{Subdomain}/
  Http/Controllers/{Domain}/{Subdomain}/
  Http/Requests/{Domain}/{Subdomain}/
  Models/{Domain}/
resources/js/
  components/domain/{domain}/{subdomain}/
  pages/{domain}/{subdomain}/
routes/
  domain/{domain}.php
tests/
  Feature/{Domain}/

```

### Action-Based Business Logic

[](#action-based-business-logic)

All business logic goes into Action classes — controllers stay thin. Artisan commands for generating both are provided by [`esfredderick/useful-artisan-commands`](https://github.com/esfredderickmx/useful-artisan-commands):

```
php artisan make:action {Domain}/{Subdomain}/{ActionName}    # -> app/Actions/{Domain}/{Subdomain}/{ActionName}Action.php (-d to also create DTO)
php artisan make:data {Domain}/{Subdomain}/{DataName}        # -> app/Data/{Domain}/{Subdomain}/{DataName}Data.php
```

Actions are plain classes with a `handle()` method. DTOs are `final readonly` classes used when actions need three or more input values.

### Thin Controllers

[](#thin-controllers)

Controllers follow a strict injection order and flow:

```
FormRequest → Route params → Action (via method DI)

```

Form Requests handle validation and expose a `getData()` method that transforms input into a DTO. The controller calls `$action->handle($request->getData())`, flashes feedback via `Inertia::notify()`, and redirects.

### Exception Handling

[](#exception-handling)

`AppException` is the base exception class. Domain-specific exceptions extend it and auto-render as flash messages — no try-catch needed:

```
throw new InsufficientBalanceException(); // flashes + redirects back automatically
```

### Frontend Feedback System

[](#frontend-feedback-system)

Two flash channels from backend to frontend:

- **Callout** — persistent inline alert via ``
- **Transient** — auto-dismissing Sonner toast via `useTransientListener()`

Both are triggered through a single macro:

```
Inertia::notify('Done!', ResponseStyle::TRANSIENT);
Inertia::notify('Check this.', ResponseStyle::CALLOUT, EmphasisVariant::INFORMATIVE);
```

### Emphasis Variant System

[](#emphasis-variant-system)

A semantic color/icon system spanning the full stack:

- **Backend**: `EmphasisVariant` enum (`AFFIRMATIVE`, `INFORMATIVE`, `PREVENTIVE`, `DESTRUCTIVE`, `INTERROGATIVE`, `NEUTRAL`)
- **Type Bridge**: Wayfinder auto-generates TypeScript constants and types
- **CSS**: Custom `oklch()` color tokens per variant (light + dark)
- **Components**: shadcn `Alert` extended with variant classes, `useDecorator()` hook for icon resolution

### Wayfinder Type Bridge

[](#wayfinder-type-bridge)

[Laravel Wayfinder](https://github.com/laravel/wayfinder) (dev-next) generates typed TypeScript from Laravel routes, models, enums, form requests, and Inertia page props. All output lives under `resources/js/wayfinder/` and auto-regenerates via Vite plugin during development.

Inertia shared props and flash data are typed through module augmentation in `resources/js/types/global.d.ts`.

### Frontend Conventions

[](#frontend-conventions)

- **UI primitives** from shadcn/ui live in `components/ui/`
- **Custom reusable components** live in `components/ux/` using composition pattern
- **Decoration records** map enum variants to UI properties via `Pick` — see `decorations/ui/emphasis-decoration.ts`
- **Theme** managed by `useAppearance()` hook (light/dark/system, cookie-persisted for SSR)

Custom Available Commands
-------------------------

[](#custom-available-commands)

Commands provided by [`esfredderick/useful-artisan-commands`](https://github.com/esfredderickmx/useful-artisan-commands) (dev dependency):

CommandDescription`php artisan make:action {name}`Action class (auto-suffixed, `-d` to also create DTO)`php artisan make:data {name}`DTO class (auto-suffixed)`php artisan app:config-db`Re-configures PostgreSQL credentials directly in `.env``php artisan schemas:config-defaults`Schema-qualifies Laravel framework table defaults for PostgreSQL schema/domain setups### Code Quality

[](#code-quality)

CommandDescription`composer run quality`Prettier + ESLint + Pint + LarastanAll standard `php artisan make:*` commands (model, controller, request, migration, etc.) are available as usual.

Application Defaults
--------------------

[](#application-defaults)

Configured in `AppServiceProvider`:

- `CarbonImmutable` as default date class
- Strict model mode outside production
- Destructive DB commands prohibited in production
- Aggressive Vite prefetching
- HTTPS forced in production
- Password rules enforced in production (min 12, mixed case, symbols, uncompromised)

License
-------

[](#license)

MIT

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance93

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity46

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

33d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/79d682351c4c4ff99c080bc3adf1828479a57fdaf5b8cc159734cd858df8619b?d=identicon)[esfredderickmx](/maintainers/esfredderickmx)

---

Top Contributors

[![smonteromx](https://avatars.githubusercontent.com/u/136201412?v=4)](https://github.com/smonteromx "smonteromx (6 commits)")

---

Tags

laravelpostgrestailwindinertiavitereactstarter-kitpsqlrilt

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/esfredderick-rilt-psql-blank-starter-kit/health.svg)

```
[![Health](https://phpackages.com/badges/esfredderick-rilt-psql-blank-starter-kit/health.svg)](https://phpackages.com/packages/esfredderick-rilt-psql-blank-starter-kit)
```

###  Alternatives

[unopim/unopim

UnoPim Laravel PIM

10.1k2.2k](/packages/unopim-unopim)[codewithdennis/larament

Larament is a time-saving starter kit to quickly launch Laravel 13.x projects. It includes FilamentPHP 5.x pre-installed and configured, along with additional tools and features to streamline your development workflow.

3861.7k](/packages/codewithdennis-larament)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
