Skip to content
  1. TNAADO
  2. Technology
  3. The stack

S.00 Technology · The stack

The tools we build with.

Every tool your software runs on, and what each one is for. Read it before you agree to a build.

Yours to keep, in your own accounts Calculators at tools.tnaado.ca Toronto · 1050 King Street West

S.01 What we build on

A small set of well-understood tools.

Grouped by what each one does once your product is live.

01

Where your product lives

These accounts are in your name from day one.

Supabase

The database and the logins behind every product. Customer records, accounts and sign-ins live here, in a project opened in your name.

PostgreSQL

The database itself. It decides who may see which records.

Vercel

Hosting, a link to see changes before they go live, and work that runs on a timer.

Cloudflare

Domains, page speed and live video.

GitHub

Where the code is kept, and where it gets checked.

02

What it is written in

You can hire for any of these in Toronto.

Next.js

What our websites and web apps are built with.

TypeScript

The language it is written in. Every file is checked before release.

Tailwind CSS

The styling, from one set of colours, sizes and spacing.

GSAP

The scroll and motion on our own sites.

Swift

Our iPhone apps, including the sensor and camera work.

Apple platforms

Where our iPhone apps are built and released.

Expo

One set of code when an app has to run on iPhone and Android.

Deno

Runs the code behind the booking form on this site.

03

What it connects to

Outside services, each doing one job we would otherwise have to build.

Stripe

Card payments, subscriptions, invoices and payouts.

Cloudflare Turnstile

The bot check on every booking form.

Google Calendar API

Reads the open slots and writes the booking in.

Gmail API

Sends the confirmation and the calendar invite.

Anthropic

The AI models behind our features and products.

Google Cloud

Sign-in, the accounts our servers use, Drive and Wallet passes.

Google Maps

Place search and venue details inside the apps.

Google Ads

Campaigns we set up and manage for clients.

Google Search Console

Which of your pages Google has found.

S.02 Running

See them working.

Open one and it runs.

01 Who is allowed to see which records

Postgres select * from bookings

create policy bookings_own on bookings for select using (user_id = auth.uid() or public.is_admin());

user_idclientslotstatus

0 rows. The policy denied every row to this caller.

8f2cClinic, Bloor WestTue 09:00held
8f2cClinic, Bloor WestTue 11:30paid
b104Realtor, YongeWed 14:00open
c37eStorefront, Queen WThu 10:00paid
c37eStorefront, Queen WThu 16:00held
d9a1Studio, Dundas WFri 13:00paid

6 of 6 rows returned  ·  every row is in the table; the policy decides which of them a user gets

The rule runs inside the database, not in the app.

02 A payment, including the one that fails

Stripe PaymentIntent

created
method
attached
requires
action
processing
succeeded
card declined, retry with a new method
  1. payment_intent.created: created
  2. payment_method.attached: requires_confirmation
  3. payment_intent.requires_action: 3-D Secure
  4. payment_intent.payment_failed: card_declined
  5. payment_method.attached: retry
  6. charge.pending: processing
  7. payment_intent.succeeded: succeeded
event
payment_intent.succeeded
CAD
status
succeeded
live

Every third run declines, and retries.

03 Changing the database without losing what is in it

Postgres supabase migration list

migration6 / 6 applied
  1. 0001_init.sql
  2. 0002_profiles.sql
  3. 0003_bookings.sql
  4. 0004_indexes.sql
  5. 0005_rls.sql
  6. 0006_audit_log.sql

In order, one at a time, on every copy.

04 Work that runs with nobody there

Vercel one day

00:0006:0012:0018:0024:00
send-reminders
reconcile-payouts
refresh-feeds
nightly-backup
expire-holds

24:00  ·  scheduled work, one full day

Reminders, payouts, feeds and backups, on a clock.

S.03 In the open

The calculators we publish.

Built with the same tools as the list above.

For business owners

  • Break-even
  • Valuation
  • Cash flow
  • Margin

For the trades

  • Concrete
  • Lumber
  • Roofing
  • Drywall
  • Paint

S.04 Why this set

Boring on purpose.

What a tool has to pass before we build with it.

Portable

It runs anywhere

Postgres works the same wherever it runs, so you can move it.

Proven here first

We run it ourselves

Every tool on this list runs our own products too.

Hireable

Someone else can take it over

Every language on this list is one you can hire for in Toronto.

What we have built with it is in the technology portfolio. Our own apps, Mr. Indecisive, The Dispatch and Find The Title, are on the App Store.

S.05 Work with us

Got something to build?

This list is the whole set we build on.

Bring

How many pages you need, what it has to connect to, and anything else it has to do.

When

Afternoons, Toronto time, in 30-minute slots. The calendar shows what is open.

You keep it

Database, code and domain in your own accounts.

S.06 · Book the call

Tell us what it has to run on.

Thirty minutes with the engineer who would run the build.

After the call

The job written down, with the tools it needs

Which of the platforms on this page your build uses, which it does not, and what has to be opened in your name. Sent the same day.

Pick a time

All times Toronto

Other ways to reach us

Prefer email? Write to [email protected] and we will set a time.