Wooden Ships · Shopify

One storefront, three years.

Since July 2023 I have worked on one live Shopify store, through four roles.

The store is run by PT In Fashion, my employer. This is professional work on it, not ownership of the company.

Span
Jul 2023 – present
Storefront
One, continuously live
Roles
Four, no gap

Explore:Four roles, one live store

The store stays live the whole way. What changes is my part in it: what I implemented, what I led, and what my team engineered under my direction.

  1. Jul 2023 – Mar 2024Shopify Admin
  2. Mar 2024 – Sep 2024Lead Graphic Designer
  3. Sep 2024 – Nov 2025Lead Web Developer
  4. Nov 2025 – PresentAI & Automation Project Manager

Implemented

My hands

Led

As web lead

  • Release management
  • Vendors and US stakeholders, 12–13 hours behind

Four things I can point at.

  1. In the storefront

    Storefront search relevance

    Built by me — diagnosis, implementation, release QA.

    Shoppers who searched “lobster” were shown products with no lobster in them, which makes a shop look broken. I fixed the search so every result carries the words they typed.

    The fix, close up

  2. Reads from the store

    Slow Seller decision engine

    Primarily engineered by Kirei Kharisma Handayani — LinkedIn profile, opens in a new tab. I defined what it had to do, reviewed the implementation, and took it through QA and rollout.

    Reads the store’s sales and writes a merchandising decision into the team’s sheet.

    Run the demoCase study

  3. Reads from the store

    Order export for production planning

    Built by me — design, directing Claude Code from specs, the warehouse-attribution rule and the conservative stock verdict, requirements with the planning team, deployment and the handover to planners; developed further by Prada Dipa — LinkedIn profile, opens in a new tab and Luthfi Aditya — LinkedIn profile, opens in a new tab.

    Planners export orders themselves instead of asking a developer.

    Case study

  4. Alongside the store

    Seasonal catalogue pipeline

    Built by me — design, implementation, the naming convention and the dry-run-by-default rule, the season run and its runbooks.

    Not the storefront: the season’s wholesale catalogue, on WordPress.

    Case study

Implemented

A search for “lobster” that returned no lobster.

Live storefront searches, and the products Shopify also returned that do not carry the typed word.
TypedAlso returned
lobsterOH CRAB!, MARLED CRAB V, KEY WEST
pumpkinWONDERFUL CHRISTMAS

Public product titles. The fix’s own notes record that none of these carries the word anywhere: title, tags, description or variants. MAUI V and CROP BOYFRIEND also come back for “pumpkin” and stay on purpose: a pumpkin colourway is in their variant names.

The fix, in three pieces

  1. Compare plain words on both sides: ignore capitals, formatting and punctuation.

  2. Look for the words in the product’s own text, description included.

  3. Drop any result missing a typed word.

Live on the store since 19 August 2026, in main search, predictive search and suggestions. It is on by default; turning it off takes a deliberate settings change.

Go deeper
  1. snippets/search-normalize.liquid

    Downcases, strips HTML, and rewrites 20 punctuation characters to spaces, applied to both sides of every comparison, so OH CRAB! equals “oh crab”, and a SKU reading PURE SNOW/BLACK becomes findable by “snow”.

  2. snippets/search-term-match.liquid

    Builds the haystack from title, vendor, type, joined tags, joined variant titles, joined variant SKUs and the description. A product that names the word only in its body copy still matches; a product that carries it nowhere does not.

  3. the three search templates

    Split the query into words and return false the moment one is missing. Every typed word must be present, in any order. Main search, predictive search and suggestions all apply it. Curated tag matches still work, because those are fields the merchandiser chose. A later commit made the filter an opt-out theme setting: it stays on unless someone deliberately switches it off.

6 commits on 19 August 2026, touching 8 of the theme’s 721 files.

Try the search yourself

Exactly this much, and no more.

  • I did not found, own or build the company.
  • The merchandising team owns its policy, and Kirei Kharisma Handayani built the engine.
  • No internal screen appears here, and no measured outcome is claimed.
Go deeper: the full scope

What the work was

  • Led web development on a live commercial storefront from September 2024.
  • Implemented storefront changes in Liquid and shipped them to production.
  • Integrated apps and services against the Shopify Admin GraphQL API.
  • Coordinated production releases and release QA on a store that cannot go down.
  • Directed the internal systems built around the store for merchandising and ad review: Kirei Kharisma Handayani engineered the merchandising decision engine, and Prada Dipa the ad review, which Hady Satya maintains. I defined what each had to do, reviewed the logic, and took them through QA and rollout.
  • Directed the commerce data warehouse that reads the store’s sales, which Prada Dipa and Luthfi Aditya engineered. I ruled that the net-sales definition lives in one database view every endpoint reads, reviewed the access model, and took it through QA and rollout.
  • Built my own Shopify tools around it, the order export for production planning among them, mostly with Claude Code writing against specifications I set. The order export is now developed further by Prada Dipa and Luthfi Aditya.
  • Automated operational workflows — some hands-on, the rest directed — and made the runbook part of done, so a tool is not owned by whoever wrote it.

What it was not

  • Founding, owning or building the company. It existed before me and does not depend on me.
  • Writing the merchandising policy, or encoding it. The policy belongs to the merchandising team, and Kirei Kharisma Handayani built the engine; my part was turning that flowchart into decision rules an engineer could implement, then reviewing the encoding before it shipped.
  • Authoring the whole theme. The search fix on this page touched 8 files out of 721.
  • Showing anything internal. No admin screen, no order, no customer record and no employee record appears anywhere on this site.
  • Claiming a measured outcome. None of these systems instrument themselves, so there is no percentage on this page.