Skip to content
Northcity Solutions

Workflows

The other half of the second pile.

Some of what blocks you is a server. Some of it is the thing you do by hand every week, because nobody ever built the thing that would do it.

I build these for my own house first. Everything below is running somewhere. None of it is a proposal.

Things that watch

It tells you before you have to go looking

Budget lines, before you cross them

Every account pulled overnight, every transaction sorted, and nothing said unless a rule fires.

  1. 1

    Your accounts

    Pulled overnight, read-only. Nothing can move money.

    once a night

  2. 2

    Sorted

    Known merchants come from cache. Only new ones are worth asking a model about.

    cache first, model rarely

  3. 3

    Rules run

    Frozen card, category pace, a large charge, the balance out to payday.

    same answer every time

  4. 4

    Usually nothing

    Most mornings, no message. That is the product working.

    silence is the default

What it replaces, and how it works
  • Checking balances by hand and still being surprised
  • Finding out when the statement arrives
  • A budgeting app that makes you approve every transaction

Read-only bank pull into a local ledger. A merchant-to-category cache runs first, so only genuinely new merchants ever cost a model call. The rules engine itself is plain code with no model in the loop: frozen-card activity, category pace against the month, single large charge, projected balance before payday. Alerts go to a phone. Zero-touch by design, it never asks you to approve a transaction.

A fleet that reports when it goes quiet

A hundred and fifty scheduled jobs across three servers. Every host reports in on a timer, and silence is itself the alert.

What it replaces, and how it works
  • Discovering a failed backup weeks later
  • A watchdog that broke and told nobody
  • Jobs that fail silently for months

Each host pushes load, disk, memory and per-job exit status on a short interval. A job that stops reporting raises an alert on its own absence, which is the failure a status page cannot catch. This found a certificate audit that had been exiting non-zero on every single run for months while working perfectly, and a billing job that had failed for three months with its error output routed to /dev/null.

Mail that keeps landing

A weekly pass over every sending identity. It says nothing until a number starts moving the wrong way.

What it replaces, and how it works
  • Finding out from a client that your mail stopped arriving
  • Guessing whether a domain is set up right
  • Reputation damage that took months to build

Scans each identity for enforcement status, verification and signing state, thirty-day bounce and complaint rates, and SPF and DMARC presence on domains that actually send. The exit code reports whether the scan ran, not whether the mail is healthy, so the liveness signal stays honest and a broken scanner cannot look like a clean bill of health.

Things that do the work

The task you would otherwise sit down and do

Email a draft, get a published post

Rob mails a piece to an address. It comes back as a formatted preview with a publish button. He has not opened a CMS to publish since.

  1. 1

    You email a draft

    Send it like any other email. Attach a document or just type.

    senders are allow-listed

  2. 2

    It gets cleaned up

    Converted, Word markup stripped, category read from the subject.

    category read from the subject

  3. 3

    A preview comes back

    You see exactly how it will look. A real draft, not a mockup.

    nothing is public yet

  4. 4

    One click

    Publish, or open it in the CMS. Clicking twice cannot post twice.

    signed link, single use

What it replaces, and how it works
  • Logging into a CMS to post
  • Cleaning up Word formatting by hand every time
  • A developer in the loop for every piece

An inbox poller with a sender allow-list. Word documents are converted and run through a normalize pass, then the same paste scrubber the editor uses, so Word markup never reaches the page. Category is inferred from the subject line. The preview email carries a signed, idempotent publish link alongside an edit-in-CMS link. Three attempts, then it raises rather than failing quietly.

Chores that rotate themselves

Zones rotate so nobody has the same job forever. Kids check off on a phone. Parents get told what did not get done.

What it replaces, and how it works
  • The whiteboard nobody updated after week two
  • Asking twice and then doing it yourself
  • Arguments about whose turn it was

Household, zones and rotation live in one schema shared with the rest of the house app. Kid accounts are scoped to chores only and see nothing else. Completion and non-completion both notify, because a chore system that only reports success tells you nothing you did not already assume.

Scan the mail, shred the paper

Put a letter through the scanner. It gets read, filed, and anything needing a person is routed to one.

What it replaces, and how it works
  • A pile on the counter you will deal with Sunday
  • A filing cabinet nobody opens
  • Missing the one letter that mattered

A watcher picks up each scan once the file stops growing, since scanners write incrementally and half a PDF reads as a corrupt one. Pages go to a vision model rather than a text layer, so it reads a receipt with no OCR at all. The result is filed with the original PDF attached, and only the items needing a decision are pushed to a person.

Things that answer

Ask the system instead of exporting from it

Ask your CRM a question in plain language

What is waiting on a decision. How is closing trending. Answered from the live system, read-only, the same way every time.

What it replaces, and how it works
  • Exporting to a spreadsheet to answer one question
  • Two people computing the same metric differently
  • A dashboard nobody trusts

A scoped connection over the CRM API, read-only by construction rather than by policy. Summary operations do the arithmetic in code instead of returning raw records, so the same question is answered the same way every time and results stay small. Booked and quoted money are reported separately and never summed, because adding them produces a number that is wrong in a way nobody catches.

Hosting you can talk to

Read a file, check a log, change a setting by asking for it. A snapshot is taken first, and rolling back is one instruction.

What it replaces, and how it works
  • Filing a ticket to change one line
  • SSH and a manual backup you hope you remembered
  • Waiting on someone else to look at your own site

A per-site connection running as that site's own system user, confined to its own directory, so it cannot reach anything else on the server. Files and database are snapshotted automatically before the first change of a session. Restore points are listed on request and restoring is a single call.

Forms that hold their shape

A form rebuilt so every blank is a fixed cell, and merged data of any length cannot push the layout out of alignment.

What it replaces, and how it works
  • Retyping the same form for every file
  • A template that breaks when a name runs long
  • Printing, checking, and fixing it by hand

The form is reproduced as a fixed-layout table rather than flowing text, so each fillable blank is a cell with a known position. Merge fields drop in without reflow, and a long value clips or wraps inside its own cell instead of moving everything below it. Output matches the original closely enough to file.

What do you do every week by hand?

If you can describe it the way you would to a new hire, it can probably be built. Tell me the boring one, the one you have stopped noticing.

Tell me what you're sitting on