All projects
Ecoshop
Open Source
web

Ecoshop

Portfolio e-commerce built the way a real eco-shop could actually run it — Laravel 12 API + React 19 SPA with Feature-Sliced Design and 7-service Docker stack

By the numbers

0

Admin roles

0

Docker services

0

Tech stack versions

The Problem

What I was solving

Small eco-shops end up on Shopify or Tilda because building a real store means two months of dev work and a maintenance contract. That gets them running, but they cant customize pricing rules, multi-role admin access, or tune search — they rent software instead of owning it.
My Approach

How I built it

Laravel 12 on the backend with a clean service layer, React 19 SPA on the frontend with Feature-Sliced Design validated by Steiger linter. Three admin roles (admin, order manager, content manager) with permissions wired at the policy level — content manager cant accidentally change prices. Meilisearch for full-text search handles typos and Cyrillic. Everything lives in Docker with Nginx, PostgreSQL 17, Redis 7, and Mailpit for email testing — docker compose up and its running.

Tech choices

  • Laravel 12Policy/Gate system gives per-field permissions without hand-rolled middleware. Eloquent scopes keep multi-role queries readable.
  • React 19 + FSDFeature-Sliced Design validated by Steiger catches architectural drift at lint time — no one accidentally imports admin logic into the storefront.
  • MeilisearchChose it over PostgreSQL full-text for built-in typo tolerance and faceted search. Setup is one docker-compose service, not a tuning weekend.
  • Docker + Mailpitdocker compose up spins the whole stack including a fake SMTP. New devs onboard in 5 minutes, no tunnels or shared staging.
Outcome

What came out of it

A non-technical shop owner can run the store end-to-end through the admin panel — drag-and-drop category trees, multi-image uploads, order management. Full-text search with typo tolerance means customers find products even with typos. Three separate admin roles keep trust boundaries clear — content editing doesnt require full database access.