Case studyCasestudy

Retainer's Ledger

Paste a link to a craftable Final Fantasy XIV item and see what it really costs to make, with live market prices from the Light data center.

Plak de link van een craftbaar Final Fantasy XIV-item en zie wat het echt kost om te maken, met live marktprijzen van het Light-datacenter.

RoleRol
Product owner and builderProduct owner en bouwer
YearJaar
20262026
GameGame
Final Fantasy XIV, Light data centerFinal Fantasy XIV, Light-datacenter
FormVorm
One HTML file, no accountEén HTML-bestand, geen account

01Why I built itWaarom ik het bouwde

In Final Fantasy XIV a craft is only worth it when the materials cost less than the result sells for, and that answer changes by the hour. Working it out by hand means opening a wiki, a recipe database and the market board, then adding it all up.

In Final Fantasy XIV is een craft alleen de moeite waard als de materialen minder kosten dan het resultaat oplevert, en dat antwoord verandert per uur. Met de hand uitzoeken betekent een wiki openen, een receptendatabase en het marktbord, en dan alles optellen.

I wanted one place that does that in a few seconds, and that is honest about what it does not know. The tool fetches prices. It does not explain itself, like the retainers in the game who work the Market Board for you. That is where the name comes from.

Ik wilde één plek die dat in een paar seconden doet en eerlijk is over wat hij niet weet. De tool haalt prijzen op. Hij legt zichzelf niet uit, net als de retainers in het spel die voor je op het Market Board werken. Daar komt de naam vandaan.

02What it doesWat het doet

Six areas. All screenshots are from the live tool.

Zes onderdelen. Alle screenshots komen uit de live tool.

W.01

Craft costCraftkosten

You paste a link to an item on the FFXIV wiki, or type its name. The tool finds the item, asks Garland Tools for the recipe, and asks Universalis what every ingredient sells for on the Light data center. Anything that cannot be sold on the market board is labeled "Market prohibited" instead of getting a price.

Je plakt een link naar een item op de FFXIV-wiki, of typt de naam. De tool zoekt het item op, vraagt Garland Tools om het recept en vraagt Universalis wat elk ingrediënt kost op het Light-datacenter. Alles wat niet op het marktbord verkocht kan worden, krijgt het label "Market prohibited" in plaats van een prijs.

The prices are not just the cheapest listing times the quantity. A listing is a whole lot you cannot split, so if the cheapest one has 8 for sale and you need 3, you are still buying 8. The tool spells out exactly what got bought, flags a cheapest listing that looks like a one-off fluke, splits elemental crystals into their own section, and marks Treasure Map ingredients. You can pin a home world and price only what is on your world.

De prijzen zijn niet gewoon de goedkoopste aanbieding maal het aantal. Een aanbieding is een heel pakket dat je niet kunt splitsen, dus als de goedkoopste er 8 heeft en jij er 3 nodig hebt, koop je toch 8. De tool laat precies zien wat er gekocht is, markeert een goedkoopste aanbieding die op een toevalstreffer lijkt, zet elementaire kristallen in een eigen blok en markeert Treasure Map-ingrediënten. Je kunt een thuiswereld vastzetten en alleen prijzen op jouw wereld bekijken.

images/ffxiv-craft-cost.jpgThe craft cost window showing a recipe with every ingredient priced
Craft cost: the recipe, priced ingredient by ingredient.Craftkosten: het recept, per ingrediënt geprijsd.
W.02

Windows you can arrangeVensters die je kunt indelen

Everything opens as its own draggable window, and a Presets button holds ready-made layouts. Ctrl+K (Cmd+K on a Mac) opens a quick search that jumps to any window. On narrow screens the windows fall back to plain stacked panels.

Alles opent als een eigen versleepbaar venster, en een Presets-knop bevat kant-en-klare indelingen. Ctrl+K (Cmd+K op een Mac) opent een snelzoeker die naar elk venster springt. Op smalle schermen vallen de vensters terug op gewone gestapelde panelen.

images/ffxiv-windows.jpgSeveral tool windows open side by side on a desktop screen
Several windows open at once.Meerdere vensters tegelijk open.
W.03

Profit, shopping and the watchlistWinst, boodschappen en de watchlist

Profit Calc puts material cost against what the finished item sells for, with a rough 5 percent market board tax. The Shopping List combines everything in the basket into one buy list. The Watchlist keeps an eye on ingredients, with low-price alerts and auto-refresh.

Profit Calc zet materiaalkosten tegenover wat het eindproduct oplevert, met een grove 5 procent marktbordbelasting. De Shopping List combineert alles in de mand tot één koplijst. De Watchlist houdt ingrediënten in de gaten, met meldingen bij lage prijzen en automatisch verversen.

images/ffxiv-profit-watchlist.jpgThe profit calculator next to the watchlist
Profit calculator and watchlist.Winstcalculator en watchlist.
W.04

Gil per hourGil per uur

Gil/Hour shows how much you earn by gathering or crafting something and selling it, with the whole material chain and recent sale volume, so a price that looks great but never sells does not fool you.

Gil/Hour laat zien hoeveel je verdient door iets te verzamelen of te craften en te verkopen, met de hele materiaalketen en recente verkoopcijfers, zodat een prijs die er geweldig uitziet maar nooit verkoopt je niet misleidt.

images/ffxiv-gil-hour.jpgThe gil per hour window with a material chain and sale volume
Gil per hour, with the material chain.Gil per uur, met de materiaalketen.
W.05

Glamour, collection and daily lifeGlamour, collectie en dagelijks gebruik

Paste an Eorzea Collection link and get every piece named, priced and explained. Unlockables lists mounts, minions, emotes and more with how to get them (data from FFXIV Collect). Character Look shows a Lodestone portrait and lets you save looks. Daily Tasks and To-Do hold a recurring checklist that resets itself, and the Gold Saucer window has a Mini Cactpot solver.

Plak een Eorzea Collection-link en krijg elk onderdeel met naam, prijs en uitleg. Unlockables toont mounts, minions, emotes en meer met hoe je ze krijgt (data van FFXIV Collect). Character Look toont een Lodestone-portret en laat je looks bewaren. Daily Tasks en To-Do bevatten een terugkerende checklist die zichzelf reset, en het Gold Saucer-venster heeft een Mini Cactpot-oplosser.

There are two themes of aged paper, light and dark, and a Pixel theme with hard edges and neon colors.

Er zijn twee thema's van verouderd papier, licht en donker, en een Pixel-thema met harde randen en neonkleuren.

images/ffxiv-glamour.jpgThe glamour window listing priced pieces from an outfit
Glamour: an outfit, piece by piece.Glamour: een outfit, stuk voor stuk.
images/ffxiv-themes.jpgThe tool in its aged paper theme and in the pixel theme
Paper, dark and pixel themes.Papier-, donker- en pixelthema.

03Under the hoodOnder de motorkap

One file. The whole tool is a single static HTML file with inline CSS and JavaScript. No build step, no server of my own, no account. It runs on GitHub Pages.

Eén bestand. De hele tool is één statisch HTML-bestand met inline CSS en JavaScript. Geen buildstap, geen eigen server, geen account. Het draait op GitHub Pages.

Data. Recipes come from Garland Tools, prices from Universalis, collectables from FFXIV Collect, characters from the Lodestone and item names from the Console Games Wiki. Requests are routed through public CORS proxies with fallbacks, and a log panel shows which attempt failed and why.

Data. Recepten komen van Garland Tools, prijzen van Universalis, collectables van FFXIV Collect, personages van de Lodestone en itemnamen van de Console Games Wiki. Verzoeken lopen via publieke CORS-proxy's met terugvalopties, en een logpaneel laat zien welke poging mislukte en waarom.

Pricing logic. Lot-aware buying (you cannot split a listing), detection of one-off fluke listings, and separate handling for crystals and Treasure Map ingredients. These are heuristics, not guarantees, and the tool links to Universalis so you can check.

Prijslogica. Pakketbewust kopen (je kunt een aanbieding niet splitsen), detectie van toevalstreffers en aparte afhandeling van kristallen en Treasure Map-ingrediënten. Dat zijn vuistregels, geen garanties, en de tool linkt naar Universalis zodat je het kunt controleren.

Storage. The basket, watchlist, tasks, settings and window layout live in the browser. One backup button exports everything, because clearing browser data clears it too.

Opslag. De mand, watchlist, taken, instellingen en vensterindeling staan in de browser. Eén back-upknop exporteert alles, want browsergegevens wissen wist ook dit.

04How I built itHoe ik het bouwde

The code was written together with an AI coding assistant (Claude) over many sessions. My part was the product thinking, the priorities, the testing and the decisions.

De code is samen met een AI-codeerassistent (Claude) geschreven, over veel sessies. Mijn aandeel was het productdenken, de prioriteiten, het testen en de beslissingen.

The loop was always the same. I described what I wanted to know, for example the real cost of a glamour outfit. The assistant proposed a design, built it, and I tried it with items I actually care about. When a number looked wrong, I said so, and we found out why. I also decided what to leave out, such as accounts and a server of my own.

De lus was steeds hetzelfde. Ik beschreef wat ik wilde weten, bijvoorbeeld de echte kosten van een glamour-outfit. De assistent stelde een ontwerp voor en bouwde het, en ik probeerde het met items waar ik echt om geef. Als een getal niet klopte, zei ik dat, en zochten we uit waarom. Ik besliste ook wat ik wegliet, zoals accounts en een eigen server.

05Challenges and what I learnedUitdagingen en wat ik leerde

Four short stories.

Vier korte verhalen.

The cheapest listing is not the priceDe goedkoopste aanbieding is niet de prijs

A listing is a whole lot. If the cheapest one has 8 for sale and you need 3, you buy 8. A naive "cheapest times quantity" calculation understates the real cost.

Een aanbieding is een heel pakket. Als de goedkoopste er 8 heeft en je er 3 nodig hebt, koop je er 8. Een naïeve berekening van "goedkoopste maal aantal" onderschat de echte kosten.

Lesson: model how people actually buy, then show what was bought.

Les: modelleer hoe mensen echt kopen, en laat zien wat er gekocht is.

Public APIs and proxies failPublieke API's en proxy's vallen uit

The tool depends on public sites that were not built for it. Requests go through several public proxies, and sometimes all of them are down at once.

De tool is afhankelijk van publieke sites die er niet voor gemaakt zijn. Verzoeken lopen via meerdere publieke proxy's, en soms liggen ze allemaal tegelijk plat.

Lesson: make failure visible. The log panel says which attempt failed, so a retry is a choice and not a guess.

Les: maak falen zichtbaar. Het logpaneel zegt welke poging mislukte, dus opnieuw proberen is een keuze en geen gok.

Heuristics are not guaranteesVuistregels zijn geen garanties

Spotting a fluke listing or a lot-limited price is a judgment call, and sometimes it is wrong.

Een toevalstreffer of een pakketbeperkte prijs herkennen is een inschatting, en soms klopt die niet.

Lesson: say what is guessed, and link to the source so people can check.

Les: zeg wat een gok is, en link naar de bron zodat mensen het kunnen controleren.

Everything lives in the browserAlles staat in de browser

With no backend there is nowhere to recover a lost basket or watchlist.

Zonder backend is er geen plek om een kwijtgeraakte mand of watchlist terug te halen.

Lesson: if the data is yours, give people a one-click backup.

Les: als de data van jou is, geef mensen een back-up met één klik.

06Known limitsBekende beperkingen

  • It shows current listings at the moment you ask. Prices move.
  • The fluke and lot-limited detection are heuristics. Check the Universalis link before a big purchase.
  • It relies on a public wiki and public APIs through public proxies. If all of them are down, a lookup fails.
  • Your data lives in your own browser. Use the backup button now and then.
  • Het toont de actuele aanbiedingen op het moment dat je het vraagt. Prijzen bewegen.
  • De detectie van toevalstreffers en pakketbeperkingen zijn vuistregels. Controleer de Universalis-link voor een grote aankoop.
  • Het leunt op een publieke wiki en publieke API's via publieke proxy's. Als ze allemaal plat liggen, mislukt een opzoeking.
  • Je gegevens staan in je eigen browser. Gebruik af en toe de back-upknop.

Open the toolOpen de tool