Privé / hobby · Doorlopend

GameLib

Een bibliotheek voor gamekeys met prijsinformatie uit meerdere bronnen, om op het juiste moment te verkopen.

Live bekijken

GameLib is mijn eigen bibliotheek van gamekeys. Het houdt bij welke spellen ik heb, welke serienummers daarbij horen, wat de spellen op dit moment waard zijn en wat er op de marktplaats van Kinguin voor gevraagd wordt. Op basis daarvan bepaal ik wat ik aanbied en tegen welke prijs.

Niemand anders gebruikt de bibliotheek naast mijzelf en registratie staat ook uit. Het is het oudste project dat ik heb en het is nog steeds in ontwikkeling.

Waarom

Ik had een flinke stapel keys en die wilde ik ergens opslaan. Dat begon met Excel. Daarna een WordPress-site en toen nog twee keer WordPress met een eigen thema en Bedrock eronder. Elke versie loste iets op, maar ik liep, bij elke vernieuwing, tegen problemen aan. Tot het duidelijk werd dat een lijst met spullen niet het probleem was maar een lijst die weet wat de spullen waard zijn.

Want dat beweegt continu. Een spel dat vorige maand vijftien euro was staat nu misschien bij een paar winkels tegelijk in de aanbieding. Zonder systeem doe je dat op gevoel: je kijkt wat rond, gokt een prijs en zet hem erop. Dat werkt, maar je verkoopt structureel op de verkeerde momenten. Waar het mij om gaat is geduldig verkopen: wachten tot een prijs goed staat in plaats van er zo snel mogelijk vanaf te komen.

Hoe het werkt

Laravel aan de achterkant, Nuxt aan de voorkant, in één monorepo. Het datamodel is opgeknipt in het spel zelf, de serienummers die eraan hangen, de prijzen die ik erover verzamel en de aanbiedingen die eruit voortkomen.

Er hangen drie externe koppelingen aan. Kinguin is de marktplaats en die heeft twee gezichten: een kant om als verkoper aanbiedingen te beheren en een kant om te zien wat er verkocht is. Die hebben elk hun eigen inloggegevens, dus Gamelib moet slimme keuzes maken welke API de juiste informatie bevat. Naast Kinguin is er Allkeyshop die levert ook de prijsgeschiedenis per spel.

Kernpunten waar ik trots op ben

  • Kandidaten-matching op titel vóór er prijzen worden opgehaald. Een spel in mijn bibliotheek koppelen aan hetzelfde spel bij een prijsvergelijker gaat mis op edities, ondertitels, jaartallen en regio’s. Daar zit het meeste werk: eerst een lijst kandidaten opbouwen, dan pas prijzen. Het is veruit de grootste service in de codebase.
  • Diepe Kinguin-koppeling voor prijsinformatie en half-geautomatiseerde verkoop.
  • Een rijk dashboard voor API- en verkoopstatussen. Elke koppeling schrijft na elke poging weg of het gelukt is en zo niet waarom. In een tool die van externe partijen afhangt is niet “er is iets stuk” de vraag maar “wát is er stuk”.
  • Prijsgeschiedenis opslaan in plaats van alleen actuele prijzen, samen met de prijzen van AllKeyShop. Een prijs zegt weinig; een prijs die drie weken zakt zegt iets.

Wat er nog niet in zit

Volledig geautomatiseerd in- en verkopen. Dat is het einddoel en daar is dit nog lang niet.

Wat het opleverde

Vijf jaar dezelfde codebase onderhouden terwijl de stack eromheen doorschuift; daar komen weinig hobbyprojecten aan toe. Verder veel CRUD- en query-ervaring, want de vraag die je continu stelt is welke van je spellen samen de meest waardevolle serienummers hebben en in een omgeving met meerdere gebruikers dan alleen de exemplaren die aan jou zijn toegewezen. Dat soort vragen dwingt je om je queries serieus te nemen.