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 12— Policy/Gate system gives per-field permissions without hand-rolled middleware. Eloquent scopes keep multi-role queries readable.
- React 19 + FSD— Feature-Sliced Design validated by Steiger catches architectural drift at lint time — no one accidentally imports admin logic into the storefront.
- Meilisearch— Chose it over PostgreSQL full-text for built-in typo tolerance and faceted search. Setup is one docker-compose service, not a tuning weekend.
- Docker + Mailpit— docker 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.