---
title: "GammaSkins: P2P Skin Marketplace"
description: "A Norwegian peer-to-peer marketplace for CS2 skins, with chat, signed purchase agreements, ID verification and a quick-sell channel."
url: https://nordicproductions.no/lab/gammaskins
published: 2026-10-07
---

ACTIVE 7 Oct 2026

# GammaSkins: P2P Skin Marketplace

A Norwegian peer-to-peer marketplace for CS2 skins, with chat, signed purchase agreements, ID verification and a quick-sell channel.

\[ANGULAR\]\[NODE.JS\]\[POSTGRES\]\[REDIS\]\[SOCKET.IO\]

[Visit gammaskins.no ↗](https://gammaskins.no/)

![GammaSkins](https://nordicproductions.no/_astro/gammaskins_website.CAiC-FOc_1W9emh.avif)

## What it is

GammaSkins is a Norwegian marketplace for Counter-Strike 2 skins, run by Gecko Capital AS. It started as a shop where buyers paid by card and bots delivered the items. Today it’s mainly peer-to-peer: users list skins from their Steam inventory, agree on a price in chat and trade directly with each other. The buyer pays the seller with Vipps or a bank transfer, so GammaSkins never holds the money. Users who’d rather sell right away can use **Quick sell** and sell their skins to GammaSkins’ own bots.

## How it’s built

The frontend is Angular with server-side rendering, so the public catalogue of CS2 skins can be indexed. The backend is Node.js and Express on PostgreSQL, with Redis for sessions, caches and rate limits, and Socket.io for chat, offers and online status. A separate scraper collects daily prices, and a small bot service reads Steam inventories. It runs on a VPS behind Cloudflare and deploys on every push.

## The hard parts

-   **Trust between strangers.** Every trade requires ID verification. An accepted offer becomes a purchase agreement rendered as a PDF, and both parties sign its SHA-256 hash, so the document can’t be changed afterwards. Above 2,000 NOK, signing also takes a selfie matched against the ID check.
-   **Steam can undo a trade.** A seller can reverse a Steam trade for seven days, so a Quick sell payout can only be recorded eight days after the trade, and the database rejects a second payout for the same order.
-   **Prices as data.** Daily price series feed an inventory page with value, volatility and risk figures, using Norges Bank’s rate as the risk-free rate.

## What it taught me

No other build has taught me as much about failure: two buyers clicking the same item at once, webhook retries that have to be idempotent, and trades that Steam can reverse a week later. Every current lab build is designed with those lessons in mind.
