Shray Shrotriya

Founder-operator · Digital business · AI & automation

I built the business, then I wrote the software it runs on.

Quaza Collect

Quaza Inc. is my commerce company, profitable in its first half. I own it, I run it, and I built everything it runs on: the store, the iOS app, the backend, and the machine that works while I sleep.

The store

quazacollect.com

A storefront I rebuilt section by section until every surface was mine to change. Pushing a branch is the deploy, and nothing ships without a review pass that is paid to disagree with me.

The Quaza Collect homepage: the planet-marked wordmark over the full navigation, a set-release hero, and a row of carried brands.
Own theme, every sectionSet release, live
The app

Native iOS, written alone

I learned Swift by shipping this. Four releases in the first 24 days, a design language that is the store's own, and nothing between the customer and the shelf.

first commit ten days live on the App Store Apple review included
The Quaza Collect iOS app home screen in an iPhone frame: a featured set hero, category chips and new arrivals.
One truth

The app and the site cannot disagree

Both read the same backend I wrote. A price in the app is the price on the site, always, because there is exactly one place a number can come from. That was a constraint I set on day one, and it has held through every release.

The app's cart screen, with the same prices the website shows. one backend · one price
The machine

It works while I sleep

Behind the shop runs a machine I assembled: agents working under written rules, a gate that decides what ships, and a local model trained on the store's own writing. Twelve scheduled jobs fire whether I am at the keyboard or not.

The wall-mounted operations console: live commerce figures, machine gauges, agent activity and market instruments on a dark full-screen display.
Agent fleet, liveMarket terrain
Quaza Track: the store's market page with its own sub-navigation, a live index ticker strip, and set indexes updating daily.
QUAZA TRACK · live market indexes, updated daily
Quaza News: the store's editorial index with category filters and a featured set guide.
QUAZA NEWS · written by the pipeline below
Gross margin on the store
47.7%
Cost of goods costed line by line, 97% invoice-verified
Orders fulfilled, built alone, part-time, while employed full-time
385 / 402
Into more than 15 countries
Agent tool calls across 9 days on hardware I run
10,887
325 transcripts ยท 12 scheduled jobs, running while logged out
Reduction on the hot database path
90x
35,000 rows per call, precomputed to 1

These run. Put a finger on them.

Always on

The operations console

The wall display, rebuilt at miniature scale, on a written performance budget.

Illustrative readings from a fixed seed, not live data from the machine. The panel stops painting when it scrolls off screen or the tab is hidden.
iOS · the Track tab

The market client, live

App Store

Price history, movers, two markets, inside the real device frame. Drag the chart.

Prices

Sealed indexSLD-IX
105.41latest
low 104.14high 105.62
Sealed movers, 7 days

Illustrative data, not live.

What the frame is doing

Markets
Sealed and Singles are separate markets in the app, with their own index and their own movers. The segmented control switches both.
Scrub
Drag the chart with a mouse or a finger, or focus it and use the arrow keys. Every panel below the chart follows the data.

The figures are illustrative. Every series here is a seeded random walk computed in this component, not live market data.

How the real one is built

Native iOS: SwiftUI with the Observation framework and Swift Concurrency, hand-written GraphQL over URLSession, no vendor SDKs. The tab reads a Cloudflare Worker in front of a D1 database, the same backend the website reads. This recreation is one React island, with the chart drawn as SVG rather than pulled from a chart library.

Quaza News The pipeline that writes the store's blog, ending at a draft on purpose. RUN ▸

The rendered article

Quaza News

Example Set: a quiet month for sealed

Sealed held, singles drifted, and the reprint question stayed open.

illustrative post ยท 3 min read

Where prices sit

Sealed boxes of Example Set ended the month close to where they began. Singles from the set drifted a few points lower, led by the alternate arts.

None of this is real. The set, the cards and the figures are invented for this page.

What moved

The chase card of the set gained on thin volume, which is the kind of move that fades. Mid-tier holos sat flat, and listed supply held steady all month.

The reprint question

A reprint would reset most of the numbers above, and rumours of one arrive on schedule. Until an announcement lands, every figure here stays what it is: an illustration.

Sharecopy linkpost

Related posts

Illustrative article, not a real post.

The pipeline

  1. researchqueued
  2. buildqueued
  3. verify.pyqueued
  4. regressions.pyqueued
  5. fileCreate (images)queued
  6. draft via Admin GraphQLqueued

6 stages, run in order. Nothing here talks to Shopify: the run is a recreation.

The article is illustrative: the set, the cards and the figures are invented for this page. The run animates the real pipeline's order without talking to Shopify.

Quaza News is a TCG news blog on the Quaza Collect storefront, produced by a pipeline rather than typed into an admin: 18,246 lines of Python, a shared component library, and 73,195 words of prose across 30 built articles, tracked as 15,362 lines of article HTML. Publishing goes through the Shopify Admin GraphQL API, images first, article second, always as a Draft.

The agent leash A shell on my hardware with no way to write. The real policy, deciding here. RUN ▸

Example tool calls

Tool call

{ "tool": "Read", "input": {"file_path":"/etc/hostname"} }

ALLOWED

The guard returns no reason when it allows.

Rule: No rule fired

The call cleared every gate in order, so the guard permits it.

Tools permitted

  • Read
  • Grep
  • Glob
  • Bash

Binaries permitted under Bash

  • cat
  • ls
  • rg
  • jq
  • head
  • tail
  • wc
  • date
  • df
  • uptime

The guard is public at github.com/shraygh/readonly-agent. It carries 61 tests that run with no API key.

The Six Stones

My design practice, and the site I built to carry it: a hand-written WebGL globe, mission telemetry in the corners, and a metaphor held through every line. No library, no template, and none of it leaks into the warmer work below.

Open the site
The Six Stones homepage: a rendered globe of hexagonal dots with orbit lines and city markers, the serif headline "We launch brands into global orbit." and mission-control telemetry in the corners.

The hero is live: a hand-written WebGL globe, orbit stable.

ATR Sports

Before Quaza there was ATR Sports, a sports-card retailer whose online sales had been flat for three years. I rebuilt the store from scratch and ran the online side alone, part-time, while employed full-time.

Online sales growth in the first year
515%
Flat for three years · I rebuilt the store
Total company sales growth, same year
82%
The online store was the part that moved
How the case was made The month it took to get a yes, and why that is the number I am proudest of. READ ▸
Shray Shrotriya seated on a stool holding a microphone in one hand and a sheet of paper in the other, mid-sentence, in a wood-panelled room. Members of the audience are blurred in the foreground.
Speaking to a room. Toronto.

I recommended moving the store onto a much more expensive platform, and the resistance was not technical: it was cost, and underneath the cost it was timing. The owner did not disagree that the platform was better. They did not know when it would be worth paying for.

So I showed them the month. Above a certain volume the transaction-fee saving offsets the subscription, which turns whether-to-upgrade into which month the crossover falls in. The recommendation arrived from someone who had already done the work, and they went live the following month.

Everything else on this page is something I made. This is the other half of the job: getting a decision made by somebody whose money it was.

Experience

Every build on this page happened alongside a full-time job. Two co-op terms in marketing and inside sales sit between the retail years and ATR, and the degree ran under all of it.

  1. Quaza Inc. Founder
    built alongside the day job

    The commerce company this page opens with: store, app, backend and the machine, all mine.

  2. ATR Sports Ecommerce Manager, then Digital Marketing Manager
    three and a half years, current

    The only person on anything digital: the store, advertising, marketplaces, shipping. The turnaround above happened here.

  3. Geek Squad In-Store Service Agent
    one year

    Diagnosis under time pressure with the customer watching: intake, fix, handback.

  4. Best Buy Computing Solutions Advisor
    a year and a half

    First Canadian job, started within two months of arriving. Translating spec sheets into what a buyer actually needs.

Education Honours Bachelor of Commerce in Digital Business Management, Humber College, Toronto. Four years, with e-commerce, web development, databases and analytics as graded coursework, all of it now in production somewhere above.

Also built

The Reach Community Church website, showing a warm photographic hero with service times and a welcome message.
Built at no charge

reachcommunitychurch.ca

A site for a church I attend, warm where the rest of my work runs cool, because the audience is a congregation and the design brief follows the reader.

Open the site
Open source

readonly-agent

The agent guard from the machine above, published as a standalone project. Deny by default, 61 tests, and you can run all of them with no API key.

github.com/shraygh
This page audits its own colours The table is not typed out: it reads the stylesheet in your browser, now. RUN ▸

Contrast audit, measured in this browser

InkTokenUsed forMeasured onRatioWCAG AA
Not measured yet. Every value in this table is read out of this page in the browser, so there is nothing to print before it loads.

The audit runs in the browser, because it reads the computed value of every token out of this page for itself.