Projects

Lashiro's

An online store for an eyelash supply distributor. I designed and built it end to end: the catalog with real stock, WhatsApp orders and the panel the business uses to run it all.

Client
An eyelash supply distributor in Barquisimeto, Venezuela
Role
Design, development and deployment
Product
Online store and admin panel
Status
In production since 2026

The problem

The business sold through Instagram and lost sales because its storefront couldn't say what was in stock. Lashiro's shows which size is available, builds the order and leaves it written out in WhatsApp, where payments were already being arranged.

Since August 2026: 133 commits, from the first catalog to the panel and customer accounts.

On desktop

The grid lies down: curls in rows and lengths in columns, with a legend for each state. If a size is sold out, the customer taps it and asks to be told when it is back.

A product page on desktop, with the availability grid by curl and length

The other side: the panel

The business manages the catalog, the stock and its customers from a private panel. It was designed for desktop first, but with nothing that doesn't work on a phone.

The panel holds data about the business and its customers, so I don't show it in screenshots.

Decisions

  1. Stock doesn't ship in the build

    Each product page is frozen at build time because it rarely changes; stock is read separately, with short revalidation. If stock shipped in the build, the site would lie between deploys, and that was exactly the problem to solve.

  2. No payment gateway

    In Venezuela people pay with Pago Móvil, cash dollars, Zelle or Binance, and no gateway integrates them easily or cheaply. The site builds a numbered order and sends it through WhatsApp: no gateway, no PCI, no reconciliation and no disputes.

  3. BCV dollars and bolívares

    Each price is converted once on the server at the official rate and rounded to the cent, so what the store adds up matches what the customer sees. If the rate doesn't arrive, the base currency is shown; never a hand-typed rate.

  4. Built for slow mobile data

    Customers arrive from Instagram, on their phones and on poor connections. That's why there is handwritten CSS instead of a component library, fonts served from the site's own domain, AVIF images and the heavy lifting on the server.

  5. Every read counts

    The project lives on Firestore's free plan, with 50,000 reads a day shared by the store, the panel and the tests. A page load costs one read per product and the whole stock just one; saving in the panel costs nothing, and there are alerts before the limit is reached.

  6. Security lives in the rules

    Firestore rules are the real boundary, not the login screen: writing to the catalog is authorized against the list of admins, never against simply being signed in. Server routes check the token before anything else, and the rules have their own tests.

  7. Login never comes before the cart

    You always buy as a guest. Accounts are optional, nobody signs in with their phone number without a code, and when an account is deleted its orders become anonymous.

What it is built with

Web
Next.js 16 with Server Components, React 19, TypeScript, CSS Modules
Data
Firestore, Firebase Auth and a service account only the server uses
Deployment
Vercel, per-branch previews and security headers
Integrations
Official BCV rates and WhatsApp orders

See the other projects

Contact

To talk about a project, an opportunity or something you saw here.