Shray Shrotriya

Toronto · Founder-operator

Shray Shrotriya

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

I own and operate Quaza Inc., a Toronto commerce company, profitable in its first half. I built everything it runs on: the store, the iOS app, the backend they both read from, and the machine that keeps it moving while I sleep. Before that I rebuilt ATR Sports' online store and grew it more than six times over in a year, as the only person on it.

I learned Swift by shipping that app. Ten days from the first commit to the App Store. That is how I work: I pick a thing up by building something real with it, and I am at production speed in days. Everything below is something I shipped.

first commit ten days live on the App Store Apple review included
Quaza Collect

One company, every surface

Quaza Inc. is my commerce company: I started it, I run it, and it was profitable in its first half. It is also the clearest way to show what I can build, because everything it runs on is mine, and the best parts are running live further down this page.

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 storefront: the sealed products grid with prices, sale and sold-out states.
The app

Native iOS, written alone

Four releases in the first 24 days, and a design language that is the store's own, not a template's. Hand-written networking, no vendor SDKs, nothing between the customer and the shelf.

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.
47.7%
Gross margin on the store
Cost of goods costed line by line, 97% invoice-verified
385 / 402
Orders fulfilled, built alone, part-time, while employed full-time
Into more than 15 countries
10,887
Agent tool calls across 9 days on hardware I run
325 transcripts ยท 12 scheduled jobs, running while logged out
90x
Reduction on the hot database path
35,000 rows per call, precomputed to 1

Do not take the screenshots' word for it

These are working recreations, rebuilt for this page: the console off my wall, the app's market tab inside the real device frame, the pipeline that writes the store's news, and the leash I keep my agents on. Put a finger on them.

Always on

The operations console

The wall display, rebuilt at miniature scale. It runs to a written performance budget and stops painting the moment nobody is looking at it.

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 with touch scrubbing, movers, separate Sealed and Singles markets. Drag the chart; it answers.

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.

Publishing system

Quaza News

Read the blog

The store's news blog is produced by a pipeline, not typed into an admin. Run it and watch the order: build, verify, guard, upload, and always a draft at the end, because going live is a decision a person takes.

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.

Agent safety

A shell with no way to write

I give agents a shell on my own hardware, then make it read-only. This is the real policy, running here. Pick a call and watch it decide.

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

The studio, in its own voice

My design practice, and the site I built to carry it: a single long page under a hand-written WebGL globe, with a sustained metaphor carried through every line of the copy. No component library and no template. Every element on the page was drawn for it.

It is the cool counterpart to the warm work: where the church site below welcomes, this one performs. Holding two design languages at once without letting either leak is most of what design work is.

Open the site
The Six Stones share card. A near-black starfield with a small planet mark, the line "We launch brands into global orbit" set in a serif italic, and a mono footer reading Digital Growth Studio.

The studio speaks in orbit lines. The sky is a habit by now.

ATR Sports

The turnaround

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.

515%
Online sales growth in the first year
Sales had been flat for three years · I rebuilt the store
82%
Total company sales growth in the same year
The online store was the part that moved
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.

The number I am proudest of in that year is not the 515%. It is the month it took to get a yes. 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, and that turns the question from 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. The year closed with online sales up 515% and company sales up 82%, from the store's own dashboards.

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.

Also built

Between the big ones

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
The craft, checked

This page audits its own colours

The table below is not typed out. It reads this page's stylesheet in your browser, right now, and measures every ink against the lightest surface it is painted on.

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.

The dial

Eight shapes, one form

The form travels with you. It names where you are, its bezel fills as you move, and it moves through eight shapes I actually spend time on. Point at one.

  • Aperture, wide open A DSLR, and a drone when the shot needs altitude. Photography taught me the thing I use most at work: change one variable, measure the result.
  • Saturn, edge on The first thing I pointed a telescope at. Once you have seen the rings with your own eyes, second-hand wonder stops being enough.
  • Crown I open watches. On one build I replaced the plastic case with machined metal, because the movement deserved better than the shell it shipped in.
  • Saucer UFOs, unironically. Not as belief but as a question about evidence: what would actually count, and who gets to decide.
  • Arch, Rome I have stood under them. Roman and Renaissance history is the longest record of people solving hard problems with worse tools than ours.
  • Cross Faith, and a church I go to and built a website for. It is in the builds above because it is real work.
  • Candlestick Markets. Same discipline as reading my own numbers: separate the signal from the story people tell about it.
  • Star, through the eyepiece A telescope, and the reason space travel holds my attention. Light that left long ago and arrives calibrated.