All BlueprintsFintech
Currency exposure for an importer
A company that buys abroad and sells at home holds money in several banks and several currencies, and owes suppliers in dollars and euros. This is where its finance team uploads each bank's statement, sees every balance tied back to the lines it came from, and reads the net position in each currency at the rate of the day. It also shows what a fall in the naira would cost before it happens, and keeps each evening's position so the month can be read back.
What you’ll build.
An importer's finance team opens the URL, signs in and uploads each bank's statement, and a file that is not one is refused with the reason. Every balance opens onto the statement lines it came from, and a statement that does not follow on from the one before is held at the line where they part. Cash reads per bank and per currency with a naira total at the day's rate, and supplier bills are counted at the rate of the day they fall due. Each currency's position shows what a 10, 20 or 40 per cent fall in the naira would cost, and every evening's position is kept so the month can be read back.
What you’ll learn.
Each sprint is built around one skill. You show you have it in a pull request your team reviews, then explain it in a walkthrough.
Authentication
You can register and sign in a user, keep a request authenticated without asking for the password again, and explain where the credential lives in the browser and why there rather than somewhere else.
File uploads
You can upload a file from the browser, store it somewhere the application does not own, and show it again on a later request — and say where the bytes travelled and what the database actually holds.
A ledger you can trust
You can record credits and debits and produce a balance that is the sum of them — and explain why the balance is not a column you update, and what happens when two movements land at once.
Statements that reconcile
You can generate a statement for a date range that adds up, downloads, and returns the same figures when it is generated again next month.
Background jobs
You can hand work to a worker, tell the user it is in progress, and show the result when it lands — and say what happens to that work if the process dies halfway.
Going live
Somebody who has never met you can open a URL and use the product — and you can say what is different about the copy running there, where its secrets come from, and what you do when a release turns out to be wrong.
The roadmap. 8 sprints, 41 tasks.
Every sprint has a goal and a set of tasks. Open a sprint to see the tasks you will pick up.
The company's own door
A company has a finance team of its own: its people sign in, belong to that one company, and nothing any other company holds is ever in view.
5 tasks
- Somebody from a finance team can register their company and land inside it
- A finance team member stays signed in, and can sign out on the office machine
- A member can bring a colleague into the company by invitation
- The team can see who is in it, and somebody who leaves loses access at once
- No company ever reaches another company's pages
Statements in
A bank's statement file is uploaded, read into lines exactly as the bank printed them, and anything that is not a statement is refused with the reason.
5 tasks
- The company's bank accounts are on record before any statement arrives
- A statement is uploaded and read into the lines the bank printed
- A file that is not a statement is refused with the reason
- The same statement uploaded twice is recognised
- The file the bank sent is kept, and can be opened again
Every balance ties back
Every balance is derived from statement lines and opens onto them, and a statement that does not follow on from the one before is held at the line where they part.
5 tasks
- Every line's balance is worked out, not trusted
- A statement has to start where the last one finished
- Statements uploaded out of order still line up
- Every balance opens onto the lines it came from
- A held statement can be replaced by the corrected one
Cash in every currency
Cash reads per bank and per currency on a chosen day, with a naira total at a rate that says which day it is from, and every total is the sum of the rows above it.
6 tasks
- The finance team enters the day's rates, and each one says who and when
- Cash reads per bank and per currency, as it stood on a chosen day
- A naira total that names the rate and the day that made it
- Every total is the sum of the rows above it
- A day with no rate says so, and never guesses
- The cash view goes out as a file that adds up the same way
What is owed, and when
Supplier bills are held in the currency they were invoiced in and counted in naira at the rate of the day they fall due, and a figure that changes after the fact says what it was and why.
5 tasks
- Suppliers and the bills they send, in the currency they invoice in
- A bill is counted in naira at the rate of the day it falls due
- A payment on a statement settles the bill it paid
- A corrected rate or a late bill says what was reported and what it is now
- What is owed, soonest first, with overdue bills in plain view
What a fall would cost
Each currency's net position is the cash held less the bills owed, opening onto both, and the finance team sees what a 10, 20 or 40 per cent fall in the naira would cost against it.
5 tasks
- Each currency shows what the company holds, what it owes, and the difference
- A position says whether a fall in the naira hurts or helps
- What a 10, 20 or 40 per cent fall in the naira would cost
- A fall of the finance team's own choosing
- Every scenario figure can be reproduced with a calculator
The position, every evening
The position is taken on its own every evening, exactly once however many times the work runs, a missed or failed evening is visible rather than silent, and the month can be read back day by day.
5 tasks
- The position is taken every evening with nobody pressing anything
- Taking the evening's position twice keeps one
- A missed or failed evening is shown, not skipped over
- The month read back, evening by evening
- A kept evening stays what it was that evening
Where the finance team works
The product runs at its own address on the internet, holding only figures a company put there, and a finance team who never met the builder can sign up, upload a statement and trust what it says.
5 tasks
- A finance team can reach the product at an address the builder chose
- The live product holds only figures a company put there
- Nothing the product needs to run is in the repository
- A release keeps every statement, and can be undone without losing one
- The evening position runs live, and somebody finds out when anything fails
Read before you build. The best engineers do.
Senior engineers read the docs before they touch the code. Every Blueprint comes with short documents on the product and its world, the kind a team hands a new hire. Read them well and you ask sharper questions and walk into every review prepared.
What you are building
The product, the finance team who uses it, and why every figure in it has to be reachable from a line a bank printed.
More fintech Blueprints.
Shared expense splitter
A group logs what each person paid, the app works out who owes whom, and settling up clears it. No money moves through the product: it keeps the record, and the record has to balance to the penny for every split, correction and settlement the group throws at it.
Budget and spending tracker
A budget for one person, kept honestly a month at a time. Spending lands in categories, every figure on the screen is the sum of the entries behind it, and a month ends: it closes, it stops moving, and what is left over or overspent follows the person into the next one by a rule they can read.
Freelance invoicing
Invoicing for one freelancer: build an invoice whose total survives being added up by hand, send it to a client who never signs in, settle it with the money that actually arrived, and correct a mistake without quietly rewriting a document somebody has already acted on.
Build currency exposure for an importer.
Start your free week. Adaeze runs your kickoff, and Lars reviews every pull request.