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, in plain English.

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.

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.

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.

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

S.05 Work with us

Got something to build?

If it needs tools we do not use, we will say so.

Bring

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

When

Weekdays, 2pm to 6pm Toronto, in 30-minute slots.

You keep it

Database, code and domain in your own accounts.

S.06 · Book the call

Tell us what you are building, and we will tell you what it needs.

Thirty minutes with the engineer who would run the build. The job is written down and sent the same day, with the tools it needs.

Pick a time

All times Toronto

Use the contact form

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