All BlueprintsFintech
Multi-currency price list
A shop that sells the same catalogue to people who count in different money. Every price is converted from a rate that carries the day it was taken, rounded to a figure somebody would write on a price tag, and written the way that currency writes money, including the ones with no decimal places and the ones with three. A figure shown to a customer is the figure they pay, an order records what they paid and what the shop took, and a refund returns what was taken rather than what today's rate says it was worth.
What you’ll build.
A shop that sells in more than one currency. Every price shows the rate that made it and the day it was taken. Customers switch the whole list into their own money, written the way that money is written, hold a price while they decide, and pay that figure after the rate has moved. Receipts name both amounts.
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.
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.
Search and filtering
You can search a list by keyword, combine that with filters, and say what the database does to answer the query — including which part uses an index and which part cannot.
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.
Roles and permissions
You can give users different roles and have the server refuse what a role may not do — not merely hide the button — and show the refusal working against a request the interface never offered.
A cart that survives
You can add, change and remove items, keep the cart across a logout and login, and show a total that reflects prices as they are now.
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.
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.
A rate with a date on it
Prices are held exactly, every rate carries the moment it was taken, and a converted price can be traced back to the rate that made it.
5 tasks
- The shop has a catalogue, priced in the money it keeps its books in
- Every rate carries the moment it was taken
- A converted price says which rate made it
- A rate nobody has refreshed is shown as out of date
- The same product converts to the same figure everywhere it appears
Not every currency has pennies
The whole list reads as money in the currency the shopper chose, including the currencies that do not have two decimal places.
5 tasks
- The shopper picks the money they think in
- A currency that has no pennies is written without them
- A converted price looks like a price
- Narrowing the list by price tells the truth
- The order of the list does not change between pages
The shop's own door
The shop has accounts of its own, a shopper can have one too, neither can be mistaken for the other, and the price list stays open to everybody.
4 tasks
- A shopper can make an account and come back to it
- A shopper can sign out on a machine that is not theirs
- Shop accounts exist, and cannot be issued from the public form
- The price list stays open, and the chosen currency comes through the door
Tomorrow's rates
Only the shop can change a rate, it sees every price that is about to change before anybody else does, and the set it replaces is still there afterwards.
6 tasks
- The shop enters a day's rates
- Nothing goes live until the shop has seen what it does to the prices
- A publish is all of the rates or none of them
- Yesterday's rate is still there tomorrow
- The product refuses a rate or price change, not just the screen
- A set published in error can be taken back
The figure they were shown
A shopper is quoted a total in their own money, has a stated time to decide, and pays that figure even though the rate has moved since.
5 tasks
- A basket, in the money the shopper chose
- The total is held for a stated time, and the shopper is told how long
- A rate that moves does not move a quote that is already made
- An expired quote is never charged
- Paying takes the quoted figure, once, however many times it is pressed
Two amounts, one order
Every order records what the customer paid and what the shop took, joined by the rate that was used, and says the same thing a year later.
5 tasks
- An order records what was paid and what the shop took
- A receipt the customer can read and keep
- A receipt printed next year says what it said today
- A day's takings across four currencies, adding up to one total
- An order in a currency the shop has stopped selling in still reads
Giving back what was taken
A refund returns exactly what left the customer's account, in the currency it left in, and the shop's books still balance afterwards.
6 tasks
- A refund returns the figure that was taken
- Refunding part of an order leaves no penny behind and creates none
- A refund is a new movement, not an edit to the sale
- What the rate did between the sale and the refund is a line of its own
- The same refund pressed twice pays out once
- The customer can see that they were made whole
Where its customers are
The shop is on the internet at its own address, pricing from rates somebody loaded on purpose, and a bad release can be undone without losing an order.
5 tasks
- A stranger can reach the shop at an address the shop chose
- The live shop prices from rates a person loaded, not from the ones it came with
- Nothing the shop needs to run is in the repository
- A release can be undone without losing an order
- Somebody finds out when the shop is broken
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
A price list that is really a money product: whose rate made a price, when, and what happens when it moves.
What an exchange rate actually is
Domain you will not have: mid, bid and ask, why a rate without a timestamp is useless, and where rates come from.
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 multi-currency price list.
Start your free week. Adaeze runs your kickoff, and Lars reviews every pull request.