Craftpine

Program · April 30 to July 14, 2026 · Closed

Corner

Payments and inventory for Toronto corner stores, and an unattended store of its own planned for 520 Barton in Hamilton. One founder built the software with two AI assistants and took a live charge. Then he closed the program on the numbers.

What Corner was

Corner built payments and inventory software for other people's stores. It also planned a store of its own, in a small structure behind 520 Barton Street. The kiosk below was built for that store, and the 520 Barton study asked whether the store could pay for itself.

The platformpayments and inventoryfor Toronto corner storesParked July 14A week later, break-even came out at 125 to 150 stores,at a price that loses to other processors.Its own storean unattended store plannedfor 520 Barton, HamiltonClosed July 14The best published rate is 6.8 cups a day, against12 needed. Payback ran past the program's 24-month limit.The platformpayments and inventory for corner storesParked July 14A week later, break-even came out at125 to 150 stores, at a price thatloses to other processors.Its own storean unattended store planned for 520 BartonClosed July 14The best published rate is 6.8 cups aday, against 12 needed. Payback ranpast the program's 24-month limit.
The program closed on July 14, day 76. The store's numbers are from the 520 Barton study, the platform's from POS viability research a week later.

How a sale moves

A sale can start at the counter, on a shopper's phone or at an unattended kiosk. Every path writes to the same ledger, which drives restocking and the daily close.

Countercash or card,keeper rings it upPhoneshopper checks outin the appKioskno staff on site,charged on exitPaymentcash, card orphone walletwritesLedgereach sale writtenexactly onceRestockreorders whatwas soldDaily closetill matchedto the ledgerCountercash or card,keeper ringsit upPhoneshopperchecks outin the appKioskno staff,chargedon exitPaymentcash, card orphone walletwritesLedgereach sale writtenexactly onceRestockreorders whatwas soldDaily closetill matchedto the ledger
Four money paths shipped: shopper checkout, walk-in register, tap-to-pay terminal and the unattended kiosk. The register and the terminal both sit at the counter.

The kiosk

The unattended kiosk was built as a bench unit: a Raspberry Pi behind a touchscreen, driving a real lock. The $250-class edge computer beside it ran language and speech models on the device. In a June test, English voice commands in the common case took about 2.6 seconds end to end, under the program's 4-second bar. Payment authority stayed in the cloud.

The bench unit at checkout, showing $6.50 with scan-to-pay and tap-to-pay, an NVIDIA edge computer on the left
The bench unit at checkout, July 2026.
The edge computer on the bench: an NVIDIA Jetson Orin Nano with its fan in front, and the kiosk's Raspberry Pi mounted on the back of the touchscreen behind it
The $250-class edge computer, an NVIDIA Jetson Orin Nano, in front of the kiosk's Raspberry Pi on the back of the touchscreen, July 2026.

Nineteen attacks, all held

The money loop is the software that carries every sale's money from payment into the ledger. Before any real customer, the loop was attacked 19 ways across 71 checks. All 19 held. Scenario S, in the 48-check destruction pass, found the one real bug: a key from one transaction leaking into another. It was fixed and the pass re-ran clean.

A to E · local concurrency · 23 checksA: Oversell race, heldAOversell raceB: Idempotency storm, heldBIdempotency stormC: Rate-limit burst, heldCRate-limit burstD: Concurrent refund, heldDConcurrent refundE: Checkout key storm, heldECheckout keystormF to S · live test-mode payment rails · 48 checksF: Refund-initiate storm, heldFRefund-initiatestormG: Cron and webhook race, heldGCron and webhookraceH: Duplicate webhooks, heldHDuplicatewebhooksI: Persist-race adopt, heldIPersist-raceadoptJ: Decline storm, heldJDecline stormK: Webhook-drop converge, heldKWebhook-dropconvergeL: Cron-only backstop, heldLCron-onlybackstopM: Rate-limit isolation, heldMRate-limitisolationN: Reconcile cap, heldNReconcile capO: Cross-path collision, heldOCross-pathcollisionP: Pending refund arc, heldPPending refundarcQ: Out-of-order events, heldQOut-of-ordereventsR: Two-cron race, heldRTwo-cron raceS: Key reuse across transactions, heldS*Key reuse acrosstransactionsheld* S found the onereal bug. Fixed,re-run clean.A to E · local concurrency · 23 checksA: Oversell race, heldAOversell raceB: Idempotency storm, heldBIdempotencystormC: Rate-limit burst, heldCRate-limitburstD: Concurrent refund, heldDConcurrentrefundE: Checkout key storm, heldECheckout keystormF to S · live test-mode payment rails · 48 checksF: Refund-initiate storm, heldFRefund-initiatestormG: Cron and webhook race, heldGCron andwebhook raceH: Duplicate webhooks, heldHDuplicatewebhooksI: Persist-race adopt, heldIPersist-raceadoptJ: Decline storm, heldJDecline stormK: Webhook-drop converge, heldKWebhook-dropconvergeL: Cron-only backstop, heldLCron-onlybackstopM: Rate-limit isolation, heldMRate-limitisolationN: Reconcile cap, heldNReconcile capO: Cross-path collision, heldOCross-pathcollisionP: Pending refund arc, heldPPending refundarcQ: Out-of-order events, heldQOut-of-ordereventsR: Two-cron race, heldRTwo-cron raceS: Key reuse across transactions, heldSKey reuse acrosstransactions*held* S found the one realbug. Fixed, re-run clean.
Every scenario held, and only S found a bug. A to E ran on local concurrency. F to S, the destruction pass, ran against live test-mode payment rails, June 2026.

The live charge

On July 9 the bench unit charged a real $1.99 on the production payment system, and the charge showed up in the cardholder's banking app. It was then refunded, for a lifetime net of $0.

A banking app showing a pending $1.99 charge from Corner Toronto Can on July 9
The $1.99 charge, marked pending. Screenshot from the cardholder's banking app on July 9, 2026.

Seventy-six days of building

The build ran 76 days, from the first commit on April 30 to the close on July 14. The busiest day, May 12, had 22 commits.

76days, Apr 30to Jul 14173commits57API routehandlers20databasetables48schemamigrations44regressionsuitescommits a day1020Apr 30: 1 commitsMay 1: 5 commitsMay 3: 5 commitsMay 10: 5 commitsMay 12: 22 commitsMay 13: 8 commitsMay 17: 1 commitsMay 19: 2 commitsMay 22: 4 commitsMay 24: 9 commitsMay 25: 6 commitsMay 26: 4 commitsMay 27: 6 commitsMay 28: 14 commitsMay 29: 6 commitsJun 2: 1 commitsJun 9: 1 commitsJun 10: 7 commitsJun 12: 5 commitsJun 15: 5 commitsJun 16: 2 commitsJun 30: 2 commitsJul 2: 2 commitsJul 3: 9 commitsJul 8: 4 commitsJul 9: 12 commitsJul 10: 8 commitsJul 13: 12 commitsJul 14: 5 commits22 on May 12Edge hardware spike, June 3 to 9Jun 3 to 9edge spikeApr 30Jul 14May 13walk-in registerMay 28payments spineJun 10destruction pass, all heldJun 30unattended loop shipsJul 9live charge,$1.9976days, Apr 30to Jul 14173commits57API routehandlers20databasetables48schemamigrations44regressionsuitescommits a day102022Apr 30  first commitJun 3 to 9  edge spikeMay 13  walk-in registerMay 28  payments spineJun 10  destruction pass heldJun 30  unattended loopJul 9  live $1.99 chargeJul 14  close
Commits per day came in bursts, shown with the program's dated milestones. Counts audited at the close-out commit, July 14, 2026. Milestones from the program ledger, as in the 520 Barton study's Appendix A.

Where the money goes on a $10 sale

In the model, about 70 percent of card sales at a Toronto corner store are debit taps. On a $10 tap Corner earned a 10¢ fee and paid Stripe 15¢, so it lost 5¢ on each one.

Shopperpays $10.00by debit tapStorekeeps $9.90Cornergets its 1% fee: 10¢pays Stripe: 15¢net: −5¢ a tap15¢Stripeflat 15¢ perdebit tapInteracnetwork, ~3.4¢Stripe keeps~11.6¢Shopperpays $10.00 by debitStorekeeps $9.90Cornergets its 1% fee: 10¢pays Stripe: 15¢net: −5¢ a tap15¢Stripeflat 15¢ perdebit tapInteracnetwork, ~3.4¢Stripe keeps~11.6¢
On a $10 debit tap, Corner's 10¢ fee fell 5¢ short of Stripe's 15¢. Stripe's flat Interac fee and the Interac network's switch and interchange rates, July 2026, on the charge shape Corner shipped.

The stores it was for

Toronto proper has about 1,375 corner stores. Moneris, Square and NRS already sell them payment systems.

An independent convenience store in Toronto with a red Convenience sign and an ice freezer by the door
An independent corner store in Toronto, unconnected to Corner. Photo by Chicken4War on Wikimedia Commons, licensed CC BY-SA 4.0 and resized.

How many stores it takes

If Corner passed Stripe's rates on to stores and added 1 percent, it would break even at 125 to 150 stores. That price loses to Moneris and Helcim. At a price that wins stores, break-even moves past 600 stores or never comes.

05001,0001,375all of Toronto properBreak-even at Stripe rates plus 1%: 125 to 150 storesStripe rates plus 1%:125 to 150 storesAt a price that wins stores:600 stores, or neverPilot: 0 of 6 stores signedPilot: 0 of 6 stores signed05001,0001,375all of Toronto properAt a price that wins:600 stores, or neverStripe rates plus 1%:125 to 150 storesPilot: 0 of 6stores signed
Break-even store counts, on a scale that runs to every corner store in Toronto proper, for a two- or three-person company needing CA$500K a year in gross profit. POS viability research, July 2026.

Its own store, at 520 Barton

The store was to fill a 12 by 20 foot structure on a busy Hamilton corner and run with nobody in it. The 520 Barton study tested eight concepts for it, and none survived.

The core candidate, an unattended drink machine, needed 12 cups a day. The best published figure is 6.8. Even at 12 cups, its smallest real build would take 27 months to pay back, past the program's 24-month kill line. That limit was one of the kill criteria the program set before any money was spent.

The study on one page, or in full below.

Demandcups a day6.8, the best published figureDemand: 6.8, the best published figure12 needed04812Paybackmonths, at 12 cups a day27, the smallest real buildPayback: 27, the smallest real build24-month kill line0122436Demandcups a day6.8, best published12 needed04812Paybackmonths, at 12 cups a day27, smallest build24-month kill line0122436
Demand fell short of the 12-cup floor, and even at that floor the smallest real build would pay back past the 24-month kill line. From the 520 Barton study, chapters 03 and 07.