In development · iOS
YET
Money, with memory. Photograph a bill and the phone reads it: the tax authority's QR code, the Multibanco entity and reference, the total printed beside its own label. Every value it writes down is stored with the exact characters it was read from, so it can always show you where a number came from. Nothing you put in has a route off the phone, because the app holds no code that could send it.
-
01
Every fact keeps its characters
Each amount, date and reference is stored with the exact characters it was read from. Tap one and the original opens on them.
-
02
There is nowhere to send it
The app and both its extensions contain no networking code at all, and a test reads their shipped source and fails on the mention.
-
03
Portuguese paper, by its own arithmetic
The tax authority QR code of Portaria 195/2020, the Multibanco reference under ISO 7064 MOD 97-10, and NIF and IBAN check digits.
What happens after the photograph
Six steps, and only the first one asks anything of you.
- 01
Capture
The camera opens by itself, with a photo picker and a PDF import underneath it. There is no category to choose, no title to write, no amount and no due date to type. An invoice sitting in another app can be sent to YET from that app's share sheet, up to ten images at a time, and a button for it can live in Control Centre or on the Action button.
- 02
Read
The reading happens on the phone, by parsers rather than by guesses. Five stages run in a fixed order: the tax authority's QR code, then the Multibanco entity, reference and amount checked against each other, then the total printed beside its own label, then the identifiers whose check digits close, then the issuer's name. A weaker stage never overwrites a stronger one, and a stage that finds nothing writes nothing.
- 03
Place
The document takes its own place. It either states money owed, or is proof that money was paid. A page that reads as nothing financial writes no amount, no party and no date at all, and is kept as a plain sheet, so a chat thread that mentions an invoice cannot invent a creditor.
- 04
Ask
When a payment proof looks like it settles one of your bills, one card appears carrying the line each page printed and at most three answers of one tap each. Nothing is linked until you tap. A card is never a form: no keyboard, no picker, no date wheel.
- 05
Remind
A bill that prints a date money is owed on gets four reminders, at seven days, three days, one day and the day itself. The notification carries the bill's own due line, word for word, with the amount beside it. A document that prints an expiry date gets its own warnings, sixty days, thirty days and seven days ahead, and one on the day.
- 06
Keep
Everything sits in one grid cut into months, searchable from any screen, with no folders to file it into. It leaves as a zip holding every original file, or it goes entirely, through one control that then checks the erase actually happened and names anything that survived.
Every fact carries the characters it came from
YET keeps the exact characters behind every amount, date and reference, and where they sat on the page. A fact whose characters cannot be found in the page text is dropped rather than written blank, so a value is either quotable or absent.
Read from the page“Total a pagar 64,12 EUR · pagar até 12-03”
Set in a serif wherever it appears, and nothing the app wrote ever is. One glance says which words belong to the document.
It asks. It does not decide for you.
Seven matching rules are written, numbered and versioned, and every one of them ships in the band that asks. When a payment proof looks like it settles one of your bills, one card appears carrying the line each page printed, and nothing is linked until you tap.
Everything it does
Sixteen things, all of them in the app as it builds today. Open one to read it.
01 Every fact keeps its characters
Each amount, date and reference is stored with the characters it was read from and their position in the page text. Tapping a fact scrolls the original to that line and washes colour behind those exact characters, using rectangles recorded once while the page was read, so no recognition runs while your finger is down. Where nothing was stored there is no tap offered, rather than a tap that does nothing.
The highlight is proved by test and has not been seen on a phone yet, because the text recogniser does not start on the simulator.
02 Nothing can leave the phone
The app and both its extensions contain no URLSession, no URLRequest, no web view and no connection of any kind, so there is no route for a picture, for the text read off it, or for a name or an amount found in that text. A test opens every Swift file of all three and fails the run if one of those words appears. The privacy manifest declares no collected data types, no tracking and no tracking domains, and the archive is marked to stay out of iCloud backups.
The app asks for two permissions, the camera and Face ID, and holds no photo library permission at all, because picking a page runs outside the app and hands over only the file you chose.
03 The tax authority's QR code
Every invoice legally issued in Portugal carries the AT QR code, and YET reads the document out of the code rather than off the photograph. Portaria 195/2020 fixes what is in it: the issuer and buyer tax numbers, the document type, the date, the number, the ATCUD, the VAT base and amount at each rate, the total, stamp duty and tax withheld at source. Before a single money value is kept, two arithmetic identities have to close as whole cents with no tolerance.
Where the sums do not close, only the money is dropped. The issuer, the date, the ATCUD and the payment line survive, because those are what one document is matched to another by.
04 The Multibanco triple, checked
The entity, the reference and the amount are read together and checked against each other with the ISO 7064 MOD 97-10 arithmetic the reference carries: five entity digits, seven reference digits, and the amount in cents padded to eight, checked by the last two digits. Because the amount is inside the calculation, a reference that closes says all three belong to each other. Four printed layouts are read, including the block an ATM slip comes back as, where the recogniser read the labels down one side and the values down the other.
The check corroborates and never vetoes. Some large billers run their own reference scheme, so a pair that does not close is still kept, at a weaker rung, and can still be matched.
05 It asks before it links
Seven matching rules are written, numbered and versioned, and every one of them ships in the band that asks. A rule is allowed to link on its own only after thirty hand-labelled correct pairs; the test corpus holds one for the Multibanco rule, one for the bank transfer rule and none for the rest, so today nothing is linked without somebody tapping. A test re-measures the corpus and fails if a count is raised without the fixtures behind it.
Answering writes a line on Today in an ordinary sentence with the quote underneath it, and undoing that line rejects the link, reopens the bill and puts its reminders back, all in one write.
06 Your correction outranks it
Hold a fact and the app offers the other readings it found for that field first, then a keyboard, so somebody who can point at the right answer never has to type it. What a person types stands over every later automatic reading of that field, and every automatic writer asks permission before writing: the column, the fact, the party, the lifecycle and the record of what the app did. A biller's name typed by hand renames it on every screen.
The guard is a list of field names rather than one edited flag, so fixing a total does not freeze the date beside it. A typed name that folds to nothing, and an amount with letters beside it that name no currency, are refused before anything is written.
07 Dates taken off the paper
The reminder is set by reading the bill rather than by asking you to type a date, and its body is the bill's own due line with the amount beside it, so it is complete on a lock screen to somebody who never taps it. A bill collected by direct debit arms nothing and the screen says why. A document that prints its own expiry date warns at sixty, thirty and seven days, and again on the day, which is roughly what it takes to get an appointment at a Portuguese registry office.
Where notifications are refused, nothing is armed, nothing claims to have been armed, and Today says so in words. A switch in Settings replaces both lines with a pair naming no party, no amount and no date.
08 Check digits, not shapes
A tax number, a bank account and a social security number are recognised by their own arithmetic rather than by looking right. A NIF is nine digits whose ninth is computed from the first eight, behind the prefix blocks the tax authority actually issues, the 70 block included, which is what a landlord's rent receipt prints. An IBAN is checked the way the standard checks it: the first four characters move to the end, letters become digits, and the whole value modulo 97 must be 1.
Every amount is a whole number of cents and no floating-point value touches money anywhere in the app. 1.234,56 and 1,234.56 both read correctly, decided by the rightmost separator rather than by a locale setting.
09 One supplier, one name
Documents are gathered under one biller by tax number first, then bank account, then Multibanco entity code, then the folded name, rather than by the name printed on the page. One company prints its name three ways across a bill, a direct debit notice and a receipt, and all three carry the same tax number. Nothing is merged and nothing is deleted: a document that turns out to belong to a party already on the phone joins it.
The legal form is deliberately kept when a name is folded, because ÁGUAS DO VALE DO SADO, S.A. and ÁGUAS DO VALE DO SADO, E.M. are two different taxpayers.
10 Answers quoted off the page
A search field sits in the bar of all three screens, and a question typed into it can return one line quoted straight off one of your documents, with a sentence naming which document it came from. The line is characters from the page rather than a sentence the app wrote: the answer cannot be built at all unless that text is literally present in the stored page. Four printed things can answer: how much, when, how to pay, and the document's own number.
Where the best match does not clear the second by a set margin, or where the top two are the same biller and the same kind, nothing is answered and the ordinary result list stands. A search that matches nothing shows the closest documents you kept rather than the word none.
11 Covered until it is you
A page carrying a bank account, a personal identity number, a social security number or a date of birth sits behind a solid tile until the owner of the phone proves it is theirs. Solid rather than blurred, for three reasons: a blurred account number is still a shape and a length, blurs at usable radii can be undone, and a blur reads as a loading state. The tile shows no party, no amount, no date and no pixel of the page, which is never decoded on that branch.
On a bill, a document number and a tax number are ordinary and show. On an identity card the same numbers shield, because there the document number is the person.
12 The month, added up
Months shows one cycle at a time, with what is due, what still needs a total typed in, and what is settled. Each section carries a total labelled "Computed from N documents", and tapping the label lists exactly those N. A total that cannot be broken down does not render at all, so a section holding one bill nobody could price shows no figure rather than a figure that quietly leaves it out.
Two currencies are never added together: each gets its own line, its own list, and a sentence saying they are kept apart.
13 An archive without folders
Everything ever kept sits in one grid, newest first, cut into months, with each tile cropped to the part of the page that was actually read. There is nothing to file, so nothing can be filed wrong: you look by biller, by year or by kind, and the same document answers to all three at once without belonging to any of them. Correcting who a bill is from moves it on the next read, with no membership to update.
It shows six months and adds six more on a tap, and then it ends and says so. A view with nothing behind it is not offered at all.
14 Printed at its real size
Any document becomes a PDF laid out for the paper it will come out on. An identity card prints at 85.60 by 53.98 millimetres, which is ISO/IEC 7810 ID-1, and a passport data page at 125 by 88 millimetres, with both faces on one A4 sheet, which is how an office asks for it. Which layout to use is decided by measuring the page's proportions rather than by matching words on it, so a licence printed abroad comes out at life size too.
A sheet fills the paper corner to corner with no margin. A page that is genuinely some other shape, a till receipt for instance, is fitted and the space left, and nothing is ever stretched.
15 Take the whole archive
One control writes a zip holding every page image, a readable index, a spreadsheet of every table, and the complete data as JSON with money as whole cents. Every file is named after the SHA-256 of its own bytes, so anybody can run shasum on a file in the folder and read the first half of its own name back, and a manifest says which document each file is a page of. The list of tables comes from the database's own catalogue, so a table added in a later version is in the export the day it exists.
It is free on every plan, and anything the export could not do is written into a problems file rather than passed over.
16 Erase it, and check
One control empties every table in a single write, then reclaims the freed pages so they do not keep the text they held, then asks the file and the container again. Anything still holding a row or still sitting on disk comes back by name, and the screen says some of it is still here instead of dismissing. A single document can also be thrown away from its own sheet, immediately, with no bin and no way back except photographing the paper again.
The search index is emptied through its own table rather than through the private tables it keeps beside it, which is what once left an erase looking finished with every document still on the phone.
Built on the paper that exists here
Portugal first, because a reader of documents is only as good as the documents it knows.
The documents Portugal actually prints
The tax authority's QR code and the ATCUD, the Multibanco entity and reference, the tax number behind the prefixes the tax authority issues, the social security number, and the bank account under its own modulo 97 rule. The machine-readable zone at the bottom of a passport, an identity card or a residence permit is read exactly, with its check digits, in all three of the layouts ICAO 9303 defines.
The parts that break a simple total
On a recibo verde the client withholds income tax at source, so the sum that actually moves is smaller than the number printed largest, and every settlement rule compares against the sum that moves. VAT is grouped by fiscal space, so a document with mainland and Azores lines reads as two tables rather than one impossible one. Stamp duty sits inside the tax payable rather than beside it, which is the identity most often got wrong and the reason insurance receipts close here.
Measured on fifty documents
The whole reading runs over fifty invented Portuguese documents on every test run: ten invoices, eleven payment proofs, twelve awkward cases and seventeen pages that look financial and are not. Every tax number, bank account, ATCUD, Multibanco reference and QR payload in them was generated for the file and computed to close under its own check, and no real document is in the repository. A field the reading fills wrongly fails the run.
Written twice
The app is written in English and in Portuguese from Portugal, across 379 strings. The screens that broke at the largest accessibility text sizes were rebuilt to scroll rather than capped, starting with the first screen, which used to push its own button off the bottom of the display.
What it refuses to do
The parts that are missing are missing on purpose. They are most of the design.
- A server
Not the picture, not the text read off it, not the amounts, dates and names in that text. There is nowhere to send them: the app and both its extensions hold no networking code of any kind, and a test reads their shipped source and fails on the mention. The reading happens on the phone, including the one stage that is Apple's own on-device model.
- An account
Nothing to sign up for and nothing to sign in to. The archive belongs to the phone it was made on, it is kept out of iCloud backups on purpose, and it leaves as a zip you can open anywhere.
- A number nobody can check
Every value on a screen was either read from characters on the page or typed by a person. Apple's on-device model is asked what kind of page it is, when the app's own phrase table found nothing, and never what a number is: anything it produced cannot be quoted and never answers a question. No confidence score renders anywhere in the app.
- A verdict
No badge on the icon, no number on a tab, no count of documents to review, and no red for a bill that is late. A late bill is stated in the past tense in the same ink as everything else, and the mark beside a date stops growing once the date has passed. The app files your paper. It does not have an opinion about your life.
- A subscription that holds your paper
Reading, the archive, search, the export and the reminders are free and stay free, whatever happens to a subscription. One act is metered: the app offering to link a payment to the bill it settled, after the first twenty documents an install has ever filed. A bill somebody misses because they stopped paying for an app would be the app's fault, not theirs.
Where it stands
The honest position, which is not a launch.
What runs today
It is an iPhone app that builds and runs on the simulator, and everything on this page is in that build. 938 tests passed at the last commit, and a separate script runs every design rule over the shipped source and fails on a violation, against a list of eight known exceptions that can only shrink.
What has not happened yet
It has not been walked on a real phone: the text recogniser and the photo picker do not run on the simulator, so the camera path and the tap-to-light-the-characters path are proved by test rather than by use. It is not on the App Store, there is no price and there is no date. Predicting a bill before the paper arrives, and composing a year's paperwork for an accountant, are designed and not built.
Ask to be told when it ships
One address, answered by the people building it. No form, no scheduling link, and no list you have to leave later.
geral@brunescco.comClick the address to copy it, or open it in your mail app.
In development. It builds, it runs on the simulator, 938 tests passed at the last commit, and it has not yet been walked on a phone or submitted to the App Store.