Marchés compétitifs basés sur le score, sur Starknet. Les Factory Owners stakent sur des scores de jeu, les Challengers paient pour les battre, les Vault Investors apportent du capital. Construit par RuneLabs.
Midgard transforme les scores de jeu en marchés compétitifs. Les Factory Owners choisissent un jeu, fixent un score cible, et stakent du capital. Les Challengers achètent des tickets pour tenter de battre le score : les défaites alimentent l’usine, les victoires paient le challenger. Les Vault Investors fournissent du capital et touchent des rendements de prêt. Des prize pools saisonniers récompensent les meilleurs.
Live sur midgard.game, docs sur docs.midgard.game, beta sur beta.midgard.game. Construit par RuneLabs (la même équipe que PonziLand).

Dev full-stack et direction artistique sur le code, la 3D et la marque :
Équilibrer Factory Owners, Challengers et Vault Investors pour que chaque rôle ait une espérance positive dans une certaine condition de marché. La taille des stakes, le prix des tickets et le rendement du vault interagissent ; les maths onchain doivent rester cohérentes avec les odds visibles côté UI.
Les scores viennent de mini-jeux joués in-app. Empêcher la fraude tout en gardant l’UX fluide a demandé des preuves de session signées et des replay checks côté serveur avant tout règlement onchain.
Migration depuis les stores Svelte 4 vers $state / $derived / $effect. La réactivité est plus explicite mais demande de la discipline pour éviter les tempêtes d’effets entre composants.
Les usines, les stakes et les positions de vault vivent onchain ; les sessions de jeu et le matchmaking vivent offchain. La sync event-driven via Torii garde les deux côtés cohérents ; la gestion des reorgs et des timeouts sont les bords coupants.
Le wordmark Midgard pose un sans-serif épais légèrement biseauté à côté d’un glyphe “M” stylisé qui évoque une silhouette d’usine : deux cheminées, une toiture en pente. Objectif : lire industriel / mercantile sans tomber dans les clichés crypto-tech (pas de gradient, pas de lignes de circuit). Aplats, fort contraste, une seule couleur d’accent pour que le signe survive sur des arrières-plans de jeu chargés comme en favicon minuscule.

L’art du header utilise l’usine isométrique comme ancre, avec le wordmark verrouillé sur une baseline cohérente. Les variantes de bannière beta réutilisent le même rendu d’usine pour garder la reconnaissance cross-surface bien serrée.

Chaque visuel hero du site et de l’app vient d’une seule scène Blender. Une seule source de vérité signifie que silhouettes, matériaux et lighting restent cohérents entre la landing page, les bannières d’app, le marketing et la 3D in-world.


La vue 3D in-app est construite sur Three.js via Threlte (les bindings Svelte de Three.js), pour que les composants 3D se composent comme n’importe quel autre composant Svelte 5 et partagent la même réactivité $state/$derived.
Pipeline :
<GLTF> dans Threlte, instanced meshes pour les parcelles/props répétésPourquoi Three.js plutôt qu’une boucle d’image pré-rendue : les usines doivent refléter l’état onchain live (stakes, locataires, tendances de score). La 3D live lie le retour visuel directement à l’économie du jeu, au lieu de la simuler avec des swaps de sprites.