Behind the scenes
Quick Store
- Project
- An in-house Dontdoit product for independent sellers, print shops, and creators.
- Ownership
- Vlad: product direction, interface design, and engineering.
- Status
- Sign-ups open with physical products. Digital downloads, subscriptions, and the full storefront in development.
- Built with
- React, TypeScript, Vike, Hono, Cloudflare Workers, Postgres, Drizzle, and Stripe Connect.
The starting point
Selling online tends to come in two sizes. A marketplace gets you live fast, then keeps the customer relationship and a cut of every sale. A full store builder gives you control, then asks for a theme, a few apps, and a monthly fee before the first order.
Quick Store sits between them: a real store with a cart and checkout, set up like a profile.
Start with a page, not a theme
A new store gets a profile page at tryquick.store/s/yourname, composed from the seller's products, posts, and collections. There is no layout to design before the first sale.
The same store can grow into a full storefront on its own domain. That upgrade stays behind a flag while we build it, so the public promise stays on the page.
Treat every store as its own tenant
Quick Store runs many stores on one platform. That only works if one seller can never see another seller's data, so every store query is scoped to its store and every write checks access to that store first.
We audited for gaps and closed the ones we found: webhook and product image lookups now filter by store, and domain settings require sign-in before they touch a store. Running on Cloudflare Workers keeps the cost of one more store low.
Pay the seller directly
Checkout runs on Stripe Connect. The buyer pays through Stripe's hosted checkout, and the charge lands in the seller's own Stripe account.
When a payment clears, a webhook creates the order once, reduces inventory, and emails the buyer a link to their order. Carts are kept per store, and a guest cart merges into the buyer's account when they sign in.
Make deploys boring
In October, a deploy applied database migrations and then failed to build both Workers. The live site ran old code against the new schema until a redeploy fixed it.
Deploys now build every changed app first, migrate only after the builds pass, and ship only after the migration. A pull request also fails when it changes the schema without a migration.
Outcome
Sellers can claim a store, list physical products, publish, and take payments into their own Stripe account. The work spans multi-tenant data, payments, transactional email, and the seller dashboard.
Adoption is early. The number we are working on is how long it takes a new seller to list a first product.
Still in progress
Quick Store is in active development, and physical products are the launch focus. Digital downloads and subscriptions are built but have not been proven with a live order yet. The full storefront on a custom domain is still being built. Print-on-demand, buyer artwork uploads, and multi-currency are not part of the launch.
Have something that needs a technical owner?
Talk with Vlad about a role, a product, or a system your team depends on.